我试图从标有标签的邮箱中获取线程列表。 Python上的代码示例(基于https://developers.google.com/gmail/api/v1/reference/users/threads/list)
try:
response = gmail_service.users().threads().list(userId='me', labelIds='Label_1').execute()
if 'threads' in response:
threads.extend(response['threads'])
while 'nextPageToken' in response:
page_token = response['nextPageToken']
response = gmail_service.users().threads().list(userId='me', labelIds='Label_1', pageToken=page_token).execute()
threads.extend(response['threads'])
except errors.HttpError, error:
logging.error('ERROR: page_token ' + page_token + ' ' + str(error))
print len(threads)
threads = set([x.get('id') for x in threads]) #exclude threads with the same id
print len(threads)
输出结果为:
2264
1862
在我的邮箱中,我看到2644封带有标签' Label_1'的电子邮件 你可以帮我解决这个问题吗?
答案 0 :(得分:1)
我遇到了类似的问题,并且可以通过切换'if'和'while'语句的顺序来解决它,如下所示:
response = gmail_service.users().threads().list(userId='me', labelIds='Label_1').execute()
while 'nextPageToken' in response:
page_token = response['nextPageToken']
response = gmail_service.users().threads().list(userId='me', labelIds='Label_1', pageToken=page_token).execute()
threads.extend(response['threads'])
if 'threads' in response:
threads.extend(response['threads'])
这是因为您(以及Google的API文档!)使用的代码实际上并未返回结果的最后一页。它说得到第一页结果,然后继续,如果没有线程,直到当前页面上没有'nextPageToken'。我建议的修复首先使用'nextPageToken'循环遍历所有页面,然后如果它包含任何线程则再循环一次。顺便提一下,这也处理了开始只有一页结果的情况(因为'while'循环不会被执行)。
这对我有用。希望它适合你。