【赚点小钱】搭建一个ip地址和所在地的web服务

145 阅读1分钟

最近有一个统计项目,要根据ip地址获取对应的地区。

针对开发的问题,我现在都是习惯性先丢给chatgpt去解决。很快,chatgpt就根据我使用的开发语言python,给了一个精准的方案:geoip2。

image.png

按着这个方法,注册、验证、下载,几经折腾,结果却发现,针对中国这边的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

image.png