Google+ API是否有任何每小时费率限制?

时间:2013-08-16 13:11:15

标签: java api google-plus

我知道那里有配额:https://code.google.com/apis/console 但这些是每日配额。在那里,我每天看到10,000个查询(Courtesy Limit)。 实际上,我的程序在收到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。 Initialize 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秒 - 同样的行为。 试图重新生成密钥文件 - 没有运气。

我做错了吗?

2 个答案:

答案 0 :(得分:8)

问题有三个:

  1. 费率限制为每天(10,000)和每秒(5)。
  2. 错误消息在类型之间共享。
  3. 未提供下一个窗口的时间。
  4. 因此,我的应用程序等待rand(1,5)秒,如果它们再次受到速率限制,我会等待3600秒再重试。

答案 1 :(得分:1)

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

     Google+ API    5.0 requests/second/user

一般情况下,他们的API端点可能允许突发更多,这应该被视为估计值,但超过此限制延长持续时间可能会导致超出您的速率限制错误。