Cosnomi

プログラミングをする医学生。物を作ること、自動化すること、今まで知らなかったことを知ることが好き。TypeScript書いたり、Pythonで機械学習したりなど。

Twitter / GitHub / GPG key / Fediverse / My Page
TOP >

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

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に登録します。

左のメニューからサービスアカウントを選択し、先程登録したサービスアカウントのメールアドレスをコピーしてください。(example@<数字>.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のデータが表示されるはずです。サンプルの実行だけでもかなり長くなってしまいましたが、ここまでできれば後は公式ドキュメントに従って必要なデータを取得できるはずです。

お疲れ様でした。


Comments

記事一覧へ