我在这里尝试使用gmail api添加标签
为此,我在这里使用了例子:https://developers.google.com/gmail/api/v1/reference/users/messages/modify#try-it
问题是,当我想放置自己的标签时,我从服务器上得到400
def add_label_to_email(service, user_id, msg_id, msg_labels):
"""Modify the Labels on the given Message.
Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
msg_id: The id of the message required.
msg_labels: The change in labels.
Returns:
Modified message, containing updated labelIds, id and threadId.
"""
try:
message = service.users().messages().modify(userId=user_id,
id=msg_id,
body=msg_labels).execute()
label_ids = message['labelIds']
logging.debug('Message ID: %s - With Label IDs %s' % (msg_id, label_ids))
return message
except errors.HttpError, error:
logging.debug('An error occurred: %s' % error)
def create_message_label():
"""Create object to update labels.
Returns:
A label update object.
"""
return {'removeLabelIds': [], 'addLabelIds': ['my_label']}
错误信息:
DEBUG 2017-07-17 08:25:36,072 api_gmail.py:178] An error occurred: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/15d4e47f393487c2/modify?alt=json returned "Invalid label: my_label">
它正在使用这个例子:
def CreateMsgLabels():
"""Create object to update labels.
Returns:
A label update object.
"""
return {'removeLabelIds': [], 'addLabelIds': ['UNREAD', 'INBOX', 'Label_2']}
如果有人可以提供帮助,我不明白它是如何运作的?
答案 0 :(得分:1)
这里的问题是 labelId 和 labelName 之间的混淆。传递给gmail api 的labelId 用户实际上是gmail 标签字段name 而不是id。
首先调用api请求所有标签可以找到真正的标签ID:
labelsList = service.users().labels().list(userId='me').execute()
print(labelsList)
我认为 labelsList var 是一个 dict 类型,并为每个标签分配了“id”和“name”。然后可以通过使用更新后的 labelId 调用 api 来使用上述代码。
用户可能有一个不幸的巧合,即已经有一个 ID 设置为“Label_2”的标签。希望这对其他人有帮助。