最近うと自分のサイトの分析をしたいなと思い立ち、以前からサイトに設置している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を使って取得する […]