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サイトのコードを参考にしてコードを追加しました。追加したコードは以下のようになりました。
1 2 3 4 5 6 7 8 9 | 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件ずつデータの抽出を行い、それをループして、愛知県内の全てのデータ数を上回ったら終わるという流れです。実際に生成してもらったコードは以下のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import requests import time API_KEY = "あなたのAPIキー" # APIキーをここに記入 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につくってもらったコードをしっかり理解できていないので、解析して理解するとともにより簡単なコードにすることができないか考える