python - 带有 pageToken 的 GMail API : threads(). 列表丢失了结果中的一些线程

标签 python gmail-api

我正在尝试从我的邮箱中获取标有标签的线程列表。 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”的电子邮件。
你能帮我解决这个问题吗?

最佳答案

我刚刚遇到了类似的问题,并且能够通过切换“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”循环)。

这对我有用。希望它对您有用。

关于python - 带有 pageToken 的 GMail API : threads(). 列表丢失了结果中的一些线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29122936/

相关文章:

gmail-api - setIamPolicy 的 Gmail 通知问题

gmail-api - 为什么 GMail API 会从外发邮件中去除文档类型和评论?

python - 在 Python 中将空字符串写入文本文件

python - 使用参数 : pandas (or pyodbc) not functioning properly 从 SQL Server 读取

google-api - 如何找到通过Google Gmail API检索的附件的确定的附件ID?

node.js - 使用 Google gmail api 是否需要 credentials.json?

javascript - 检索最后 5 条未读消息

python - 数据框中更快的列乘法

python - 重新编译 Python 以修复交互模式中的箭头键问题

python - 转置和扩展数据