最近うと自分のサイトの分析をしたいなと思い立ち、以前からサイトに設置しているGoogleアナリティクスのデータを使った分析を行うため、googleが提供しているAPIを使って自分のサイトのアクセスデータを取得していきたいと思います。
前準備
プライベートAPIなので、まずはサイトにアクセスして自分のAPI鍵を発行する必要があります。
基本的には以下のクイックスタートのとおりに進めていきます。
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py
GoogleのAPIを使用するために必要なのはこの4つの条件を満たしていることです。
- Developer ConsoleでGoogle AnalyticsのAPIが有効化されている
- 秘密鍵のファイル(p12/json)が手元にある
- API用のメールアドレスを作成済み
- API用のメールアドレスを、Google Analyticsの該当のビューに権限付与済み
これをざっくりいうと、GoogleのプライベートAPIを利用するためには、「アナリティクスのAPI有効化」と「プロジェクト・サービスアカウントを作成」「アナリティクスのビューへのAPI権限の追加」この3点が必要があるということです。
まずは「Google Cloud Platform」に登録し、APIを有効化します。
https://console.developers.google.com/start/api?id=analyticsreporting.googleapis.com&credential=client_key
そのまま道なりに入力してAPIを有効化すればOKです。APIが有効化できたら次は以下のURLにアクセスして、新規プロジェクトを作成します。

作成したら、次はサービスアカウントを作成します。

サービスアカウントの説明とかは適当でOKです。

入力できたら一番下の「作成」をクリックしてから、キャンセルを押して、前の画面に戻ります。

戻ると↑のような感じで、サービスアカウントが作成されているので、右端のタブをクリックして「鍵を作成」をクリックして秘密鍵を作成してダウンロードします。
秘密鍵は、jsonかp12かどちらでもコードの記述がすこし変わるだけでさして問題ありませんが、ここではとりあえずjsonにしておきます。
そして次はGoogleアナリティクスを開いて、APIにアクセス権限を付与します。具体的には、APIで情報を取得したいサイトの管理ページにアクセスし、右端の「ユーザー管理」をクリックします。

すると現在ビューへのアクセス権限のあるユーザー一覧が表示されるので、ここにユーザーを追加します。
具体的には右上の[+]のボタンをクリックすると、追加するユーザーのメールアドレスを尋ねられるので、そこにさっき作ったサービスアカウントのメールアドレス(~~.gserviceaccount.com)を追加して保存します。

これで前準備は完了です。
APIからサイトのデータを取得する
それではここからはAPIを経由してGoogleアナリティクスにあるサイトのデータをPythonのスクリプトで取得したいと思います。
一応先ほど記載したリンクにGoogleアナリティクスの公式ページにPythonでのAPIの使い方のチュートリアルが載っているのですが、Python2.7で書かれているので、そのままコピペしてPython3で実行すると、printとかライブラリとかでエラーになります。
というわけで、いろいろ参考にしてPython3に書き換えました。まずは必要になるライブラリをインストールします。
# ターミナルで必要なライブラリをインストールする $ pip install --upgrade google-api-python-client $ pip install --upgrade oauth2client $ pip install pyopenssl
PythonでNo module named oauth2client.service_accountが出た時は、oauth2clientが入っていないことが原因なので、インストールしておきましょう。
そして、こちらがサンプルコードになります。アレンジするのは「ローカル上での秘密鍵のパス」と「ViewID」と「アカウントID」3つです。

