IPアドレスからそれっぽい位置情報を取得したい気がしてきたのでちょっと調べた。
調べたら、MaxMindなるものがあるらしい。
https://www.maxmind.com/ja/home
しかも、よくよく調べてみると無料っぽいのもあるではないか!便利!
http://dev.maxmind.com/geoip/geoip2/geolite2/
gemで探してみたらあった。
https://github.com/da4nik/geoip2
https://github.com/YotpoLtd/geoip2
geoip2が2つあったが、da4nik/geoip2はCライブラリに依存していていろいろ出来、
YotpoLtd/geoip2は、pure rubyでapiにのみ対応しているようだった。
ちなみにrubygemsにあがっているのは、YotpoLtd/geoip2だった。
登録せずに無料で使える http://dev.maxmind.com/geoip/geoip2/geolite2/ のバイナリを試したかったので、
上の https://github.com/da4nik/geoip2 を使ってみる。
他のPythonとかのライブラリも同様なのだけど、 https://github.com/maxmind/libmaxminddb が必須で、インストールしておく必要がある。
brew install libmaxminddb
# Gemfile source 'https://rubygems.org' gem 'geoip2', github: 'da4nik/geoip2' # test.rb require 'geoip2' require 'pp' GeoIP2::file './GeoLite2-City.mmdb' # ダウンロードしてきて解凍したヤツ GeoIP2::locale 'en' # デフォルトがロシア語なので気をつける city = GeoIP2::locate '77.93.127.33' pp city __END__ {"city"=>"Tambov", "city_geoname_id"=>484646, "country"=>"Russia", "country_geoname_id"=>2017370, "country_code"=>"RU", "continent"=>"Europe", "continent_code"=>"EU", "continent_geoname_id"=>6255148, "subdivision"=>"Tambovskaya Oblast'", "subdivision_code"=>"TAM", "subdivision_geoname_id"=>484638, "postal_code"=>nil, "latitude"=>52.731700000000004, "longitude"=>41.4433, "time_zone"=>"Europe/Moscow"}
なるほど。
Perl版とかもあって、それっぽく使える。(SYNOPSISコピペ)
use GeoIP2::Database::Reader; my $reader = GeoIP2::Database::Reader->new( file => '/path/to/database', locales => [ 'en', 'de', ] ); my $omni = $reader->omni( ip => '24.24.24.24' ); my $country = $omni->country(); say $country->is_code();
参考URL