繁体   English   中英

如何对Google Drive API调用的速率进行限制?

[英]How do I rate limit my Google Drive API calls?

我正在使用一个节点脚本来下载与我的帐户在Google云端硬盘上共享的所有图像。

就像其他人在Stack Overflow: Google Drive API文件观看率限制上发表的一样,我碰壁。

指数退缩对我来说很有意义,我只是不知道如何去实现它。

我对此有任何见识都将非常有用。 即使只是“开始...”也很棒!

我在下面添加了我正在使用的方法。 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”的第三方库。 仍然无法让它为我的一生工作。 :(

这并不简单,尤其是从像JavaScript这样的aync语言开始。 首先,正如我在回答您提到的问题时所解释的那样,不要做指数补偿。 API调用之间将导致大量延迟。

您可以在https://github.com/pinoyyid/ngDrive/blob/master/src/http_s.ts中查看代码。这是Angular 1服务,用于处理GDrives特质,包括403。它通过发出请求来完成进入内部队列,然后我执行一个过程,该过程以可变速率从队列中取出项目,以最大化吞吐量,但同时最小化403和伴随的重试。

批处理使情况变得更糟,所以不要走这条路。 限制因素不是http请求率,而是对GDrive内部系统的请求率。 大量请求会快速连续发送到GDrive中,操作系统更有可能触发403。

根据此文档 ,您收到的error 403userRateLimitExceeded错误表示已达到开发者控制台的每用户限制。

请注意,Drive API具有:

  • 每天的每日配额1,000,000,000个请求
  • 每秒礼貌每日配额100个请求/秒
  • 每个用户限制10个请求/秒/用户

这是Drive API的默认配额的屏幕截图

在此处输入图片说明

因此,针对您的错误建议采取的措施是:

  • 在开发者控制台项目中提高每用户配额。 (使用此链接要求更多配额)

  • 如果一个用户代表一个Google Apps域中的许多用户发出很多请求,请考虑使用具有授权委派的服务帐户 (设置quotaUser参数 )。

  • 使用指数补偿

有关更多信息,请检查以下SO问题:

有了速率限制,您必须注意的是每位用户每秒。

我使用了一个脚本,该脚本每1.3秒发送10个请求,该脚本可以正常工作。

在13秒钟内发送一批100个请求,但途中开始收到403错误。

得出的结论是:注意每秒的限制,而不是每100秒的限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM