Python/PHP:免费IP归属地查询接口和通过ip获取大致位置信息

简介: Python/PHP:免费IP归属地查询接口和通过ip获取大致位置信息

1、淘宝API接口:


文档:http://ip.taobao.com/instructions


示例:


GET http://ip.taobao.com/outGetIpInfo?ip=221.218.209.125&accessKey=alibaba-inc
{
    data: {
        area: "",
        country: "中国",
        isp_id: "100026",
        queryIp: "221.218.209.125",
        city: "北京",
        ip: "221.218.209.125",
        isp: "联通",
        county: "",
        region_id: "110000",
        area_id: "",
        county_id: null,
        region: "北京",
        country_id: "CN",
        city_id: "110100"
    },
    msg: "query success",
    code: 0
}

2、IP-API接口:


文档:https://ip-api.com/docs/api:json


示例:


GET http://ip-api.com/json/221.218.209.125?lang=zh-CN
{
    status: "success",
    country: "中国",
    countryCode: "CN",
    region: "BJ",
    regionName: "北京市",
    city: "北京",
    zip: "",
    lat: 39.9285,
    lon: 116.385,
    timezone: "Asia/Shanghai",
    isp: "China Unicom Beijing Province Network",
    org: "",
    as: "AS4808 China Unicom Beijing Province Network",
    query: "221.218.209.125"
}

3、太平洋IP接口:


文档:http://whois.pconline.com.cn/


示例:


GET http://whois.pconline.com.cn/ipJson.jsp?ip=221.218.209.125&json=true


{

   ip: "221.218.209.125",

   pro: "北京市",

   proCode: "110000",

   city: "北京市",

   cityCode: "110000",

   region: "海淀区",

   regionCode: "110108",

   addr: "北京市海淀区 联通ADSL",

   regionNames: "",

   err: ""

}

参考

免费IP归属地查询接口汇总


代码实现

网络请求库,使用 Requests(PHP:rmccue/requests进行网络请求)


通过ip获取位置信息不太准确,需要对获取的省市县三级区域码做判断处理


<?php
namespace app\service;
use app\common\AppException;
use Requests;
class IpService
{
    public static function getIpInfo($ip)
    {
        $base_url = 'http://whois.pconline.com.cn/ipJson.jsp';
        $params = [
            'ip'   => $ip,
            // 注意,此处不能写boolean值,需要给string
            'json' => 'true'
        ];
        $url = $base_url . '?' . http_build_query($params);
        $response = Requests::get($url);
        if ($response->success) {
            // 编码转换处理,并移除字符串两边的空白
            $body=iconv("GBK", "UTF-8", trim($response->body));
            $data = json_decode($body, true);
            // 优先取区县码
            $code = $data['regionCode'];
            // 其次取城市码
            if (!self::isRegionCode($code)) {
                $code = $data['cityCode'];
            }
            //再次取省份码
            if (!self::isRegionCode($code)) {
                $code = $data['proCode'];
            }
            return [
                'ip'   => $data['ip'],
                'code' => $code
            ];
            // 此处仅返回区位码即可
            return [
                'ip'   => $data['ip'],
                'code' => $data['regionCode'],
            ];
        } else {
            throw new AppException('ip信息获取失败');
        }
    }
    public static function isRegionCode($code)
    {
        if (empty($code) || count($code) != 6) {
            return false;
        } else {
            return true;
        }
    }
}

异常类


<?php
namespace app\common;
use Exception;
/**
 * 自定义的业务异常
 * Class AppException
 * @package app\common
 */
class AppException extends Exception
{
}
相关文章
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
514 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
12月前
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
776 86
|
9月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
9月前
|
PHP 数据库
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
|
10月前
|
监控 定位技术 PHP
使用PHP接入纯真IP库:实现IP地址地理位置查询
本文介绍了如何使用PHP接入纯真IP库(QQWry),实现IP地址的地理位置查询。纯真IP库是一个轻量级的IP数据库,数据格式简单,查询速度快,适合Web应用。首先,下载并放置`QQWry.dat`文件到项目目录。接着,通过编写PHP类解析该文件,实现IP查询功能。最后,提供了一个完整的案例演示,展示如何查询IP地址对应的国家和地区信息。该工具适用于用户地理位置分析、访问日志分析和风控系统等场景,具有轻量级、查询速度快、数据更新方便等优点。
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
数据采集 人工智能 自然语言处理
AI Agent 金融助理0-1 Tutorial 利用Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股) AI Finance Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
iOS开发 MacOS Python
Python编程小案例—利用flask查询本机IP归属并输出网页图片
Python编程小案例—利用flask查询本机IP归属并输出网页图片
198 1
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
1204 0
|
SQL 前端开发 Python
基于python-django的neo4j人民的名义关系图谱查询系统
基于python-django的neo4j人民的名义关系图谱查询系统
230 0

推荐镜像

更多