リクルートAPIでデータ抽出

 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につくってもらったコードをしっかり理解できていないので、解析して理解するとともにより簡単なコードにすることができないか考える
+4