最近有一个统计项目,要根据ip地址获取对应的地区。
针对开发的问题,我现在都是习惯性先丢给chatgpt去解决。很快,chatgpt就根据我使用的开发语言python,给了一个精准的方案:geoip2。
按着这个方法,注册、验证、下载,几经折腾,结果却发现,针对中国这边的ip地址,给到的结果都是空的。
看来这个免费的库并不适合我们国内的情况。
后来又搜索了一下,发现国内很多付费的这类服务,大家都在用这个服务赚钱。于是,我也萌生了搭建一个类似服务的想法。
说干就干。
一、IP数据库
这里采用的是纯真IP库和qqwry库。相信老网民都会想起以前的珊瑚虫版QQ的时代来。
查询IP信息的代码如下:
from qqwry.qqwry import QQwry
q = QQwry()
q.load_file('ipdb.dat')
result = q.lookup(ip)
二、WEB服务架构
采用fastapi搭建,因为这个web服务器足够简单,几行代码即可。
from fastapi import FastAPI
from fastapi.responses import JSONResponse
# 启动Fastspi
app = FastAPI(docs_url=None,redoc_url=None)
@app.get('/')
async def ip(ip:str):
return JSONResponse(content= {'area':'','service':''})
三、整合在一起
两部分代码整合在一起就是一个完整的IP归属地web服务了:
from fastapi import FastAPI
from qqwry.qqwry import QQwry
from fastapi.responses import JSONResponse
# 启动Fastspi
app = FastAPI(docs_url=None,redoc_url=None)
@app.get('/')
async def ip(ip:str):
q = QQwry()
q.load_file('ipdb.dat')
result = q.lookup(ip)
return JSONResponse(content= {'area':result[0],'service':result[1]},status_code=200)
四、测试
在命令行中运行下面的代码,运行web服务:
uvicorn main:app --reload
启动成功之后,就可以在浏览器上访问到这个服务了,测试例子如下:
http://127.0.0.1:8000/?ip=123.150.76.218