このクイックスタートでは、アカウントの OAuth トークンを取得し、タイムスタンプを使用して Data Portability API エンドポイントにリクエストを送信して、エクスポートされたデータをフィルタします。
このクイックスタートでは、時間ベースのアクセスで Data Portability API を使用し、サポートされているリソースに時間フィルタを適用する方法について説明します。ユーザーデータへの時間ベースのアクセスの詳細については、時間ベースのアクセスを使用するをご覧ください。
学習内容
このクイックスタートでは、次の方法について学習します。
InitiatePortabilityArchive
エンドポイントに認証済みのリクエストを定期的に送信して、前回のエクスポート以降の新しいデータのみをエクスポートします。InitiatePortabilityArchive
エンドポイントに認証済みリクエストを送信して、過去 6 か月間のデータのみをエクスポートします。InitiatePortabilityArchive
エンドポイントに認証済みリクエストを送信して、特定の期間のデータをエクスポートします。
前提条件
このクイックスタートを実行するには、以下が必要です。
- ユーザーが Data Portability API を利用できることを確認します。サポートされている国と地域の一覧については、[データのコピーをサードパーティと共有する] ページのよくある質問をご覧ください。
- Data Portability API の設定手順を完了します。
- 手順に沿って、JavaScript ウェブアプリの OAuth を構成します。本番環境では、通常、ウェブサーバー アプリケーション用の OAuth フローなど、別のフローを使用します。このクイックスタートでは、簡潔にするため JavaScript ウェブアプリのフローを使用します。
- 認証情報を作成するときに、OAuth 2.0 クライアント ID と承認済みのリダイレクト URI(https://google.com など)をメモします。これらの値は、クイックスタートの後半で必要になります。
- Data Portability API のスコープを構成する際は、このクイックスタートで
myactivity.search
リソース グループ(https://www.googleapis.com/auth/dataportability.myactivity.search)が使用されることに注意してください。 - アクセスを許可する時間を選択する場合は、時間ベースのアクセスで時間フィルタリングをテストするために [30 日間] を選択する必要があります。(時間フィルタは 1 回限りのアクセスでも機能します)。
- OAuth トークンを取得します。
- 組織が所有または管理するアカウントへのアクセス権を取得します。このクイックスタートでは、このアカウントの検索アクティビティ データがエクスポートされます。
OAuth トークンを取得する
このクイックスタートでは、認可リクエストを送信して URL を使用して OAuth トークンを取得します。このプロセスでは、JavaScript ウェブアプリのフローを使用します。このフローでは更新トークンは返されません。
本番環境のアプリでは、通常、OAuth フローを使用して更新トークンを取得し、必要に応じてアクセス トークンを生成します。たとえば、サーバーサイド ウェブアプリのフローがこれに該当します。
OAuth トークンを取得するには:
次のような URL を作成します。
https://accounts.google.com/o/oauth2/v2/auth? client_id=client_id& redirect_uri=redirect_uri& response_type=token& scope=https://www.googleapis.com/auth/dataportability.myactivity.search& state=developer-specified-value
URL の場合:
client_id
は OAuth クライアント ID です。redirect_uri
は、承認済みリダイレクト URI です(例: https://google.com)。
このクイックスタートの URL で使用されているスコープは、検索アクティビティ スコープです。TimeFilter をサポートする任意のスコープを使用できます。
URL をブラウザのアドレスバーに貼り付け、OAuth フローの手順に沿って操作します。このフローでは、このクイックスタートで使用する、組織が所有または管理するアカウントにログインする必要があります。
これは、OAuth スコープに同意するアカウントです。同意画面は次のようになります(画面上のテキストは、この画像のテキストとは異なる場合があります)。
アクセス権を付与するスコープと、アカウントのデータへのアクセス権を共有する期間(1 回、30 日間、180 日間)を選択します。このクイックスタートでは、[30 日] を選択します。(期間のフィルタは 1 回限りのアクセスでも機能します)。
同意してアクセス期間を決定すると、リダイレクト URI(https://google.com)に転送されます。アドレスバーに生成された URL には、OAuth アクセス トークンが含まれています。
たとえば、ユーザー アカウントが
dataportability.myactivity.search
スコープへの OAuth アクセスを許可している場合、生成される URL は次のようになります。https://google.com/#state=developer-specified-value&access_token=your_OAuth_token&token_type=Bearer&expires_in=3599&scope=https://www.googleapis.com/auth/dataportability.myactivity.search
URL の your_OAuth_token は、トークンを表す文字列です。
OAuth トークンを検証するには、次の URL をブラウザに貼り付けます。
https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=your_OAuth_token
レスポンスは次のようになります。
{ "azp": <your_azp_value>, "aud": <your_aud_value>, "scope": "https://www.googleapis.com/auth/dataportability.myactivity.search", "exp": "1694210968", "expires_in": "3334", "access_type": "online" }
リクエストを送信するために
azp
フィールドやaud
フィールドを使用する必要はありません。azp
フィールドは、承認済みプレゼンターのclient_id
を表します。aud
フィールドは、このトークンの対象となるオーディエンスを識別します。これは、アプリのクライアント ID のいずれかと同じになります。OAuth トークンと API キーを取得します。Data Portability API を呼び出すには、これらが必要です。
エンドポイントにリクエストを送信する
このクイックスタートでは、curl コマンドを使用して、タイムスタンプ付きの Data Portability API エンドポイントを呼び出し、エクスポートされたデータをフィルタします。これらのコマンドには、前述で収集した OAuth トークンと API キーが必要です。
前回のエクスポートのデータ
時間ベースのアクセスで時間フィルタを使用すると、前回エクスポートしたとき以降の新しいデータをエクスポートできます。たとえば、スコープ https://www.googleapis.com/auth/dataportability.myactivity.search
について考えてみましょう。
まず、認証済みリクエストを
InitiatePortabilityArchive
エンドポイントに送信します。このリクエストにより、データコーパス全体のアーカイブ ジョブが開始されます。次の curl コマンドを実行します。
curl -H 'Authorization: Bearer your_OAuth_token' -X POST \ -H "Content-Type: application/json; charset=utf-8" \ --data '{"resources":["myactivity.search"]}' \ https://dataportability.googleapis.com/v1/portabilityArchive:initiate
コマンドは次のように変更してください。
your_OAuth_token
は OAuth トークンです。
InitiatePortabilityArchive
リクエストはarchiveJobId
とaccessType
を返します。ジョブ ID はデータ アーカイブの状態を取得するために使用され、アクセスタイプによって、データへの 1 回限りのアクセス権または時間ベースのアクセス権が付与されているかどうかが決まります。時間ベースのアクセスの場合、次の情報が表示されます。{ "archiveJobId": "<your_job_id_1>" "accessType": "ACCESS_TYPE_TIME_BASED" }
有効な OAuth トークンを指定しなかった場合、次のエラー メッセージが返されます。
Request had invalid authentication credentials. Expected OAuth 2.0 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
次に、認証済みリクエストを
GetPortabilityArchiveState
エンドポイントに送信して、アーカイブ ジョブのステータスを取得します。次の curl コマンドを実行します。
curl -H 'Authorization: Bearer your_OAuth_token' -X GET \ -H "Content-Type: application/json; charset=utf-8" \ https://dataportability.googleapis.com/v1/archiveJobs/your_job_id_1/portabilityArchiveState
コマンドは次のように変更してください。
your_OAuth_token
は OAuth トークンです。your_job_id_1
は、InitiatePortabilityArchive
リクエストによって返されたジョブ ID です。
レスポンスは、ジョブの状態に基づいています。ジョブが完了していない場合、レスポンスには現在の状態が示されます。ジョブが完了するまで、このエンドポイントに定期的にリクエストを送信する必要があります。
{ "state": "IN_PROGRESS" }
ジョブが完了している場合、レスポンスには状態と、データ アーカイブのダウンロードに使用される 1 つ以上の署名付き URL が含まれます。また、
InitiatePortabilityArchive
が最初に呼び出されたときのタイムスタンプを示すexport_time
フィールドもあります。{ "state": "COMPLETE", "urls": [ "<signed_url>" ] "export_time": "<timestamp_of_first_initiate_request>" }
署名付き URL をブラウザに貼り付けて、データ アーカイブをダウンロードします。アーカイブの内容を調べて、想定される検索アクティビティ データが含まれていることを確認する必要があります。
レスポンスで
FAILED
ステータスが返された場合は、RetryPortabilityArchive
メソッドを使用してエクスポートを再試行できます。24 時間以上待ってから、手順 1 と同じコマンドを使用して
InitiatePortabilityArchive
に再度リクエストを送信します。ただし、今回はstart_time
としてexport_time
を使用します。curl -H 'Authorization: Bearer your_OAuth_token' -X POST \ -H "Content-Type: application/json; charset=utf-8" \ --data '{"resources":["myactivity.search"], "start_time": timestamp_of_first_initiate_request}' \ https://dataportability.googleapis.com/v1/portabilityArchive:initiate
時間ベースのアクセスの場合、次が返されます。
{ "archiveJobId": "<your_job_id_2>" "accessType": "ACCESS_TYPE_TIME_BASED" }
手順 2 を繰り返して、認証済みリクエストを
GetPortabilityArchiveState
エンドポイントに送信し、アーカイブ ジョブのステータスを取得します(<your_job_id_2>
を使用)。ジョブが完了すると、レスポンスは次のようになります。
{ "state": "COMPLETE", "urls": [ "signed_urls" ], "start_time": timestamp_of_first_initiate_request, "export_time": timestamp_of_second_initiate_request }
2 回目のエクスポートのデータに、1 回目のエクスポート後に生成された新しいデータのみが含まれていることを確認します。
過去 6 か月間のデータ
時間フィルタを使用して、コーパス全体ではなく最新のデータのみをエクスポートすることもできます。
今日の日付が
2024-10-01
で、過去 6 か月間のデータをエクスポートするとします。まず、start_time
が「2024-04-01T00:00:00Z」の認証済みリクエストをInitiatePortabilityArchive
エンドポイントに送信します。次の curl コマンドを実行します。
curl -H 'Authorization: Bearer your_OAuth_token' -X POST \ -H "Content-Type: application/json; charset=utf-8" \ --data '{"resources":["myactivity.search"], "start_time": "2024-04-01T00:00:00Z"}' \ https://dataportability.googleapis.com/v1/portabilityArchive:initiate
時間ベースのアクセスの場合、次が返されます。
{ "archiveJobId": "job_id_1" "accessType": "ACCESS_TYPE_TIME_BASED" }
GetPortabilityArchiveState
エンドポイントにリクエストして、アーカイブ ジョブのステータスを取得します。次の curl コマンドを実行します。
curl -H 'Authorization: Bearer your_OAuth_token' -X GET \ -H "Content-Type: application/json; charset=utf-8" \ https://dataportability.googleapis.com/v1/archiveJobs/job_id_1/portabilityArchiveState
ジョブが完了すると、レスポンスは次のようになります。
{ "state": "COMPLETE", "urls": [ "signed_urls" ], "start_time": "2024-04-01T00:00:00Z", "export_time": "2024-10-01T00:00:00Z" }
start_time
は手順 1 で指定したstart_time
であり、export_time
は手順 1 でInitiatePortabilityArchive
が呼び出されたときのタイムスタンプです。エクスポートに過去 6 か月間のデータのみが含まれていることを確認します。
特定の期間のデータ
期間フィルタを使用すると、2023 年のデータのみなど、特定の期間のデータのみをエクスポートできます。
まず、
start_time
が「2023-01-01T00:00:00Z」、end_time
が「2023-12-31T23:59:59Z」の認証済みリクエストをInitiatePortabilityArchive
エンドポイントに送信します。次の curl コマンドを実行します。
curl -H 'Authorization: Bearer your_OAuth_token' -X POST \ -H "Content-Type: application/json; charset=utf-8" \ --data '{"resources":["myactivity.search"], "start_time": "2023-01-01T00:00:00Z", "end_time": "2023-12-31T23:59:59Z"}' \ https://dataportability.googleapis.com/v1/portabilityArchive:initiate
時間ベースのアクセスの場合、次が返されます。
{ "archiveJobId": "job_id_1" "accessType": "ACCESS_TYPE_TIME_BASED" }
GetPortabilityArchiveState
エンドポイントにリクエストして、アーカイブ ジョブのステータスを取得します。次の curl コマンドを実行します。
curl -H 'Authorization: Bearer your_OAuth_token' -X GET \ -H "Content-Type: application/json; charset=utf-8" \ https://dataportability.googleapis.com/v1/archiveJobs/job_id_1/portabilityArchiveState
ジョブが完了すると、レスポンスは次のようになります。
{ "state": "COMPLETE", "urls": [ "signed_urls" ], "start_time": "2023-01-01T00:00:00Z", "export_time": "2023-12-31T23:59:59Z" }
start_time
はステップ 1 で指定したstart_time
であり、export_time
はステップ 1 で指定したend_time
と同じであることに注意してください。エクスポートに 2023 年のデータのみが含まれていることを確認します。
サポートされているスコープ
次のスコープでは時間フィルタがサポートされています。
https://www.googleapis.com/auth/dataportability.myactivity.youtube
https://www.googleapis.com/auth/dataportability.myactivity.maps
https://www.googleapis.com/auth/dataportability.myactivity.search
https://www.googleapis.com/auth/dataportability.myactivity.myadcenter
https://www.googleapis.com/auth/dataportability.myactivity.shopping
https://www.googleapis.com/auth/dataportability.myactivity.play
https://www.googleapis.com/auth/dataportability.chrome.history
注意: サポートされているスコープとサポートされていないスコープが混在する時間フィルタリング リクエストは、The requested
resources do not support time filters
を示す INVALID_ARGUMENT
エラーになります。