User Activity API

User Activity API를 사용하면 Google 애널리틱스 속성 소유자가 단일 사용자와 연결된 모든 애널리틱스 측정 데이터를 가져올 수 있습니다. 특히 API는 특정 사용자 ID 또는 클라이언트 ID와 연결된 모든 측정 데이터를 검색합니다.

사용자 활동 요청

사용자 활동 요청을 만들려면 다음 필드를 사용하여 요청 객체를 생성합니다.

  1. 사용자와 연결된 클라이언트 ID 또는 사용자 ID

  2. 사용자와 연결된 데이터가 포함된 애널리틱스 보기 ID입니다.

  3. 필수 사항은 아니지만, 관심 있는 데이터의 기간이 필요할 수 있습니다. 기본적으로 API는 지난주의 사용자 활동을 나열합니다.

샘플 요청

POST https://analyticsreporting.googleapis.com/v4/userActivity:search

{
    "viewId": "9999999",
    "user": {
        "type": "CLIENT_ID",
        "userId": "1034600000.76425000000"
    },
    "dateRange": {
        "startDate": "2018-01-01",
        "endDate": "2018-12-31",
    }
}

샘플 응답

{
    "sessions": [{
        "sessionId": "1539184430",
        "deviceCategory": "desktop",
        "platform": "Windows",
        "dataSource": "web",
        "sessionDate": "2018-10-10"
        "activities": [{
            "activityTime": "2018-10-10T08:13:50.555105Z",
            "source": "(direct)",
            "medium": "(none)",
            "channelGrouping": "Direct",
            "campaign": "(not set)",
            "keyword": "(not set)",
            "hostname": "shop.googlemerchandisestore.com",
            "landingPagePath": "/gpsmap",
            "activityType": "PAGEVIEW",
            "customDimension": [{
                "index": 1,
                "value": "(not set)"
            }, ...]
        }, ...]
    }, ...]
    "totalRows": 1000,
    "nextPageToken": "A6JGY3",
    "sampleRate": 1
}

세션 및 활동

사용자 활동 데이터는 세션별로 그룹화됩니다. 각 세션에는 세션 ID 및 날짜와 같은 세션에 대한 일반적인 정보와 해당 세션의 사용자 활동 목록이 포함됩니다. 세션의 사용자 활동은 사용자가 담당하는 모든 '조회'로 구성됩니다. 여기에는 페이지 조회수, 전자상거래 이벤트, gtag(...) 또는 ga(...)를 통해 전송된 맞춤 이벤트 등이 포함됩니다.

페이지로 나누기

User Activity API는 페이지로 나누기를 사용하여 대규모 데이터 세트를 여러 요청 및 응답으로 나눕니다. 하지만 API에서 반환하는 데이터는 계층적으로 구조화되어 있으므로 데이터를 올바르게 수집하기 위해서는 개발자가 특별히 고려해야 할 몇 가지 사항이 있습니다.

페이지로 나누기를 위한 기본 'row' 유형은 Activity입니다. 사용자 데이터는 세션별로 그룹화되므로 페이지 경계가 세션 내부에서 발생할 수 있으며 이 세션에는 여러 페이지에 걸쳐 있는 활동이 포함될 수 있습니다.

샘플 데이터

시연을 위해 다음 샘플 데이터를 사용하겠습니다. 이 예에서 사용자는 3일 동안 6개의 세션에서 사이트와 상호작용했습니다.

날짜 세션 ID 이벤트 라벨 시간
2018-11-23 1 A 10:26
2018-11-23 1 B 10:32
2018-11-23 1 C 10:39
2018-11-23 2 A 18:04
2018-11-23 2 B 18:11
2018-11-23 2 C 18:26
2018-11-24 3 A 11:26
2018-11-24 3 B 11:29
2018-11-24 3 C 11:39
2018-11-24 3 D 11:42
2018-11-24 4 A 23:50
2018-11-24 4 B 23:54
2018-11-25 5 C 00:02
2018-11-25 5 D 00:13
2018-11-25 6 A 13:01
2018-11-25 6 B 13:09
2018-11-25 6 C 13:12
2018-11-25 6 D 13:23

