目录
需求描述
变更说明
各语言使用文档
GeoLite2数据库使用
第一种(推荐):下载数据库文件到本地,再定时两周更新一次数据库文件
第二种:通过web service访问GeoLite2数据库
需要根据ip得知该ip所在的国家和城市。
使用MaxMind账户创建的lincense key如下
# Account/User ID :<Account ID> # License key :<License Key>参考链接:https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases/
https://dev.maxmind.com/geoip/geoip2/downloadable/#MaxMind_Supported_APIs
因为免费数据库是两周更新一次
下载方式参考链接https://dev.maxmind.com/geoip/geoipupdate/#Direct_Downloads:下载链接需要做如下转换
In order to download the databases from a script or program, please use the “direct download URL” on our GeoIP download page and make the following changes:
Replace /geoip_download_by_token with /geoip_downloadReplace token=XXXX with license_key=YOUR_LICENSE_KEY. You will need to replace the YOUR_LICENSE_KEY placeholder with an active license key associated with your MaxMind account.If you wish to always download the latest database, remove the date parameter from the URL.If you are using wget or curl from a shell script, please be sure to quote the URL.
定时更新脚本
#!/bin/bash` SCRIPT_PATH=$(cd "$(dirname "$0")";cd ../;pwd) IP_DB=${SCRIPT_PATH}/conf [ -d "${IP_DB}" ] || mkdir -p "${IP_DB}" IPTOOLS_PATH=${IP_DB}/GeoIP [ -d "${IPTOOLS_PATH}" ] || mkdir -p "${IPTOOLS_PATH}" # 下载、解压、移动、删除 function download { wget -t 5 -O "${IPTOOLS_PATH}"/geolitecity.tar.gz "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=<License Key>&suffix=tar.gz" tar -xzvf "${IPTOOLS_PATH}"/geolitecity.tar.gz -C "${IPTOOLS_PATH}" mv -f "${IPTOOLS_PATH}"/Geo*/*.mmdb "${IP_DB}"/GeoLite2-City.mmdb rm -rf "${IPTOOLS_PATH}" } echo "begin download...at $(date +%Y%m%d_%H%M%S)" download echo "download end! at $(date +%Y%m%d_%H%M%S)"下载后解压,geolitecity目录中有GeoLite2-City.mmdb文件
Python代码示例
import geoip2.database reader = geoip2.database.Reader('GeoLite2-City.mmdb') data = {'remote_addr': '37.129.226.14'} response = reader.city(data.get("remote_addr")) # print(response) if response.country.iso_code is None: data["ip_country"] = 'na' else: data["ip_country"] = response.country.iso_code if response.city.name is None: data["ip_city"] = 'na' data["ip_city"] = response.city.name else: pass print(data)(貌似需要付费,原本在本地测试失败,显示没有访问权限,然后申请了5$的试用额度,该测试可正常运行了,是否是申请了额度的原因待定)
Web Service代码示例
import geoip2.webservice reader = geoip2.webservice.Client(<Account ID>, <License Key>) data = {'remote_addr': '37.129.226.14'} response = reader.city(data.get("remote_addr")) # print(response) if response.country.iso_code is None: data["ip_country"] = 'na' else: data["ip_country"] = response.country.iso_code if response.city.name is None: data["ip_city"] = 'na' data["ip_city"] = response.city.name else: pass print(data)