Geoip的安装和使用

GeoLite2 使用

  • 获取客户端 ip
  def get_ip():
  	import socket
  	ip = socket.gethostbyname(socket.gethostname())
  	return ip
  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获取的地理位置百分百的准确,如果你是生产环境,建议购买产品,如果只是单纯的应用,对位置没有那么严格要求,可以借鉴上面的代码,最后祝君好运。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值