WebAPI

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

ぐるなびAPIバージョンアップ

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

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

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

プログラミングも遊びになる
toio ( トイオ ) バリューパック「つくって、あそんで、ひらめいて」
ロボットトイ 一人でもみんなでも 手を動かして遊ぶ 創意工夫を引き出す

対象年齢6歳から
飽きずに遊べる つくる楽しさ
ビジュアルプログラミングで
広がる創造の世界
楽天市場
アマゾン
ヤフー

ぐるなびAPIの仕様変更

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

ぐるなびAPI ぐるなびWebサービス
ぐるなびAPIの使い方 ぐるなびWebサービスを使ってみようぐるなびAPIの使い方 ぐるなびWebサービスを使ってみよう 商用利用 アフィリエイト利用について...

ぐるなび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レストラン検索API
ぐるなびAPIのレストラン検索APIで飲食店情報検索ぐるなびAPIのレストラン検索APIで飲食店情報検索 API仕様と使い方...

ぐるなび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を使うならこちらも

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

テイクアウト・デリバリー
ロリポップ!レンタルサーバー 飲食店支援サイトの運営支援開始ロリポップ!レンタルサーバー 飲食店支援サイトの運営支援開始 レンタルサーバー利用料金6ヶ月間無償延長...

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

こちらをご覧ください

ぐるなびAPI商用利用
ぐるなびAPIの商用利用とアフィリエイトについてぐるなびAPIの商用利用とアフィリエイトについて ぐるなびアフィリエイトの使い方...
ぐるなびアフィリエイト ペタぐるの使い方
ぐるなびで飲食店アフィリエイト 便利な「ペタぐる」を使ってみようぐるなびアフィリエイトの使い方 便利な「ペタぐる」を使ってみよう バリューコマースとの併用がおすすめです...

WebAPI作成・プログラミング おすすめレンタルサーバー

WebAPIを使うためのプログラミングを行う際に使うサーバーについてです

WordPressが使えて、PHPでWebプログラミングするなら、WordPressとPHPが利用できるサーバーが必要です

ロリポップ!サーバーをおすすめしてます

WordPressレンタルサーバー比較
WordPressレンタルサーバー比較 プログラミングにも適したサーバーは?WordPressレンタルサーバー比較 プログラミングにも適したサーバーは? WordPress・PHP対応に適したレンタルサーバー比較...