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地址所在的地址位置。

(0)

相关推荐

  • jquery使用淘宝接口跨域查询手机号码归属地实例

    复制代码 代码如下: <h1>手机号码归属地查询</h1>    <div class="outer">        <p>请输入手机号码</p>        <input type="text"  >        <span class="button">查询</span>        <span class="error&q

  • 基于C#实现手机号码归属地接口调用

    本文实例介绍了手机号码归属地接口调用基于C#实现,分享给大家供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using Xfrog.Net; using System.Diagnostics; using System.Web; //-----------------------

  • Android编程实现号码归属地查询的方法

    本文实例讲述了Android编程实现号码归属地查询的方法.分享给大家供大家参考,具体如下: 我们通过发送XML访问 WebService就可以实现号码的归属地查询,我们可以使用代理服务器提供的XML的格式进行设置,然后请求提交给服务器,服务器根据请求就会返回给一个XML,XML中就封装了我们想要获取的数据. 发送XML 1.通过URL封装路径打开一个HttpURLConnection 2.设置请求方式,Content-Type和Content-Length XML文件的Content-Type为

  • 免费手机号码归属地API查询接口和PHP使用实例分享

    免费手机号码归属地API查询接口和PHP使用实例分享 最近在做全国性的行业分类信息网站,需要用到手机号归属地显示功能,于是就穿梭于各大权威站点之间偷来了API的接口地址. 分享出来,大家可以用到就拿去呵. 一.淘宝网API 复制代码 代码如下: API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON 二.拍拍API 复制代码 代码如下: API地址: http

  • java使用淘宝API读写json实现手机归属地查询功能代码

    一般查询手机归属地内容应该很好用json格式保存,在网上找到了淘宝的归属地API,并下了处理json相关的jar包,做了这个手机归属地查询功能 复制代码 代码如下: package com.think.java; import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net

  • java调用淘宝api联网查询ip归属地

    淘宝返回的数据为:{"code":0,"data":{"country":"\u4e2d\u56fd","country_id":"CN","area":"\u534e\u4e1c","area_id":"300000","region":"\u5c71\u4e1c\u7701&

  • Android手机号码归属地的查询

    一个简单的Demo,从聚合数据申请手机号码归属地数据接口: 在EditText中输入待查询号码,获取号码后在子线程中使用HttpUrlconnection获取JSON数据,之后进行解析: 数据获取完成后,在主线程中更新UI,显示获取的号码归属地信息. 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android

  • PHP通过API获取手机号码归属地

    该API接口自 2011年 SAE平台上线稳定运行至今,增加了17号段的支持,欢迎各种采集注限制 并发10 详细使用说明 接口地址:http://appyun.sinaapp.com/index.php?app=mobile&controller=index&action=api 请求方法:GET 请求参数: 参数名 类型 必填 参数位置 描述 默认值 app string 是 urlParam 模块名称(不变) mobile controller string 是 urlParam 控制

  • 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/s

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

    网上有很多方法能够过去到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=

  • Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】

    本文实例讲述了Python2.7基于淘宝接口获取IP地址所在地理位置的方法.分享给大家供大家参考,具体如下: #!/usr/bin/python import sys, os, urllib2, json def get_ip_area(ip): try: apiurl = "http://ip.taobao.com/service/getIpInfo.php?ip=%s" %ip content = urllib2.urlopen(apiurl).read() data = json

  • Python查询IP地址归属完整代码

    本文实例为大家分享了Python查询IP地址归属的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python # -*- coding: utf-8 -*- #查找IP地址归属地 #writer by keery_log #Create time:2013-10-30 #Last update:2013-10-30 #用法: python chk_ip.py www.google.com |python chk_ip.py 8.8.8.8 |python chk_ip.py

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

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

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

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

  • vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)

    本文介绍了vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动) 先去下载一个"省份.城市.区县.乡镇" 四级联动数据,然后 引入 import { Picker } from 'mint-ui'; //前提是npm install mint-ui -S Vue.component(Picker.name, Picker); 组件使用 <mt-picker :slots="addressSlots" class="picke

  • 基于python实现查询ip地址来源

    从http://freeapi.ipip.net和http://ip-api.com/json/这两个网站提供的免费调用接口查询IP地址归属地. 接口调用方法是在url后面直接加上IP地址. url = 'http://freeapi.ipip.net/218.192.3.42' #中文免费 url2 = 'http://ip-api.com/json/218.192.3.42' #外国网站 ip.py: import sys import requests def main(argv): ur

随机推荐