Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Gmail API批量获取超过10000封电子邮件的发件人_Javascript_Google Chrome Extension_Google Api_Gmail Api - Fatal编程技术网

Javascript 从Gmail API批量获取超过10000封电子邮件的发件人

Javascript 从Gmail API批量获取超过10000封电子邮件的发件人,javascript,google-chrome-extension,google-api,gmail-api,Javascript,Google Chrome Extension,Google Api,Gmail Api,我正在制作一个与Gmail API交互的Chrome扩展。 基本上,它需要从匹配某个关键字的电子邮件中提取电子邮件发件人。 问题是,有时会有超过10000封电子邮件匹配这个关键字。 我使用gapi.client.gmail.users.messages.list获取与输入的关键字匹配的所有电子邮件,但这只返回电子邮件和线程ID,因此我需要为从messages.list检索到的每个电子邮件ID调用gapi.client.gmail.users.messages.get。 所以有超过10000个对G

我正在制作一个与Gmail API交互的Chrome扩展。 基本上,它需要从匹配某个关键字的电子邮件中提取电子邮件发件人。 问题是,有时会有超过10000封电子邮件匹配这个关键字。 我使用gapi.client.gmail.users.messages.list获取与输入的关键字匹配的所有电子邮件,但这只返回电子邮件和线程ID,因此我需要为从messages.list检索到的每个电子邮件ID调用gapi.client.gmail.users.messages.get。 所以有超过10000个对Gmail API的请求,我在Chrome中遇到了资源不足的错误。为了防止此错误,我在调用messages.get之间设置了一些超时,但这样做需要很长时间才能完成


有什么推荐的方法可以从Gmail API获取如此多的电子邮件吗?

不幸的是,Gmail API就是这样工作的

如果您想了解有关该消息的更多详细信息,必须先执行a,然后执行a

针对api发出请求的速度是有限制的,如果出现错误,只需放慢速度即可。泛洪错误消息用于确保我们都可以使用api,并且一个人不会因为发出多个请求而过载

根据,提高性能的一种方法是批处理请求。目前,它的限制是每批处理100个请求,但请求数量仍然减少了100倍

编辑:您还可以在查询中使用fields参数从消息中请求所需的字段,因为和都可以返回一个整体

例如:

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。这些参数对于一长串消息都是必需的。

谢谢,我读过关于批处理的文章,并成功地实现了它!关于fields参数-我只需要From payload>headers。那么,它可以以某种方式作为嵌套属性输入到fields参数中吗?我已经在获取端点的调用中添加了“format”:“metadata”,但如果我可以立即从列表端点获取标题,而不是电子邮件,那就太好了IDs@kecman无法获取特定的头,但可以直接从列表端点检索所有头,使用:xhr.openGET,https://www.googleapis.com/gmail/v1/users/userId/messages?fields=messages/payload/headers/*;. 更多信息。我正在使用JavaScript库。当我向它提供类似messages/payload/headers/*的fields参数时,它返回空的200 OK响应。我发现了这条评论,你还有其他想法吗@凯克曼:恐怕我自己没有测试过,我只是按照文档做的。API中似乎有一个bug。除了批处理列表请求和之后获取请求之外,别无其他想法。