단일 페이지

pageSize가 18 이상인 사용자 활동 요청을 하면 데이터가 모두 단일 페이지로 전달되며 다음과 같이 표시됩니다.

POST https://analyticsreporting.googleapis.com/v4/userActivity:search

{
    "viewId": "9999999",
    "user": {
        "type": "CLIENT_ID",
        "userId": "1034600000.76425000000",
    },
    "dateRange": {
        "startDate": "2018-11-20",
        "endDate": "2018-11-30",
    },
    "pageSize": 100,
}
{
    "totalRows": 18,
    "sessions": [{
            "sessionId": "1",
            "sessionDate": "2018-11-23",
            "activities": [{
                    "activityTime": "2018-11-23T10:26:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-23T10:32:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-23T10:39:00",
                    "event": {"eventLabel": "C"}
                }]
        }, {
            "sessionId": "2",
            "sessionDate": "2018-11-23",
            "activities": [{
                    "activityTime": "2018-11-23T18:04:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-23T18:11:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-23T18:26:00",
                    "event": {"eventLabel": "C"}
                }]
        }, {
            "sessionId": "3",
            "sessionDate": "2018-11-24",
            "activities": [{
                    "activityTime": "2018-11-24T11:26:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-24T11:29:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-24T11:39:00",
                    "event": {"eventLabel": "C"}
                }, {
                    "activityTime": "2018-11-24T11:42:00",
                    "event": {"eventLabel": "D"}
                }]
        }, {
            "sessionId": "4",
            "sessionDate": "2018-11-24",
            "activities": [{
                    "activityTime": "2018-11-24T23:50:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-24T23:54:00",
                    "event": {"eventLabel": "B"}
                }]
        }, {
            "sessionId": "5",
            "sessionDate": "2018-11-25",
            "activities": [{
                    "activityTime": "2018-11-25T00:01:00",
                    "event": {"eventLabel": "C"}
                }, {
                    "activityTime": "2018-11-25T00:13:00",
                    "event": {"eventLabel": "D"}
                }]
        }, {
            "sessionId": "6",
            "sessionDate": "2018-11-25",
            "activities": [{
                    "activityTime": "2018-11-25T13:01:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-25T13:09:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-25T10:12:00",
                    "event": {"eventLabel": "C"}
                }, {
                    "activityTime": "2018-11-25T10:23:00",
                    "event": {"eventLabel": "D"}
                }]
        }]
}

여러 페이지

하지만 페이지 크기가 5이면 이 데이터는 다음과 같이 4개의 응답 페이지로 분할됩니다.

날짜세션 ID이벤트 라벨시간
1페이지
2018-11-231A10:26
2018-11-231B10:32
2018-11-231C10:39
2018-11-232A18:04
2018-11-232B18:11
2페이지
2018-11-232C18:26
2018-11-243A11:26
2018-11-243B11:29
2018-11-243C11:39
2018-11-243D11:42
3페이지
2018-11-244A23:50
2018-11-244B23:54
2018-11-255C00:02
2018-11-255D00:13
2018-11-256A13:01
4페이지
2018-11-256B13:09
2018-11-256C13:12
2018-11-256D13:23

세션 2는 첫 번째 페이지와 두 번째 페이지로 구분되고, 11월 24일의 두 세션은 두 번째 페이지와 세 번째 페이지로 구분되어 있습니다. 응답은 다음과 같습니다.

