25
20

More than 1 year has passed since last update.

[Python] Google My Business API を使ってインサイトデータを取得する

Last updated at Posted at 2020-11-22

はじめに

Google My Business APIを使ってインサイトデータを取得するための日本語の情報があまり見つからなかったため、備忘録として残しておきます。

参考

https://developers.google.com/my-business/content/prereqs
Google API OAuth2.0のアクセストークン&リフレッシュトークン取得手順 2017年2月版

環境

Python(3.6.2)

Google My Business とは

Google My Business とはGoogleが提供しているGoogleマップやGoogle検索上で、登録したビジネス情報を表示されるようにする無料サービスです。
このサービスに自分のビジネス(飲食店や美容室、歯医者など)を登録する事で検索時やマップ閲覧時にそのビジネスをユーザーの目に入りやすくすることができます。

Google My Business APIとは

Google My Businessに登録されているビジネス情報の取得・登録・更新・削除が行える機能です。例えば、ビシネスに投稿されている口コミに返信を行えたり、ビジネスに対するアクセス情報(インサイトデータ)の取得や、お店のメニューの編集や写真の追加などをAPIを使ってシステム的に行うことができます。この記事では、その中でもインサイトデータの取得方法に関して説明します。

インサイトデータとは

Googleマイビジネス情報(飲食店や美容室、歯医者など)をユーザーがどのように見つけ、アクセスしたのかを確認できるデータです。具体的には以下のような項目に関するデータを確認できます。

 ・ユーザーがGMBページを検索した方法
 ・検索クエリ
 ・ユーザーがGMBページの検索に使ったGoogleサービス
 ・ユーザーの行動
 ・ユーザーが電話した数
 ・登録された写真の閲覧数
  ・・・etc

APIを利用する上で必要な準備

Google My Business APIを利用するには下記の4つの手順を踏む必要があります。
 1. Google APIコンソールでプロジェクトを作成する
 2. APIへのアクセスをリクエストする
 3. Google My Business API を有効にする
 4. 認証情報を取得する

1. Google APIコンソールでプロジェクトを作成する

 Googleアカウントを作成した上で

 1-1. Google APIコンソールに移動
 1-2.「プロジェクトの作成」をクリックし、プロジェクト名を入力して「作成」をクリック

2. APIへのアクセスをリクエストする

 2-1. Google APIコンソールに移動
 2-2. 1で作成したプロジェクトを選択する
 2-3. [プロジェクト ID] でプロジェクトIDを確認する
 2-4. アクセスリクエストフォームを記入して提出。
 2-5. 提出内容が審査された後、フォローアップメールが届くので返信

私の場合は提出して約2週間後に リクエストフォームに入力したメールアドレス宛に「Google MyBusiness APIへのリクエスト申請をしましたか?」という旨の英文メール(下記のメール)が送られてきました。

314efba9913dbb67409475013a389e1e.png

簡単な英文で”はいそうです。申請を行いました。”と返信して、数日後に APIの利用を許可する旨のメールが届きました(下記のメール)。

3a9d0d6e5e0b4402156fe4bcfcf4128a-min.png

なお、フォームに入力する際には以下の点に注意が必要です。
 ① プロジェクトを作成したGoogleアカウントのメールアドレスと会社のホームページURLの入力を求められるが、そのURLとメールアドレスのドメインは一致していなければならない。
 ② その会社のGoogle My Businessアカウントの入力も求められるので、もし無ければ予め作っておく必要がある。

3. Google My Business API を有効にする

 3-1. Google APIコンソールに移動。
 3-2. 画面の左メニューから「ライブラリ」をクリックする
 3-3. 検索を行いGoogle My Business APIをクリックする
 3-4. 画面中央上にある「有効にする」リンクをクリックする

4. 認証情報を取得する

APIにリクエストをする際には、アクセストークンが必要となります。このアクセストークンは一度発行されても一定時間を過ぎたら無効となりますが、クラインアントID、クライアントシークレット、リフレッシュトークンがあれば再発行を行うことができます。そのため、APIを利用するためにこれらの情報を取得しておきます。

Google API OAuth2.0のアクセストークン&リフレッシュトークン取得手順 2017年2月版

インサイトデータを取得する

認証情報が取得できたら、Pythonを使ってAPIにアクセスすることでインサイトデータの取得ができます。

###1.アクセストークンを取得する

import requests

data = [
  ('grant_type', 'refresh_token'),
  ('client_id', '978904852xx-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com'),
  ('client_secret', 'qlDgUPlOIxxxxxxx5-L0yW'),
  ('refresh_token', '1/9OEydqvV2IExxxxxxxxxxxxxxxxxxx00vWVQ1CCs'),
]

