前回のリクルートWEBサービスのホットペッパーAPIを利用した検索ページに引き続き、今回はぐるなびが提供しているぐるなびWebServiceを利用したお店の検索ページを作成してみました。
ぐるなびAPIを使用してお店を検索するサンプル
ホットペッパーのAPIと比べると以下の辺りが違います。
- APIリクエストが不正なとき200番以外のレスポンスステータスで返ってくる
- PHPのfile_get_contentsだと400番以上のステータスのレスポンスボディは取得できないそうなのでcurlで代替する必要があった。
- 開発環境はphp.iniの設定でphp_curl.dllを有効にする必要があった
- curlあまり使わないから意図した結果を取得するのに時間かかった(^q^
- curlで400番以上を取得する際はCURLOPT_FAILONERROR=falseを明示的に設定しておくと良い(※デフォルトでfalse)
- エラーコード一覧(レストラン検索APIの仕様より)
エラーコード エラー内容 400 不正なパラメータが指定された 401 不正なアクセス(認証エラー) 404 指定された店舗の情報が存在しない 405 不正なアクセス 429 リクエスト回数上限超過 500 処理中にエラーが発生した
- エラーコード一覧(レストラン検索APIの仕様より)
- PHPのfile_get_contentsだと400番以上のステータスのレスポンスボディは取得できないそうなのでcurlで代替する必要があった。
- エリアや業態(ジャンル)などのマスタデータは全件取得できる
- というか親のコードで絞込とかできない
- あらかじめ全件取得しておき、キャッシュしておくことでAPIのリクエスト数を減らせる
- 1日1回夜間のバッチとかで取りに行けば良さそう
- ホットペッパーのときと同様に事前にコールしたときの結果をシリアライズ化、保管して使いまわし
- トライアル版は利用期限があるとのこと(90日)。
- 利用期限が切れる30日前から90日の延長が可能な模様。
- レスポンスは固定でjson
- テストツールを使用できる
- 未登録でも使える → ぐるなび Web Service – API テストツール
- 画像が存在しない店舗が多いような気がする
- 店舗の口コミを取得するAPIがある
- ユーザーがアップロードした画像を取得したりできる模様
- レストラン検索APIとは別のリクエストになるので口コミの画像を表示するといった実装を行うとあっという間にリクエスト回数の上限超過しそう
file_get_contents→curlの代替は以下のような感じでした。
// file_get_contents $api_url = $this->api_base_url . http_build_query($params); $result = @json_decode(file_get_contents($api_url), true); // curl $api_url = $this->api_base_url . http_build_query($params); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $api_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FAILONERROR => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_TIMEOUT => 60, ]); $result = @json_decode(curl_exec($ch), true);
APIキーの作成はリクルートWEBサービスと同様に即時で行えましたv(^^)v