API Google Диска выбрасывает userRateLimitExceeded и затем dailyLimitExceededUnreg - PullRequest
2 голосов
/ 15 января 2020

Я использую API Google Drive для получения нескольких тысяч документов. Учетные данные, которые я использую для подключения, используют setServiceAccount и setServiceAccountPrivateKey.

Когда я начну делать запросы - через короткий промежуток времени я получу следующее:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "usageLimits",
    "message" : "User Rate Limit Exceeded. Rate of requests for user exceed configured project quota. You may consider re-evaluating expected per-user traffic to the API and adjust project quota limits accordingly. You may monitor aggregate quota usage and adjust limits in the API Console: https://console.developers.google.com/apis/api/drive.googleapis.com/quotas?project=<projid>",
    "reason" : "userRateLimitExceeded",
    "extendedHelp" : "https://console.developers.google.com/apis/api/drive.googleapis.com/quotas?project=<projid>"
  }

После несколько тысяч элементов, в итоге я получаю эту ошибку:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "usageLimits",
    "message" : "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "reason" : "dailyLimitExceededUnreg",
    "extendedHelp" : "https://code.google.com/apis/console"
  } ],
  "message" : "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}

Я посетил страницу квот и у меня есть следующие значения (пользовательский интерфейс не позволил бы мне поднять эти квоты выше этих значений - они были максимально допустимыми):

Queries per day = 1,000,000,000
Queries per 100 seconds per user = 1,000
Queries per 100 seconds = 10,000

1) Можно ли увеличить квоту сверх 10 / с c для запросов на пользователя? Могу ли я запросить более высокую квоту, чем 10 / se c? Как?

2) Почему я получаю ошибки dailyLimitExceededUnreg? и как я могу избежать этого?

Некоторые фрагменты кода:

Credential credential = new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountId(serviceAccountId)
                .setServiceAccountPrivateKey(gdrivePrivateKey)
                .setServiceAccountScopes(ImmutableSet.of(DriveScopes.DRIVE,
                    DirectoryScopes.ADMIN_DIRECTORY_USER,
                    DirectoryScopes.ADMIN_DIRECTORY_GROUP))
                .setServiceAccountUser(serviceAccount.getServiceAccountUser())
                .build();

Иногда извлекает свойства файла:

File file = drive.files().get(itemid)
            .setFields("id, name, createdTime, modifiedTime, size, webContentLink")
            .execute();

или получает файл, используя один drive.files.export или drive.files.get

Спасибо, Ху

1 Ответ

1 голос
/ 15 января 2020

Хорошо, на самом деле это не ответ, а долгое время быть комментарием. Я не могу помочь вам исправить это, но мы могли бы решить эту проблему.

userRateLimitExceeded

userRateLimitExceeded - защита от наводнений, если вы собираетесь быстро. Вы попали в пользовательскую квоту, которую вы не можете изменить. Поскольку вы используете служебную учетную запись, все находится под одним и тем же пользователем. Существует необязательный праматер для всех запросов, называемый quotauser, если вы добавите его ко всем вашим запросам, скажем, случайное число, это иногда поможет переопределением IP-адреса.

Я не Java dev, но библиотека очень близка к библиотеке. net, это может быть что-то вроде этого.

File file = drive.files().get(itemid)
            .setQuotaUser(randomstring)
            .setFields("id, name, createdTime, modifiedTime, size, webContentLink")
            .execute();

У меня вопрос, почему вы делать так много файлов, что вы будете превышать квоту скорости. Лучшим решением будет замедление, чтобы убедиться, что вы делаете менее 1000 запросов в 100 секунд. Если вы получите сообщение об ошибке, просто остановитесь на несколько секунд и отправьте запрос еще раз.

Я написал это некоторое время go его C#, но это могло бы помочь google apis fluter buster

Превышен дневной лимит для использования без аутентификации. Для дальнейшего использования требуется регистрация.

Почему вы получаете эту ошибку, я не знаю. Эта ошибка обычно появляется, только если вы отправляете запрос без аутентификации, но используете учетную запись службы, поэтому этого не должно происходить.

...