楽天APIでCD検索、Google Maps APIとでMashup!

楽天APIが楽天WEBSERVICEにて公開されています。

http://webservice.rakuten.co.jp/
どーせ、Amazonと同じでしょ。と思っていたのですが、商品検索だけではなくてホテル検索などもあったりします。試してみる価値はあると思いました。

APIを使うにはDeveloperIdが必要になります。DeveloperIdは無料で以下から登録できます。

http://webservice.rakuten.co.jp/regist/
次にFAQに目を通します。

http://webservice.rakuten.co.jp/faq/
結構細かい規定があります。

– 1デベロッパーIDにつき、1秒に1回以下のリクエストとすべし
-> 複数IDをとってラウンドロビンで使えば良いのかな?
– データのキャッシュは商品の価格情報、および販売可能情報は24時間以内に、その他の情報は3か月間以内に制限すべし
– 価格情報または販売可能情報は少なくとも1週間に1回は更新すべし
– 1時間に1回以上データを更新しない場合は、価格情報または在庫情報等の情報に隣接した位置に更新時刻・日時を記載すべし
といったように、めまぐるしく変わるであろう価格情報などを守るためにDeveloperに対して細かい指示がしてあります。このあたりは楽天らしいというか、しかしkwは若干引いております。。。

・・・気を取り直して進めます。

APIのドキュメントは以下で公開されています。

http://webservice.rakuten.co.jp/document/index.html
・ 楽天商品検索API
・ 楽天ジャンル検索API
・ 楽天商品コード検索API
・ 楽天書籍検索API
・ 楽天CD検索API
・ 楽天DVD検索API
・ 楽天カタログ検索API
・ 楽天トラベル施設検索API
・ 楽天トラベル施設情報API
・ 楽天トラベル空室検索API
・ 楽天トラベル地区コードAPI
・ 楽天トラベルキーワード検索API
とたくさんのAPIがありますが、実際には使い方は同じで
http://api.rakuten.co.jp/rws/[version]/[schema]?[parameter]=[value]…
で、parameterの中に各APIごとに異なるoperaionを指定するだけです。もちろんAPIごとに必要なparameterやresponseは異なるのでドキュメントには目を通しましょう。

楽天CD検索API と楽天トラベル施設検索API を使ってとりあえず作成したのが以下です。

http://labs.makotokw.com/s/sandbox/rakuten
しょぼいページですが、一応地図上のマーカーをクリックするとホテルの情報を表示できるようにしました。

PEARのHTTP_RequestとXML_Unserializerを使っただけでたいしたことはしていません。ドキュメントの例の通り、CD検索では”SMAP”を、トラベル施設検索では”東京駅から1km内”を検索しています。

楽天トラベル施設検索APIとGoogle Maps APIを組み合わせるときは座標の変換が必要です。すでにいくつかの方が情報を載せておられますが、楽天APIでは日本測地系を使っており、Google Maps APIでは世界測地系です。

変換には3600で割って(秒->度の変換)以下の計算式に当てはめます。

世界測地系緯度 = 日本測地系緯度 – 0.00010695 * 日本測地系緯度 + 0.000017464 * 日本測地系経度 + 0.0046017
世界測地系経度 = 日本測地系経度 – 0.000046038 * 日本測地系緯度 – 0.000083043 * 日本測地系経度 + 0.010040

コードのがわかりやすいと思うのでJavaScriptの一部分を抜粋します。

var slat = hotel["latitude"]/3600;
var slon = hotel["longitude"]/3600;
var dlat = slat - slat * 0.00010695 + slon * 0.000017464 + 0.0046017;
var dlon = slon - slat * 0.000046038 - slon * 0.000083043 + 0.010040;
var gpoint = new GLatLng(dlat, dlon);

今回は静的な検索しかしていないですが、ユーザの入力を元に検索するようにすれば面白いものが作れるのではないでしょうか。