Difyで飲食店紹介botを制作するに当たり飲食店のデータを抽出する方法を探していたところ、ホットペッパーグルメに連携できるリクルートAPIというものを見つけました。実際にpythonを使用してデータ抽出をしてみたのでその過程を記録します。
リクルートAPIの取得
リクルートWEBサービスから新規登録を行います。メールアドレスを登録して、認証を行うことでAPIを取得できます。1分くらいで結構簡単に取得することができました。
リクルートWEBサービス:https://webservice.recruit.co.jp/
Pythonを使用しデータ抽出
今回は、pythonを使用し、取得したデータをCSVファイルに保存しました。
簡単にまとめると以下のような手順で進めました。
『準備』と『コード記入』では以下のwebサイトを参考にしました。
https://zenn.dev/shintaro/articles/053fe2ca8b3430
コード追加:「ジャンル」「予算」「営業時間」を追加
参考にしたwebサイトでは店名と住所のデータのみ抽出しており、加えてジャンル・予算・営業時間も知りたかったので、webサイトのコードを参考にしてコードを追加しました。追加したコードは以下のようになりました。
shops = data['results'].get('shop', [])
for shop in shops:
writer.writerow({
'店名': shop['name'],
'住所': shop['address'],
'ジャンル': shop['genre']['name'],
'予算': shop['budget']['average'] if shop['budget'] else '不明'
'営業時間': shop['open']
})
※writer.writerowはデータをCSVファイルに書き込むためのメソッドです。
コード追加:愛知県内の全てのデータを取得できるようにする
参考にしたwebサイトは50件分のデータを抽出するコードだったので、chatGPTに相談して愛知県内の全てのデータを取得するコードを生成してもらいました。1回あたりに100件ずつデータの抽出を行い、それをループして、愛知県内の全てのデータ数を上回ったら終わるという流れです。実際に生成してもらったコードは以下のようになっています。
import requests
import time
API_KEY = "あなたのAPIキー" # APIキーをここに記入
BASE_URL = "https://webservice.recruit.co.jp/hotpepper/gourmet/v1/"
LARGE_AREA = "Z033" # 愛知県
COUNT = 100 # 一度に取得する件数(最大100件)
def fetch_all_stores():
start = 1 # データ取得の開始位置
all_stores = [] # すべての店舗情報を格納するリスト
while True:
# APIリクエストを送信
response = requests.get(BASE_URL, params={
"key": API_KEY,
"large_area": LARGE_AREA,
"count": COUNT,
"start": start,
"format": "json"
})
# レスポンスの確認
if response.status_code != 200:
print(f"リクエスト失敗: {response.status_code}")
break
# JSONデータを解析
data = response.json()
shops = data["results"].get("shop", [])
all_stores.extend(shops)
print(f"{start}件目から{start + len(shops) - 1}件目の店舗情報を取得しました。")
# 取得データが100件未満なら終了
if len(shops) < COUNT:
break
# 次の開始位置を更新
start += COUNT
# API制限を考慮して少し待機
time.sleep(1)
return all_stores
# 店舗情報を取得して表示
if __name__ == "__main__":
stores = fetch_all_stores()
print(f"取得した店舗数: {len(stores)}")
# 必要ならデータを保存
# 例: JSONファイルに保存
import json
with open("aichi_stores.json", "w", encoding="utf-8") as f:
json.dump(stores, f, ensure_ascii=False, indent=4)
print("データをaichi_stores.jsonに保存しました。")
コード作成
APIをリクエストするコード、CSVファイルに保存するコード、追加で作成したコードを結合させて最終的なコードを作成しました。
今後の課題
- chatGPTにつくってもらったコードをしっかり理解できていないので、解析して理解するとともにより簡単なコードにすることができないか考える