リクルートが提供されているホットペッパーのAPIをもとに簡単な検索機能を作成してみました。
リクルートWEBサービスのホットペッパーAPIを使用してお店を検索するサンプル
検索条件として以下の指定が行えます。
- 大エリア
- 検索時large_areaパラメータにセット
- 中エリア
- 検索時middle_areaパラメータにセット
- 大エリア変更時に選択肢をリセットし選択値に関連づいた中エリアを表示
- ジャンル
- 検索時genreパラメータにセット
- 予算
- 検索時budgetパラメータにセット
- 並び順
- 検索時orderパラメータにセット
検索ボタンをクリックすると条件に一致する結果を10件ずつ表示します。
ページャーはbootpagというライブラリを使用して生成しています。
一覧表示項目は画像や店名の他、APIで取得できる情報を適当に表示しています。
以下のようなAPIキーとAPI名をコンストラクタに指定して、getDataメソッドでAPIにアクセスしてデータを取得するクラスを作成しました。
/** リクルートWEBサービスのAPIキー */ const RECRUIT_API_KEY '[APIキー]' /** グルメサーチAPI名 */ const HOT_PEPPER_01_GOURMET = '01.gourmet'; $gourmet_api = new HotPepperAPI(RECRUIT_API_KEY, HOT_PEPPER_01_GOURMET); $params = [ 'count' => PER_PAGE_COUNT, 'type' => 'lite', 'format' => 'json', ]; if (isset($req) && $req['large_area']) { $params['large_area'] = $req['large_area']; } if (isset($req) && $req['middle_area']) { $params['middle_area'] = $req['middle_area']; } if (isset($req) && $req['genre']) { $params['genre'] = $req['genre']; } if (isset($req) && $req['budget']) { $params['budget'] = $req['budget']; } if (isset($req) && $req['order']) { $params['order'] = $req['order']; } if (isset($req) && $req['page'] && is_numeric($req['page'])) { $params['start'] = 1 + ((intval($req['page']) - 1) * PER_PAGE_COUNT); } $gourmet_data = $gourmet_api->getData($params, false, false); if ($gourmet_data->result) { $gourmet_html = createGourmetHtml($gourmet_data->result); }
リファレンスに記載の通りレスポンスはエラーの有無に関わらず200番のステータスで返ってくるためレスポンスデータの中身をもとにエラーかどうかの処理を作る必要があります。以下のような感じでresultsの中にerrorという項目があるかどうかで判断すればよさそうでした。
$result = @json_decode(file_get_contents($api_url), true); // エラー判定 // 1000:サーバ障害エラー // 2000:APIキーまたはIPアドレスの認証エラー // 3000:パラメータ不正エラー if (isset($result['results']['error'])) { throw new RecruitWebAPIException(@$result['results']['error'][0]['message'], @$result['results']['error'][0]['code']); }
リクルートWEBサービスで提供されているAPIはAPIキーを発行してリクエストパラメータにセットするだけで使えるので入門に良いと思います。
APIキーの発行も申し込み後すぐに使えるようになっていたかと思います。
ホットペッパーの他にカーセンサーの中古車検索やエイビーロードの海外旅行検索もできるみたいです。