- この記事は、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
メソッドを使用します。
通知は、変更の詳細を含んでいません。
代わりに、それらは、新しい変更が利用可能であることを示します。
実際の変更を取得するには、変更を取得するに説明されているように、変更フィードをポーリングします。