用Python获取设备的物理位置?

时间:2012-08-03 01:03:32

标签: python geolocation

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

5 个答案:

答案 0 :(得分:5)

您可以尝试使用MaxMind's GeoIP Python API免费GeoLite City database。准确度可能会有所不同,更多details here

另请参阅this question了解其他替代方案。

答案 1 :(得分:3)

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
  • COUNTRY_CODE
  • COUNTRY_NAME
  • REGION_CODE
  • REGION_NAME
  • 城市
  • 邮政编码
  • 纬度
  • 经度
  • METRO_CODE
  • AREA_CODE

答案 2 :(得分:2)

您可以从http://www.geoiptool.com/这样的网页中删除它。

答案 3 :(得分:0)

我重新发现了另一种天气API,我不太喜欢(Weather Underground),但可以选择确定位置。如果我不能像geoiptool刮刀一样工作,可能会使用它。

答案 4 :(得分: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)])