程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php通過淘寶API查詢IP地址歸屬等信息,

php通過淘寶API查詢IP地址歸屬等信息,

編輯:關於PHP編程

php通過淘寶API查詢IP地址歸屬等信息,


淘寶公司提供了一個很好用的IP地理信息查詢接口。

在這裡:http://ip.taobao.com/

TaobaoIPQuery2這個類將極大的簡化相關的信息查詢。

類 TaobaoIPQuery2 文件:

<?php
/* Usage:
 * $IPInfo = TaobaoIPQuery2::getIPInfo('IPAddress');
 */
Class TaobaoIPQuery2{
  private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
  public static function getIPInfo($ip){
    $long = ip2long($ip);
    if($long === 0){
      throw new Exception('IP address error', 5);
    }
    $ip=long2ip($long);
    $IPInfo = self::queryIPInfo($ip);
    return self::parseJSON($IPInfo);
  }
  
  private static function queryIPInfo($ip){
    $query = http_build_query(array('ip'=>$ip));
    $ch = curl_init();
    $options = array(
      CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_AUTOREFERER => false,
      CURLOPT_FOLLOWLOCATION => false,
      CURLOPT_HEADER => false,
      CURLOPT_TIMEOUT => 3.0,
    );
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
  }
  
  private static function parseJSON($json){
    $O = json_decode ($json, true);
    if(false === is_null($O)){
      return $O;
    }
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
      $errorCode = json_last_error();
      if(isset(self::$_JSONParseError[$errorCode])){
        throw new Exception(self::$_JSONParseError[$errorCode], 5);
      }
    }
    throw new Exception('JSON parse error', 5);
  }
  
  private static $_JSONParseError = array(
    JSON_ERROR_NONE=>'No error has occurred',  
    JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',  
    JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',  
    JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',  
    JSON_ERROR_SYNTAX=>'Syntax error',  
    JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
  );
}

TaobaoIPQuery2.Class.php:

<?php
Class TaobaoIPQuery2{
  private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
  public static function getIPInfo($ip){
    $long = ip2long($ip);
    if($long === 0){
      throw new Exception('IP address error', 5);
    }
    $ip=long2ip($long);
    $IPInfo = self::queryIPInfo($ip);
    return self::parseJSON($IPInfo);
  }
  
  private static function queryIPInfo($ip){
    $query = http_build_query(array('ip'=>$ip));
    $ch = curl_init();
    $options = array(
      CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_AUTOREFERER => false,
      CURLOPT_FOLLOWLOCATION => false,
      CURLOPT_HEADER => false,
      CURLOPT_TIMEOUT => 3.0,
    );
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
  }
  
  private static function parseJSON($json){
    $O = json_decode ($json, true);
    if(false === is_null($O)){
      return $O;
    }
    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
      $errorCode = json_last_error();
      if(isset(self::$_JSONParseError[$errorCode])){
        throw new Exception(self::$_JSONParseError[$errorCode], 5);
      }
    }
    throw new Exception('JSON parse error', 5);
  }
  private static $_JSONParseError = array(
    JSON_ERROR_NONE=>'No error has occurred',  
    JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',  
    JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',  
    JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',  
    JSON_ERROR_SYNTAX=>'Syntax error',  
    JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
  );
}

調用:

$ip = $_SERVER["REMOTE_ADDR"];
$ipquery = new taobaoIPQuery($ip);
$region = $ipquery->get_region();
$country = $ipquery->get_country();
$city = $ipquery->get_city();

我們再來看個騰訊api接口的

/* 
 *根據騰訊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; 
} 

騰訊的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:

/* 
 *根據新浪IP查詢接口獲取IP所在地 
 */ 
function getIPLoc_sina($queryIP){ 
  $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP; 
  $ch = curl_init($url); 
  //curl_setopt($ch,CURLOPT_ENCODING ,'utf8'); 
  curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 獲取數據返回 
  $location = curl_exec($ch); 
  $location = json_decode($location); 
  curl_close($ch); 
   
  $loc = ""; 
  if($location===FALSE) return ""; 
  if (emptyempty($location->desc)) { 
    $loc = $location->province.$location->city.$location->district.$location->isp; 
  }else{ 
    $loc = $location->desc; 
  } 
  return $loc; 
} 

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

您可能感興趣的文章:

  • PHP 手機歸屬地查詢 api
  • PHP實現手機歸屬地查詢API接口實現代碼
  • PHP中根據IP地址判斷城市實現城市切換或跳轉代碼
  • PHP手機號碼歸屬地查詢代碼(API接口/mysql)
  • php驗證手機號碼(支持歸屬地查詢及編碼為UTF8)
  • PHP轉換IP地址到真實地址的方法詳解
  • PHP根據IP地址獲取所在城市具體實現
  • 免費手機號碼歸屬地API查詢接口和PHP使用實例分享
  • PHP通過API獲取手機號碼歸屬地

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved