WebAPI

ぐるなびAPIのバージョンアップ仕様変更対応

この記事では商品の紹介にアフィリエイト広告を利用しています 「広告について」

ぐるなびAPIを使って、ぐるなびWebサービスからレストランの情報を取得して記事に表示させる方法について書いています

ぐるなびAPIの無料サービスが終了し、法人向けの有料サービスになることが発表されました

ぐるなびWebサービスは今後、法人向けの有料サービスになります

無料利用可能なAPIサービスの提供は2021年6月30日までで終了とのことです

以下の記事は無料のぐるなびAPIについての記事で、過去の内容であり、現在とは状況が異なりますのでご注意ください

ぐるなびAPI 無料サービスの終了について

有料サービスは商用も可能なサービスですが、継続して利用希望がある場合は、ぐるなびWebサービスのサイトでご確認ください

https://api.gnavi.co.jp/api/(ただし2021年6月30日でクローズ)

株式会社ぐるなびのサービスに関するお問い合わせはこちらへどうぞ

株式会社ぐるなびに関するお問い合わせ

ぐるなびAPIの仕様変更について 2018年

ぐるなびAPIには2018年秋に仕様変更がありました

仕様変更前まで、ぐるなびAPIで情報を取得する際には、XMLを使っていたのですが、XMLはサポート外になり、JSONでの取得になるという仕様変更です

仕様変更対応に少々手間がかかったので備忘録を残します

ぐるなびAPIの利用方法についてはこちらです

ぐるなびAPIバージョンアップのお知らせ

ぐるなびWebサービスからお知らせが届きました

ぐるなびAPIが、バージョンアップで仕様変更になり、対応が必要になりました

旧バージョンのAPIは、2019年9月3日まで提供されるのですが、そうそうに対応しておきます

ぐるなびAPIの仕様変更の内容

まず、APIのURLが変わります

レストラン検索APIの変更例

[変更前]https://api.gnavi.co.jp/RestSearchAPI/20150630/
[変更後]https://api.gnavi.co.jp/RestSearchAPI/v3/

この仕様変更に対しては、URLを変えればいいだけですね

そしてメインの仕様変更内容はこちらです

APIの中身の主な仕様変更

・XMLでのレスポンス提供がなくなり、JSONのみになり、フォーマットを指定するformatパラメータが無くなる
・httpによるリクエスト受付を終了し、https://となる

細かい内容は他にも書いてありますが、主な対処が必要な仕様変更はこれらです

httpについての仕様変更に対しては、httpsでリクエストしていれば、そのままでいいってことですね

であれば、リクエストのURLをv3に変えて、formatを削除するだけでよさそうです

あとはXMLからJSONへの変更です

今までは、XMLで取得してXMLファイルをパースして使っていましたので、こちらは変更が必要になります

ぐるなびAPIの仕様変更 JSON形式ファイルへの対応

XML形式で取得していたファイルをJSON形式に変更します

ぐるなびAPIのURLから、file_get_content()でファイルを読み込み、simplexml_load_string()で配列にして、$xmlに格納していました

JSONに変わっても、ぐるなびAPIのURLから、file_get_content()で読み込むのはいっしょですね

file_get_content()で読み込んだ後、json_decode()で配列にして、$jsonに格納します

これだけかと思いきや残念ながらこれだけではすみませんでした

ぐるなびAPI仕様変更 URL変更+JSON対応だけではうまくいかず

ぐるなびAPI仕様不明確なパラメータへの対応

ちょっとしたコーディングミスもありましたが、URL変更とJSONファイル読み込みの対応を行ってテストしてみたのですが、レスポンスがエラーになってうまくいきませんでした

パラメータのsortに設定した値がないというエラーと、店舗IDがおかしいというエラーになっていました

今までの旧バージョンのAPIでは、フリーワード検索するときに、sortにもidにも0を入れていて通っていたのですが、これらが通らなくなったようです

確かにAPI仕様上は、sortはディフォルトのソート順の場合は設定しない、あるいは1か2でソート順を指定することになっていて、店舗IDは特に何も記載がなかったのですが、旧バージョンではsort=0にしていても、店舗IDが無効値でもフリーワード検索ができていました

sort順はもともと使用していなかったので、パラメータから削除することでよいのですが、店舗IDがフリーワード検索の場合は指定せず、店舗IDで検索する場合は指定するというように場合分けしないとなりません

そこで、sortパラメータは削除し、フリーワード検索の場合と、店舗IDの検索の場合とで、呼び出す関数を切り替えるようにして対応してみたところ、無事検索できるようになりました

ここまでは、テスト用のphpを試すところまでで、作業経過を記録しながら、朝の2時間かからないぐらいの対応時間でしたが、さらに一筋縄ではいかないところがありました

多言語レストラン検索APIでのスペースの扱い方

