地域固有のWebサイトコンテンツを作成するために、IPアドレスを郵便番号と都市に変換するのに役立つオープンAPIまたはサードパーティ製品のアドバイスを探しています。
私が使用しているのはip2nation: http://www.ip2nation.com
これは、IPから国へのマッピングの完全に無料のMySQLデータベースです。彼らのサイトにはいくつかのサンプルPHPスクリプトが含まれています。
WordPress=ブログとOzhの無料 IP to Nation WordPressプラグイン
WordPressを使用していない場合でも、プラグインをダウンロードすると、データベースにアクセスするためのPHPコードの適切なセットが提供されます。国名の横に、または国名の代わりに表示します。これは、ブログのコメント投稿者の名前の横に自動的にフラグを表示するために行います。
本当に、このためのAPIは必要ありません。必要なのは、データベースと、それにアクセスするためのPHPとSQLコードを記述する機能のみです。
カジュアルな使用にはip2locationをお勧めしません。彼らはデータベースに多くの費用をかけており、データベースは非常に大きく、ほとんどの人が必要とするよりも詳細になっています。
ただし、ip2nationは国レベルにのみ移動します。都市と郵便番号が必要な場合(他の回答/コメントが述べているように間違っている可能性があるという事実にもかかわらず)、ip2locationに加えて、 GeoBytesを試すことができます 。 GeoSelectなど、地理固有のWebサイトコンテンツに特に適したコンポーネントがあります。 http://www.geobytes.com/GeoSelect.htm
私が見つけた最良の(統合が簡単で無料の)方法が利用可能です こちら 。このサービスは完全に無料で、ローカルインストールを必要とせず、サイトにバナーを配置することを強制しません(IP2Locationとは異なります)。唯一の制限であるクエリ制限は非常に合理的です。2秒ごとにクエリを実行でき、より頻繁にクエリを実行しても、結果が少し遅くなります。楽しい!
IP2Location
IPアドレスから場所を取得したいすべてのユーザーが、この小さなコードを使用して適切なソリューションを得られることを願っています。
$ip_addr = $_SERVER['REMOTE_ADDR'];
$geoplugin = unserialize( file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip_addr) );
if ( is_numeric($geoplugin['geoplugin_latitude']) && is_numeric($geoplugin['geoplugin_longitude']) ) {
$lat = $geoplugin['geoplugin_latitude'];
$long = $geoplugin['geoplugin_longitude'];
}
Geocoder.ca は、IPアドレスに関する多くの情報を提供します(北米のみ)。例 http://geocoder.ca/99.229.2.190?geoit=xml (サポートgeoit = jsonおよびjsonp)
<result>
<geodata>
<latt>43.623262</latt>
<longt>-79.749543</longt>
<city>MISSISSAUGA</city>
<prov>ON</prov>
<postal>L5N7Z9</postal>
<stnumber>1837</stnumber>
<staddress>Samuelson CIR</staddress>
<TimeZone>America/Toronto</TimeZone>
<AreaCode>289</AreaCode>
<confidence>1</confidence>
<intersection>
<street1>Samuelson Cir</street1>
<street2>Stockbridge Crt</street2>
<lattx>43.622696</lattx>
<longtx>-79.748706</longtx>
<city>MISSISSAUGA</city>
<prov>ON</prov>
<distance>0.179</distance>
</intersection>
</geodata>
</result>
以下は、 http://ipinfodb.com/ip_locator.php を使用して情報を取得するスニペットの修正版です。 APIキーを一緒に申請し、APIを直接使用して、必要に応じて提供された情報を取得することもできます。 http://ipinfodb.com/ip_location_api.php を見るとわかるように、PHPからJavaScript、ASP.Netまで、すべてにサンプルがあります。以下はキーを必要としません。公開ページと正規表現がページを介してプルされ、指定された情報を取得します。キーは無料です。
function detect_location($ip=NULL, $asArray=FALSE) {
if (empty($ip)) {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }
else { $ip = $_SERVER['REMOTE_ADDR']; }
}
elseif (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost') {
$ip = '8.8.8.8';
}
$url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
$i = 0; $content; $curl_info;
while (empty($content) && $i < 5) {
$ch = curl_init();
$curl_opt = array(
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 1,
CURLOPT_REFERER => 'http://' . $_SERVER['HTTP_Host'],
);
if (isset($_SERVER['HTTP_USER_AGENT'])) $curl_opt[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
curl_setopt_array($ch, $curl_opt);
$content = curl_exec($ch);
if (!is_null($curl_info)) $curl_info = curl_getinfo($ch);
curl_close($ch);
}
$araResp = array();
if (preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs)) $araResp['city'] = trim($regs[1]);
if (preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs)) $araResp['state'] = trim($regs[1]);
if (preg_match('{<li>Country : ([^<]*)}i', $content, $regs)) $araResp['country'] = trim($regs[1]);
if (preg_match('{<li>Zip or postal code : ([^<]*)</li>}i', $content, $regs)) $araResp['Zip'] = trim($regs[1]);
if (preg_match('{<li>Latitude : ([^<]*)</li>}i', $content, $regs)) $araResp['latitude'] = trim($regs[1]);
if (preg_match('{<li>Longitude : ([^<]*)</li>}i', $content, $regs)) $araResp['longitude'] = trim($regs[1]);
if (preg_match('{<li>Timezone : ([^<]*)</li>}i', $content, $regs)) $araResp['timezone'] = trim($regs[1]);
if (preg_match('{<li>Hostname : ([^<]*)</li>}i', $content, $regs)) $araResp['hostname'] = trim($regs[1]);
$strResp = ($araResp['city'] != '' && $araResp['state'] != '') ? ($araResp['city'] . ', ' . $araResp['state']) : 'UNKNOWN';
return $asArray ? $araResp : $strResp;
}
detect_location();
// returns "CITY, STATE" based on user IP
detect_location('xxx.xxx.xxx.xxx');
// returns "CITY, STATE" based on IP you provide
detect_location(NULL, TRUE); // based on user IP
// returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["Zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.Host.name.net" }
detect_location('xxx.xxx.xxx.xxx', TRUE); // based on IP you provide
// returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["Zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.Host.name.net" }
Rubyで...これらは手順です
gem install geocoder
_Rubyスクリプトでは、これらの行があります。
_require "geocoder"
_
puts Geocoder.address('76.95.251.102');
// IPアドレスを適宜変更します。
_output: Bellflower, CA 90706, United States
_