Google 的人 API -- 更新联系人时出现问题 (Python)

Google's People API -- Issues Updating Contacts (Python)

我有我想更新的人的资源名称和 etag,但我无法理解实际执行更新的文档。

我查看了 API 文档,我觉得我正在正确构建所有内容。但是,我不断收到两种类型的错误 400 响应:

1)

https://people.googleapis.com/v1/people/c1596007341306697743:updateContact?updatePersonFields=%7B%27emailAddresses%27%3A+%5B%7B%27value%27%3A+%27hello%40gmail.com%27%7D%5D%7D&alt=json returned "Invalid value at 'update_person_fields' (type.googleapis.com/google.protobuf.FieldMask), Field 'update_person_fields', Invalid FieldMask '{'emailAddresses': [{'value': 'hello@gmail.com'}]}'. Map keys should be represented as ["some_key"].">

2)

https://people.googleapis.com/v1/people/c1596007341306697743:updateContact?updatePersonFields=%7B%27emailAddresses%27%3A+%7B%27value%27%3A+%27hello%40gmail.com%27%7D%7D&alt=json returned "Invalid updatePersonFields mask path: "{'email_addresses': {'value': 'hello@gmail.com'}}". Valid paths are documented at https://developers.google.com/people/api/rest/v1/people/updateContact.">

第一个发生在列表括号 ([ ]) 留在 updatePersonFields 参数中时,第二个发生在它们被拿走时。

我正在尽最大努力在 Python 中完全实现这一点,并成功地查看和创建联系人。更新调用似乎与其他调用有所不同。欢迎和赞赏任何和所有意见。

    profileCode = "people/blahblahblah" 
    accessToken = "%Eblahblahblah=" 

    update = API.people().updateContact(
        resourceName=profileCode,
        body={"resourceName":profileCode, "etag":accessToken},
        updatePersonFields={"emailAddresses":[{"value":"hello@gmail.com"}]}
        ).execute()

请查看文档中的示例https://developers.google.com/people/v1/write-people#update-an-existing-contact

updatePersonFields 只是应该更新的字段的逗号分隔列表,例如emailAddresses,names。您正在尝试在 updatePersonFields 参数中指定要更新的联系人,这应该在 HTTP post 正文中指定,而不是 updatePersonFields 参数。