问题描述
PageToken = changes.getNewStartPageToken();
至
pageToken = changes.getNextPageToken();
大量查询是因为我在每个循环上都请求一个新的起始页令牌,从而强制进行无限循环。
解决方法
我正在创建一个通道,以接收应用程序上用户的更改。主要问题在于,经过2-3次网络连接后,我收到一条错误消息,提示用户已超出配额限制。
那没有意义,因为我只收到2条帖子(我在ngrok上看到了)。
我在驱动器API和配额上进入了Google控制台。每当我收到一个webhook时,查询量就会增加500个。因此,当用户进行两次更改而我收到两个webhooks时,查询数超过了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,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"
}
为什么会这样呢?