Perlでタイムゾーンや国名を緯度経度から取得する方法
Instagram APIが緯度経度しか返さなくて、エポックタイムじゃ現地時間がわからない。。 ということで、タイムゾーン(他の情報も)を取得してみようと思います。
調べたら、Geonames.orgという団体がフリーで提供しているようです。
これを使います。
1. ユーザ登録
http://www.geonames.org/loginに行き、ユーザを作ります。
2. Freeで使うためにアクティベート
少し分かりにくいですが、http://www.geonames.org/manageaccount の一番したのリンクをクリックしてアクティベートします。
3. Geo::Geonamesをインストールして使う
Perldocそのままですが、下記のように使います。ポイントはstyle='FULL'で全情報をとってくることですね。
use Geo::Geonames; my $geo = new Geo::GeoNames(username => 'my_username'); my $place = $geo->find_nearby_placename( lat => $lat, lng => $lng, style => 'FULL' ); print Dumper $place; ### output $VAR1 = [ { 'toponymName' => 'Hiyoshi', 'lat' => '35.55601', 'adminCode2' => '1859635', 'fcode' => 'PPL', 'adminName1' => 'Kanagawa', 'fcodeName' => 'populated place', 'adminName2' => 'Kawasaki Shi', 'continentCode' => 'AS', 'countryName' => 'Japan', 'fclName' => 'city, village,...', 'fcl' => 'P', 'elevation' => '0', 'adminCode1' => { 'content' => '19', 'ISO3166-2' => '14' }, 'population' => {}, 'distance' => '1.04355', 'adminName3' => 'Nakahara Ku', 'alternateName' => { 'content' => "\x{65e5}\x{5409}", 'lang' => 'ja' }, 'timezone' => { 'gmtOffset' => '9.0', 'content' => 'Asia/Tokyo', 'dstOffset' => '9.0' }, 'countryCode' => 'JP', 'adminCode3' => '7470874', 'geonameId' => '1862322', 'name' => 'Hiyoshi', 'alternateNames' => "Hiyoshi,Hiyoshicho,Hiyoshich\x{14d},ri ji,\x{65e5}\x{5409}", 'lng' => '139.64289' } ];