본문 바로가기
PA도구

GA4 API 사용법(3): API 여러번 호출시 함수로 코드 간결화 시키기

by 데분노트 2024. 11. 7.

GA4 API를 활용해서 데이터를 가져오는 것을 진행해보았습니다. 하지만, 여러번 데이터를 호출시 매번 똑같은 코드를 작성할 순없겠죠. 이 때 함수로 코드 간결화 시키면 보다 쉽게 원하는 데이터를 가져올 수있습니다. 이 방법에 대해 알아보겠습니다.

 

GA4에서 측정기준(=dimensions)과 측정항목(=metrics) 2가지만 있으면, 아래 이미지처럼 '자유형식 탐색분석'에서 우리가 보려고 하는 다양한 데이터를 조회할 수 있습니다. 예를 들어, 특정 이벤트가 날짜별로 발생된 수를 알고 싶다고 하면, 측정 기준으로 날짜(GA4 API에서는 'date'), 이벤트 이름(GA4 API에서는 ' eventName')을 선택하고, 측정 항목으로 이벤트 수 (GA4 API에서는 ' eventCount')를 선택하면 되죠. 추가적으로 기간, 필터도 설정할 수 있을 거고, 정렬도 필요할 수 있겠죠.

 

 

이렇게 측정 기준, 측정 항목, 기간, 필터, 정렬 5가지 옵션을 원하는 대로 설정하여 데이터를 불러올 수 있도록 함수를 만들어보겠습니다.

 

def create_ga4_request( ​​​​dimensions: Union[str, List[str]] = None, ​​​​metrics: Union[str, List[str]] = None, ​​​​start_date: str = None, ​​​​end_date: str = None, ​​​​dimension_filter: Optional[FilterExpression] = None, # 선택적으로 사용 가능 ​​​​dimension_order_bys: Optional[str] = None, ​​​​metric_order_bys: Optional[str] = None, ​​​​default_dimension: str = 'date' ) -> pd.DataFrame: ​​​​# dimensions와 metrics가 단일 값일 경우 리스트로 변환 ​​​​if dimensions is None: ​​​​​​​​dimensions = [default_dimension] # dimensions가 없으면 기본적으로 default_dimension 추가 ​​​​elif isinstance(dimensions, str): ​​​​​​​​dimensions = [dimensions] ​​​​ ​​​​if metrics is None: ​​​​​​​​metrics = [] # metrics가 없으면 빈 리스트 사용 ​​​​elif isinstance(metrics, str): ​​​​​​​​metrics = [metrics] ​​​​# dimensions에 default_dimension이 포함되지 않는 경우 추가 ​​​​if default_dimension not in dimensions: ​​​​​​​​dimensions.insert(0, default_dimension) ​​​​ ​​​​# Dimension과 Metric 객체로 변환 ​​​​dimension_objects = [Dimension(name=dim) for dim in dimensions] ​​​​metric_objects = [Metric(name=met) for met in metrics] ​​​​# date_ranges 설정 ​​​​date_ranges = [] ​​​​date_ranges = [DateRange( ​​​​​​​​start_date=start_date, ​​​​​​​​end_date=end_date ​​​​)] ​​​​ ​​​​# dimension_order_bys와 metric_order_bys 값이 None이 아닐 경우에만 사용하도록 설정 가능 ​​​​order_bys = [] ​​​​if dimension_order_bys: ​​​​​​​​order_bys.append(OrderBy(dimension={'dimension_name': dimension_order_bys})) ​​​​if metric_order_bys: ​​​​​​​​order_bys.append(OrderBy(metric={'metric_name': metric_order_bys})) ​​​​# GA4 요청 객체 생성 ​​​​request = RunReportRequest( ​​​​​​​​property=f'properties/{property_id}', ​​​​​​​​dimensions=dimension_objects, ​​​​​​​​metrics=metric_objects, ​​​​​​​​order_bys=order_bys ​​​​​​​​date_ranges=date_ranges, ​​​​​​​​dimension_filter=dimension_filter ​​​​) ​​​​ ​​​​df = format_report(request) ​​​​​​​​ ​​​​return df

 

이렇게 함수를 만들면, dimensions, metrics, start_date, end_date만 설정해주면 됩니다. 추가적으로 dimension_order_bys, metric_order_bys, dimension_filter는 옵션으로 사용할 수 있습니다. 주로 측정기준으로 가장 자주 사용하는 날짜(=date)는 디폴트로 들어가게끔 설정해주었습니다. 이렇게 원하는 값을 함수에 넣으면, 데이터 프레임으로 반환됩니다.