当前位置:首页 > PHP教程 > php高级应用 > 列表

php通过淘宝API查询IP地址归属等信息

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-01 22:31:47 浏览: 评论:0 

这篇文章主要介绍了php通过淘宝API查询IP地址归属等信息的相关资料,需要的朋友可以参考下,淘宝公司提供了一个很好用的IP地理信息查询接口。

在这里:http://ip.taobao.com/

TaobaoIPQuery2这个类将极大的简化相关的信息查询。

类 TaobaoIPQuery2 文件:

  1. <?php 
  2. /* Usage: 
  3.  * $IPInfo = TaobaoIPQuery2::getIPInfo('IPAddress'); 
  4.  */ 
  5. Class TaobaoIPQuery2{ 
  6.   private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php'
  7.   public static function getIPInfo($ip){ 
  8.     $long = ip2long($ip); 
  9.     if($long === 0){ 
  10.       throw new Exception('IP address error', 5); 
  11.     } 
  12.     $ip=long2ip($long); 
  13.     $IPInfo = self::queryIPInfo($ip); 
  14.     return self::parseJSON($IPInfo); 
  15.   } 
  16.     
  17.   private static function queryIPInfo($ip){ 
  18.     $query = http_build_query(array('ip'=>$ip)); 
  19.     $ch = curl_init(); 
  20.     $options = array
  21.       CURLOPT_URL => sprintf('%s?%s', self::$_requestURL$query), 
  22.       CURLOPT_RETURNTRANSFER => true, 
  23.       CURLOPT_AUTOREFERER => false, 
  24.       CURLOPT_FOLLOWLOCATION => false, 
  25.       CURLOPT_HEADER => false, 
  26.       CURLOPT_TIMEOUT => 3.0, 
  27.     ); 
  28.     curl_setopt_array($ch$options); 
  29.     $content = curl_exec($ch); 
  30.     curl_close($ch); 
  31.     return $content
  32.   } 
  33.     
  34.   private static function parseJSON($json){ 
  35.     $O = json_decode ($json, true); 
  36.     if(false === is_null($O)){ 
  37.       return $O
  38.     } 
  39.     if (version_compare(PHP_VERSION, '5.3.0''>=')) { 
  40.       $errorCode = json_last_error(); 
  41.       if(isset(self::$_JSONParseError[$errorCode])){ 
  42.         throw new Exception(self::$_JSONParseError[$errorCode], 5); 
  43.       } 
  44.     } 
  45.     throw new Exception('JSON parse error', 5); 
  46.   } 
  47.     
  48.   private static $_JSONParseError = array
  49.     JSON_ERROR_NONE=>'No error has occurred',   
  50.     JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',   
  51.     JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',   
  52.     JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',   
  53.     JSON_ERROR_SYNTAX=>'Syntax error',   
  54.     JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded'
  55.   ); 

TaobaoIPQuery2.Class.php:

  1. <?php 
  2. Class TaobaoIPQuery2{ 
  3.   private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php'
  4.   public static function getIPInfo($ip){ 
  5.     $long = ip2long($ip); 
  6.     if($long === 0){ 
  7.       throw new Exception('IP address error', 5); 
  8.     } 
  9.     $ip=long2ip($long); 
  10.     $IPInfo = self::queryIPInfo($ip); 
  11.     return self::parseJSON($IPInfo); 
  12.   } 
  13.     
  14.   private static function queryIPInfo($ip){ 
  15.     $query = http_build_query(array('ip'=>$ip)); 
  16.     $ch = curl_init(); 
  17.     $options = array
  18.       CURLOPT_URL => sprintf('%s?%s', self::$_requestURL$query), 
  19.       CURLOPT_RETURNTRANSFER => true, 
  20.       CURLOPT_AUTOREFERER => false, 
  21.       CURLOPT_FOLLOWLOCATION => false, 
  22.       CURLOPT_HEADER => false, 
  23.       CURLOPT_TIMEOUT => 3.0, 
  24.     ); 
  25.     curl_setopt_array($ch$options); 
  26.     $content = curl_exec($ch); 
  27.     curl_close($ch); 
  28.     return $content
  29.   } 
  30.     
  31.   private static function parseJSON($json){ 
  32.     $O = json_decode ($json, true); 
  33.     if(false === is_null($O)){ 
  34.       return $O
  35.     } 
  36.     if (version_compare(PHP_VERSION, '5.3.0''>=')) { 
  37.       $errorCode = json_last_error(); 
  38.       if(isset(self::$_JSONParseError[$errorCode])){ 
  39.         throw new Exception(self::$_JSONParseError[$errorCode], 5); 
  40.       } 
  41.     } 
  42.     throw new Exception('JSON parse error', 5); 
  43.   } 
  44.   private static $_JSONParseError = array
  45.     JSON_ERROR_NONE=>'No error has occurred',   
  46.     JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',   
  47.     JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',   
  48.     JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',   
  49.     JSON_ERROR_SYNTAX=>'Syntax error',   
  50.     JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded'
  51.   ); 

调用:

  1. $ip = $_SERVER["REMOTE_ADDR"]; 
  2. $ipquery = new taobaoIPQuery($ip); 
  3. $region = $ipquery->get_region(); 
  4. $country = $ipquery->get_country(); 
  5. $city = $ipquery->get_city(); 

我们再来看个腾讯api接口的

  1. /*  
  2.  *根据腾讯IP分享计划的地址获取IP所在地,比较精确  
  3.  */ 
  4. function getIPLoc_QQ($queryIP){  
  5.   $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;  
  6.   $ch = curl_init($url);  
  7.   curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');  
  8.   curl_setopt($ch, CURLOPT_TIMEOUT, 10);  
  9.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回  
  10.   $result = curl_exec($ch);  
  11.   $result = mb_convert_encoding($result"utf-8""gb2312"); // 编码转换,否则乱码  
  12.   curl_close($ch);  
  13.   preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);  
  14.   $loc = $ipArray[1];  
  15.   return $loc;  

腾讯的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成功

接下来是新浪网的API接口

新浪的IP查询接口地址是:http://int.dpool.sina.com.cn/iplookup/iplookup.php,该连接后面也带有get参数,参数ip=你要查询的IP地址,format=返回的查询结果格式。为了方便起见,返回的格式采用json,即format=json,因此,PHP出来扩展curl外,还得扩展json:

  1. /*  
  2.  *根据新浪IP查询接口获取IP所在地  
  3.  */ 
  4. function getIPLoc_sina($queryIP){  
  5.   $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP;  
  6.   $ch = curl_init($url);  
  7.   //curl_setopt($ch,CURLOPT_ENCODING ,'utf8');  
  8.   curl_setopt($ch, CURLOPT_TIMEOUT, 10);  
  9.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回  
  10.   $location = curl_exec($ch);  
  11.   $location = json_decode($location);  
  12.   curl_close($ch);  
  13.      
  14.   $loc = "";  
  15.   if($location===FALSE) return "";  
  16.   if (emptyempty($location->desc)) {  
  17.     $loc = $location->province.$location->city.$location->district.$location->isp;  
  18.   }else{  
  19.     $loc = $location->desc;  
  20.   }  
  21.   return $loc;  
  22. }  

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

Tags: php淘宝API查询IP地址

分享到: