代码之家  ›  专栏  ›  技术社区  ›  kecman

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

  •  0
  • kecman  · 技术社区  · 7 年前

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

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Iván Nokonoko    7 年前

    根据 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();
    

    注意:上面的代码示例忽略 pageToken maxResults 为了简单起见,从XHR参数。一长串消息需要这些参数。

        2
  •  0
  •   Linda Lawton - DaImTo    7 年前

    不幸的是,Gmail api就是这样工作的。

    你必须做一个 messages.list 后跟a message.get 如果您想获得有关该消息的更多详细信息。

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