Прочитайте последние 20 сообщений, используя GMAIL API - PullRequest
0 голосов
/ 11 января 2019

Я пытался получить данные для чтения сообщения из Gmail API.

Работает нормально, но как ограничить этот код, чтобы получать только последние 20 сообщений. Не все сообщения.

from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'

def main():

    store = file.Storage('token.json')
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
        creds = tools.run_flow(flow, store)
    service = build('gmail', 'v1', http=creds.authorize(Http()))

    # Call the Gmail API to fetch INBOX
    results = service.users().messages().list(userId='me', labelIds=['INBOX']).execute()
    messages = results.get('messages', [])

    if not messages:
        print("No messages found.")
    else:
        print("Message snippets:")
        for message in messages:
            msg = service.users().messages().get(userId='me', id=message['id']).execute()
            print(msg['snippet'])

if __name__ == '__main__':
    main()

РЕДАКТИРОВАТЬ:

Просто добавьте это дополнение при вызове GMAIL API для получения входящих сообщений.

results = service.users().messages().list(userId='me',maxResults=20,labelIds = ['INBOX']).execute()

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Попробуйте использовать концепцию нумерации страниц, предоставляемую API Google, чтобы ограничить количество сообщений, возвращаемых в ответе. Вот официальная Документация

Некоторые методы API могут возвращать очень большие списки данных. Чтобы уменьшить размер ответа, многие из этих методов API поддерживают разбиение на страницы. С разбивкой по страницам ваше приложение может многократно запрашивать и обрабатывать большие списки по одной странице за раз. Для методов API, которые его поддерживают, существуют методы с одинаковыми именами и суффиксом _next. Например, если метод с именем list (), может также существовать метод с именем list_next ().

Вы должны сделать
messages = results.get_next('messages', [])

0 голосов
/ 11 января 2019

Обновить этот код:

for message in messages:
    msg = service.users().messages().get(userId='me', id=message['id']).execute()
    print (msg['snippet'])

с этим:

for i, message in enumerate(messages):
    if i == 20:
        break
    msg = service.users().messages().get(userId='me', id=message['id']).execute()
    print (msg['snippet'])
...