特定のIPアドレスから、できればISO_3166-1形式で国を取得する簡単な方法を知っている人はいますか?
15 に答える
インターネット サービスを使用する方法と、ある種のローカル リスト (おそらくライブラリにラップされている) を使用する方法の 2 つがあります。何を求めるかは、何を構築するかによって異なります。
サービスの場合:
リストの場合:
- http://www.maxmind.com/app/geoip_country (オリオンが言及)
RIR からリストをダウンロードすることで、独自のものを作成できます。
多くの人 (私の会社を含む) が MaxMind GeoIP を使用しているようです。
有料版ほど正確ではない無料版のGeoLiteがありますが、単純なものを探しているだけなら、それで十分かもしれません.
パブリックAPIを使用した無料のサービスは次のとおりです 。http ://www.hostip.info/use.html
ipinfodbは、IP から国へ、またはその逆のための無料のデータベースと API を提供します。MaxMind の無料データを使用します。データは毎月更新され、かなりの精度を備えた優れた無料の代替手段です.
http://hostip.infoサイトがどれほど正確かわかりません。そのサイトにアクセスしたところ、私の国はカナダであると報告されました。私は米国にいて、私のオフィスが使用しているISPは米国でのみ運営されています。推測を修正することはできますが、このサービスを使用して国ごとにWebサイトの訪問者を追跡している場合、データが正しいかどうかを知る方法はありません。もちろん、私は1つのデータポイントにすぎません。.csvファイルであるGeoLiteCountryデータベースをダウンロードしましたが、IPアドレスがUSとして正しく識別されました。
MaxMind製品ライン(有料または無料)のもう1つの利点は、データがあり、別のシステムにWebサービスを呼び出すことによるパフォーマンスの低下が発生しないことです。
最も正確なのはDigital Elements NetAcuity です。それは無料ではありませんが、ほとんどの場合、支払った料金を得ることができます。
このphpコードを試してください
<?php $ip = $_SERVER['REMOTE_ADDR'];
$json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
$json = json_decode($json,true);
$timezone = $json[localTimeZone];?>
これには、私のサービスhttp://ipinfo.ioを使用できます。API は、IP アドレスに関するさまざまな詳細をすべて返します。
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"loc": "37.385999999999996,-122.0838",
"org": "AS15169 Google Inc.",
"city": "Mountain View",
"region": "CA",
"country": "US",
"phone": 650
}
国コードのみが必要な場合は、URL に /country を追加するだけです。
$ curl ipinfo.io/8.8.8.8/country
US
以下は、使用できる一般的な PHP 関数です。
function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
$details = ip_details("8.8.8.8");
echo $details->city; // => Mountain View
echo $details->country; // => US
echo $details->org; // => AS15169 Google Inc.
echo $details->hostname; // => google-public-dns-a.google.com
これらの例では IP 8.8.8.8 を使用しましたが、ユーザーの IP の詳細が必要な場合は、$_SERVER['REMOTE_ADDR']
代わりに渡してください。詳細については、http://ipinfo.io/developersをご覧ください。
この質問に対して提供されている解決策を使用できます。
ただし、2 桁の国コードが返されます。
この作業を行う Web サービス API を次のように使用できます。
see example of service: http://ip-api.com and usage: http://whatmyip.info
http://www.mmtutorialvault.com/php-ip-to-country-function/の関数 ipToCountry($ip) を使用します