根据IP查询城市ID和名字

根据IP查询城市ID和名字

python 复制代码
import json
import time
import geoip2.database
import requests
from loguru import logger
#创建GeoIP对象,并指定数据库路径
reader = geoip2.database.Reader(r'D:\thb\code\python-trial\pythonProject\data\GeoLite2-City.mmdb')

#web addr: https://ip.taobao.com/ipSearch
#淘宝 IP 库提供的 Rest 风格接口:10qps
def query_china_ip_location(ipaddress: str):
    req_params={
        "ip": ipaddress,
        "accessKey":"alibaba-inc"
    }
    cityid=None
    cityname=None
    rsp=requests.post(url="http://ip.taobao.com/outGetIpInfo",data=req_params)
    '''
    {
    "data": {
        "area": "",
        "country": "中国",
        "isp_id": "100017",
        "queryIp": "118.251.69.6",
        "city": "株洲",
        "ip": "118.251.69.6",
        "isp": "电信",
        "county": "",
        "region_id": "430000",
        "area_id": "",
        "county_id": null,
        "region": "湖南",
        "country_id": "CN",
        "city_id": "430200"
    },
    "msg": "query success",
    "code": 0
   }
    '''
    if rsp.status_code == 200:
        logger.info("result:{}",rsp.text)
        data_dict=json.loads(rsp.text)
        if data_dict.get("data") is not None:
           cityid = data_dict.get("data").get("city_id")
           cityname = data_dict.get("data").get("city")
    return cityid,cityname

#基于maxmind的IP查询,适合于国外IP
def query_ip_location(ip):
    try:
        # 查询IP归宿地
        response = reader.city(ip)
        # 提取国家名称
        country = response.country.name
        # 提取城市信息,如果存在的话
        city = response.city.name
        if city:
            return f"{country} | {city}"
        else:
            return country
    except geoip2.errors.AddressNotFoundError:
        return "IP地址未找到"

if __name__ == "__main__":
    #测试查询
    #ip_location = query_ip_location('128.101.101.101')
    #print(ip_location)
    ip_addrs=["118.124.102.247","183.222.178.180","117.183.162.183","118.251.69.6"]
    for ip_address in ip_addrs:
        time.sleep(1)
        cityid,cityname=query_china_ip_location(ip_address)
        logger.info("cityid:{},cityname:{}",cityid,cityname)
相关推荐
星辰烈龙1 小时前
黑马程序员JavaSE基础加强d5
服务器·网络·php
单片机系统设计1 小时前
基于STM32的水质检测系统
网络·stm32·单片机·嵌入式硬件·毕业设计·水质检测
mangge082 小时前
ESP8266 温湿度监测系统教程(SHT30+MAX7219+LeanCloud+HTTP 服务)
网络·网络协议·http
牛奶皮子2 小时前
合并 CSS 文件可以减少 HTTP 请求数,因为每个请求都会带来额外的网络开销
css·网络·http
阿巴~阿巴~2 小时前
“可达”方能“可靠”:深入解析网络层在TCP通信中的基石作用
运维·服务器·网络·网络协议·tcp/ip·ip·tcp
数据雕塑家2 小时前
【网络故障排查实战】多台机器互ping异常:MAC地址冲突引发的网络“薛定谔猫“现象
网络·macos
安生生申3 小时前
HTTP与HTTPS的区别
网络协议·http·https
闲人编程3 小时前
商品管理与库存系统
服务器·网络·数据库·python·api·数据模型·codecapsule
北京耐用通信3 小时前
耐达讯自动化CAN转PROFIBUS网关让软启动器如何让包装线告别“信号迷宫”
人工智能·物联网·网络协议·自动化·信息与通信
2501_939909053 小时前
flannel vs calico网络
网络