見出し画像

#19 Yelp Fusion APIを叩こう

札幌でちいさな貿易商社を経営している、ケニー(tsujikenzo)です。noteでは、Tweet以上、技術ブログ未満の、アウトプットを行っています。

プログラミングや技術に関することはこちら。
技術ブログ『学習と成長のブログ』

会社や働き方についてなどの音声配信も行っております。
Podcast『北海道から世界の食卓へ』

今日のテーマは、Yelp Fusion APIを叩こうです。

Yelp Fusion APIとは

Yelpとは、アメリカ合衆国を拠点とする、主にレストランやショップ、サービス業などのビジネス情報を提供提供するプラットフォームです。

台北市のdinnerを検索

Yelp Fusion APIは、Yelpのビジネスリストやレビューなどのデータにアクセスするためのプログラムインターフェース(API)です。開発者は、Yelp Fusion APIを活用することで、ユーザーが近くのレストランを探したり、レビューや評価を見たり、特定のビジネスに関する詳細情報を取得したりすることを手助けします。

Yelp developersは無料でアカウントが作成できますので、チャレンジしてみましょう。

そして、APIを操作するときは、公式リファレンスを必ず手元に置いておきたいものです。チャッピーがいようが、公式は公式です。

台北市の日本食レストラン

それではさっそく、YelpのWEBサイトを見ながら、APIを叩いていきましょう。「Japanese」で検索すると、台北市には240件のレストランがありました。

APIを叩いてみたら240件以上ありました

Yelp Fusion APIのSearch businessesエンドポイントは、一度に取得できるのが、50件までなので、ループを回しながら処理します。

import time
import mod_global
import mod_search_businesses as sb
import spreadsheet as sp

# 空のリスト
json_list = []

# レストランを検索する
for offset in range(0, 251, 50):
    json = sb.search_businesses(mod_global.MyGlobal.API_KEY, 'Taipei',term='Japanese', offset=offset)

    # 50軒分のレストラン情報を取得する
    restaurants = json['businesses']

    # json_listに追加する
    json_list.extend(restaurants)
    time.sleep(2)

# 空のリスト
data = []

# json_listから必要なプロパティ名を指定する
for restaurant in json_list:
    
    # 必要なプロパティ名
    keys =['id', 'alias', 'name', 'image_url', 'is_closed',  'url','review_count', 'rating', 'phone', 'display_phone', 'distance']
    data.append([restaurant[key] for key in keys])

# スプレッドシートに書き込む
sheet_name = 'シート1'

# スプレッドシートに書き込む
sp.write_to_spreadsheet(mod_global.MyGlobal.SPREADSHEET_KEY, sheet_name, data)
time.sleep(0.1)

悪戦苦闘しましたが、無事リストが取れました。

計1000件のリストを取ってみました

お客様レビューを取得する

飲食店オーナーなら、必ず気になるのがお客様レビュー。レビューを取得するAPIも公開されています。

台湾でも人気のやよい軒。漬物でご飯おかわりしますよね。

こんな感じの数行で、レビューが取得できます。

import requests
import mod_global

def get_business_reviews(api_key, business_id):
    url = f'https://api.yelp.com/v3/businesses/{business_id}/reviews'
    headers = {'Authorization': f'Bearer {api_key}'}
 
    response = requests.get(url, headers=headers)
        
    response.raise_for_status()
    data = response.json()
    
    reviews = []
    for review in data['reviews']:
        reviews.append({
            'user': review['user']['name'],
            'rating': review['rating'],
            'text': review['text']
        })
    
    return reviews

APIの制限があり、最大3件しか取得できないようです。定期的にAPIを叩いて、スプレッドシートに溜めていくといいかなと思いました。

    [{'user': 'Hillary N.', 'rating': 4, 'text': 'My friend, boyfriend and I were in the neighborhood to try out Chia Te for their pineapple cakes and stumble upon Yayoi next door. We decided to try it on...'}, 
     {'user': 'Rebecca T.', 'rating': 3, 'text': "I went to Yayoi twice during my stay in Taiwan, so I figured I'd give this place a review! Yayoi specializes in Teishoku cuisine, where your meal is served..."}, 
     {'user': 'Winston D.', 'rating': 2, 'text': '1/18/16 dinner. I guess they are opening more stores. As they open the quality is deteriorating. We did not take pictures but the food was almost inedible....'}]

以上で、Yelp Fusion APIを叩こうでした。グルメサイトのAPIを叩くことは、市場規模調査やマーケティングに使えるなと思いました。中小企業はリソースが限られています。できることからコツコツとやっていきましょう。

この記事が気に入ったらサポートをしてみませんか?