Google Analytics API with Python
I. GA4(Google Analytics 4)
GA4(Google Analytics 4)는 어플리케이션 혹은 웹에서 발생하는 사용자 데이터 수집 및 분석을 지원하는 도구이다. GA3까지 GA는 웹에서 발생하는 사용자 데이터만을 다루었으며, 2016년 상용화된 Firebase Analytics를 통해 어플리케이션에 발생하는 데이터를 확인할 수 있었다. GA4는 Firebase Analytics가 GA3와 통합 및 발전된 형태로, 2020년 출시되어 현재와 같은 기능을 가지게 되었다.
(그림 I-1-1) GA History, 출처: https://crossmasters.com
II. Reporting API v4 (⚠ for GA3)
Reporting API v4에서 자세한 내용을 확인할 수 있다.
API 사용에 필요한 라이브러리는 google-api-python-client
와 oauth2client
두 가지다.
google-api-python-client
: GC 등 다양한 Google 서비스를 호출 및 활용 가능oauth2client
: 사용자 인증 관련 라이브러리. 서비스 계정 생성 및 인증/인가 권장.
1. 서비스 계정 생성
GCP의 IAM 및 관리자 페이지에서, 서비스 계정 탭을 통해 프로젝트 별 서비스 계정을 생성 및 관리할 수 있다. 만약 생성된 프로젝트가 없다면 프로젝트를 생성하고 서비스 계정을 생성하면 된다. 서비스 계정이 생성되면 service_account@project_name.iam.gserviceaccount.com
형식의 서비스 계정 메일을 지정해주는데, 해당 메일 주소를 Google Analytics에 연동해줘야하기 때문에 기억해두는 것이 좋다.
2. 서비스 계정 키 발급
생성된 서비스 계정을 클릭하면, 서비스 계정에 대한 세부정보, 권한, 키, 측정 항목 등을 확인할 수 있다. 상단 토글 중 키를 선택해 JSON
혹은 P12
형식의 서비스 계정 키를 새롭게 발급받을 수 있다.
3. Google Analytics Access 관리
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에 다양한 예시가 존재하므로, 필요에 따라 확인하면 좋다.