IPアドレスとロケーション情報


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のコードはこんな感じ。

<?php
    //(例)
    $ip = "118.5.8.135";
    
    require_once("Net/GeoIP.php");
    require_once("Net/GeoIP/Location.php");
    
    $geoipCountry = Net_GeoIP::getInstance("./data/GeoIP.dat",Net_GeoIP::MEMORY_CACHE);
    
    echo "CountryName: " . $geoipCountry->lookupCountryName($ip) . "<br>";
    echo "CountryCode: " . $geoipCountry->lookupCountryCode($ip) . "<br>";
    
    $geoipCity = Net_GeoIP::getInstance('./data/GeoLiteCity.dat');
    
    $geoLocation = $geoipCity->lookupLocation($ip);
    
    echo "都市" . $geoLocation->city . "<br>";
    echo "緯度" . $geoLocation->latitude . "<br>";
    echo "経度" . $geoLocation->longitude . "<br>";
?>
(例)の結果はこうなりました。

CountryName: Japan

CountryCode: JP

都市Tokyo

緯度35.685

経度139.7514

 

では、あなたのIPアドレスの場合はどうでしょう。

あなたのIP:54.160.245.121

MaxMindで取得したロケーション情報はこんな感じです。

CountryName: United States
CountryCode: US
都市Woodbridge
緯度40.5525
経度-74.2915

IPInfoDB

これはマレーシアのベンダーが提供するWebサービスです。

登録すればAPIキーをもらえて、これを使ってサービスにアクセスします。

ただし、登録するには、ご自分のサーバー(レンタルでOK)とこのドメインを持ったメール・アカウントが必要なようです。

このサーバーのIPとメールのドメインが対応していないとはねられます。

で、これを使ってみます。

書式はこうです。

http://api.ipinfodb.com/v3/ip-city/?key=<APIキー>&ip=<IPAddress>

使ってみると、Webサービスとして提供されているだけにDBが更新されているのか、MaxMindより正確なようです。


CountryCodeを使えばWebページの多言語表示もできる……….と思います。


他にも

IP2Location LITE
Xhanch

などがあります。

IP2LocationLiteはDataBase型です。頻繁にアップデートされていてメールで通知されるのですが、頻繁すぎてメンテが面倒です(^^)。

XhanchはWebサービス型。
興味があれば使ってみてください。


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*