Yahoo!ローカルサーチAPIを活用して携帯サイトのコンテンツを充実させる

By fukumoto - 08/11/21 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

Yahooのローカルサーチを使うと、
サイトの機能を充実させることができます。
 

ちょっとやってみましょう。
 

当然のことですが、
APIなのでこちらからキーワードを投げなければ、
何も返ってくることはありません。
Yahooのローカルサーチは、その投げかけて返ってくる情報が結構豊富です。
 

まず利用するに当たって、アプリケーションIDを登録(無料)する必要があります。
簡単ですコチラからどうぞ。
 

アプリケーションIDを取得できましたらさっそく使ってみましょう。
使い方はリクエストURLを作ってそこにジャンプすればいいだけです。
 

ではリクエストURLの作り方です。
まず基本となるリクエストURLはもう決まっていますので、それを書きます。
 

http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch

 
あとはこの後ろにリクエストパラメータを好みに応じてくっつけるだけ。
リクエストパラメータの種類はコチラで見てください。
上記のコチラと同じ遷移先です。検索したものによってパラメータは自由につけて頂いて結構ですが、
ただ注意して頂きたい点もあります。
それは必須項目です。
 

当然アプリケーションIDは必須です。
先ほどのリクエストURLに”?”を入れてくっつけましょう。
 

?appid=[ココに入力]

 
くっつけたら次の必須項目です。
次の必須項目は、ちょっと変則的です。
p(検索キーワード)か、lat(緯度)・lon(経度)・dist(距離)のどちらかを必須とします。
駅とか施設をフリーワードで探したいときは、「p」。
GPSとかで取得して緯度経度が分かってて、
それをもとに検索したいなら、後者を選べばいいと思います。
 

「p」を選択する場合の注意は、挿入する前にエンコードをUTF-8にする必要があります。
 

ex.
$hoge = '検索したいワード';
$hoge = mb_convert_encoding($hoge, 'UTF-8', 'auto');

 
例では、わかりやすいように文字列を作りましたが、
フォームで送られてきた場合も原理は同じです。
 

&p=[検索ワード]

 
次に、カテゴリを選ぶことになるのですが、
住所、郵便番号、施設、駅、Yahoo!クーポンと選べるパラメータは様々です。
今回は駅を検索してみましょう。
 

&category=station

 
カテゴリにステーションパラメータを入れるだけです。
次に表示したい件数も指定しましょう。
 

&n=100

 
100件ってことです。
指定がなければデフォルトは10件です。
 

出力タイプも指定できます。
 

&o=xml

 
デフォルトはxmlですが、jsonで出力という選択肢もあるようです。
 

最後に取得する緯度経度の測地系を選ぶことになりますが、
デフォルトはtky(日本測地系)になってますが、
googleの地図とかを絡めたりすることを考えれば、
世界測地系で取ってくる方がいいでしょう。
 

&datum=wgs

 
ではここまでで、できたあがったリクエストURLを見てみましょう。
そして、それを変数$urlに入れます。
 

$url = http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch?appid=[ココに入力]&p=[検索ワード]&category=station&n=100&o=xml&datum=wgs

 
入れましたらファイルの内容を文字列に読み込む関数を使います。
 

$contents = file_get_contents($url);

 
XML文字列をオブジェクトに代入します。
 

$xml = simplexml_load_string($contents);

 
これで取得完了です。ちなみにキーワードは「心斎橋」を入れてみました。
こんなのが入ってます。
 

object(SimpleXMLElement)#47 (4) { ["Count"]=>  string(1) "1" ["ViewCount"]=>  string(1) "1" ["Query"]=>  string(9) "心斎橋" 
["Item"]=>  object(SimpleXMLElement)#48 (7) { ["Category"]=>  string(7) "Station" ["Title"]=>  string(12) "心斎橋駅" 
["Address"]=>  string(39) "大阪府大阪市中央区心斎橋筋" ["AddressLevel"]=>  string(1) "0" ["DatumTky97"]=>  object(SimpleXMLElement)#49 (2) 
{ ["Lat"]=>  string(8) "34.67166" ["Lon"]=>  string(10) "135.503138" } ["DatumWgs84"]=>  object(SimpleXMLElement)#50 (2) 
{ ["Lat"]=>  string(15) "34.674916097409" ["Lon"]=>  string(15) "135.50032880517" } ["Url"]=>  object(SimpleXMLElement)#51 (0) { } } } 

 
一つのキーワードでこれだけの情報を取得できます。
これだけあれば色んなものが作れますね。
 

$lat = $xml->Item->DatumWgs84->Lat;
$lon = $xml->Item->DatumWgs84->Lon;

 
これで駅の緯度経度が取れます。
単純にこれだけでも駅名検索になりますし、
このデータをもとに、近辺に登録しているデータを取得するプログラムを作るのもありです。
 

こんな感じにYahoo!ローカルサーチを活用して下さい!