今機能を追加をしているサイト、世界の絶景サイトで、googlemapとの連携を実装しました。
その際に、住所情報から、緯度、経度を取得するためのスクリプトを作ったのでいかに記載します。
スクリプトは以下のとおり。まずは見て下さい。
#!/usr/bin/perl use strict; use warnings; use LWP::Simple; use XML::Simple; use Data::Dumper; use utf8; my $country ="the country you want to look into"; my $title="the place you want to look into"; my $base = "http://www.geocoding.jp/api/?v=1.1&q="; my $query = "${country} ${title}"; my $res = get ($base.$query); $res = XML::Simple::->new()->XMLin($res); #print Dumper $res; my $latitude = $res->{coordinate}->{lat}; my $longitude = $res->{coordinate}->{lng}; my $address = $res->{google_maps}; printf ("lat: %f\n", $res->{coordinate}->{lat}); printf ("lng: %f\n", $res->{coordinate}->{lng}); printf ("address: %s\n", $res->{google_maps}); sleep 5;
見ての通り、GeoCodingAPIを使っています。
webAPIがあるので、そこにアクセスしています。googleにも同じようなAPIがあるので、そっちを使えば良かったのですが、気づくのが遅くて、こっちでスクリプト作ってしまったので、まあいいかとおもってます。
API側で多くのアクセスは許可されていないのが問題
最初、ガンガンAPIをたたいていたのですが、突然、エラーが帰ってくるようになってきました。
なんでだろう~とおもって、API製作者のtwitterみてみたら、5秒に一回未満のアクセスをお願いしますと注意喚起しているのを見つけました。
当サービスからHTTPエラーコード403が返されたら「アクセス頻度高すぎ」によるアクセス拒否です。24時間ぐらい経つと解除されるはずですが、再び頻度が多すぎれば即拒絶するツンデレ仕様です。なお、改善される見込みないなーとこちらが判断した場合は恒久的に拒否となります。ご了承ください
— Geocoding.jp (@Geocoding_jp) September 9, 2013
そのため、僕のスクリプトに書いている通り、sleep5は忘れないようにお願いします。
ちなみに、僕は上記のスクリプトを一部変えて、DBに情報を保存するようにしています。