已超出Google Drive API配额

时间:2017-07-26 10:48:38

标签: java google-drive-api

我正在创建一个接收应用程序上用户更改的频道。主要问题是在2-3次webhook之后,我收到一条错误,指出用户已超出配额限制。

这没有任何意义,因为我只收到了2条帖子(我在ngrok上看到了它)。

我在驱动器API和配额上使用了谷歌控制台。每次收到webhook时,查询量都会增加500.因此,当用户进行两次更改并收到两个webhook时,查询数量超过了Google允许的1000次,我收到了该错误。

这是我启用频道的代码:

    @GET
    @Path("/enable")
    public void enable(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException {
        Credential credential = initFlow().loadCredential("user");
        Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
        Channel channel = new Channel(); 
        channel.setId(UUID.randomUUID().toString());
        channel.setType("web_hook");
        channel.setAddress("https://389825dc.ngrok.io/GDriveRest/app/gdrive/webhook");
        StartPageToken page = service.changes().getStartPageToken().execute();
        GDrive.savedPageToken = page.getStartPageToken();
        service.changes().watch(savedPageToken, channel).execute();
    }

以下是webhook:

    @POST
    @Path("/webhook")
    public void webhook(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException {
        Credential credential = initFlow().loadCredential("user");
        Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
        String pageToken = savedPageToken;

        while (pageToken != null) {
            ChangeList changes = service.changes().list(pageToken).execute();

            for (Change change : changes.getChanges()) {
                Log.info("Change found for file: " + change.getFileId());
            }
            if (changes.getNewStartPageToken() != null) {
                savedPageToken = changes.getNewStartPageToken();
            }
            pageToken = changes.getNewStartPageToken();
        }
        response.setStatus(200);
    }

这是错误:

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "usageLimits",
    "message" : "User Rate Limit Exceeded",
    "reason" : "userRateLimitExceeded"
  } ],
  "message" : "User Rate Limit Exceeded"
}

为什么会这样?

2 个答案:

答案 0 :(得分:0)

代码中有错误。我不得不改变以下内容:

PageToken = changes.getNewStartPageToken();

pageToken = changes.getNextPageToken();

大量的查询是因为我在每个循环上请求一个新的起始页令牌,强制进行无限循环。

答案 1 :(得分:0)

您遇到的错误已在this guide中讨论过。

  

建议采取的行动:

     
      
  • 在Developer Console项目中提高每用户配额。
  •   
  • 如果一个用户代表G Suite域的许多用户提出了大量请求,请考虑具有权限委派的服务帐户   (设置quotaUser参数)。
  •   
  • 使用指数退避。
  •   

您也可以尝试访问此SO post以了解相关问题。