IPアドレスを使って、ロケーションを判定してみます。
いくつかあるなかで2つ試してみましょう。
MaxMind (DataBase)
IPInfoDB (WebService)
【MaxMind】
参照:GeoIP2
MaxMindはご自分のサーバーにデータベースを造ってサービスを構築するやり方です。
PEARを使ってやってみます。
サーバーはさくらインターネットの共用レンタル。
必要なのはGeoIPのライブラリのインストールと、データベースのアップロードです。
SSHを使って、PEAR用のGeoIPである、Net_GeoIPをインストールします。
やりかたはここを参照。
SSHでログインしたら、以下のコマンドをたたきます。
pear install Net_GeoIP
以下のコマンドで確認。
pear list
さくらインターネットの場合、/home/<ユーザー名>/pear/PEAR/Netの直下にインストールされています。
データベースをアップロードします。
サーバーのWebルートに適当なフォルダーを造っておきます(dataとか….)。
データベースがあるのはここ。
Binary/gzipの中から、GeoLite CountryとGeoLite Cityをダウンロード。
で、FFFTPなんかで、サーバーのフォルダー(data)にアップロードしておきます。
PHPのコードはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="tag"><?php</span> <span class="rem">//(例)</span> <span class="variable">$ip</span> = <span class="str">"118.5.8.135"</span>; <span class="keyword">require_once</span>(<span class="str">"Net/GeoIP.php"</span>); <span class="keyword">require_once</span>(<span class="str">"Net/GeoIP/Location.php"</span>); <span class="variable">$geoipCountry</span> = Net_GeoIP::getInstance(<span class="str">"./data/GeoIP.dat"</span>,Net_GeoIP::MEMORY_CACHE); <span class="keyword">echo</span> <span class="str">"CountryName: "</span> . <span class="variable">$geoipCountry</span>->lookupCountryName(<span class="variable">$ip</span>) . <span class="str">"<br>"</span>; <span class="keyword">echo</span> <span class="str">"CountryCode: "</span> . <span class="variable">$geoipCountry</span>->lookupCountryCode(<span class="variable">$ip</span>) . <span class="str">"<br>"</span>; <span class="variable">$geoipCity</span> = Net_GeoIP::getInstance(<span class="str">'./data/GeoLiteCity.dat'</span>); <span class="variable">$geoLocation</span> = <span class="variable">$geoipCity</span>->lookupLocation(<span class="variable">$ip</span>); <span class="keyword">echo</span> <span class="str">"都市"</span> . <span class="variable">$geoLocation</span>->city . <span class="str">"<br>"</span>; <span class="keyword">echo</span> <span class="str">"緯度"</span> . <span class="variable">$geoLocation</span>->latitude . <span class="str">"<br>"</span>; <span class="keyword">echo</span> <span class="str">"経度"</span> . <span class="variable">$geoLocation</span>->longitude . <span class="str">"<br>"</span>; <span class="tag">?></span> |
1 |
<span class="rem">(例)</span>の結果はこうなりました。 |
CountryName: Japan
CountryCode: JP
都市Tokyo
緯度35.685
経度139.7514
では、あなたのIPアドレスの場合はどうでしょう。
あなたのIP:[myipaddress]
MaxMindで取得したロケーション情報はこんな感じです。
[mygeolocationMaxMind]
【IPInfoDB】
これはマレーシアのベンダーが提供するWebサービスです。
登録すればAPIキーをもらえて、これを使ってサービスにアクセスします。
ただし、登録するには、ご自分のサーバー(レンタルでOK)とこのドメインを持ったメール・アカウントが必要なようです。
このサーバーのIPとメールのドメインが対応していないとはねられます。
で、これを使ってみます。
書式はこうです。
http://api.ipinfodb.com/v3/ip-city/?key=<APIキー>&ip=<IPAddress>
使ってみると、Webサービスとして提供されているだけにDBが更新されているのか、MaxMindより正確なようです。
CountryCodeを使えばWebページの多言語表示もできる……….と思います。
他にも
などがあります。
IP2LocationLiteはDataBase型です。頻繁にアップデートされていてメールで通知されるのですが、頻繁すぎてメンテが面倒です(^^)。
XhanchはWebサービス型。
興味があれば使ってみてください。
Leave a Reply