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
{
}
相关文章
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
676 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
2636 82
|
10月前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
329 1
|
9月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
9月前
|
数据安全/隐私保护 数据格式 Python
快递单号模拟生成器, 虚拟物流信息在线生成,虚假快递单号生成器【python】
支持多种主流快递公司生成符合各快递公司规则的快递单号自动生成收发件人信息
|
9月前
|
JSON 前端开发 API
快递单号生成器在线, 快递单号模拟生成器, 虚拟物流信息在线生成【python】
项目包含三个主要模块:快递单号生成器核心逻辑、Flask Web应用程序和前端HTML页面
|
9月前
|
JSON API 数据安全/隐私保护
车辆五项信息查询 API 的实践指南:通过Python调用赋能车辆信息标准化
本API通过车牌号快速获取车辆五项核心信息,包括品牌、登记日期、车架号等,助力二手车评估、维修、保险等场景实现数字化转型。数据源自权威公安交管库,日更同步,毫秒级响应,满足高并发需求,符合隐私保护规范,是推动汽车后市场智能化的重要工具。
562 0
|
10月前
|
数据采集 存储 数据可视化
Python爬取招标信息并生成可视化分析报告
Python爬取招标信息并生成可视化分析报告
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
325 22
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
197 10

推荐镜像

更多