Google アナリティクスのプロパティのオーナーは、User Activity API を使用して、1 人のユーザーに関連付けられたすべてのアナリティクス測定データを取得できます。具体的には、API は特定のユーザー ID またはクライアント ID に関連付けられているすべての測定データを取得します。
ユーザー アクティビティ リクエストの実行
ユーザー アクティビティ リクエストを作成するには、次のフィールドを使用してリクエスト オブジェクトを作成します。
ユーザーに関連付けられているクライアント ID またはユーザー ID
- これらのフィールドの検索方法について詳しくは、Cookie とユーザーの識別をご覧ください。
ユーザーに関連付けられているデータを含むアナリティクスのビュー ID。
- Account Explorer を使用すると、ビュー ID を検索できます。
必須ではありませんが、目的のデータの期間が必要になることがあります。デフォルトでは、API は過去 1 週間のユーザー アクティビティを一覧表示します。
リクエストの例
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(...)
を介して送信されたページビュー、e コマース イベント、カスタム イベントなどが含まれます。
ページネーション
User Activity API は、ページ分けを使用して、大規模なデータセットを複数のリクエストとレスポンスに分割します。ただし、API によって返されるデータは階層構造になっているため、データを正しく照合するには、デベロッパーが特別な考慮事項に対応する必要があります。
ページ分割を目的とした基本的な「行」タイプはアクティビティです。ユーザーデータはセッションごとにグループ化されるため、セッション内でページ境界が発生する可能性があり、そのセッションでは複数のページにまたがるアクティビティが発生する可能性があります。
サンプルデータ
ここではデモを目的として、次のサンプルデータを使用します。この例では、ユーザーは 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 |
1 ページ
pageSize
を 18 以上に設定してユーザー アクティビティ リクエストを行うと、データはすべて 1 つのページに配信され、次のようになります。
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-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 |
ページ 2: | |||
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 |
ページ 3: | |||
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 |
ページ 4: | |||
2018-11-25 | 6 | B | 13:09 |
2018-11-25 | 6 | C | 13:12 |
2018-11-25 | 6 | D | 13:23 |
セッション 2 は 1 ページ目と 2 ページ目に分かれており、11 月 24 日の 2 つのセッションは 2 ページ目と 3 ページ目に分かれています。レスポンスは次のようになります。
{
"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 つの部分に分割して、各部分に元のデータの約 4 分の 1 が含まれるようにします。
2018-01-01
から2018-03-31
2018-04-01
から2018-06-30
2018-07-01
から2018-09-30
2018-10-01
から2018-12-31