変更を取得する



  • この記事は、Google Drive™ APIに関する記事を和訳したものです。
  • 原文: Retrieve Changes
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年6月ころです。

ファイルへの変更を追跡する必要がある Google Driveアプリの場合、Changes collectionは、すべてのファイルへの変更を検出するための効率的な方法を提供します、それは、ユーザと共有されたものを含みます。 コレクションはそれぞれのファイルの現在の状態を提供することによって動作します、それは、与えられた時点以降にファイルが更新された場合のみです。

初めて開始ページトークンを取得する

アカウントの現在の状態のためのページトークンをリクエストするには、changes.getStartPageTokenを呼び出します。 changes.listへの最初の呼び出しにて、このトークンを格納し、使用します。

現在のページトークンを取得するには:

Java

StartPageToken response = driveService.changes()
    .getStartPageToken().execute();
System.out.println("Start token: " + response.getStartPageToken());

Python

response = drive_service.changes().getStartPageToken().execute()
print 'Start token: %s' % response.get('startPageToken')

PHP

$response = $driveService->changes->getStartPageToken();
printf("Start token: %s\n", $response->startPageToken);

.NET

var response = driveService.Changes.GetStartPageToken().Execute();
Console.WriteLine("Start token: " + response.StartPageTokenValue);

Ruby

response = drive_service.get_changes_start_page_token
puts "Start token: #{response.start_page_token}"

Node.js

drive.changes.getStartPageToken({}, function (err, res) {
  console.log('Start token:', res.startPageToken);
});

変更を取得する

現在の認証されているユーザのために変更のリストを取得するには、List referenceに説明されているように、変更コレクションに GETリクエストを送信します。

変更コレクション内のエントリは、時間順に並べられています、 つまり、最も古い変更が最初に表示されます。 変更コレクションの includeRemovedおよび restrictToMyDriveクエリパラメータは、レスポンスが削除あるいは共有されたアイテムを含んでいるかどうかを決定します。

Java

// Begin with our last saved start token for this user or the
// current token from getStartPageToken()
String pageToken = savedStartPageToken;
while (pageToken != null) {
  ChangeList changes = driveService.changes().list(pageToken)
      .execute();
  for (Change change : changes.getChanges()) {
    // Process change
    System.out.println("Change found for file: " + change.getFileId());
  }
  if (changes.getNewStartPageToken() != null) {
    // Last page, save this token for the next polling interval
    savedStartPageToken = changes.getNewStartPageToken();
  }
  pageToken = changes.getNextPageToken();
}

Python

# Begin with our last saved start token for this user or the
# current token from getStartPageToken()
page_token = saved_start_page_token
while page_token is not None:
    response = drive_service.changes().list(pageToken=page_token,
                                            spaces='drive').execute()
    for change in response.get('changes'):
        # Process change
        print 'Change found for file: %s' % change.get('fileId')
    if 'newStartPageToken' in response:
        # Last page, save this token for the next polling interval
        saved_start_page_token = response.get('newStartPageToken')
    page_token = response.get('nextPageToken')

PHP

# Begin with our last saved start token for this user or the
# current token from getStartPageToken()
$pageToken = $savedStartPageToken;
while ($pageToken != null) {
    $response = $driveService->changes->listChanges($pageToken, array(
        'spaces' => 'drive'
    ));
    foreach ($response->changes as $change) {
        // Process change
        printf("Change found for file: %s", $change->fileId);
    }
    if ($response->newStartPageToken != null) {
        // Last page, save this token for the next polling interval
        $savedStartPageToken = $response->newStartPageToken;
    }
    $pageToken = $response->nextPageToken;
}

.NET

// Begin with our last saved start token for this user or the
// current token from GetStartPageToken()
string pageToken = savedStartPageToken;
while (pageToken != null)
{
    var request = driveService.Changes.List(pageToken);
    request.Spaces = "drive";
    var changes = request.Execute();
    foreach (var change in changes.Changes)
    {
        // Process change
        Console.WriteLine("Change found for file: " + change.FileId);
    }
    if (changes.NewStartPageToken != null)
    {
        // Last page, save this token for the next polling interval
        savedStartPageToken = changes.NewStartPageToken;
    }
    pageToken = changes.NextPageToken;
}

Ruby

# Begin with our last saved start token for this user or the
# current token from get_changes_start_page_token()
page_token = saved_start_page_token;
while page_token do
  response = drive_service.list_changes(page_token,
                                        spaces: 'drive')
  for change in response.changes
    # Process change
    puts "Change found for file: #{change.file_id}"
  end
  if response.new_start_page_token
    # Last page, save this token for the next polling interval
    saved_start_page_token = response.new_start_page_token
  end
  page_token = response.next_page_token
end

Node.js

var pageToken;
// Using the npm module 'async'
async.doWhilst(function (callback) {
  drive.changes.list({
    pageToken: pageToken,
    fields: '*'
  }, function (err, res) {
    if (err) {
      callback(err);
    } else {
      // Process changes
      res.changes.forEach(function (change) {
        console.log('Change found for file:', change.fileId);
      });
      pageToken = res.nextPageToken;
      callback(res.newStartPageToken);
    }
  });
}, function () {
  return !!pageToken
}, function (err, newStartPageToken) {
  console.log('Done fetching changes');
  // Save the token (newStartPageToken)
});

取得された変更コレクションは、nextPageTokenを含んでいるかもしれないし、そうでないかもしれません。 もし nextPageTokenが存在するならば、それは、次の一連の変更を集めるために使用されるかもしれません。 もし nextPageTokenが存在しなければ、クライアントアプリケーションは、将来の使用のために、コレクション内に nextStartPageTokenを格納する必要があります。 格納されたページトークンを用いて、クライアントありプリケーションは将来、変更のために再びクエリする準備が整います。

プッシュ通知を使用する

変更ログへの更新を購読するには、changes.watchメソッドを使用します。 通知は、変更の詳細を含んでいません。 代わりに、それらは、新しい変更が利用可能であることを示します。 実際の変更を取得するには、変更を取得するに説明されているように、変更フィードをポーリングします。