はじめに
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へのリクエスト申請をしましたか?」という旨の英文メール(下記のメール)が送られてきました。
簡単な英文で”はいそうです。申請を行いました。”と返信して、数日後に APIの利用を許可する旨のメールが届きました(下記のメール)。
なお、フォームに入力する際には以下の点に注意が必要です。
① プロジェクトを作成した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']