我的应用程序代表用户创建和删除 Google 日历事件。每个用户都通过 OAuth 门户进行授权,并且该用户的 access_token
用于访问 API,而不是服务帐户。
我遇到了各种速率限制错误的问题,所以我开始批量请求。但是尽管批处理请求,批处理中的许多请求都会失败。只有我在本地对此进行测试 - 该服务上没有其他用户。
例如,您可以在下面看到批量请求中的几个删除
失败(编号 2、6、7、8 等)。这个带有 ~12 个 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
是我编辑的个人信息)
在某种程度上它是有帮助的,这里是导致这个的非常基本的代码:
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))
我在这里做错了什么以及如何最好地处理或避免这些来自 Google 的 403?
更新
我只是尝试对此进行最低限度的测试,以获得立即失败的案例。我运行了一个批处理请求,将 12 个事件添加到我的日历中,然后运行一个批处理请求,试图在大约 15 秒后删除这 12 个相同的事件。所以只有 2 个批处理请求,每个请求有 12 个子请求。这是在我上次尝试后 20 小时内没有任何操作之后。
在 12 个 delete
请求中,有 8 个失败了。所以我有 12 个 create
请求成功,然后 8/12 个 delete
请求返回了 403 Rate Limit Exceeded
正如我在下面的评论中所指出的,我的控制台显示的配额是每位用户每天 1,000,000 次查询和每 100 秒 100,000,000 次查询。所以我只是不知道我达到了什么限制。
最佳答案
在 documentation 中推荐以下程序避免 403 Rate Limit Exceeded
错误:
Suggested actions:
- Raise the per-user quota in the Developer Console project.
- If one user is making a lot of requests on behalf of many users of a G Suite domain, consider a Service Account with authority delegation (setting the quotaUser parameter).
- Use exponential backoff.
关于google-api - Google Calendar API 在单个批处理请求中返回 403 Rate Limit Exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63237115/
相关文章:
laravel - 如何在 Laravel 中显示带有法语符号的验证消息?
angular - 在 Angular 10 中将 HTML 转换为 PDF
python-3.x - 无论如何,您是否可以检查 Azure CLI 在后台执行哪些 API 调用
python - 如何使用 Elasticsearch-dsl 在 Django 中进行并行测试?
android - 使用 Jetpack Navigation 在深度链接 URI 中使用字符串常量
firebase - 如何将复杂的 Firestore 查询卸载到 Firebase Cloud F