使用GMAIL API阅读最近20条消息

时间:2019-01-11 05:26:26

标签: python python-3.x limit gmail-api

我一直在尝试获取数据以从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 :(得分:1)

尝试使用google API提供的分页概念来限制响应中返回的消息。这是官方的Documentation

  

某些API方法可能返回非常大的数据列表。为了减小响应大小,许多这些API方法都支持分页。使用分页结果,您的应用程序可以迭代地一次请求和处理一页大型列表。对于支持它的API方法,存在带有后缀“ _next”的类似名称的方法。例如,如果一个方法名为list(),则可能还会有一个名为list_next()的方法。

你必须要做的
messages = results.get_next('messages', [])

答案 1 :(得分:0)

更新此代码:

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'])