`
wbj0110
  • 浏览: 1602693 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

获取ip地理信息

阅读更多
第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。
 
第二种是利用门户网站的接口

目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得到的只有腾讯、新浪和网易的,Google的貌似要用Google Maps所以没有研究。看了下国内的几个腾讯提供的是JavaScript的,网易提供的是XML,而新浪的有多种格式可以用,注意非XML的数据源都是GBK格式的,不管是JavaScript调用还是PHP调用都要转换一下编码,不然得到的是乱码。而更需要注意的是,如果一次性查询多个IP,使用门户网站的API来查询会非常缓慢,我大概写了个for循环试了下,不管是用PHP解析XML还是file_get_contents()函数获取内容,查询10次以上会变得非常缓慢,甚至可能超时。

腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress,返回的是数据格式为:var IPData = new Array("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,推荐第二种方法
/*
 *根据腾讯IP分享计划的地址获取IP所在地,比较精确
 */
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;
}



/********注:
1.使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。
2.使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而 且需要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展*****/
//新浪查询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("product");
   foreach($smartresult as $product)
   {
      $locations = $product->getElementsByTagName("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", "utf-8//IGNORE", $str);
   preg_match_all("/[\x{4e00}-\x{9fa5}]+/u",$str,$get);
   $add = implode('',$get[0]);
   return $add;
}
//$get是一个非常棒的二维数组

新浪API也可以像腾讯API那样用file_get_contents()函数获取完地址后使用一连串的字符串函数处理,使用正则表达式从新浪的返回结果中提供包含中文的字符串,并且分段存入一个二维数组,这个可能只是针对新浪的API有用并且存在bug。举个例子查询学校分配给我的IP地址后var_dump()一下函数里面的$get变量得到以下结果: array(1) { [0]=> array(6) { [0]=> string(6) "中国" [1]=> string(6) "北京" [2]=> string(6) "北京" [3]=> string(9) "教育网" [4]=> string(6) "学校" [5]=> string(18) "中国地质大学" } },而函数输出的结果则是“中国北京北京教育网学校中国地质大学”,希望我的思路和方法能对别人有用。

分享到:
评论

相关推荐

    根据IP地址获取地理信息 地理信息

    获取IP地理信息的一般步骤如下: 1. **IP查询**:首先,系统会接收到用户的网络请求,其中包含了用户的IP地址。 2. **数据库匹配**:通过查询预先下载或在线访问的IP地理定位数据库,找到与IP地址相对应的地理位置...

    ASP利用纯真IP数据库获取IP地理位置

    在IT行业中,获取IP地理位置是一项常见的需求,尤其在网站分析、广告定向以及网络安全等领域。本文将深入探讨如何使用ASP(Active Server Pages)结合纯真IP数据库来实现这一功能。 首先,"纯真IP数据库"是一个广泛...

    ThinkPHP根据获取的ip获取地理位置信息

    总结,通过ThinkPHP获取IP地址和对应的地理位置信息,需要理解HTTP协议中的IP获取机制,以及如何使用第三方服务或数据库进行IP到地理信息的转换。在实际项目中,还需要考虑到隐私保护和合规性,确保在合法范围内使用...

    通过淘宝IP接口获取IP地理位置

    在互联网应用中,IP地理位置的获取是一项非常实用且广泛的功能。通过对用户IP地址的解析,可以快速定位用户所在地理位置,这对于广告定向投放、数据分析以及个性化服务推荐等应用场景具有重要意义。本文将详细介绍...

    比较全的获得ip地理信息的几种方法小结

    其次,利用门户网站提供的接口是另一种便捷的获取IP地理信息的途径。腾讯、新浪和网易等门户都提供了IP地址查询的API接口。这些接口中,腾讯提供了JavaScript对象形式的数据,新浪提供了多种格式(包括JavaScript和...

    php获取访客IP和地理位置信息的类

    然而,由于隐私保护,直接获取精确的地理位置信息并不总是可行的,通常需要依赖第三方服务或者IP数据库。 标题中提到的"php获取访客IP和地理位置信息的类",可能是指一个PHP类库,用于处理这些任务。这类库通常会...

    Thinkphp5根据IP地址获取定位地理位置,精准到城市

    本篇文章将深入探讨如何在ThinkPHP5中利用IP地址获取定位至城市的地理信息。 首先,我们要明白IP地址与地理位置的关系。Internet上的每个设备都有一个唯一的IP地址,这些地址按照一定的规则被分配给各个网络和主机...

    python 根据IP地址查对应的地理信息源码

    第三步,使用Python的pygeoip库查询IP地址库,获取IP地址对应的地理信息。 使用Python根据IP地址查询对应的地理信息的优点是:简单易用,只需要几行代码就可以实现;可靠性高,IP地址库更新及时,查询结果准确;...

    离线解析ip地理信息资源包

    标题中的“离线解析ip地理信息资源包”指的是一个用于获取IP地址地理位置信息的数据包,这种数据包通常包含了全球范围内的IP地址与对应地理位置的映射关系,可以在没有网络连接的情况下进行IP地址的地理定位。...

    asp通过ip获取所在地理位置

    asp通过ip获取所在地理位置 将用代码如 index.asp 中代码 &lt;!--#include file="getip.asp"--&gt; &lt;%=ip%&gt; &lt;%=ip2%&gt; --------------------------------------------------------------------------------------...

    IP获取地理位置asp

    本项目"IP获取地理位置asp"是基于ASP(Active Server Pages)和Access数据库技术实现的,它允许开发者通过用户的IP地址获取其大概的物理位置信息。在网页应用中,这种功能常用于提供个性化服务、安全验证、数据分析...

    java实现根据ip地址获取地理位置的代码分享

    在Java编程中,有时我们需要根据用户的IP地址获取其所在地理位置的信息,这在网站统计、个性化推荐或者安全防护等方面都有重要作用。本篇文章将分享一个利用Java实现根据IP地址获取地理位置的简单示例,主要使用了QQ...

    php获取访客IP和地理位置信息的类.zip

    它可能包含了全球范围内的IP地址段和对应的国家、地区等地理信息。在处理IP到地理位置的转换时,类库会查找这个数据文件来获取对应的位置信息。 2. **IpLocation.class.php**: 这是核心类文件,实现了获取和解析...

    php获取客户端的ip、地理信息、浏览器信息等内容的类.zip

    其次,获取地理信息通常涉及到IP地址到地理位置的映射。这个过程可以通过查询IP数据库或者使用第三方API服务(如MaxMind、IPInfoDB等)来完成。这个PHP类可能已经内置了与某个IP定位服务的接口,允许开发者通过提供...

    获取地理信息

    在IT行业中,获取地理信息是一项常见的任务,尤其在网站分析、个性化推荐和安全防护等领域。本文将详细探讨如何使用PHP编程语言,结合新浪IP查询接口,来实现IP地址到地理位置的转换。 首先,我们需要理解新浪IP...

    自动获取IP地理位置 PHP版

    在IT行业中,自动获取IP地理位置是一项常见的需求,尤其在网站分析、用户行为追踪以及个性化服务提供等方面。PHP作为广泛使用的服务器端脚本语言,提供了多种方法来实现这一功能。本项目名为“自动获取IP地理位置 ...

    根据ip地址获取城市地理位置

    1、location.html 在浏览器中打开页面,即可获取您当前的ip地址,和所在城市,以及城市地理位置编码。(以国家统计局为准) 2、Location.java 运行代码,即可 获取 location.html 中的信息。 放在web项目中,可...

    vb IP地理定位

    在信息技术领域,IP地理定位是一项常用的技术,它能够根据互联网协议(IP)地址确定设备所在的地理位置。VB(Visual Basic)作为经典的编程语言,结合这项技术,可以构建出实用的应用程序,如我们这里讨论的...

    易语言显ip地理位置

    在"易语言显ip地理位置"这个主题中,我们主要探讨的是如何利用易语言来获取并显示一个IP地址所对应的地理位置信息。 IP地址是互联网上设备的唯一标识,它由四部分数字组成,每部分之间用点号分隔。地理位置信息则是...

    IP地理位置查询模块.rar

    在信息技术领域,IP地理位置查询是一项关键的技术,它允许我们通过一个设备的IP地址获取其所在的位置信息。本模块——"IP地理位置查询模块",是用易语言编写的源码,提供了高效且准确的IP定位功能。通过深入理解并...

Global site tag (gtag.js) - Google Analytics