获得ip地理信息的几种方法【最全】

102 篇文章 0 订阅
23 篇文章 0 订阅

[转载]获得ip地理信息的几种方法【最全】

(2012-06-05 14:49:29)
标签:

转载

 

第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。
 
第二种是利用门户网站的接口
 
目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得到的只有腾讯、新浪和网易的,Google的貌似要用GoogleMaps所以没有研究。看了下国内的几个腾讯提供的是JavaScript的,网易提供的是XML,而新浪的有多种格式可以用,注意非XML的数据源都是GBK格式的,不管是JavaScript调用还是PHP调用都要转换一下编码,不然得到的是乱码。而更需要注意的是,如果一次性查询多个IP,使用门户网站的API来查询会非常缓慢,我大概写了个for循环试了下,不管是用PHP解析XML还是file_get_contents()函数获取内容,查询10次以上会变得非常缓慢,甚至可能超时。
 
腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress,返回的是数据格式为:varIPData = newArray("123.124.2.85","","北京市","");,一个JavaScript的对象,目前还不知道如何输入IP查询。
 
新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
 
新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=123.124.2.85
 
网易有道的IP地址查询接口:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85
 


使用JS代码进行调取腾讯的api接口:
 查看源代码打印帮
 <script language="javascript"type="text/javascript" src="http://fw.qq.com/ipaddress"></script>
 <script>document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]);</script>
 //腾讯API的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);
 //调用查询接口需要抓取网页,有三种方法,第一种是curl,第二种是
 //file_get_contents,第三种fopen->fread->fclose,推荐第二种方法
 
 function getIPLoc($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;
 }
 
//根据腾讯接口查询ip地址,使用file_get_contents抓去网页
 function getIPLoc($queryIP){
 $url ='http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
 $result = file_get_contents($url);
 $result = mb_convert_encoding($result, "utf-8","gb2312"); // 编码转换,否则乱码
 preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
 $loc = $ipArray[1];
 return $loc;
 }
 //根据腾讯接口查询ip地址,使用fopen->fread->fclose抓去网页
 function getIPLoc($queryIP){
 $url ='http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
 $handle = fopen ("$url", "rb");
 $result = "";
 do {
    $data =fread($handle, 1024);
    if(strlen($data) == 0) {
    break;
    }
    $result .=$data;
 } while(true);
 $result = mb_convert_encoding($result, "utf-8","gb2312"); // 编码转换,否则乱码
 preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
 $loc = $ipArray[1];
 return $loc;
 }
 

 //新浪查询ip接口  第五个第六个是地理信息
 function getiploc($IP_ip){
 $IP_str =@file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip='.$IP_ip);
        if(!empty($IP_str)){   
            $IP_tmp =explode("    ",$IP_str);
            $IP_city = iconv("GBK", "UTF-8", $IP_tmp[5]);
 return  $IP_city;
 }

 //有道API的PHP调用方法
 $url ="http:www.youdao.com/smartresult-xml/search.s?type=ip&q=".$ip;
 $doc = new DOMDocument();
   $doc->load($url);
    $smartresult= $doc->getElementsByTagName_r("product");
   foreach($smartresult as $product)
    {
      $locations =$product->getElementsByTagName_r("location");
      $location =$locations->item(0)->nodeValue;
    }
    if($location!= "")
    {
       echo $i.".".$ip;
       echo "  来自".$location."的网友";
    }
    else
    {
       echo $i.".".$ip;
       echo "  来自火星的网友";
    }
 public function sinaIPApi($ip){
    $str =file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);
    $str =iconv("gbk", "ut

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值