получить Gmail API всех идентификаторов пользователей - PullRequest
0 голосов
/ 09 мая 2018

Моя задача - следить за всеми лучшими отправителями и получателями электронной почты пользователя. Таким образом, план состоит в том, чтобы получить все идентификаторы пользователей, поместить их в словарь, посчитать их количество и распечатать.

Я пробовал это, но это не очень хорошо работает с ярлыком INBOX (более 10 000 сообщений):

import base64
import email
import re
import operator

from googleapiclient import errors
from quickstart import service


def find(st):

    for i in range(0,len(st)):
        tmp = str(st[i])
        for j in range(0,len(tmp)):

            if tmp[j] == 'T' and tmp[j+1] == 'o' and tmp[j-1] == "'" and tmp[j+2] == "'":
                return i
        pass


def getTop(n):

    try:
        if n == 1:
            label_ids = "INBOX"
        else:
            label_ids = "SENT"

        user_id = "me"
        topers = service.users().labels().get(userId = user_id,id = label_ids).execute()

        count = topers['messagesTotal']
        print(count)
        topers = service.users().messages().list(userId = user_id, labelIds = label_ids).execute()
        arrId = []

        for i in range(0,count):
            arrId.append(topers['messages'][i]['id'])

        st = []
        for i in range(0,count):
            message = service.users().messages().get(userId=user_id,
                                                 id=arrId[i],
                                                 format = 'metadata').execute()
            head = message['payload']['headers']


            index = find(head)
            obval = head[index]['value']

            tmp = str(obval)
            tmp =tmp.split('<', 1)[-1]
            tmp = tmp.replace('>',"")
            st.append(tmp)
            cnt = 0
            mvalues = {}
        for mail in st:
            if not mail in mvalues:
                mvalues[mail] = 1
            else:
                mvalues[mail]+= 1


        sorted_values = sorted(mvalues.items(),key= operator.itemgetter(1))
        ln = len(sorted_values)
        for j in range(1,6):
            print(sorted_values[-j])
        pass
    except errors.HttpError as error:
        print('An error occurred: %s' % error)

Мой вопрос: какой самый быстрый и самый правильный способ получить все эти электронные письма пользователей? Если у меня много сообщений, я полагаю, что использовать какое-то время и делать запрос каждый раз - не самый лучший способ. Я пытаюсь понять это около 4 дней. Помощь

...