response = requests.post('https://accounts.google.com/o/oauth2/token', data=data)

json = response.json()
access_token = json['access_token']

※client_id, client_secret, refresh_token の値は取得した認証情報に変えてください。

2.アカウントIDを取得する

各GMBアカウントを管理しているユーザーアカウントを取得します。


headers = {
    'Authorization': 'Bearer ' + access_token,
}

response = requests.get('https://mybusiness.googleapis.com/v4/accounts', headers=headers)
json = response.json()

account_id = json['accounts'][0]['name'].replace('accounts/','')

json['accounts'] が管理アカウントの配列となっています。インサイトデータを取得したいGMBアカウントの管理ユーザーのアカウントIDを取得してください。

3.ロケーションネームを取得する

2で取得したアカウントIDを使って、各GMBアカウントに付与されているロケーションネームを取得します。


headers = {
    'Authorization': 'Bearer ' + access_token,
}

response = requests.get('https://mybusiness.googleapis.com/v4/accounts/'+account_id+'/locations', headers=headers)
json = response.json()

location_name = json['locations'][0]['name']

json['locations'] が管理アカウントに紐づいたGMBアカウントの配列となっています。その中からインサイトデータを取得したいGMBアカウントのロケーションネームを取得してください。

4.アクセストークンを使ってインサイトデータを取得する

アカウントID、ロケーションネーム、アクセストークンを取得したら下記のコードでインサイトデータを取得することができます。


headers = {
    'Authorization': 'Bearer ' + access_token,
}

# startTimeとendTimeでインサイトデータの対象期間を設定することができます。
data = '{\'locationNames\':[\''+location_name+'\',],\'basicRequest\':{\'metricRequests\':[{\'metric\':\'ALL\'}],\'timeRange\':{\'startTime\':\'2020-10-01T04:00:00.00000000Z\',\'endTime\':\'2020-10-2T04:00:00.00000000Z\',},},}'

response = requests.post('https://mybusiness.googleapis.com/v4/accounts/'+account_id+'/locations:reportInsights', headers=headers, data=data)

json = response.json()

[インサイトデータ]:ユーザーがお客様のビジネス情報を検索した方法

#直接検索
QUERIES_DIRECT = json['locationMetrics'][0]['metricValues'][0]['totalValue']['value']
#間接検索
QUERIES_INDIRECT = json['locationMetrics'][0]['metricValues'][1]['totalValue']['value']
#ブランド検索
QUERIES_CHAIN = json['locationMetrics'][0]['metricValues'][2]['totalValue']['value']

[インサイトデータ]:ユーザーがお客様のビジネス情報の検索に使った Google サービス

#マップ経由の表示
VIEWS_MAPS = json['locationMetrics'][0]['metricValues'][3]['totalValue']['value']
#検索経由の表示
VIEWS_SEARCH = json['locationMetrics'][0]['metricValues'][4]['totalValue']['value']

[インサイトデータ]:ユーザーの行動

#ウェブサイトへのアクセス
ACTIONS_WEBSITE = json['locationMetrics'][0]['metricValues'][5]['totalValue']['value']
#通話したユーザー数
ACTIONS_PHONE = json['locationMetrics'][0]['metricValues'][6]['totalValue']['value']
#ルートのリクエスト
ACTIONS_DRIVING_DIRECTIONS = json['locationMetrics'][0]['metricValues'][7]['totalValue']['value']

[インサイトデータ]:写真の閲覧・枚数

#写真の閲覧数(同業他社)
PHOTOS_VIEWS_MERCHANT = json['locationMetrics'][0]['metricValues'][8]['totalValue']['value']
#写真の閲覧数(お客様)
PHOTOS_VIEWS_CUSTOMERS = json['locationMetrics'][0]['metricValues'][9]['totalValue']['value']
#写真の投稿数(同業他社)
PHOTOS_COUNT_MERCHANT = json['locationMetrics'][0]['metricValues'][10]['totalValue']['value']
#写真の投稿数(お客様)
PHOTOS_COUNT_CUSTOMERS = json['locationMetrics'][0]['metricValues'][11]['totalValue']['value']

ビジネスに対する評価情報を取得

headers = {
    'Authorization': 'Bearer '+access_token,
}

response = requests.get('https://mybusiness.googleapis.com/v4/'+location_name+'/reviews', headers=headers)

json = response.json()

#評価の平均値
averageRating = json['averageRating']

#総口コミ数
totalReviewCount = json['totalReviewCount']
25
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
20