【发布时间】:2016-12-17 20:23:37
【问题描述】:
我正在编写一个节点脚本来下载与我在 Google Drive 上的帐户共享的所有图像。
正如其他人在 Stack Overflow 上发布的内容一样,我正在碰壁:Google Drive API file watch rate limits。
指数退避对我来说很有意义,我只是不知道如何实现它。
我对此的任何见解都会非常有帮助。即使只是“从...开始”也很棒!
我在下面添加了我正在处理的方法。 Auth 并且一切正常,只是收到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));
});
}
});
}
编辑:我研究了批处理,但我猜 google-api-nodejs-client 不支持批处理。我尝试了一个名为“Batchelor”的第三方库。仍然无法让它为我的生活工作。 :(
【问题讨论】:
-
当你得到速率限制时,
gDrive.fkiles.get()做什么?您是否在可以检测到的.on('error', ...)事件处理程序中收到特定错误?如果是这样,那是什么具体错误?基本上,如果您可以帮助我们知道如何检测您何时受到速率限制,我们可以帮助编写代码来处理它。 -
@jfriend00 - 看起来它甚至没有到达错误处理程序。它只会返回一个错误对象,说“userRateLimitExceeded”之类的。我说它没有到达错误处理程序,因为如果我做了类似
console.error('error', error)的事情,我根本看不到我的日志标签。 :(
标签: javascript node.js google-drive-api rate-limiting google-api-nodejs-client