Googleドライブのアカウントで共有されているすべての画像をダウンロードするには、ノードスクリプトを作成しています。GoogleドライブAPIの通話を制限するにはどうすればよいですか?
他の人がStack Overflow:Google Drive API file watch rate limitsに投稿したのと同じように壁に当たっています。
指数関数的バックオフは私には大変意味がありますが、その実装方法についてはわかりません。
私がこれに入ることができる洞察は、信じられないほど役に立ちます。ちょうど「始めることによって...」さえあれば素晴らしいだろう!
私は下記の方法を追加しました。認証とすべて正常に動作している、それはちょうどuserRateLimitExceeded
エラーを受け取る問題です。
すべてのヘルプは素晴らしいと非常に感謝します。
ありがとうございました!
/**
* Download all of the shared images.
*
* @param {google.auth.OAuth2} auth An authorized OAuth2 client.
*/
function downloadImages(auth) {
const gDrive = google.drive({
version: 'v3',
auth: auth
});
gDrive.files.list({
q: 'sharedWithMe = true and mimeType = "image/jpeg"'
}, (err, resp) => {
if(err) {
console.log('The API returned an error: ' + err);
return;
}
if(!resp.files.length) {
console.error('No files found.');
} else {
// Remove existing images.
// removeImages();
_.each(resp.files, (file) => {
if(fs.existsSync(IMAGE_DIR + file.name)) {
return;
}
gDrive.files.get({
fileId: file.id
})
.on('end',() => {
console.log(chalk.green(file.name + ' successfully downloaded.'));
})
.on('error', (err) => {
console.log(err);
})
.pipe(fs.createWriteStream(IMAGE_DIR + file.name));
});
}
});
}
EDIT:私はバッチ処理に見えたが、私はGoogleの-API-nodejs-クライアントがバッチをサポートしていないと思います。私は "Batchelor"と呼ばれるサードパーティ製のライブラリを試しました。それでも私の人生のために働くことはできません。 :
あなたはレートが制限されてきている、 'gDrive.fkilesを何。 get() 'do?あなたが検出できる '.on( 'error'、...)'イベントハンドラに特定のエラーがありますか?もしそうなら、具体的なエラーは何ですか?基本的に、レート制限が発生したときの検出方法を知る手助けをすることができれば、コードに対応することができます。 – jfriend00
@ jfriend00 - エラーハンドラにさえいるように見えませんでした。それは単に "userRateLimitExceeded"または何かを言っているエラーオブジェクトで返されます。私が 'console.error( 'error'、error)'のようなことをすれば、私は自分のログラベルを全く見ないだろうから、エラーハンドラには手を出せなかったと私は言います。 : – Will