{
    "totalRows": 18,
    "nextPageToken": "UGMGQS",
    "sessions": [{
            "sessionId": "1",
            "sessionDate": "2018-11-23",
            "activities": [{
                    "activityTime": "2018-11-23T10:26:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-23T10:32:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-23T10:39:00",
                    "event": {"eventLabel": "C"}
                }]
        }, {
            "sessionId": "2",
            "sessionDate": "2018-11-23",
            "activities": [{
                    "activityTime": "2018-11-23T18:04:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-23T18:11:00",
                    "event": {"eventLabel": "B"}
                }]
        }]
}
{
    "totalRows": 18,
    "nextPageToken": "1FKOME",
    "sessions": [{
            "sessionId": "2",
            "sessionDate": "2018-11-23",
            "activities": [{
                    "activityTime": "2018-11-23T18:26:00",
                    "event": {"eventLabel": "C"}
                }]
        }, {
            "sessionId": "3",
            "sessionDate": "2018-11-24",
            "activities": [{
                    "activityTime": "2018-11-24T11:26:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-24T11:29:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-24T11:39:00",
                    "event": {"eventLabel": "C"}
                }, {
                    "activityTime": "2018-11-24T11:42:00",
                    "event": {"eventLabel": "D"}
                }]
        }]
}
{
    "totalRows": 18,
    "nextPageToken": "7S77H6",
    "sessions": [{
            "sessionId": "4",
            "sessionDate": "2018-11-24",
            "activities": [{
                    "activityTime": "2018-11-24T23:50:00",
                    "event": {"eventLabel": "A"}
                }, {
                    "activityTime": "2018-11-24T23:54:00",
                    "event": {"eventLabel": "B"}
                }]
        }, {
            "sessionId": "5",
            "sessionDate": "2018-11-25",
            "activities": [{
                    "activityTime": "2018-11-25T00:01:00",
                    "event": {"eventLabel": "C"}
                }, {
                    "activityTime": "2018-11-25T00:13:00",
                    "event": {"eventLabel": "D"}
                }]
        }, {
            "sessionId": "6",
            "sessionDate": "2018-11-25",
            "activities": [{
                    "activityTime": "2018-11-25T13:01:00",
                    "event": {"eventLabel": "A"}
                }]
        }]
}
{
    "totalRows": 18,
    "sessions": [{
            "sessionId": "6",
            "sessionDate": "2018-11-25",
            "activities": [{
                    "activityTime": "2018-11-25T13:09:00",
                    "event": {"eventLabel": "B"}
                }, {
                    "activityTime": "2018-11-25T10:12:00",
                    "event": {"eventLabel": "C"}
                }, {
                    "activityTime": "2018-11-25T10:23:00",
                    "event": {"eventLabel": "D"}
                }]
        }]
}

데이터 샘플링

클라이언트가 요청한 기간 동안 방대한 양의 데이터를 축적한 경우 API는 샘플링된 활동 하위 집합만 반환할 수 있습니다. 이 경우 sampleRate 필드는 반환된 사용자 활동의 비율을 나타냅니다.

데이터 샘플링 방법

사용자 데이터는 활동 수준에서 샘플링됩니다. 예를 들어 샘플링 레이트가 50% (0.5)이면 사용자 활동의 절반이 응답에 표시됩니다.

이러한 샘플링 활동은 임의로 선택됩니다. API는 무작위 샘플링을 보장하지 않으며, 샘플링이 지정된 기간의 활동에 비례한다고 보장하지 않습니다.

데이터 샘플링 방지

이 API는 세션을 단순히 활동의 모음으로 취급하므로 샘플링된 세트에 활동이 표시되지 않는 세션은 응답에 표시되지 않습니다. 세션 또는 활동의 전체 목록이 필요한 경우 기간을 줄여 후속 요청을 제출하세요.

예를 들어 2018-01-01에서 2018-12-31까지의 데이터를 요청하고 응답에 0.25의 샘플링 레이트가 표시되면 요청된 기간을 네 부분으로 나눕니다. 그러면 각 부분에 원본 데이터의 약 1/4이 포함될 수 있습니다.

  • 2018-01-01~2018-03-31
  • 2018-04-01~2018-06-30
  • 2018-07-01~2018-09-30
  • 2018-10-01~2018-12-31