PR

経営診断の時にGoogleMapを使って競合調査したい〜店舗情報や口コミを比較

GoogleMapAPIで口コミ調査

店舗の相談を受けて、経営診断をする場合には外部環境調査をすることになります。j-statmapを使って地域の人口動態などは把握できますが、GoogleMapでの情報の存在感が大きくなっています。そこでGooleMapの情報をAPIを使って取得していきます。

競合調査したい

今回は、京急川崎のラーメンやさんについて調査してみます。「京急川崎 ラーメン」とGoogleMapで検索すれば情報は出てきますが、さっと一覧を取得したい。スクレイピングツールを使えばいいのかと思いましたが、GoogleMapに対してスクレイピングツールを使うのは規約で禁止されていました。GeminiのAIエージェントで取得しようとしても断られます。

ということで、バイブコーディングでGoogleMapからAPI経由で情報を取得するまでをやってみたいと思います。

GoogleのAPIキーを取得して、Gemeiniでコーディングしてもらい、Google Colabで実行します。

GoogleのAPI取得

なおAPIを利用するには件数に応じて料金はかかります。

PlacesAPI(New)の概要

GoogleCloudConsoleにアクセスしてプロジェクト作成して、APIを取得します。

APIライブラリからPlacesAPI(New)の設定で有効にします。

有効なAPIとサービスで、PlacesAPI(New)が入っていればOK・

Geminiでバイブコーディング

pythonのコードを書いて。GoogleMapで検索したキーワードで上位の10件の店舗データを取得する。API経由で。(Places API (New)) ※APIは古い方もあるのでNewを使ってください。

これで店舗名、口コミ点数、クチコミ件数、住所、PlaceIDなどを取得してきました。

過不足あれば、追加でお願いします。

今回は、「店舗カテゴリ追加、説明を追加、最新の口コミの追加」をお願いしました。

エラーが出たりしましたが、エラーをコピーしてもう一度Geminiに貼り付けて、修正してとお願いするとエラーも消えました。

作成されたコード

import requests
import pandas as pd
from google.colab import data_table

# ==========================================
# 1. あなたのGoogle Maps APIキーを入力してください
# ==========================================
API_KEY = "ここにAPIキーを貼り付けてください"

def search_google_places_with_review(keyword):
    url = "https://places.googleapis.com/v1/places:searchText"
    
    # 取得フィールドの設定(reviewsを追加)
    fields = [
        "places.displayName",           # 店名
        "places.primaryTypeDisplayName",# 店舗カテゴリ
        "places.editorialSummary",      # 説明(紹介文)
        "places.rating",                # 評価
        "places.userRatingCount",       # レビュー数
        "places.formattedAddress",      # 住所
        "places.reviews",               # 口コミ(最新数件が含まれる)
        "places.id"                     # Place ID
    ]
    field_mask = ",".join(fields)

    headers = {
        "Content-Type": "application/json",
        "X-Goog-Api-Key": API_KEY,
        "X-Goog-FieldMask": field_mask
    }

    # リクエストボディ
    payload = {
        "textQuery": keyword,
        "languageCode": "ja",
        "maxResultCount": 20, # 最大20件取得を試みる
        "rankPreference": "RELEVANCE"
    }

    try:
        response = requests.post(url, json=payload, headers=headers)
        response.raise_for_status()
    except requests.exceptions.RequestException as e:
        print(f"APIリクエストエラー: {e}")
        return None

    data = response.json()
    places = data.get('places', [])

    if not places:
        print("店舗が見つかりませんでした。")
        return None

    shop_list = []
    for place in places:
        # 店名
        name = place.get("displayName", {}).get("text", "不明")
        
        # 店舗カテゴリ
        category = place.get("primaryTypeDisplayName", {}).get("text", "(未設定)")
        
        # 説明 (editorialSummary)
        description = place.get("editorialSummary", {}).get("text", "(説明文なし)")
        
        # 口コミの1件目を取得
        reviews = place.get("reviews", [])
        first_review = "(口コミなし)"
        if reviews:
            # New APIでは reviews[0].text.text に本文が入る
            review_node = reviews[0].get("text")
            if review_node:
                first_review = review_node.get("text", "(本文なし)")
        
        # 表で見やすくするために口コミの長さを制限(任意)
        if len(first_review) > 100:
            first_review = first_review[:100] + "..."

        shop_list.append({
            "店名": name,
            "店舗カテゴリ": category,
            "説明": description,
            "口コミ(1件目)": first_review,
            "評価": place.get("rating", 0.0),
            "レビュー数": place.get("userRatingCount", 0),
            "住所": place.get("formattedAddress", "不明")
        })

    # データフレーム作成
    df = pd.DataFrame(shop_list)
    return df

# --- 実行 ---
# 検索キーワード
search_keyword = "京急川崎 ラーメン" 

df_results = search_google_places_with_review(search_keyword)

if df_results is not None:
    print(f"「{search_keyword}」の検索結果(取得数: {len(df_results)} 件)")
    # Colabのインタラクティブ・データテーブルで表示
    display(data_table.DataTable(df_results, include_index=False))

Google Colabで実行します。

Colabへいって、新しいノートブックをひらいて、Geminiで生成したコードを貼り付けて実行します。

作成したAPIキーを貼り付けます

検索されたいキーワードをいれました。

実行結果

「京急川崎 ラーメン」で実行しました。ラーメン屋さんはレビュー数がすごいですね。説明文設定していないお店も多いのか。なお、一度にAPIで取得できる件数は20件までです。

取得したGoogleMap情報の一覧

口コミを取得したい

先程の店舗情報取得では最新の口コミを1件だけ取得しました。人気店舗なら口コミが何百件もあるので、口コミを一括でダウンロードして、取得したいです。

ただこのAPIでは口コミは一度に取得できるのは口コミの最新の5件まででした。残念。

なお、GoogleMapのオーナー権限があれば、別のAPIがあって、一括でダウンロードできます。相談者さんと面談する前に事前に調査したかったのですが、相談した後にGoogleMapの権限を付与してもらえれば口コミの一括ダウンロードもできそうですね。 Google Business Profile API です。

ただ、OAuth認証の設定などもいるので、ちょっとめんどくさそうなので、今回はここまでです。

そんなところで

PVアクセスランキング にほんブログ村

マーケ

Posted by tomoyamurakami