どこどこJPを使ってみた
位置情報が欲しいなーということで、この前海外のサービスであるGeoIPについて調査したが、どうやら日本製のものもあるらしいので調べてみた。
どこどこJP
IPアドレスDBを提供する日本のサービス。
位置情報はもちろん、情報の正確度や法人からのアクセスであれば企業情報も取得可能。
これらの情報を取得するには、APIを用いて指定URLにアクセスを行う。
金額は初期費用¥50,250+¥10,250~(リクエスト数に応じて金額UP)
ただし、個人利用&非商用利用であれば無料。
APIの種類
REST APIでJSON形式のデータ取得をしてみる
まず個人利用登録して非商用利用のAPIキーを作成。
以下の様なperlソースを書いて実行。
#!/usr/bin/env perl use strict; use warnings; use LWP::UserAgent; use URI; use JSON qw(decode_json); use Encode; use utf8; sub get_docodoco_data { my $ipadr = shift; my $uri = make_request_uri($ipadr); my $ua = LWP::UserAgent->new; my $res = $ua->get($uri); die "Error: ". $res->status_line if $res->is_error; my $json = $res->content; my $ref = decode_json(encode_utf8($json)); return $ref; } sub make_request_uri { my $ipadr = shift; my $base_uri = 'http://api.docodoco.jp/v3/search'; my $api_key1 = 'APIキー1'; my $api_key2 = 'APIキー2'; my $format = 'json'; my $charset = 'utf8'; my $uri = URI->new($base_uri); my $params = { key1 => $api_key1, key2 => $api_key2, ipadr => $ipadr, format => $format, charset => $charset }; $uri->query_form(%$params); return $uri; } my $ipadr = shift; die "Error: 引数がないぞ" unless defined $ipadr; my $docodoco = get_docodoco_data($ipadr); print "CountryCode : " . $docodoco->{CountryCode} . "\n"; print "CountryAName: " . $docodoco->{CountryAName} . "\n"; print "CountryJName: " . $docodoco->{CountryJName} . "\n"; print "PrefCode : " . $docodoco->{PrefCode} . "\n"; print "PrefAName : " . $docodoco->{PrefAName} . "\n"; print "PrefJName : " . $docodoco->{PrefJName} . "\n"; print "PrefCF : " . $docodoco->{PrefCF} . "\n"; print "CityAName : " . $docodoco->{CityAName} . "\n"; print "CityJName : " . $docodoco->{CityJName} . "\n"; print "CityCF : " . $docodoco->{CityCF} . "\n"; print "CityLatitude: " . $docodoco->{CityLatitude} . "\n"; print "CityLongtude: " . $docodoco->{CityLongtude} . "\n";
結果は以下のとおり。
CountryCode : JP CountryAName: japan CountryJName: 日本 PrefCode : 13 PrefAName : tokyo PrefJName : 東京 PrefCF : 00 CityAName : shinjuku-ku CityJName : 新宿区 CityCF : 00 CityLatitude: 35.69390 CityLongtude: 139.70343
get_docodoco_dataというサブルーチン名にセンスの無さが伺えるが気にしない。
CF値が高いと信頼性も高いとのこと。
なので上記の結果は日本からのアクセスである、としか分からなかったという事ですね。
レスポンスタイムの計測
上記ソースとは別に、テキストファイルに書かれたIP一覧をリクエストをするというソースを書いて実行したところ、1件当たり20msec~30msecの時間がかかった。
計算上では1万件のログを処理しようとすると3~5分くらいかかる。
(公式では平均すると300msec以内と書かれているのは危険係数込みかな)
GeoIPとの比較
GeoIPではJapanとしか分からないIPでも、どこどこJPでは日本/東京/新宿区と詳細に取得出来ることが多々ある。
海外のIP(主にUS)だとまったく逆の結果になる。
メインターゲットが日本なのであればどこどこJPを使うべきだなぁー。