6

我知道那里有配额:https ://code.google.com/apis/console 但这些是每日配额。我看到每天有 10,000 个查询(礼貌限制)。实际上,在收到来自 Google+ API 的此类响应后,我的程序每小时发出 170-190 个请求:

{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "Rate Limit Exceeded",
"reason" : "rateLimitExceeded"
} ],
"message" : "Rate Limit Exceeded"
}

1 小时后程序再次执行 170-190 直到得到相同的错误。但是每小时 190 个请求 * 24 小时远不是 10,000 个。

我正在使用方法 people.search 和 google-api-java-client 库版本 1.15.0-rc。初始化 Plus 服务如下:

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        JsonFactory jsonFactory = new JacksonFactory();
        GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId(EMAIL)
                .setServiceAccountScopes(Collections.singleton(PlusScopes.PLUS_LOGIN))
                .setServiceAccountPrivateKeyFromP12File(KEY_FILE))
                .build();
        Plus plus = new Plus.Builder(httpTransport, jsonFactory, credential)
                .setApplicationName(APP_NAME).build();

并使用这样的搜索方法:

Plus.People.Search searchPeople = people.search(fullname);
    searchPeople.setMaxResults(50L);
    searchPeople.setFields("items(id),nextPageToken");
    PeopleFeed peopleFeed = searchPeople.execute();
while (true) {
        if (peopleFeed.getItems().size() == 0) {
            break;
        }

        /* Save people info here */

        if (peopleFeed.getNextPageToken() == null) {
            break;
        }
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) { }
        searchPeople.setPageToken(peopleFeed.getNextPageToken());
        peopleFeed = searchPeople.execute();
    }

我试图将睡眠时间更改为 1 秒或 2 秒 - 相同的行为。试图重新生成密钥文件 - 没有运气。

我做错了什么吗?

4

2 回答 2

8

这个问题是三方面的:

  1. 速率限制为每天(10,000) 和每秒(5)。
  2. 错误消息在类型之间共享。
  3. 没有提供直到下一个窗口的时间。

因此,我让我的应用程序等待rand(1,5)几秒钟,如果它们再次受到速率限制,我3600在重试之前等待几秒钟。

于 2013-08-26T07:53:39.477 回答
1

如果您转到Quotas您指定的 API 控制台上的链接,它将分解您的应用程序使用每个 API 的每日限制,但还会列出每个用户的配额。例如,我的当前显示

     Google+ API 5.0 请求/秒/用户

一般来说,他们的 API 端点可能允许超过这个值的突发,这应该被认为是一个估计值,但是超过这个限制以延长持续时间可能会导致您看到超出速率限制的错误。

于 2013-08-16T14:48:25.220 回答