HOME > python > tips

Google Analytics API로 웹사이트 분석하기 (Python)

By JS | 30 Dec 2019

Google Analytics를 이용하면 내 사이트에 얼마나 많은 사람들이 들어왔는지, 어떤 페이지를 주로 방문하는지 알 수 있습니다. 또한, 구글 검색을 통해 들어왔는지 트위터나 페이스북의 링크를 통해 들어왔는지 알 수 있습니다.

Google Analytics는 내 웹사이트의 데이터를 가져올 수 있는 API를 제공합니다. 이 API를 통해 방문자 등의 정보를 자신의 기준에 맞게 정리할 수 있습니다.

API는 Java, Python, PHP 의 언어로 제공되며, 누구나 사용할 수 있습니다.

이 글에서는 Python으로 Analytics API를 사용하는 방법에 대해서 알아보겠습니다.

Analytics API 설정

Analytics API를 사용하려면, Google cloud에 Service Account를 갖고 있어야 합니다. 자신의 Service Account에 들어가면 Key를 생성할 수 있고 json 파일로 제공됩니다. Key 파일은 Python에서 API를 호출할 때 필요합니다.

자세한 설정방법은 Guide를 참고해주세요

또 중요한 것은, 아래 그림과 같이 사용하려는 Service Account의 email 주소를 나의 Google Analytics에 등록해야 합니다. Analytics에서 Service Account의 email에 Read 권한을 주지 않으면 데이터를 읽을 수 없기 때문입니다. service account

Google Analytics에서 아래와 같은 메뉴에 들어가서 Add User 버튼을 누릅니다. analytics

내 Service account의 email을 입력하고 Add 버튼을 누릅니다. analytics add email

지금까지

  1. Service Account의 Key 파일을 다운받았습니다.
  2. Service Account의 email을 Analytics에 등록하였고, Read & Analyze 권한을 주었습니다.

Python 설치

다음 명령어로 analytics api를 설치할 수 있습니다.

$ sudo pip install --upgrade google-api-python-client

Session 개수를 가져오는 예제

지난 시간동안 내 사이트에 접속한 Session 개수를 가져오는 예제입니다.

저는 다음과 같이 프로젝트를 구성하였습니다.

├── codechacha-f4f4ad4248b0.json
└── run_analytics.py

codechacha-f4f4ad4248b0.json는 저의 Key 파일입니다. run_analytics.py는 예제를 위한 파이썬 파일입니다.

Python 파일에는 다음과 같이 코드를 입력합니다.

run_analytics.py

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials


def get_service(api_name, api_version, scopes, key_file_location):
    """Get a service that communicates to a Google API.

    Args:
        api_name: The name of the api to connect to.
        api_version: The api version to connect to.
        scopes: A list auth scopes to authorize for the application.
        key_file_location: The path to a valid service account JSON key file.

    Returns:
        A service that is connected to the specified API.
    """

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
            key_file_location, scopes=scopes)

    # Build the service object.
    service = build(api_name, api_version, credentials=credentials)

    return service


def get_first_profile_id(service):
    # Use the Analytics service object to get the first profile id.

    # Get a list of all Google Analytics accounts for this user
    accounts = service.management().accounts().list().execute()

    if accounts.get('items'):
        # Get the first Google Analytics account.
        account = accounts.get('items')[0].get('id')

        # Get a list of all the properties for the first account.
        properties = service.management().webproperties().list(
                accountId=account).execute()

        if properties.get('items'):
            # Get the first property id.
            property = properties.get('items')[0].get('id')

            # Get a list of all views (profiles) for the first property.
            profiles = service.management().profiles().list(
                    accountId=account,
                    webPropertyId=property).execute()

            if profiles.get('items'):
                # return the first view (profile) id.
                return profiles.get('items')[0].get('id')

    return None


def get_results(service, profile_id):
    # Use the Analytics Service Object to query the Core Reporting API
    # for the number of sessions within the past seven days.
    return service.data().ga().get(
            ids='ga:' + profile_id,
            start_date='7daysAgo',
            end_date='today',
            metrics='ga:sessions').execute()


def print_results(results):
    # Print data nicely for the user.
    if results:
        print('View (Profile):{}'.format(results.get('profileInfo').get('profileName')))
        print('Total Sessions:{}'.format(results.get('rows')[0][0]))
    else:
        print('No results found')


def main():
    # Define the auth scopes to request.
    scope = 'https://www.googleapis.com/auth/analytics.readonly'
    key_file_location = './codechacha-f4f4ad4248b0.json'

    # Authenticate and construct service.
    service = get_service(
            api_name='analytics',
            api_version='v3',
            scopes=[scope],
            key_file_location=key_file_location)

    profile_id = get_first_profile_id(service)
    print_results(get_results(service, profile_id))


if __name__ == '__main__':
    main()

여기서 아래 key 파일의 path는 자신의 것으로 변경을 해야 합니다. key는 파이썬 파일과 다른 경로에 있어도 됩니다.

key_file_location = './codechacha-f4f4ad4248b0.json'

실질적으로 API로 데이터를 가져오는 부분은 아래 코드입니다. 7일전부터 오늘까지의 session 개수를 가져오도록 하였습니다.

return service.data().ga().get(
        ids='ga:' + profile_id,
        start_date='7daysAgo',
        end_date='today',
        metrics='ga:sessions').execute()

위 코드 실행 결과는 다음과 같습니다.

$ python run_analytics.py
View (Profile):전체 웹사이트 데이터
Total Sessions:1666

참고