多言語レストラン検索APIではスペースを入れると検索結果が得られない場合がありました

例えば「横浜 中華街」で多言語レストラン検索APIで検索すると、検索結果が得られません

存在しないという検索結果になるようです

旧バージョンでは検索できていましたが、新バージョンのV3にするとできないです

テストツールで検索してみてもだめなので、多言語レストラン検索APIではだめみたいです

日本語だけのレストラン検索APIを使うと「横浜 中華街」でも検索できます

多言語レストラン検索APIの不具合でしょうか?

仕方がないので日本語のみのレストラン検索APIを使うように変更します

当初、多言語で検索しようと思っていたのですが、いまのところ日本語でしか検索していません

しかし多言語レストラン検索APIと日本語だけのレストラン検索APIではけっこうパラメータが異なります

面倒ですが、パラメータの違いの対応を行わなければなりません

同様の店舗の情報であるのに、2つのAPIで、パラメータの名称も、配列の形も、パラメータの存在有無もかなり違います

同じようなものなのだから、統一しておいてくれればいいのですがだいぶ違うので面倒です

なんだかんだで、この対応でさらに2時間ぐらい食ってしまいまいました

応援口コミ検索APIのレスポンスが変わっている

応援口コミ・写真を取得するAPIのレスポンスが、旧バージョンのXMLの場合や、レストラン検索APIとはちょっと違っていました

もともと旧バージョンのJSON形式でも同様のようですが、配列への格納処理に変更が必要でした

レストラン検索APIなどのレスポンスのレストラン情報のリストは下記のようになっていました

“rest”:[
{
},
{
}
]

しかし、応援口コミAPIの新バージョンは、こうです

“0”:{
“photo”:{
}
},
“1”:{
“photo”:{
}
}

“0”、”1″があって、その下層に”photo”があるという形式です

XMLではこうなってはいませんでしたし、レストラン検索APIとも違うわけです

XMLやレストラン検索APIでやっていた今までの処理の方法のままでは、photo以下のデータを取り出すことができないので変更が必要になりました

応援口コミ検索APIのレスポンスへの対応

さらに2時間ほどかかって、応援口コミAPIへの対応ができました

まず、応援口コミAPIは、キーがひとつ余計に入っていたので対応しました

“response”:(
“0”:{
“photo”:{
}
},
“1”:{
“photo”:{
}
}
}

こういった形でトップにresponseが入っていました

確かにAPI仕様にはトップにResponseというのがありますが、レストラン検索APIの場合はAPI仕様に書いてあっても入っていませんでしたし、旧バージョンでXMLで取っていたときにもありませんでした

例えば、total_hit_countの値は、$jsonにJSONファイルを取り込んだ後、レストラン検索APIでは、

$json->total_hit_count

とすれば取り出せるのですが、応援口コミAPIでは

$json->response->total_hit_count

としないとなりません

これは、レスポンス仕様を見ているだけではわからず、JSONファイルを直に見ていてわかったことです

“0”,”1″のほうは、$nの値をforループで回してカウントアップして

$json->response->$n->photo

とすることで、photoの配列の中身を取り出すことができました

$photo=$json->response->$n->photo;

としてやることで、$photo-> で中身を取り出していくことができます

これで、なんとか応援口コミの写真などの情報も表示させることができるようになりました

API仕様が明記されていても、APIごとに微妙にJSONファイルの中身が違っていて、JSONファイルを出力してみて、どうなっているか確認して対応しないとなりませんでした

仕様の実現方法があいまいなところがあるのですね

間違い探し能力を試されているのかな

APIごとに対応の仕方が違うというのは、仕様書と仕様の実現方法が不完全、微妙に適当ですね

バージョンにより、店舗IDの無効値への対応やフリーワードでのスペースの扱い方に差があるのも微妙な変更です

ぐるなびAPIで検索できるお店の数が増えました

ぐるなびWebサービスのレスポンスからXMLが対象外になり、JSONのみになるというので対応したり、記事を追加修正したりしていて気づいたのですが、ぐるなびWebサービスで検索できるお店がひろがったようです

以前は、ネット予約できるようなお店に限られていて、基本情報や口コミはあるけれどもネット予約の対象にはなっていないようなお店は、WebAPIで検索しても出てきませんでした

出てこないので、そういうお店はGoogleMapApiのGoogle Place Apiを使って情報をとってきてみたりしていたのですが、同じお店をぐるなびAPIで検索すると検索されるようになっていました

ネット予約できるようなお店に比べると、料金情報が出てこなかったり、写真がなかったりなど、情報は少ないのですが一応検索結果に出てくるようになってます

ぐるなびAPIを使うならこちらも

飲食店支援サイトを運営する方への支援策があります

ぐるなびAPIとアフィリエイトについて

こちらをご覧ください