私のアプリケーションは、ユーザーの IP アドレスを知っています。ユーザーの都市、州、国、およびユーザーの緯度と経度を特定する必要があります。
これを行うことができるJavaライブラリはありますか?
何もない場合、IP アドレスを地理的位置に変換するために使用されるアルゴリズムまたはデータ ソースは何ですか?
http://www.maxmind.com/app/developersは、IP アドレスから位置情報を計算するためのローカル データベースと Java クラスを提供します。私はいくつかのテストを行いました。結果は良好のようです。
bbc.co.uk: 212.58.241.131 : 51.283295,-0.23330688;Tadworth,N7,United Kingdom,null
home: 76.126.242.196 : 37.369705,-122.0214;Sunnyvale,CA,United States,94086
google.com: 74.125.224.133 : 37.419205,-122.0574;Mountain View,CA,United States,94043
tcs.in: 202.71.129.225 : 28.666702,77.216705;Delhi,07,India,null
ebay.com: 66.135.205.13 : 37.280304,-121.956696;Campbell,CA,United States,95008
etrade.com: 12.153.224.22 : 34.091797,-84.2209;Alpharetta,GA,United States,30005
whitehouse.gov: 72.247.136.110 : 42.362595,-71.0843;Cambridge,MA,United States,02142
私が使用したjunitテストケースGeoLiteCityTest.javaへのリンクは次のとおりです。
MaxMind は Java クラスを提供しますが、jar は提供しません。そのため、コードをビルドして jar を生成できる Maven プロジェクトを作成しました。GitHub プロジェクトはこちらhttps://github.com/snambi/GeoIP
Maven プロジェクトでこのライブラリを使用する必要がある場合は、次の依存関係を追加します。
<dependency>
<groupId>org.geomind</groupId>
<artifactId>geoip</artifactId>
<version>1.2.8</version>
</dependency>
pom.xml の「repositories」の下に、次のリポジトリ構成を追加します。
<repository>
<id>geoip</id>
<url>http://snambi.github.com/maven/</url>
</repository>
はい: http://www.maxmind.com/app/developers
それらは Java API を (とりわけ) 提供します。
IPInfoDBを使用して位置情報を取得する単純なライブラリを Scala で作成しました。これは、クラスパスに scala-library.jar を含める限り、Java からも使用できます。IPInfoDB からの API キーが必要です。JSON、raw、または XML 形式で出力を取得できます。
コードとその他のドキュメントは私のGithubにあり、ダウンロード用のjarもあります。
「都市」解像度で地理情報を取得する Java スニペットを次に示します。
GeoIP geoip = new GeoIP("<API Key>");
//Note the $.MODULE$ syntax to refer to the case class in Scala.
System.out.println(geoip.getGeoRaw("<IP Address>", City$.MODULE$));
この例OK;;0.0.0.0;US;UNITED STATES;DISTRICT OF COLUMBIA;WASHINGTON;20001;38.9048;-77.0354;-05:00
では、解析可能な生の出力を出力します。
この質問も参照してくださいJavaでジオロケーションを取得する最良の方法