如何在 python 中向 Gmail-API 发送批处理请求?

Posted

技术标签:

【中文标题】如何在 python 中向 Gmail-API 发送批处理请求?【英文标题】:How do I send a batch request to the Gmail-API in python? 【发布时间】:2021-08-11 22:40:51 【问题描述】:

我目前正在编写一个与 Gmail-API 配合使用的小型 Python 脚本。我正在尝试向 gmail 服务器发送批处理请求。由于 gmail 发送批处理请求的本机方法在 2020 年 8 月贬值,我必须自己构建一个。它必须是“多部分/混合”的形式。

根据文档,它必须看起来像这样 (https://developers.google.com/gmail/api/guides/batch):

我尝试使用 python 请求库,但它似乎只支持“multipart/form”形式的请求。但我不确定。

# A list with all the message-id's.
messages = tqdm(gmail.list_messages('me'))

gmailUrl = "https://gmail.googleapis.com/batch/gmail/v1"

request_header = "Host": "www.googleapis.com", "Content-Type": "multipart/mixed", "boundary"="bound"

request_body = ""

# I want to bundle 80 GET requests in one batch.
# I don't know how to proceed from here.
for n in range(0,80):


response = req.post(url=gmailUrl, auth=creds, headers=request_header, files=request_body)

print(response)

所以我的问题很简单:

如何使用 python 向具有“multipart/mixed”形式的 Gmail-API 发送 http 请求。

提前致谢!

【问题讨论】:

为什么要批量处理请求?您知道您将要做的就是为自己节省一些 HTTP 流量,对吗?以换取尝试使用 Google API 进行批处理的挫败感。 我正在使用 api 来实现其他功能。但是发送这么多 http 请求(并再次接收它们)似乎需要更长的时间。 祝你好运,这可能会有所帮助,但它可能不会因为批处理端点自发布此答案以来发生了变化,但这是我唯一能找到的 ***.com/q/27650927/1841839。它是一个免费的 API,你得到你所支付的。仅供参考,在必须处理的请求数量相同的情况下,批处理不会加快任何速度或提高您的配额。 谢谢。我现在正在搜索几个小时(并且发现了很多你评论过的线程)。基本上问题似乎只是我不知道如何正确发送请求。 我使用 Google API 已经有十年了,大约七年前我放弃了批处理。我发现它不值得它试图让它工作而造成的挫败感。我不是 Python 开发人员,所以我帮不上什么忙。首先尝试使用获取请求进行批处理,然后尝试使用您的发送邮件。我确实认为您在发送时可能会遇到问题,因为它可能看起来像是向 Google 发送垃圾邮件,请确保您使用虚拟帐户进行测试,以防您被锁定。 【参考方案1】:

您可以将每个请求添加到批处理中,然后执行批处理。例如:

response = service.users().threads().list(userId="me").execute()
bt=service.new_batch_http_request()
for thread in threads:
    bt.add(service.users().threads().get(userId="me",id=thread["id"]))
bt.execute()

bt 对象现在将具有字段 _requests 和 _responses,您现在可以访问它们 - 这将需要一些字符串解析(我使用 ast)。

【讨论】:

感谢您的评论。前段时间我自己想通了。有没有办法让我结束这个问题? @Mxngls 不需要,给有类似问题的朋友参考

以上是关于如何在 python 中向 Gmail-API 发送批处理请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅为社交电子邮件创建 gmail-api 访问范围

如何在飞镖中向用户返回异常消息?

Gmail-api 附带电子邮件时如何收到通知

如何在没有手动浏览器身份验证的情况下从 Meteor.js 应用程序对 GMail-api 进行 oauth (2) 身份验证?

如何使用 java 和 google gmail-api 获取收到的邮件? [关闭]

如何在android中向AlarmManager添加3个日期