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
{
}
相关文章
|
7天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
25 4
|
6天前
|
存储 Python
深度剖析:Python里字典树Trie的构建与查询,让你的代码更优雅!
在编程的世界里,数据结构的选择往往直接决定了程序的效率和可读性。今天,我们将深入探索一种高效处理字符串搜索与匹配的数据结构——字典树(Trie),也称作前缀树或单词查找树。通过Python实现Trie树,我们将看到它如何优雅地解决一系列字符串相关的问题,并提升代码的整体质量。
12 2
|
2月前
|
测试技术 API 开发者
Python 魔法:打造你的第一个天气查询小工具自动化测试框架的构建与实践
【8月更文挑战第31天】在这篇文章中,我们将一起踏上编程的奇妙旅程。想象一下,只需几行代码,就能让计算机告诉你明天是否要带伞。是的,你没有听错,我们将用Python这把钥匙,解锁天气预报的秘密。不论你是编程新手还是想拓展技能的老手,这篇文章都会为你带来新的视角和灵感。所以,拿起你的键盘,让我们一起创造属于自己的天气小工具吧!
|
2月前
|
Python
炫酷!纯Python开发LOL英雄信息查询平台
炫酷!纯Python开发LOL英雄信息查询平台
|
2月前
|
Python
【Azure Developer】使用Python代码获取VM的IP地址 (Public IP + Private IP)【未解决问题标签】
【Azure Developer】使用Python代码获取VM的IP地址 (Public IP + Private IP)【未解决问题标签】
|
28天前
|
数据采集 自然语言处理 数据挖掘
python查询汉字函数
简洁、高效、易懂的代码对于提高开发效率与项目质量至关重要,并且对于维持代码的可读性和可维护性也有着很大帮助。选择正确的工具和方法可以大幅提升处理中文数据的效率。在编写用户定义函数时,明确函数的功能与返回值类型对于函数的复用和调试也同样重要。当涉及到复杂的文本处理或数据分析时,不宜过分依赖单一的工具或方法,而应根据具体需求灵活选择和组合不同的技术手段。
26 0
|
2月前
|
搜索推荐 API 数据处理
Python魔法:打造个性化天气查询工具
【8月更文挑战第31天】 在这篇文章中,我们将一起探索如何用Python构建一个个性化的天气查询工具。不同于传统的技术文章,我们将通过一个简单的故事引入主题,让读者感受到编程的乐趣和实用性。文章将介绍如何使用API获取数据,处理这些数据,并以用户友好的方式展示信息。无论你是编程新手还是想扩展你的项目库,这篇文章都会给你提供有价值的见解和代码示例。
|
2月前
|
数据采集 XML 前端开发
Python爬虫实战:利用代理IP爬取百度翻译
Python 爬虫实战:利用代理 IP 爬取百度翻译
148 2
|
2月前
|
JSON IDE API
探索Python编程:打造你的第一个天气查询工具
【8月更文挑战第30天】在这篇文章中,我们将一起踏上Python编程的奇妙旅程,从零基础开始,逐步构建出属于自己的天气查询工具。文章将引导你了解Python语言的魅力,通过实际的项目操作,让你体验到编程的乐趣和成就感。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供宝贵的经验和知识。让我们一起探索代码的世界,解锁新技能,让技术改变生活!
|
2月前
|
前端开发 关系型数据库 MySQL
最新黑名单查询录入系统PHP网站源码
最新黑名单查询录入系统PHP网站源码 前端html 后端layui 操作部分都采用API接口的方式实线 集结了layui表格的多数据操作,添加,批量删除,分页,单项删除 后台数据修改采用绑定参数的形式来进行修改可以很好的预防数据库注入,当然如果你想要测试这个防注入的你也可以尝试一下 PHP版本70+ 数据库Mysql 5.6 上传程序访问 http://你的域名/install 安装
59 0