跳轉中,訪問新網域網站 https://samiliu.xyz

logo头像
Snippet 博客主题

Python:Google Analytics Reporting API 快速入門

本文教 Analytics Reporting API v4 的 Python 快速指南,使用服務帳戶(Service application)取得報表資料,大部分都是程式碼,說明較少。

啟用 GCP 服務


1. 啟用 API

在開始前要先啟用 Analytics Reporting API v4

2. 建立服務帳戶

在 GCP 的API 和服務 > 憑證 建立服務帳戶金鑰,並選擇或新增服務帳戶,將產生的 json 金鑰存到本機。

3. 權限設置

將此服務帳戶添加至 Google Analytics 報表中,檢視及分析權限即可,服務帳戶類似於以下的電子郵件地址:

quickstart@PROJECT-ID.iam.gserviceaccount.com

Python

所需套件

google-oauth2-tool
google-api-python-client

取報表函數

from apiclient.discovery import build
from google.oauth2.service_account import Credentials

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

def get_service():
    """
    Build Analytics Reporting API V4 service object.
    """
    credentials = Credentials.from_service_account_file(
        KEY_FILE_LOCATION, scopes=SCOPES
    )
    service = build(serviceName='analyticsreporting', version='v4', credentials=credentials)
    return service

def get_report(
    service, view_id, 
    start_date='7daysAgo', end_date='yesterday', 
    metrics=[], dimensions=[]
    ):
    return service.reports().batchGet(
            body={
                'reportRequests': [{
                    'viewId': view_id,
                    'dateRanges': [{'startDate': start_date, 'endDate': end_date}],
                    'metrics': [{'expression': m} for m in metrics],
                    'dimensions': [{'name': d} for d in dimensions],
                }]
            }).execute()

使用

VIEW_ID = '<VIEW_ID>'
metrics = ['ga:sessions']
dimensions = ['ga:source', 'ga:medium']
start_date, end_date = '7daysAgo', 'yesterday'

service = get_service()
response = get_report(
                service, VIEW_ID,
                start_date, end_date,
                metrics, dimensions
                )

response 轉 DataFrame

def res_to_df(res):
    report = res['reports'][0]
    dimensions = report['columnHeader']['dimensions']
    metrics = [m['name'] for m in report['columnHeader']['metricHeader']['metricHeaderEntries']]
    headers = [*dimensions, *metrics]

    data_rows = report['data']['rows']
    data = []
    for row in data_rows:
        data.append([*row['dimensions'], *row['metrics'][0]['values']])

    return pd.DataFrame(data=data, columns=headers)

df = res_to_df(response)

其他參考

Google Analytics 維度與指標組合參考