スポンサーリンク

ぐるなびのAPIを使用してお店の検索ページを作成してみた

前回のリクルート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のリクエスト数を減らせる
    • 1日1回夜間のバッチとかで取りに行けば良さそう
    • ホットペッパーのときと同様に事前にコールしたときの結果をシリアライズ化、保管して使いまわし
  • トライアル版は利用期限があるとのこと(90日)。
    • 利用期限が切れる30日前から90日の延長が可能な模様。
  • レスポンスは固定でjson
  • テストツールを使用できる
  • 画像が存在しない店舗が多いような気がする
  • 店舗の口コミを取得する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

タイトルとURLをコピーしました