最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

比較全的獲得ip地理信息的幾種方法小結(jié)

 更新時間:2012年02月04日 14:19:02   作者:  
有時候我們需要獲取ip的地理信息,方便引導(dǎo)用戶訪問或統(tǒng)計,需要的朋友可以參考下
第一種是利用純真ip數(shù)據(jù)庫,這個可以在網(wǎng)上找到很多,缺點是更新有點慢。
第二種是利用門戶網(wǎng)站的接口
目前已知的有騰訊、新浪、網(wǎng)易、搜狐和Google提供IP地址查詢API,但是找得到的只有騰訊、新浪和網(wǎng)易的,Google的貌似要用Google Maps所以沒有研究。看了下國內(nèi)的幾個騰訊提供的是JavaScript的,網(wǎng)易提供的是XML,而新浪的有多種格式可以用,注意非XML的數(shù)據(jù)源都是GBK格式的,不管是JavaScript調(diào)用還是PHP調(diào)用都要轉(zhuǎn)換一下編碼,不然得到的是亂碼。而更需要注意的是,如果一次性查詢多個IP,使用門戶網(wǎng)站的API來查詢會非常緩慢,我大概寫了個for循環(huán)試了下,不管是用PHP解析XML還是file_get_contents()函數(shù)獲取內(nèi)容,查詢10次以上會變得非常緩慢,甚至可能超時。
騰訊的IP地址API接口地址:http://fw.qq.com/ipaddress,返回的是數(shù)據(jù)格式為: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
網(wǎng)易有道的IP地址查詢接口:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85
使用JS代碼進行調(diào)取騰訊的api接口:
查看源代碼打印幫
復(fù)制代碼 代碼如下:

