`
yushine
  • 浏览: 196719 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

API之IP地址查询---权威的IP地址查询接口集合

 
阅读更多

因为要做天气预报这件事,发现搜狐好像没有一个实时的判断浏览器所在城市的方法——已有的都是把判断结果放在某定期失效的cookie里,这样可以减少服务器压力。

仔细一想就觉得这玩意其实对资源消耗没有那么大,于是就要求整一个实时的。。。。。然后就觉得该接口也可以给外部开发者调用:http://pv.sohu.com/cityjson

这个接口是给浏览器JS来调用的,缺省返回 gbk 编码的数据;如果你的应用是 UTF-8,加一个参数 http://pv.sohu.com/cityjson?ie=utf-8

目前这个接口只是搜狐在用,所以参数很简单,返回的那个 cid 还很魔幻;如果觉得这个接口确实有帮助,可以把需求发给俺们来继续改进之

未来也许搜狐会提供给互联网开发者更多的接口和服务。

BTW:写这篇blog之前突然想到,中国互联网应该有类似的接口了吧,一查之下果然 QQ 有一个 http://fw.qq.com/ipaddress ,但好像不是官方支持,而且它只有 gbk,哇咔咔

 

=================================================================

各门户/大型网站IP地址查询接口:

腾讯http://fw.qq.com/ipaddress
直接返回本机的IP地址对应的地区,准确度较高。
其实还可以利用腾讯的IP分享计划根据IP地址来获取更准确的IP地址,详看教程:http://bbs.pinluo.com/thread-28505-1-1.html

新浪http://counter.sina.com.cn/ip?ip=IP 地址
http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=IP 地址
返回Js数据,感觉不是很精确,可以把问号后面的去掉,直接返回本机对应的IP所在地。

搜狐http://pv.sohu.com/cityjson?ie=utf-8 或者http://txt.go.sohu.com/ip/soip

网易有道http://www.youdao.com/smartresult-xml/search.s?type=ip&q=0.0.0.0
把0.0.0.0换成需查询的IP地址即可,以下同,这个应该是用纯真的数据库。
(还可查手机号码)
http://www.youdao.com/smartresult-xml/search.s?type=mobile&q=13888880000

太平洋电脑网http://whois.pconline.com.cn/?ip=0.0.0.0
把0.0.0.0换成IP地址,页面上还有其他无关内容。

IP138http://www.ip138.com/ips.asp?ip=IP 地址
准确度非常高,IP经常更新。

纯真IP数据库http://www.cz88.net/

====================================================

我用新浪打开是显示:1 116.1.204.0 116.1.205.255 中国 广西 崇左 电信 广西南宁市电信
用腾讯打开是显示:var IPData = new Array("116.1.205.88","","广西","南宁市");
www.ip138.com 打开是显示:116.1.205.88 本站主数据:广西自治区南宁市 电信

很明显,新浪是错误的,它IP显示错误,并且将南宁市显示为崇左市了。这是两个不同的城市啊!

===========调用方法示例=====================

使用JS代码进行调取:

Js代码
<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"></script>     <script>document.write("你的IP是:"+IPData[0]+",来 自:"+IPData[2]);</script>  
<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"></script> <script>document.write("你的IP是:"+IPData[0]+",来 自:"+IPData[2]);</script>



使用PHP解析的方法:  

Php代码
<?php   function getIpPlace(){    $ip=file_get_contents("http://fw.qq.com/ipaddress");    $ip=str_replace('"',' ',$ip);    $ip2=explode("(",$ip);    $a=substr($ip2[1],0,-2);    $b=explode(",",$a);    return $b;   }   $ip=getIpPlace();   print_r($ip);   ?>  
<?phpfunction getIpPlace(){ $ip=file_get_contents("http://fw.qq.com/ipaddress"); $ip=str_replace('"',' ',$ip); $ip2=explode("(",$ip); $a=substr($ip2[1],0,-2); $b=explode(",",$a); return $b;}$ip=getIpPlace();print_r($ip);?>

 

=============================================================

PHP利用腾讯IP分享计划获取IP地理位置 腾讯的IP分享计划的查询接口连接是:http://ip.qq.com/cgi-bin/searchip ,该连接后面会带有一个get参数searchip1,即searchip1=你要查询的IP地址。
使用方法是:采用PHP向http://ip.qq.com/cgi-bin/searchip 发送http get request,然后获取相应,获得相应结果后,将结果用正则表达式将需要的地理位置信息提取出来就OK了。当然,PHP发送get请求的方法有很多,我用curl来模拟http请求的方法。
Curl 是PHP的一个扩展,进行测试之前,先确认PHP已经加载了curl扩展。打开PHP配置文件php.ini,搜索 “extension=php_curl.dll”,将其前面的分号(;)去掉,然后重启HTTP服务器,查看phpinfo(),若能看到curl的信 息,说明PHP扩展curl成功。

接下来就简单了,一段代码就可以搞定:

/**根据腾讯IP分享计划的地址获取IP所在地,比较精确 */

function getIPLoc_QQ($queryIP){
    $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
    $result = curl_exec($ch);
    $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
    curl_close($ch);
    preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
    $loc = $ipArray[1];
    return $loc;
}

使用getIPLoc_QQ("183.37.209.57")即可得到IP地址所在的地址位置。

腾讯IP分享计划这个网站用的是gb2312编码,获取的响应需要用mb_convert_encoding函数进行编码转换,否则会有乱码。

分享到:
评论

相关推荐

    wydomain子域名查询工具,wydomain目标系统信息收集组件

    wydomain目标系统信息收集组件,完全模块化,脚本均可拆可并、可合可分的使用!...解析获取到的所有子域名,生成IP列表集合,截取成RFC地址C段标准(42.42.42.0/24) 利用bing.com、aizhan.com的接口,查询所有C段

    FloodlightFirewallDashboard:Floodlight 防火墙应用程序的仪表板。 CSE591 云计算课程项目的一部分

    此外,Floodlight 是使用 Floodlight 控制器构建的应用程序集合。 Floodlight 防火墙是一个允许用户在流表中创建、查看和删除规则的应用程序。 防火墙应用程序使用 ReST API 公开 CRUD 功能。 Floodlight 防火墙...

    RFC中文文档-txt

    RFC1365 一种IP地址扩展提议 RFC1370 OSPF适用范围声明 RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet...

    python入门到高级全栈工程师培训 第3期 附课件代码

    01 ip地址与子网划分 02 ip地址配置 03 虚拟机网络模式 04 三层隔离验证试验 第8章 01 上节课复习 02 软件包介绍 03 rpm软件包管理 04 yum软件包管理 05 源码安装python3.5 06 ssh服务 07 apache服务 08 samba服务...

    Delphi网络通信协议分析与应用实现pdf清晰

    1.2.1 IP地址 1.2.2 地址解析 1.2.3 域名系统 1.2.4 数据包的封装和分用 1.2.5 端口号 1.3 网络编程接口(Winsock API) 1.4 Winsock常用函数介绍 1.4.1 基本Socket函数 1.4.2 数据库函数 1.4.3 Winsock规范...

    C#基类库(苏飞版)

    RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient  FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper ...

    rfc中文文档目录,包含部分翻译

    RFC1365 一种IP地址扩展提议 RFC1370_OSPF适用范围声明 RFC1387_RIP(版本2)协议分析 RFC1388_RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397_在边界网关协议(Border Gateway Protocol)版本2 RFC1408_...

    中文版RFC,共456

    RFC1365 一种IP地址扩展提议 RFC1370 OSPF适用范围声明 RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet...

    C#基础类库

    RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient  FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper ...

    超级有影响力霸气的Java面试题大全文档

     Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    基本信息 作者: 臧萌 ...12.2.4 使用接口仅需一步——实现接口 342 12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    基本信息 作者: 臧萌 ...12.2.4 使用接口仅需一步——实现接口 342 12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...

    hostmanager:根据雇主要求的面试项目

    该应用程序与PostgresSQL数据库连接,以在具有两列的表上读/写数据,其中一列包含IP地址,另一列包含主机名。 该应用程序具有REST Web界面,以便用户与这些数据进行交互(CRUD模型实现) SPA使用REST接口,以便...

    java开源包11

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包4

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java 面试题 总结

     Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符...

    1345个易语言模块

    取IP地址.ec 取 mdb表名.ec 取mp3信息模块.ec 取串口的端口号模块+Get_Com.ec 取任意文件图标.ec 取功能键状 态.ec 取十进制.ec 取句柄对应全路径文件名2.1.ec 取图片尺寸.ec 取声调拼音模块.ec 取声调拼音模 块1.0....

    Java学习笔记-个人整理的

    {1.12}Java API}{41}{section.1.12} {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{subsection.1.13.1} {1.13.2}权限}{42}{subsection.1.13.2} {1.13.3}打包备份与恢复}{42}{subsection....

    Java开发技术大全(500个源代码).

    ThreadImRunnable.java 继承Runnable接口实现多线程 mulThread.java 创建多个线程对象的类 demoJoin.java 演示使用join()以确保主线程最后结束 clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类...

Global site tag (gtag.js) - Google Analytics