我正在制作与Gmail API互动的Chrome扩展程序。
基本上,它需要从与某些关键字匹配的电子邮件中提取电子邮件发件人。
问题是,有时会有超过10K的电子邮件与此关键字匹配。
我使用gapi.client.gmail.users.messages.get
来获取与输入的关键字匹配的所有电子邮件,但这只返回电子邮件和线程ID,因此我需要为从messages.list
检索到的每个电子邮件ID调用ERR_INSUFFICIENT_RESOURCES
。
因此,对Gmail API的请求超过10K,我在Chrome中遇到messages.get
错误。为了防止出现此错误,我在调用chromeOptions.add_experimental_option("prefs",prefs)
chromeOptions.add_argument('--test-type')
chromeOptions.add_argument("--disable-infobars")
driver = webdriver.Chrome(driver_path, chrome_options=chromeOptions)
之间设置了一些超时,但是这需要很长时间才能完成......
是否有一些推荐的方式从Gmail API获取此类电子邮件?
答案 0 :(得分:1)
根据documentation,提高性能的一种方法是批量处理请求。目前,每批次的限制为100个,但请求数量仍然少100倍。
编辑:您还可以在查询中使用fields
参数从邮件中请求您想要的字段,因为messages.list和messages.get都可以返回整个users.messages Resource。
例如:
var xhr = new XMLHttpRequest;
xhr.onload = () => {
var resp = JSON.parse(xhr.response);
var wholeFirstMessage = atob(resp.messages[0].raw);
console.log(wholeFirstMessage);
};
xhr.open("GET", "https://www.googleapis.com/gmail/v1/users/userId/messages?fields=messages(id,threadId,raw)");
xhr.send();
注意:上面的代码示例忽略了XHR参数中的pageToken
和maxResults
以简化'清酒。一长串消息需要这些参数。
答案 1 :(得分:0)
很遗憾,这是Gmail api的工作方式。
如果您想获得有关该消息的更多详细信息,则必须执行messages.list后跟message.get。
对于api请求的速度有一个限制,如果你收到错误,你只需要减慢速度。 Flooding错误消息用于确保我们都使用api,并且一个人不会通过发出许多请求来过载。