我一直在尝试获取数据以从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()
答案 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'])