秘密鍵は自分のローカルのPCに落とした秘密鍵のパスで、アカウントIDは先ほどアナリティクスのビューに登録したサービスアカウントIDになります。
ビューIDはアナリティクスの「ビューの設定」を開くと表示されている数字になります。インデントなどおかしい場合はgithubの方のソースをコピペなりダウンロードして実行してみてください。
"""Hello Analytics Reporting API V4."""
import argparse
import os
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
DISCOVERY_URI = ('https://analyticsreporting.googleapis.com/$discovery/rest')
KEY_FILE_LOCATION = "ここに秘密鍵ファイルのパスを入力" (例:C:\\Users\\~~.json)
SERVICE_ACCOUNT_EMAIL = 'アカウントID'(例:~~.gserviceaccount.com)
VIEW_ID = 'ビューID'
def initialize_analyticsreporting():
"""Initializes an analyticsreporting service object.
Returns: analytics an authorized analyticsreporting servicobject.
"""
credentials = ServiceAccountCredentials.from_json_keyfile_name(
KEY_FILE_LOCATION, SCOPES)
# Build the service object.
analytics = build('analyticsreporting', 'v4', credentials=credentials)
return analytics
def get_report(analytics):
# Use the Analytics Service Object to query the Analytics Reporting API V4.
return analytics.reports().batchGet(
body={
'reportRequests': [
{
'viewId': VIEW_ID,
'pageSize': 10,
'dateRanges': [
{'startDate': '7daysAgo', 'endDate': 'today'}
],
'metrics': [
{'expression': 'ga:pageviews'},
],
'dimensions': [
{'name': 'ga:pagePath'}, {'name': 'ga:pageTitle'}
],
'orderBys': [
{'fieldName': 'ga:pageviews', 'sortOrder': 'DESCENDING'},
]
}]
}
).execute()
def print_response(response):
"""Parses and prints the Analytics Reporting API V4 response."""
for report in response.get('reports', []):
rows = report.get('data', {}).get('rows', [])
for row in rows:
print(row)
analytics = initialize_analyticsreporting()
response = get_report(analytics)
print_response(response)
参照:https://github.com/beginerSE/python-google_api/blob/master/g-analytics.py
これを実行すると、
{‘dimensions’: [‘/2018/04/17/post-194/’, ‘【Python】Jupyter notebookの基本的な使い方を分かりやす
く説明する’], ‘metrics’: [{‘values’: [‘277’]}]}
{‘dimensions’: [‘/2018/03/04/2018-03-04-211747/’, ‘Pythonで自動売買Botを作る①~システムトレード
の流れを把握する’], ‘metrics’: [{‘values’: [‘197’]}]}
{‘dimensions’: [‘/2017/08/31/2017-08-31-195852/’, ‘【Python】Anacondaのインストールと初期設定か
ら便利な使い方までを徹底解説!’], ‘metrics’: [{‘values’: [‘190’]}]}
{‘dimensions’: [‘/2018/10/11/post-963/’, ‘【Python】Djangoを使ってウェブサイトを作成する その①’], ‘metrics’: [{‘values’: [‘132’]}]}
{‘dimensions’: [‘/2018/11/25/post-1253/’, ‘【就職】IT企業の客先常駐民おる・・・?’], ‘metrics’:
[{‘values’: [‘115’]}]}
{‘dimensions’: [‘/2018/08/20/post-645/’, ‘【Python】Kerasでディープラーニングによる画像認識をや
ってみる’], ‘metrics’: [{‘values’: [’90’]}]}
{‘dimensions’: [‘/category/itまとめ/’, ‘ITまとめ | 湊の研究室’], ‘metrics’: [{‘values’: [’69’]}]}
{‘dimensions’: [‘/2018/06/27/post-436/’, ‘Windows10にTensorflowとKerasがインストールできない時の
解決法’], ‘metrics’: [{‘values’: [’66’]}]}
{‘dimensions’: [‘/2017/04/06/2017-04-06-000000/’, ‘【時系列分析】ARCHモデルとGARCHモデルの分かり
やすい解説’], ‘metrics’: [{‘values’: [’65’]}]}
{‘dimensions’: [‘/2018/08/22/post-593/’, ‘【Python】テクニカル指標が簡単に計算できるTa-libの使い
方’], ‘metrics’: [{‘values’: [’65’]}]}
こんな感じで自分のブログの人気記事を取得できます。
get_report()のリクエストパラメータの引数である'dateRanges'の部分で期間を指定しています。
他にもmetrics:を弄ると、ページビューだけではなく、セッション・滞在時間・ユーザー属性などの様々なアクセスデータを取得することも可能です。
そして最後の'orderBys'はSQLの要領でデータをソートするように指定しているだけです。
パラメーターのdimensionとmetricsは膨大で全部説明すると長くなるので、他の指標や次元が気になる人はGoogleAnalyticsAPIの公式ドキュメントを参照してください。
参照記事
・https://omohikane.com/python_no_module_oauth2client/
・https://torina.top/detail/357/
・https://developers.google.com/analytics/devguides/reporting/core/v4/samples?hl=ja
・https://note.nkmk.me/python-google-analytics-reporting-api-download/
関連記事:【Python】TwitterのAPIを簡単操作できる「Tweepy」の使い方
関連記事:【Python】CoinGeckoのAPIからビットコイン・アルトコインの価格データを取得する


コメント
[…] 関連記事:【Python】GoogleアナリティクスのデータをAPIを使って取得する […]