Мое приложение создает и удаляет события Календаря Google от имени пользователей. Каждый пользователь авторизуется через портал OAuth, и этот пользователь access_token
используется для доступа к API, а не к учетной записи службы.
У меня были проблемы с различными ошибками ограничения скорости, поэтому я начал пакетные запросы . Но, несмотря на пакетные запросы, многие запросы в пакете терпят неудачу. Только я тестирую это локально - других пользователей в службе нет.
Например, ниже вы можете видеть, что несколько delete
в пакетном запросе завершились неудачно (номера 2, 6, 7, 8 и др. c.). Этот пакетный запрос с ~ дюжиной delete
запросов был единственным, что было отправлено за предыдущие несколько минут, и за предыдущий час было, вероятно, 6 пакетных запросов (многие с той же проблемой).
Если я затем сразу после этого запустил еще один пакетный запрос, я бы увидел ту же картину: некоторые из подзапросов выполнены успешно, а другие - нет. Это наводит меня на мысль, что я не превышал какого-либо глобального / дневного лимита, а скорее что что-то сломано в самом пакетном запросе.
[2020-08-03 13:55:03,101: WARNING/ForkPoolWorker-1] Error with batch delete request "1": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,102: WARNING/ForkPoolWorker-1] Error with batch delete request "3": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,102: WARNING/ForkPoolWorker-1] Error with batch delete request "4": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "5": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "6": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "9": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "10": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
(X
s - это моя редакция личной информации)
В той мере, в какой это полезно, вот самый основной код c, вызывающий это:
batch = c.new_batch_http_request(callback=batch_delete_callback)
for event in events:
if event is not None:
r = c.events().delete(calendarId=gcal_id, eventId=event)
batch.add(r)
batch.execute()
И обратный вызов:
def batch_delete_callback(request_id, response, exception):
if exception is not None:
print('Error with batch delete request "{0}": {1}'.format(
request_id, exception))
Что я здесь делаю не так и как мне лучше всего справиться или избежать этих 403 от Google?
Обновление
Я просто попытался минимально проверить это, чтобы получить случай немедленного отказа. Я выполнил пакетный запрос, который добавил 12 событий в мой календарь, а затем выполнил пакетный запрос, который попытался удалить те же 12 событий примерно через 15 секунд. Итак, всего 2 пакетных запроса по 12 подзапросов в каждом. И это после 20 часов бездействия с момента последней попытки.
И из 12 delete
запросов 8 из них не удалось. Итак, у меня было успешно выполнено 12 create
запросов, а затем 8/12 delete
запросов вернули 403 Rate Limit Exceeded
Как отмечено в моих комментариях ниже, моя консоль показывает квоты в 1000000 запросов в день и 100000000 запросов в день. 100 секунд на пользователя. Так что я просто не могу сказать, какой у меня предел.