API активности пользователей

API активности пользователей позволяет владельцу ресурса Google Analytics получать все данные аналитических измерений, связанные с одним пользователем. В частности, API извлекает все данные измерений, связанные с определенным идентификатором пользователя или идентификатором клиента.

Выполнение запроса на активность пользователя

Чтобы сделать запрос активности пользователя, создайте объект запроса со следующими полями:

  1. Идентификатор клиента или идентификатор пользователя, связанный с пользователем.

  2. Идентификатор представления Analytics, содержащий данные, связанные с пользователем.

  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
}

Сессии и мероприятия

Данные об активности пользователей сгруппированы по сеансам. Каждый сеанс содержит общую информацию о сеансе, такую ​​как идентификатор и дата сеанса, а также список действий пользователя для этого сеанса. Действия пользователя в сеансе включают каждое «обращение», за которое пользователь несет ответственность; сюда входят такие вещи, как просмотры страниц, события электронной торговли и пользовательские события, отправленные через gtag(...) или ga(...) .

Пагинация

API активности пользователей использует нумерацию страниц для разбиения больших наборов данных на несколько запросов и ответов. Однако поскольку данные, возвращаемые API, имеют иерархическую структуру, разработчику необходимо принять некоторые особые меры для правильного сопоставления данных.

Базовым типом «строки» для нумерации страниц является «Действие». Поскольку пользовательские данные группируются по сеансам, это означает, что граница страницы может возникать внутри сеанса, и этот сеанс может иметь действия, охватывающие несколько страниц.

Образец данных

В демонстрационных целях мы будем использовать следующий образец данных. В этом примере пользователь взаимодействовал с сайтом за 6 сеансов в течение 3 дней.

Дата Идентификатор сессии Метка события Время
2018-11-23 1 А 10:26
2018-11-23 1 Б 10:32
2018-11-23 1 С 10:39
2018-11-23 2 А 18:04
2018-11-23 2 Б 18:11
2018-11-23 2 С 18:26
2018-11-24 3 А 11:26
2018-11-24 3 Б 11:29
2018-11-24 3 С 11:39
2018-11-24 3 Д 11:42
2018-11-24 4 А 23:50
2018-11-24 4 Б 23:54
25 ноября 2018 г. 5 С 00:02
25 ноября 2018 г. 5 Д 00:13
25 ноября 2018 г. 6 А 13:01
25 ноября 2018 г. 6 Б 13:09
25 ноября 2018 г. 6 С 13:12
25 ноября 2018 г. 6 Д 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 страницы ответов:

Дата Идентификатор сессии Метка события Время
Страница 1:
2018-11-23 1 А 10:26
2018-11-23 1 Б 10:32
2018-11-23 1 С 10:39
2018-11-23 2 А 18:04
2018-11-23 2 Б 18:11
Страница 2:
2018-11-23 2 С 18:26
2018-11-24 3 А 11:26
2018-11-24 3 Б 11:29
2018-11-24 3 С 11:39
2018-11-24 3 Д 11:42
Страница 3:
2018-11-24 4 А 23:50
2018-11-24 4 Б 23:54
25 ноября 2018 г. 5 С 00:02
25 ноября 2018 г. 5 Д 00:13
25 ноября 2018 г. 6 А 13:01
Страница 4:
25 ноября 2018 г. 6 Б 13:09
25 ноября 2018 г. 6 С 13:12
25 ноября 2018 г. 6 Д 13:23

Обратите внимание, что сеанс 2 разбит на первую и вторую страницы, а два сеанса от 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 , разделите запрошенный диапазон дат на 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