<script language=”javascript” type=”text/javascript” src=”http://fw.qq.com/ipaddress”></script>
<script>document.write(“你的IP是:”+IPData[0]+”,來自:”+IPData[2]);</script>
//騰訊API的PHP調(diào)用方法
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);
//調(diào)用查詢接口需要抓取網(wǎng)頁,有三種方法,第一種是curl,第二種是
//file_get_contents,第三種fopen->fread->fclose,推薦第二種方法
/*
*根據(jù)騰訊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) ; // 獲取數(shù)據(jù)返回
$result = curl_exec($ch);
$result = mb_convert_encoding($result, “utf-8″, “gb2312″); // 編碼轉(zhuǎn)換,否則亂碼
curl_close($ch);
preg_match(“@<span>(.*)</span></p>@iU”,$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
//根據(jù)騰訊接口查詢ip地址,使用file_get_contents抓去網(wǎng)頁
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″); // 編碼轉(zhuǎn)換,否則亂碼
preg_match(“@<span>(.*)</span></p>@iU”,$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
//根據(jù)騰訊接口查詢ip地址,使用fopen->fread->fclose抓去網(wǎng)頁
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″); // 編碼轉(zhuǎn)換,否則亂碼
preg_match(“@<span>(.*)</span></p>@iU”,$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
/********注:
1.使用file_get_contents和fopen必須空間開啟allow_url_fopen。方法:編輯php.ini,設(shè)置allow_url_fopen = On,allow_url_fopen關(guān)閉時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調(diào)用方法
$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(“l(fā)ocation”);
$location = $locations->item(0)->nodeValue;
}
if($location != “”)
{
echo $i.”.”.$ip;
echo ” 來自”.$location.”的網(wǎng)友”;
}
else
{
echo $i.”.”.$ip;
echo ” 來自火星的網(wǎng)友”;
}
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是一個非常棒的二維數(shù)組

其中有道和新浪的是我自己寫的,新浪API也可以像騰訊API那樣用file_get_contents()函數(shù)獲取完地址后使用一連串的字符串函數(shù)處理,我寫的函數(shù)使用正則表達式從新浪的返回結(jié)果中提供包含中文的字符串,并且分段存入一個二維數(shù)組,這個可能只是針對新浪的API有用并且存在bug。舉個例子查詢學(xué)校分配給我的IP地址后var_dump()一下函數(shù)里面的$get變量得到以下結(jié)果: array(1) { [0]=> array(6) { [0]=> string(6) “中國” [1]=> string(6) “北京” [2]=> string(6) “北京” [3]=> string(9) “教育網(wǎng)” [4]=> string(6) “學(xué)?!?[5]=> string(18) “中國地質(zhì)大學(xué)” } },而函數(shù)輸出的結(jié)果則是“中國北京北京教育網(wǎng)學(xué)校中國地質(zhì)大學(xué)”,希望我的思路和方法能對別人有用。
最后再次提醒,如果是WordPress請使用第一種方法,否則使用API同時查詢所有留言者的真實地址會讓PHP超時的,希望各路大牛有更好的方法,至于限制顯示和顯示方式等神馬的都是WordPress應(yīng)用問題,同時對于Java和C#來說思路也是一樣的,這些后續(xù)的問題等我考完試再細說。

相關(guān)文章

  • Eclipse 格式化代碼時不換行與自動換行的實現(xiàn)方法

    Eclipse 格式化代碼時不換行與自動換行的實現(xiàn)方法

    每次用Eclipse自帶的Ctrl+shift+f格式化代碼時,如果原來的一行代碼大于80列,Eclipse就會自動換為多行,這點個人感覺不是很舒服,簡單試了一下,通過以下方式可以修改
    2009-05-05
  • 詳解文法的定義與分類(編譯原理)

    詳解文法的定義與分類(編譯原理)

    計算機的語言具有嚴格的語法、語義,易于形式化的特征,這篇文章主要介紹了詳解文法的定義與分類(編譯原理),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Config服務(wù)端連接Git配置的技巧

    Config服務(wù)端連接Git配置的技巧

    今天小編抽空給大家介紹Config服務(wù)端連接Git配置的技巧,代碼分為導(dǎo)入依賴和編寫配置文件的方法,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-09-09
  • Scala 環(huán)境搭建及IDEA工具的配置使用教程

    Scala 環(huán)境搭建及IDEA工具的配置使用教程

    這篇文章主要介紹了Scala 之 環(huán)境搭建 及 工具IDEA的配置使用,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Git 命令行教程及實例教程(附github注冊)

    Git 命令行教程及實例教程(附github注冊)

    這篇文章主要介紹了Git 命令行教程及實例教程,附github注冊方法,需要的朋友可以參考下
    2017-10-10
  • 基于IntelliJ IDEA/Android Studio插件開發(fā)指南(推薦)

    基于IntelliJ IDEA/Android Studio插件開發(fā)指南(推薦)

    Android Studio是基于Intellij IDEA開發(fā)的,所以開發(fā)Android Studio的插件,其實就是開發(fā)IDEA的插件。根據(jù)官方推薦,使用IDEA IDE來開發(fā)IDEA插件,本文給大家介紹插件開發(fā)的基本流程,感興趣的朋友一起看看吧
    2021-10-10
  • 判斷所使用的瀏覽器不僅僅是電腦瀏覽器代碼整理

    判斷所使用的瀏覽器不僅僅是電腦瀏覽器代碼整理

    判斷不僅包括電腦瀏覽器,還包括安卓、ios系統(tǒng)的手機以及平板電腦,游戲系統(tǒng),覆蓋面比較廣一點,代碼書寫很規(guī)范,感興趣的你可以參考下,希望可以幫助到你
    2013-02-02
  • 三大UML建模工具Visio、Rational Rose、PowerDesign的區(qū)別比較

    三大UML建模工具Visio、Rational Rose、PowerDesign的區(qū)別比較

    UML建模工具相信大家有所了解,那么你對UML建模工具Visio 、Rational Rose、PowerDesign之間的區(qū)別和聯(lián)系是否了解,這里就像大家簡單介紹一下
    2013-02-02
  • zend studio 快捷鍵收集

    zend studio 快捷鍵收集

    zend studio 快捷鍵收集,提高開發(fā)效率。
    2009-11-11
  • 如何解決Git推送錯誤:Updates were rejected問題

    如何解決Git推送錯誤:Updates were rejected問題

    在使用Git推送更改時,可能會遇到"Updates were rejected"錯誤,這通常是由于遠程倉庫包含了本地不存在的更新,解決這一問題的步驟包括拉取遠程更改、解決沖突、提交更改及再次嘗試推送,遵循正確的步驟可以有效解決沖突,保持代碼庫的一致性
    2024-10-10

最新評論

屏东县| 茌平县| 鸡西市| 杭锦后旗| 监利县| 景东| 茂名市| 富平县| 高唐县| 万州区| 台北市| 建宁县| 丹寨县| 齐齐哈尔市| 大港区| 茶陵县| 和平县| 兴文县| 泸定县| 英超| 五台县| 任丘市| 建昌县| 伊金霍洛旗| 达州市| 沙洋县| 平江县| 福清市| 西林县| 都昌县| 张家港市| 上蔡县| 永春县| 北安市| 福州市| 凉城县| 延吉市| 鄂尔多斯市| 伊通| 洛南县| 定边县|