30/12/2025
GoogleMapを使って競合調査したい〜店舗情報や口コミを比較
店舗の相談を受けて、経営診断をする場合には外部環境調査をすることになります。j-statmapを使って地域の人口動態などは把握できますが、GoogleMapでの情報の存在感が大きくなっています。 競合調査 今回は、川崎のラーメンやさんについて調査してみます。「川崎 ラーメン」とGoogleMapで検索すれば情報は出てきますが、さっと一覧を取得したい。スクレイピングツールを使えばいいのかと思いましたが、GoogleMapに対してスクレイピングツールを使うのは規約で禁止されていました。 ということで、バイブコーディングでGoogleMapから情報を取得するまでをやってみたいと思います。 GoogleのAPIを取得して、Gemeiniでコーディングしてもらい、Google Colabで実行します。 GoogleのAPI取得 なおAPIを利用するには件数に応じて料金はかかります。 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 = " # 取得フィールドの設定(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件までです。 Screenshot 口コミを取得したい 人気店舗なら口コミが何百件もあるので、口コミを一括でダウンロードして、取得したいです。 ただこのAPIでは口コミは一度に取得できるのは5件まででした。残念。 なお、オーナー権限があれば、別のAPIがあって、一括でダウンロードできます。相談者さんと面談する前に事前に調査したかったのですが、相談した後にGoogleMapの権限を付与してもらえれば口コミの一括ダウンロードもできそうですね。 Google Business Profile API です。 ただ、OAuth認証の設定などもいるので、ちょっとめんどくさそうなので、今回はここまでです。 そんなところで
https://london3.jp/2025/12/googlemap-competition/
店舗の相談を受けて、経営診断をする場合には外部環境調査をすることになります。j-statmapを使って地域の人口動態などは把握できますが、GoogleMapでの情報の存在感が大き...