Geoip的安装和使用

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获取的地理位置百分百的准确,如果你是生产环境,建议购买产品,如果只是单纯的应用,对位置没有那么严格要求,可以借鉴上面的代码,最后祝君好运。

你可能感兴趣的:(flask专题)