方法 1 は、純粋な IP データベースを使用することです。欠点は、更新が少し遅いことです。 方法 2: ポータル Web サイトのインターフェイスを使用する 現在、Tencent、Sina、NetEase、Sohu、Google が IP アドレスクエリ API を提供していることがわかっていますが、Tencent、Sina、NetEase のみが Google Maps を使用しているようですので調べていません。国内の Tencent サービスをいくつか調べたところ、JavaScript が提供されており、NetEase は XML を提供しており、XML 以外のデータ ソースは JavaScript 呼び出しであるか PHP 呼び出しであるかに関係なく、すべて GBK 形式であることに注意してください。エンコーディングを変換する必要があります。そうしないと、コードが文字化けします。さらに注意が必要なのは、一度に複数の IP をクエリする場合、ポータルの API を使用してクエリを実行すると、PHP を使用して XML を解析するか、file_get_contents() 関数を使用してクエリを取得するかにかかわらず、おそらく for ループを作成して試してみたことです。コンテンツを使用すると、10 回を超えるクエリが非常に遅くなり、タイムアウトになる場合もあります。 Tencent の IP アドレス API インターフェイス アドレス: http://fw.qq.com/ipaddress、返されるデータ形式は次のとおりです: var IPData = new Array("123.124.2.85","","Beijing","" );, JavaScript オブジェクトであるため、IP クエリを入力する方法はまだ不明です。 Sina の IP アドレスクエリインターフェイス: http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js Sina マルチリージョンのテスト方法: http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=123.124.2.85 NetEase Youdao の IP アドレス クエリ インターフェイス: http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85 JS コードを使用して Tencent の API インターフェイスを呼び出します。
- < ;script>document.write("Your IP is: "+IPData[0]+", from: "+IPData[2]);
- //Tencent 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);
- //クエリ インターフェイスを呼び出すには、Web ページをクロールする必要があります。1 つ目は、curl、2 つ目は、
- //file_get_contents、3 つ目は、fopen->fread-> です。 ;fclose 、2 番目の方法をお勧めします
- /*
- *Tencent 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("@(.*)@iU",$result,$ipArray);
- $loc = $ipArray[1] ;
- return $loc;
- }
//Tencent インターフェイスに従って IP アドレスをクエリし、file_get_contents を使用して Web ページを取得します
- 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("@(.*)@iU",$result,$ipArray );
- $loc = $ipArray[1];
- return $loc;
- }
- //Tencent インターフェイスに従って IP アドレスをクエリし、fopen->fread->fclose を使用して Web ページを取得します
- function getIPLoc( $queryIP){
- $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
- $handle = fopen ("$url", "rb");結果 = "";
- $data = fread($handle, 1024);
- if (strlen($data) == 0) {
- ブレーク;
- }
- $result .= $data; true);
- $result = mb_convert_encoding($result, "utf-8" , "gb2312"); // エンコーディング変換、それ以外の場合は文字化けします
- preg_match("@(.*)< ;/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: WINDOWSsystem32 にコピーします。Linux では、curl
- 拡張機能をインストールします* * ***/
- //5 番目と 6 番目の Sina クエリ 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;
- }
- //Youdao 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."." 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 は優れた 2 次元配列です
コードをコピーしてください
Sina API は、Tencent API と同様に file_get_contents() 関数を使用してアドレスを取得し、それを処理するために正規表現を使用して、Sina の返された結果から中国語を含む文字列を提供し、それらを 2 次元に保存することもできます。これは Sina の API にのみ役立つ可能性があり、バグが含まれている可能性があります。
たとえば、学校から割り当てられた IP アドレスをクエリした後、var_dump() 関数で $get 変数を使用して次の結果を取得しました。 array(1) { [0]=> array(6) { [0]=> string(6) "中国" [1]=> string(6) "北京" [2]=> string(6) "北京" [3]=> string(9) "Education Network" [4]=> string(6) "School" [5]=> string(18) "中国地質大学" } }、および関数の結果出力は「北京教育ネットワーク学校中国地質大学、北京、中国」です。私のアイデアや方法が他の人に役立つことを願っています。
|