API之IP地址查询---权威的IP地

原文地址:http://yushine.iteye.com/blog/1717586

因为要做天气预报这件事,发现搜狐好像没有一个实时的判断浏览器所在城市的方法——已有的都是把判断结果放在某定期失效的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地址,页面上还有其他无关内容。

IP138 :http://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函数进行编码转换,否则会有乱码。


六月初字帖坊小程序 你想要的字帖模板及工具,这里都有!