GeoLite2 使用
- 获取客户端
ip
def get_ip():
import socket
ip = socket.gethostbyname(socket.gethostname())
return ip
-
通过
ip
获取实际地理位置- 下载 GeoLite2 City 数据库
- 安装依赖 pip install geoip2
- 封装的代码
def find_ip(ip):
try:
if '192.168.' in ip or '127.0.0.' in ip:
data = {
'continent': '局域网',
'country': '局域网',
'city': '局域网',
'latitude': '',
'longitude': ''
}
else:
import geoip2.database
reader = geoip2.database.Reader('app/third_party/ip/GeoLite2-City.mmdb')
info = reader.city(ip)
data = {'continent':info.continent.names['zh-CN'],
'country': info.country.names['zh-CN'],
'city': info.subdivisions[0].names['zh-CN'],
'latitude': info.location.latitude,
'longitude': info.location.longitude
}
reader.close()
return data
except Exception:
return {
'continent': '未知',
'country': '未知',
'city': '未知',
'latitude': '',
'longitude': ''
}
- 测试
import find_ip
print(find_ip('169.235.24.133'))
print(find_ip('59.109.159.50'))
'''
{'continent': '北美洲', 'country': '美国', 'city': '加利福尼亚州', 'latitude': 33.9533, 'longitude': -117.3962}
{'continent': '亚洲', 'country': '中国', 'city': '北京市', 'latitude': 39.9289, 'longitude': 116.3883}
'''
全球的ip地址每天都会发生变化,例如购买与注销等。所以 geoip 库只是每天都会更新,但是也不敢保证位置都是正确的,何况我们使用的是免费库(估计相当长的一段时间内都没有更新了),所以
不保证ip获取的地理位置百分百的准确
,如果你是生产环境,建议购买产品,如果只是单纯的应用,对位置没有那么严格要求,可以借鉴上面的代码,最后祝君好运。