リクルート社が公開している Hotpepper API を使って、緯度・経度を指定して、近隣の飲食店を検索します。
今回は以下の条件で検索してみます。
- JR博多駅を中心とした半径500m以内
- 結果は json 形式で取得
- 距離が近い順にソート
また、結果を「店名リスト」として取得したいと思います。
リクルートWebサービスに登録し、APIキーを取得する
下記の公式で、ユーザー登録します。
エラー | リクルートWEBサービス
登録にはメールアドレスの登録が必要です。
APIを実行してJSONデータを取得する
今回の検索条件の場合、以下のようなURLになります。
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&lat=33.590543&lng=130.420096&range=2&order=1&format=json
(JR博多駅の座標は 33.590543, 130.420096 くらいです)
URLに設定する条件等は、公式のドキュメントに詳細が記載されています。
レスポンスは以下のようになっていました。
{
"results": {
"api_version": "1.26",
"results_returned": "10",
"results_start": 1,
"shop": [
{
"name_kana": "かがや はかたてん",
"other_memo": "",
"photo": {
"pc": {
"l": "https://imgfp.hotp.jp/IMGH/43/97/P013584397/P013584397_238.jpg",
"m": "https://imgfp.hotp.jp/IMGH/43/97/P013584397/P013584397_168.jpg",
"s": "https://imgfp.hotp.jp/IMGH/43/97/P013584397/P013584397_58_s.jpg"
},
"mobile": {
"l": "https://imgfp.hotp.jp/IMGH/43/97/P013584397/P013584397_168.jpg",
"s": "https://imgfp.hotp.jp/IMGH/43/97/P013584397/P013584397_100.jpg"
}
},
"large_area": {
"name": "福岡",
"code": "Z091"
},
"party_capacity": "30",
"large_service_area": {
"name": "九州・沖縄",
"code": "SS90"
},
"address": "福岡県福岡市博多区博多駅中央街1-1 JR博多シティ9F",
"mobile_access": "博多駅徒歩1分 JR博多シティ9F",
"id": "J000971733",
"lng": "130.4199470450",
"course": "あり",
"show": "なし",
"parking": "あり :施設内",
"non_smoking": "一部禁煙",
"horigotatsu": "なし",
"name": "加賀屋 博多店",
"genre": {
"name": "和食",
"catch": "能登の伝統の味",
"code": "G004"
},
"open": "月~金、祝前日: 11:00~15:00 (料理L.O. 14:30 ドリンクL.O. 14:30)17:00~22:00 (料理L.O. 21:00 ドリンクL.O. 21:00)土、日: 11:00~16:0016:30~22:00 (料理L.O. 21:00 ドリンクL.O. 21:00)祝日: 11:00~15:0017:00~22:00 (料理L.O. 21:00 ドリンクL.O. 21:00)",
"tatami": "なし",
"card": "利用可",
"charter": "貸切不可 :応相談",
"wifi": "なし",
"shop_detail_memo": "",
"band": "不可",
"middle_area": {
"name": "博多",
"code": "Y700"
},
"lat": "33.5905159237",
"karaoke": "なし",
"logo_image": "https://imgfp.hotp.jp/IMGH/22/07/P013612207/P013612207_69.jpg",
"midnight": "営業していない",
"budget": {
"average": "8000円",
"name": "7001~10000円",
"code": "B005"
},
"urls": { "pc": "https://www.hotpepper.jp/strJ000971733/?vos=nhppalsa000016" },
"lunch": "あり",
"english": "なし",
"close": "不定休",
"service_area": {
"name": "福岡",
"code": "SA91"
},
"budget_memo": "※サービス料10%(ディナー)",
"tv": "なし",
"private_room": "なし",
"coupon_urls": {
"sp": "https://www.hotpepper.jp/strJ000971733/scoupon/?vos=nhppalsa000016",
"pc": "https://www.hotpepper.jp/strJ000971733/map/?vos=nhppalsa000016"
},
"small_area": {
"name": "博多駅(筑紫口・中央街)",
"code": "X701"
},
"barrier_free": "あり",
"wedding": "",
"access": "博多駅徒歩1分 JR博多シティ9F",
"child": "お子様連れOK",
"capacity": "64",
"pet": "不可",
"free_food": "なし",
"ktai_coupon": "1",
"station_name": "博多",
"catch": "",
"free_drink": "なし"
},
以下省略
・・・情報量が半端ないです。
自分が必要な情報のみをフィルタリングするようにパース必須ですね。
python で結果をパースして店名リストを得る
以下のように python スクリプトを組んで、店名リストを取得するようにしました。
import requests
import json
class HotpepperApi:
# APIのURL
api = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key={key}&lat={lat}&lng={lng}&range=2&order=1&format=json"
# コンストラクタ引数:APIキー
def __init__(self, api_key):
self.api_key = api_key
# 緯度・経度を指定して最寄りの飲食店名リストを取得(とりあえず検索半径は500m固定)
def get_shop_name_list(self, lat, lng):
url = self.api.format(key=self.api_key, lat=lat, lng=lng)
response = requests.get(url)
# jsonデータをパースする
result_list = json.loads(response.text)["results"]["shop"]
return [d.get("name") for d in result_list]
if __name__ == '__main__':
# json ファイルに「keyキー」があるものとする
# (key:APIキー)
f = open("HotPepperApiSetting.json", 'r')
json_data = json.load(f)
obj = HotpepperApi(json_data["key"])
result = obj.get_shop_name_list("33.590543", "130.420096")
print(result)
結果、以下のように出力されました。
['加賀屋 博多店', 'コカレストラン JR博多シティ', '大福うどん エキサイド店', '大福うどん 博多駅地下街店', 'ナイル 博多阪 急店', '博多ビストロ タケノヤ JR博多シティ店', 'ロンフーダイニング 博多1番街店', '博多魚がし 博多駅マイング博多通り店', '四川飯店 博多', 'グリル大宮 JR博多シティ店']
だいぶスッキリしましたね。
サクッと検索できていい感じのAPIです。
コメント