yolpのlocalsearchの説明が悪い
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/localsearch.html
リクエストパラメータ一覧のとこにはappidにしか必須がついてないのに
下の方に
API使用上の注意
appid以外に緯度経度(lat,lon),uid,cid,query,acのいずれかのパラメータが必須となります。
URLの最大の長さは2048バイトです。エンコード後のURLの長さが2048バイトを超えないようにしてください。
とかあるし、bboxも準必須?パラメータになってると嬉しいけどしょうがないのでbboxで指定しつつ、boxの中心をlat,lonに入れた
use strict; use warnings; use LWP::Simple qw/get/; use JSON; use Encode qw/encode_utf8/; my ($min_lon, $min_lat, $max_lon, $max_lat) = (139.5271, 35.4421, 139.6454, 35.4489); #中華街行きたい my $appid = "appid"; my $json = get( sprintf "http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?output=json&bbox=%s,%s,%s,%s&appid=%s&results=100&lat=%s&lon=%s", $min_lon, $min_lat, $max_lon, $max_lat, $appid, ($max_lat + $min_lat)/2, ($max_lon + $min_lon)/2 ); my $hash = decode_json($json); for my $feature (@{$hash->{Feature}}) { if ( defined $feature->{Geometry} and $feature->{Geometry}->{Type} eq "point" ) { my ($lon, $lat) = split ",", $feature->{Geometry}->{Coordinates}; my $name = encode_utf8($feature->{Name}); unless ( $min_lat < $lat and $lat < $max_lat and $min_lon < $lon and $lat < $max_lon ) { warn $name . " is out bbox..."; } else { warn $name; } } }
こんな感じで確かめた。