3

有没有办法使用 Python 获取计算机的物理位置,最好没有 API,或者使用免费的 API?我搜索了一下,发现唯一的免费 API 非常非常不准确。我只需要这个有点准确,因为它是为了获得当地的天气。

4

6 回答 6

5

您可以尝试将MaxMind 的 GeoIP Python API与他们的免费G​​eoLite City 数据库一起使用。准确性可能会有所不同,更多详细信息请点击此处

另请查看此问题以获取其他选择。

于 2012-08-03T02:35:29.873 回答
4
import urllib2
import json

# Automatically geolocate the connecting IP
f = urllib2.urlopen('http://freegeoip.net/json/')
json_string = f.read()
f.close()
location = json.loads(json_string)
print(location)
location_city = location['city']
location_state = location['region_name']
location_country = location['country_name']
location_zip = location['zipcode']

将 HTTP GET 请求发送到:freegeoip.net/{format}/{ip_or_hostname} 以接收 Python 可以解析的 JSON 输出。

我得到以下 JSON 密钥,这应该足以满足您的需要:

  • ip
  • 国家代码
  • 国家的名字
  • 区域代码
  • 区域名称
  • 城市
  • 邮政编码
  • 纬度
  • 经度
  • 地铁代码
  • 区号
于 2014-10-01T18:44:37.710 回答
2

例如,您可以从http://www.geoiptool.com/之类的网页上抓取它。

于 2012-08-03T01:07:00.330 回答
0

我重新发现了另一个我不太喜欢的天气 API(Weather Underground),但可以选择确定位置。如果我无法使用 geoiptool 刮板之类的东西,可以使用它。

于 2012-08-03T01:39:55.980 回答
0

如果您知道设备的公共 IP,那么您可以使用freegeip来做到这一点。下面是获取位置和时区的 Python 3.4.2 代码。

>>> import requests
>>> ip = '141.70.111.66'
>>> url = 'http://freegeoip.net/json/'+ip
>>> r = requests.get(url)
>>> js = r.json()
>>> js['country_code']
'DE'
>>> js['country_name']
'Germany'
>>> js['time_zone']
'Europe/Berlin'
>>> js['city']
'Stuttgart'
>>> js.items()
dict_items([('latitude', 48.7667), ('ip', '141.70.111.66'), ('region_code', 'BW'), ('country_code', 'DE'), ('city', 'Stuttgart'), ('zip_code', '70173'), ('country_name', 'Germany'), ('longitude', 9.1833), ('region_name', 'Baden-Württemberg Region'), ('time_zone', 'Europe/Berlin'), ('metro_code', 0)])
于 2016-06-15T08:29:11.287 回答
0

进入 https://python-visualization.github.io/folium/plugins.html 找到,我的朋友 folium.plugins.LocateControl 非常容易

于 2021-09-19T04:02:03.530 回答