포스트

Google Analytics API with Python

I. GA4(Google Analytics 4)

GA4(Google Analytics 4)는 어플리케이션 혹은 웹에서 발생하는 사용자 데이터 수집 및 분석을 지원하는 도구이다. GA3까지 GA는 웹에서 발생하는 사용자 데이터만을 다루었으며, 2016년 상용화된 Firebase Analytics를 통해 어플리케이션에 발생하는 데이터를 확인할 수 있었다. GA4는 Firebase Analytics가 GA3와 통합 및 발전된 형태로, 2020년 출시되어 현재와 같은 기능을 가지게 되었다.

ga-history (그림 I-1-1) GA History, 출처: https://crossmasters.com

II. Reporting API v4 (⚠ for GA3)

Reporting API v4에서 자세한 내용을 확인할 수 있다.

API 사용에 필요한 라이브러리는 google-api-python-clientoauth2client 두 가지다.

  1. google-api-python-client: GC 등 다양한 Google 서비스를 호출 및 활용 가능
  2. oauth2client: 사용자 인증 관련 라이브러리. 서비스 계정 생성 및 인증/인가 권장.

1. 서비스 계정 생성

GCP IAM 및 관리자 페이지

GCP의 IAM 및 관리자 페이지에서, 서비스 계정 탭을 통해 프로젝트 별 서비스 계정을 생성 및 관리할 수 있다. 만약 생성된 프로젝트가 없다면 프로젝트를 생성하고 서비스 계정을 생성하면 된다. 서비스 계정이 생성되면 service_account@project_name.iam.gserviceaccount.com 형식의 서비스 계정 메일을 지정해주는데, 해당 메일 주소를 Google Analytics에 연동해줘야하기 때문에 기억해두는 것이 좋다.

2. 서비스 계정 키 발급

생성된 서비스 계정을 클릭하면, 서비스 계정에 대한 세부정보, 권한, 키, 측정 항목 등을 확인할 수 있다. 상단 토글 중 키를 선택해 JSON 혹은 P12 형식의 서비스 계정 키를 새롭게 발급받을 수 있다.

3. Google Analytics Access 관리

GA 관리자 페이지

GA의 관리페이지의 계정 탭에서 액세스 가능한 계정을 관리할 수 있다. 계정별로 역할 및 데이터에 제한을 둘 수 있으므로, 필요에 따라 설정함으로써 불필요한 데이터 접근 등을 막을 수 있다.

4. Reporting API v4 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = '(생략)'

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
VIEW_ID = '(생략)'

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()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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)
1
2
3
analytics = initialize_analyticsreporting()
response = get_report(analytics)
print_response(response)

5. Trouble Shooting

1
HttpError: <HttpError 403 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "Analytics Reporting API has not been used in project ------ before or it is disabled.>

GCP에서 Analytics Reporting API를 활성화하지 않은 경우 위와 같은 오류가 발생한다.

1
Enable it by visiting https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/overview?project=------ then retry.

위에 명시된 주소로 이동해 Analytics Reporting API를 활성화하면 정상적으로 처리된다.

III. Analytics Data API (⚠ for GA4)

Analytics Data API에서 자세한 내용을 확인할 수 있다.

Reporting API와 달리, google-analytics-data라이브러리만을 사용해 손쉽게 필요한 기능을 구현할 수 있다.

서비스 계정 생성, 키 발급, Access 관리는 위와 동일하므로 생략한다.

1. Google Analytics Data API 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import DateRange
from google.analytics.data_v1beta.types import Dimension
from google.analytics.data_v1beta.types import Metric
from google.analytics.data_v1beta.types import RunReportRequest

credential_json_path = 'jeeklee-411400-b47c5547c663.json'

def sample_run_report(property_id):
    """Runs a simple report on a Google Analytics 4 property."""
    # Use JSON file to authenticate
    client = BetaAnalyticsDataClient().from_service_account_json(credential_json_path)

    request = RunReportRequest(
        property=f"properties/{property_id}",
        dimensions=[Dimension(name="city")],
        metrics=[Metric(name="activeUsers")],
        date_ranges=[DateRange(start_date="2020-03-31", end_date="today")],
    )
    response = client.run_report(request)

    print("Report result:")
    for row in response.rows:
        print(row.dimension_values[0].value, row.metric_values[0].value)

Google Analytics Data Repo에 다양한 예시가 존재하므로, 필요에 따라 확인하면 좋다.

IV. References

  1. Reporting API v4
  2. Analytics Data API
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.