Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Gmail API读取所有消息,而不是未读的消息_Python_Python 3.x_Gmail_Gmail Api - Fatal编程技术网

Python Gmail API读取所有消息,而不是未读的消息

Python Gmail API读取所有消息,而不是未读的消息,python,python-3.x,gmail,gmail-api,Python,Python 3.x,Gmail,Gmail Api,我正在尝试使用下面的代码从gmail帐户获取所有未读的信息 msgs = service.users().messages().list(userId='me',q='in:inbox is:unread').execute() flag=1 while flag==1: for i in range(0,len(msgs['messages'])): message = service.users().messages().get(userId='me', id=ms

我正在尝试使用下面的代码从gmail帐户获取所有未读的信息

msgs = service.users().messages().list(userId='me',q='in:inbox is:unread').execute()

flag=1
while flag==1:
    for i in range(0,len(msgs['messages'])):
        message = service.users().messages().get(userId='me', id=msgs['messages'][i]['id']).execute()
        print(message['snippet'])
    if 'nextPageToken' in msgs.keys():
            msgs = service.users().messages().list(userId='me',pageToken= msgs['nextPageToken']).execute()
    else:
        flag=0
上述代码的逻辑

API返回100个消息ID和一个名为
nextPageToken
的下一页ID。我们使用这个令牌获取接下来的100个消息ID等等。如果没有下一个页面,它将没有令牌,因此我的最后4行代码将检查它是否存在。如果不存在,则将标志设置为0,while循环完成

问题

上面的代码获取所有消息(已读和未读)

尝试过的其他方法

msgs = service.users().messages().list(userId='me',labelIds=['UNREAD']).execute()

可能的根本原因

我注意到,如果未读邮件数为100,则它会提取所有邮件(已读+未读)


我已经研究过了,但也没有帮助。

让我感到困扰的是,您的代码只在第一个API调用中过滤消息

因此,在不过滤消息的情况下,您可以获得所有消息(已读或未读)。除了第一个呼叫(您正在筛选的唯一呼叫)

msgs=service.users().messages().list(userId='me',q='in:inbox is:unread')。execute()
标志=1
当flag==1时:
对于范围内的i(0,len(msgs['messages']):
message=service.users().messages().get(userId='me',id=msgs['messages'][i]['id']).execute()
打印(消息['snippet'])
如果msgs.keys()中的“nextPageToken”:
msgs=service.users().messages().list(userId='me',
q='in:inbox为:未读',将此添加到后续通话中
pageToken=msgs['nextPageToken']
).execute()
其他:
标志=0
请看中分页的示例。在这里,您可以看到如何为每个调用(而不仅仅是第一个调用)传递查询

试试看:
response=service.users().messages().list(userId=user\u id,
q=query.execute()
消息=[]
如果响应中有“消息”:
messages.extend(响应['messages'])
响应“nextPageToken”时:
page_token=响应['nextPageToken']
response=service.users().messages().list(userId=user\u id,q=query,
pageToken=page_token).execute()
messages.extend(响应['messages'])
返回消息
除了errors.HttpError,错误:
“打印”发生错误:%s“%s”错误

是的,我在下半场错过了页面标记属性。
msgs = service.users().messages().list(userId='me',q='in:inbox is:unread').execute()