概要
アクセス数等をGoogleアナリティクスからPythonで取得する。
導入
pip install --upgrade google-api-python-client
参考サイト
https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/installed-py
前提条件
Googleアナリティクスのアカウントは既に開設されているものとする。
credentialの用意
上記URLから CREATE CREDENTIALS → OAuth Client IDと選択してOAuthのクライアントIDを生成する。
作成したClient IDsを下記からダウンロードする。
view idの取得
Google Analyticsのページから左下のAdmin → View Settingsから自身のView IDを確認できる。
サンプルコード
CLIENT_SECRETS_PATH = 'さっき落としたjsonファイルのパス' VIEW_ID = 'さっき確認したview id' import httplib2 from apiclient.discovery import build 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') # 認証周りのコード flow = client.flow_from_clientsecrets( CLIENT_SECRETS_PATH, scope=SCOPES, message=tools.message_if_missing(CLIENT_SECRETS_PATH)) storage = file.Storage('analyticsreporting.dat') credentials = storage.get() if credentials is None or credentials.invalid: credentials = tools.run_flow(flow, storage) http = credentials.authorize(http=httplib2.Http()) analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI) # 7日分のレポート取得 report = analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}], 'metrics': [{'expression': 'ga:sessions'}] }] } ).execute()
実行するとブラウザが立ち上がって「認証されてないアプリだけど」とか言われるけど無視して許可する。
実行結果は下記。
{'reports': [{'columnHeader': {'metricHeader': {'metricHeaderEntries': [{'name': 'ga:sessions', 'type': 'INTEGER'}]}}, 'data': {'rows': [{'metrics': [{'values': ['1838']}]}], 'totals': [{'values': ['1838']}], 'rowCount': 1, 'minimums': [{'values': ['1838']}], 'maximums': [{'values': ['1838']}]}}]}
metricsの指定
上記リクエストではmetricsパラメータに [{'expression': 'ga:sessions'}] を指定している。
expressionにga:sessionsとga:pageviews を指定すればセッション数とページビューが取れる。
report = analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}], 'metrics': [ {'expression': 'ga:sessions'}, {'expression': 'ga:pageviews'}, {'expression': 'ga:uniquePageviews'}, {'expression': 'ga:users'}, {'expression': 'ga:entrances'}, {'expression': 'ga:exits'}, ] }] } ).execute()
指定できるパラメータは下記などを参照。
https://ga-dev-tools.appspot.com/dimensions-metrics-explorer/
https://developers.google.com/analytics/devguides/reporting/core/v3/common-queries
日ごとの数値の取得
日毎の集計を取りたい場合は、'dimensions': [{'name': 'ga:date'}] を指定する。
下記は3日前から今日までの日毎のセッション数とPVを取得する例。
report = analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '3daysAgo', 'endDate': 'today'}], 'dimensions': [{'name': 'ga:date'}], 'metrics': [ {'expression': 'ga:sessions'}, {'expression': 'ga:pageviews'}, ] }] } ).execute()
実行結果
{'reports': [{'columnHeader': {'dimensions': ['ga:date'], 'metricHeader': {'metricHeaderEntries': [{'name': 'ga:sessions', 'type': 'INTEGER'}, {'name': 'ga:pageviews', 'type': 'INTEGER'}]}}, 'data': {'rows': [{'dimensions': ['20200108'], 'metrics': [{'values': ['423', '485']}]}, {'dimensions': ['20200109'], 'metrics': [{'values': ['482', '565']}]}, {'dimensions': ['20200110'], 'metrics': [{'values': ['471', '566']}]}, {'dimensions': ['20200111'], 'metrics': [{'values': ['23', '26']}]}], 'totals': [{'values': ['1399', '1642']}], 'rowCount': 4, 'minimums': [{'values': ['23', '26']}], 'maximums': [{'values': ['482', '566']}]}}]}
dimensionにはその他にも ga:browserやga:browserVersionでブラウザ別、ga:countryで国別、ga:operatingSystemやga:operatingSystemVersionでOS別の集計などが取れる。
30日分のデータをplotしてみる
pandasとmatplotlibが入っていること。
# 30daysAgoからtodayまで取得 report = analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '30daysAgo', 'endDate': 'today'}], 'dimensions': [{'name': 'ga:date'}], 'metrics': [ {'expression': 'ga:sessions'}, {'expression': 'ga:pageviews'}, ] }] } ).execute() # 取得したレポートをDataFrameに import pandas as pd from datetime import datetime df = pd.DataFrame([ { 'date': pd.to_datetime(dim['dimensions'][0]), 'session': int(dim['metrics'][0]['values'][0]), 'pv': int(dim['metrics'][0]['values'][1]) } for dim in report['reports'][0]['data']['rows'] ]) # plot df.set_index('date').plot()
改定履歴
Author: Masato Watanabe, Date: 2020-01-11, 記事投稿