[Java] [Geolocation] GeoIP

スポンサーリンク

環境

Mountain Lion 10.8.2
Oracle Java SE 7u11

手順

データベースの入手

MaxMind が提供しているデータベースを使用して IP アドレスから国情報等を取得してみます.

GeoIP Databases は有償なので,無償の GeoLite Databases を使用してみます.
なお、GeoLite Databases のライセンスは,ここ に Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) との記載があります.
(2013-01-14 時点)

GeoLite Database へのリンクは,MixMind (http://www.maxmind.com) – PRODUCTS – GeoIP databases となります.

そこで表示される GeoIP databases and web services ページの GeoLite Databases のリンクをクリックします.
サイトの右下に GeoLite City and Country (Free geolocation data) リンクが張られています.

Screen Shot 2013-01-14 at 1.41.00 PM

GeoLite Free Downloadable Databases において,下記の 4 つのデータベースをダウンロードします.

GeoLite Country
GeoLite Country IPv6
GeoLite City
GeoLite City IPv6 (Beta)

Binary / gzip をダウンロードしてみます.

Screen Shot 2013-01-14 at 1.24.40 PM

ダウンロードしたデータベースを解凍し,適当な場所に配置します.

$ sudo mkdir /usr/local/share/GeoIP
$ sudo mv GeoIP.dat /usr/local/share/GeoIP/
$ sudo mv GeoIPv6.dat /usr/local/share/GeoIP/
$ sudo mv GeoLiteCity.dat /usr/local/share/GeoIP/
$ sudo mv GeoLiteCityv6.dat /usr/local/share/GeoIP/

なお,データベースは毎月最初の火曜日に更新されるとのことです.

The GeoLite databases are our free IP geolocation databases. They are updated on the first Tuesday of each month.
http://dev.maxmind.com/geoip/geolite

API

データベースを扱うための API をダウンロードします.
GeoIP Downloadable Databases の Accessing the Database を確認します.
C, Perl, Python, Ruby, PHP, Java, C# など様々な言語に対応しています.
Java で使用する場合は,Java 用の API をダウンロードします.
Java API のダウンロードリンク LGPL-licensed Java library から,2013-01-14 時点で最新の GeoIPJava-1.2.8.zip をダウンロードします.

$ cd /path/to/GeoIPJava-1.2.8

ひとまず LICENSE を読みます.
その後 README を読みます.

README に書かれている To get started, run を行います.

$ cd source/com/maxmind/geoip/
$ javac *.java

コンパイルされた class ファイルを jar ファイルとしてまとめます.
README の To generate the JAR file, cd to the source directory and run に書かれていることを行います.
API を解凍したディレクトリの source ディレクトリで行います.

$ cd /path/to/GeoIPJava-1.2.8/source
$ jar cf maxmindgeoip.jar com/maxmind/geoip/Country.class com/maxmind/geoip/DatabaseInfo.class com/maxmind/geoip/Location.class com/maxmind/geoip/LookupService.class com/maxmind/geoip/Region.class com/maxmind/geoip/regionName.class com/maxmind/geoip/timeZone.class

maxmindgeoip.jar が生成されます.

使い方

GeoIPJava-1.2.8 フォルダの最上位階層にある *.java ファイルがテストプログラムなので,それを参考にします.
基本的なことであれば,maxmindgeoip.jar を Build Path に add して,サンプルプログラムの内容をコピペすればいけそうです.

なお,無償の GeoLite Databases の場合に参考にできそうなのは下記の 4 つだろうと思います.
下記以外のサンプルプログラムでは有償の GeoIP Databases が必要となるようです.
とはいえ,下記の 4 つのサンプルプログラムだけでも多くの有益な情報を得ることが可能です.

CityLookupTest.java
CityLookupTestV6.java
CountryLookupTest.java
CountryLookupTestV6.java

Maven

作成した maxmindgeoip.jar を Maven で使えるようにしてみます.
例えば下記のようにします.

$ mvn install:install-file -Dfile=/path/to/maxmindgeoip.jar -DgroupId=com.example -DartifactId=geoip -Dversion=1.2.8 -Dpackaging=jar -DgeneratePom=true

.

[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install-file (default-cli) @ standalone-pom ---
[INFO] Installing /usr/local/lib/maxmindgeoip.jar to /Users/user/.m2/repository/com/example/geoip/1.2.8/geoip-1.2.8.jar
[INFO] Installing /var/folders/k3/aaaaa/T/mvninstall11111.pom to /Users/user/.m2/repository/com/example/geoip/1.2.8/geoip-1.2.8.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.669s
[INFO] Finished at: Mon Jan 14 15:53:24 JST 2013
[INFO] Final Memory: 5M/122M
[INFO] ------------------------------------------------------------------------

実際に使用する際は,Maven プロジェクトの pom.xml の dependencies に追加します.

<dependency>
  <groupId>com.example</groupId>
  <artifactId>geoip</artifactId>
  <version>1.2.8</version>
</dependency>