【问题标题】:Read last 20 messages using GMAIL API使用 GMAIL API 读取最后 20 条消息
【发布时间】:2019-06-06 00:55:03
【问题描述】:

我一直在尝试从 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()

【问题讨论】:

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


    【解决方案1】:

    更新此代码:

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

    【讨论】:

    • 虽然您的代码非常好并且可以工作。最好解释一下它的作用以及为什么要使用它。
    【解决方案2】:

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

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

    你必须这样做
    messages = results.get_next('messages', [])

    【讨论】:

    • 有没有办法获取特定用户的第一条消息
    猜你喜欢
    • 2015-09-17
    • 2018-07-28
    • 2015-03-13
    • 2016-03-18
    • 2016-05-29
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多