Cosnomi
Cosnomi

医療×IT / 医学生 / Web(React, Flask) / 機械学習(画像認識, Keras)

Twitter / GitHub / Keybase

PythonでGoogle Analytics APIを利用して、アクセス解析情報を取得する

今回やりたいこと

この記事ではPythonを使用して、Google Analytics API経由でアクセス数などの情報を取得してみます。今回は、データを取得するためのサービスアカウントの作成から認証情報を利用してサンプルコードを実行してみるところまでを解説します。

Google Analytics API とは

ドキュメントはこちら →https://developers.google.com/analytics/devguides/reporting/core/v4/?hl=ja

Google が公式に提供している Google Analytics のデータを取得するための APIです。基本的に無料で使えます(リクエスト数の制限はありますが個人的な利用では気にする必要はない程度です)。このAPIには複数のバージョンがあるのですが、Reporting API v4 を使用します。

とりあえず始めてみる

とりあえず使ってみましょう。

サービスアカウントの作成~認証情報の取得

こちらから、まずはプロジェクトを作成します。

プロジェクト名は適当に、場所は「組織なし」です。

次に、サービスアカウントを作成します。サービスアカウント名などは任意ですが、後で見て分かるようにします。役割は「Project > 閲覧者」とします。

次の画面ではキーの作成をします。Google Analytics API では BASIC 認証などではなく、公開鍵認証を行います。ここでは、キーのタイプを「JSON」に設定し、秘密鍵が書かれている JSON ファイルをダウンロードします。非常に重要なファイルですので、絶対に外に漏れないようにしてください。

ここまででサービスアカウントとその認証情報を取得することができました。

Google Analytics への登録

次に、作成したサービスアカウントを Google Analytics に登録します。

左のメニューからサービスアカウントを選択し、先程登録したサービスアカウントのメールアドレスをコピーしてください。([email protected]<数字>.iam.gserviceaccount.com みたいなやつです)

次に、Google Analytics の画面に移ります。左のメニューの「管理」をクリックし、

ビュー > ユーザー管理者を選択します。

そして、右上の「+」をクリックして、「新しいユーザーを追加」から先程のメールアドレスをペーストします。

これで、アカウントを使用する準備は整いました。

ライブラリのインストール

他の API と同様に、Google Analytics API を requests などで叩く方法もあるのですが、Google が専用の Python のライブラリを提供しているのでそれを使ったほうが楽です。

sudo pip install --upgrade google-api-python-client

でインストールします。

次に、下のコードはドキュメントにあるサンプルコードなのですが、これをコピーして一部を変更します。

"""Hello Analytics Reporting API V4."""

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = '<REPLACE_WITH_JSON_FILE>'
VIEW_ID = '<REPLACE_WITH_VIEW_ID>'

def initialize_analyticsreporting():
  """Initializes an Analytics Reporting API V4 service object.

  Returns:
    An authorized Analytics Reporting API V4 service object.
  """
  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):
  """Queries the Analytics Reporting API V4.

  Args:
    analytics: An authorized Analytics Reporting API V4 service object.
  Returns:
    The Analytics Reporting API V4 response.
  """
  return analytics.reports().batchGet(
      body={
        'reportRequests': [
        {
          'viewId': VIEW_ID,
          'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
          'metrics': [{'expression': 'ga:sessions'}],
          'dimensions': [{'name': 'ga:country'}]
        }]
      }
  ).execute()

def print_response(response):
  """Parses and prints the Analytics Reporting API V4 response.

  Args:
    response: An Analytics Reporting API V4 response.
  """
  for report in response.get('reports', []):
    columnHeader = report.get('columnHeader', {})
    dimensionHeaders = columnHeader.get('dimensions', [])
    metricHeaders = columnHeader.get('metricHeader', {}).get('metricHeaderEntries', [])

    for row in report.get('data', {}).get('rows', []):
      dimensions = row.get('dimensions', [])
      dateRangeValues = row.get('metrics', [])

      for header, dimension in zip(dimensionHeaders, dimensions):
        print header + ': ' + dimension

      for i, values in enumerate(dateRangeValues):
        print 'Date range: ' + str(i)
        for metricHeader, value in zip(metricHeaders, values.get('values')):
          print metricHeader.get('name') + ': ' + value

def main():
  analytics = initialize_analyticsreporting()
  response = get_report(analytics)
  print_response(response)

if __name__ == '__main__':
  main()

変更箇所はKEY_FILE_LOCATIONVIEW_IDです。KEY_FILE_LOCATION はその名の通り、ダウンロードした JSON ファイルの場所です。例として、/root に key.json を置いたのなら、

KEY_FILE_LOCATION = os.path.join('/root', 'key.json')

となります。VIEW_IDAnalytics の「管理」から次のように確認できます。

これら 2 箇所を変更したら準備はほぼ終わりです。

しかしここでちょっとした罠があり、先程のサンプルのスクリプトは Python 2 で書かれているため、Python 3 の環境で実行すると print に()がないと怒られてしまいます。すべてのprint 'hoge'print ('hoge')に変更します。

これでサンプルのコードを実行すると、Analytics のデータが表示されるはずです。サンプルの実行だけでもかなり長くなってしまいましたが、ここまでできれば後は公式ドキュメントに従って必要なデータを取得できるはずです。

お疲れ様でした。