PHP(Laravel)で楽天トラベル施設検索APIを使った宿泊施設検索を行ったときの記録。
楽天ウェブサービスとは
楽天ウェブサービスは、無料で利用できる楽天の公開情報を取得できるAPIサービス。
楽天の楽天トラベル施設検索APIドキュメント
▼楽天の楽天トラベル施設検索APIドキュメント
https://webservice.rakuten.co.jp/api/simplehotelsearch/
API利用方法
ヘッダメニューの「アプリID発行」リンクから、アプリIDを発行する
アプリIDをつけて、以下のようなURLにアクセスすると、
「東京駅の半径1Km圏内の宿の検索結果がXML形式で返される。
https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426?
applicationId=[アプリID]
&format=xml
&latitude=128440.51
&longitude=503172.21
&searchRadius=1
やりたいこと
ある場所(緯度・経度で指定)から半径3km圏内にある宿泊施設を調べたい。
リクエストパラメータについて
リクエストパラメータは色々あるが、以下の項目を考慮してAPI呼び出しを行うといい感じだった。
項目名 | パラメーター | デフォルト | 備考 | |
アフィリエイトID | affiliateId | 指定無し | IDを指定すると、施設情報ページURLなどのURL全般がアフィリエイトURLで返される。 | |
レスポンス形式 | format | json | json か xml を選択可。 json を選択した場合、 callback パラメーター指定により jsonp 形式にすることも可能。 | |
出力フォーマットバージョン | formatVersion | 1 | 出力フォーマットのバージョン指定。 2 を指定すると、JSONの出力方法が改善されて参照しやすくなる。 | |
緯度 | latitude | 緯度を指定。 | ||
経度 | longitude | 経度を指定。 | ||
緯度経度タイプ | datumType | 入力及び出力パラメータの緯度経度タイプを指定。 1:世界測地系、単位は度。 2:日本測地系、単位は秒。 | ||
検索半径 | searchRadius | 緯度経度検索時の検索半径(単位km) 0.1以上、3.0以下であり、小数点以下は1桁までであること | ||
1ページあたりの取得件数 | hits | 30 | 1ページ毎の取得件数を制限するパラメータ。 1以上、30以下の整数であること。 | |
施設画像サイズ | hotelThumbnailSize | 2 | 出力パラメータの施設画像サムネイルURLの画像サイズを指定する。 1:小 60 x 60 2:中 80 x 80 3:大 200 x 200 <!>あとがき サムネイルURLは、hotelThumbnailUrlの名称で返ってくるが、hotelImageUrlと同じ画像だった。hotelImageUrlのサイズが、500×500で返ってくるので、そちらを利用した。 | |
返却情報タイプ | responseType | middle | 出力パラメータの返却情報タイプを指定する。 small:最低限の情報のみ middle:中くらい large:すべての情報 | |
ソート | sort | standard | standard:おすすめ順 +roomCharge:最安値料金(安い順) -roomCharge:最安値料金(高い順) ▼おすすめ順とは 1. 区分コード、施設番号による検索の場合 standard:施設番号順 2. 経度緯度による検索の場合 standard:指定された座標から近い順 |
実装方法について
guzzlehttp/guzzle ライブラリを使うと便利。
Laravel7の場合は、標準ライブラリになっている。
$response = Http::get('https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426/', [
'applicationId' => '00000000000000000000',
'latitude' => '128440.51',
'longitude' => '503172.21',
'searchRadius' => 1
]);
▼HTTPクライアント 7.x Laravel
https://readouble.com/laravel/7.x/ja/http-client.html