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

淘宝公司提供了一个很好用的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查询IP归属
ip地址归属地查询api、淘宝手机归属地api、淘宝api 手机归属、淘宝网手机归属地api、淘宝ip地址api,以便于您获取更多的相关知识。

时间: 2024-08-01 01:56:08

php通过淘宝API查询IP地址归属等信息_php技巧的相关文章

Python使用淘宝API查询IP归属地功能分享_linux shell

网上有很多方法能够过去到IP地址归属地的脚本,但是我发现淘宝IP地址库的信息更详细些,所以用shell写个脚本来处理日常工作中一些IP地址分析工作. 脚本首先是从http://ip.taobao.com/的数据接口获取IP地址的JSON格式的数据信息,在使用一个python脚本来把Unicode字符转换成UTF-8编码. Shell脚本内容: 复制代码 代码如下: #!/bin/bash ipInfo() {   for i in `cat list`   do     TransCoding=

淘宝 API 查询订单

问题描述 看了一个下午的淘宝API,头都看晕了,就摸到大概的思路.首先要申请AppKey,AppSecret.然后根据AppKey获得SessionKey.有谁做过相关的例子啊?输入淘宝的订单号,查询是否存在.一定要使用API接口哦! 解决方案 解决方案二:该回复于2012-04-06 00:11:03被版主删除解决方案三:有人能说说吗?解决方案四:下淘宝SDK先.官网写的很清楚咯.解决方案五:顶一个,有空可以看看

python使用在线API查询IP对应的地理位置信息实例_python

这篇文章中的内容是来源于去年我用美国的VPS搭建博客的初始阶段,那是有很多恶意访问,我就根据access log中的源IP来进行了很多统计,同时我也将访问量最高的恶意访问的源IP拿来查询其地理位置信息.所以,我就用到了根据IP查询地理位置信息的一些东西,现在将这方面积累的一点东西共享出来. 根据IP查询所在地.运营商等信息的一些API如下(根据我有限的一点经验):1. 淘宝的API(推荐):http://ip.taobao.com/service/getIpInfo.php?ip=110.84.

PHP 获取客户端真实IP地址多种方法小结_php技巧

经过复杂的判断与算是的获取IP地址函数 复制代码 代码如下: function getIP() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('

php限制ip地址范围的方法_php技巧

本文实例讲述了php限制ip地址范围的方法.分享给大家供大家参考.具体如下: 只有在限定范围内的ip地址才能访问 function get_real_ipaddress() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWAR

PHP跨平台获取服务器IP地址自定义函数分享_php技巧

近期需要完善一个log机制,监控来自不同服务器的机器的脚本执行状况,特针对windows和Linux及web与命令行模式书写了一个函数来兼容. 写了如下一个function来,可以实现上面的需求: 复制代码 代码如下: function getServerAddr() {       //运行 web app       if (isset($_SERVER["SERVER_ADDR"])) {           return $_SERVER["SERVER_ADDR&q

php版淘宝网查询商品接口代码示例

  本文来给大家介绍一个php版淘宝网查询商品接口代码的例子,下面要改成你的信息的在代码后面都有说明了,同时sdk包我们也要官方下载. 下载SDK后直接引用包,并创建如下的类,并运行之,即完成了调用接口(taobao.user.seller.get)的过程(调用接口说明可见下载的SDK) 说明: TopClient为调用SDK的实例化类 UserSellerGetRequest为API的请求参数封装类 注:该接口是在沙箱环境下调用,获取的数据,也是沙箱中数据.若要获取线上环境,请填写自己创建应用

淘宝API开发系列---阿里.聚石塔.开放平台的使用

好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此原以为直接运行或者稍微修改一下即可,因此没有太多的注意. 可是,发现淘宝的API应用变化已经很大了,离我最后一篇淘宝API例子的随笔<淘宝API开发系列---淘宝API的测试及使用2 >有一年多的时间了,因此重新到http://api.taobao.com/myresources/standard

淘宝API开发系列---淘宝API的测试及使用2

继续前面一篇随笔<淘宝API开发系列---淘宝API的测试及使用>,来继续介绍淘宝API的具体代码开发部分,上篇主要是介绍淘宝SDK开发的一些流程及必备的信息,以及掌握如何学会利用API文档.淘宝API测试工具来获取我们所需的数据,其中我一般倾向于获取Json数据,然后进行分析,其中Json数据可以通过JsonView工具(http://jsonviewer.codeplex.com/)进行格式化显示,方便我们了解和区分各个属性的信息.另外淘宝的SDK里面,封装了很多对象,我们通过数据就可以获