Python People API的“updateContact”格式和函数参数的内容是什么

2024-06-10 14:11:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我对如何使用python更新联系人感到困惑。 根据Google的People API,这个函数是

updateContact(resourceName=None, body=*, x__xgafv=None, updatePersonFields=None)

我有个叫查尔斯·巴贝奇的联系人:

{'etag': '%EgYBAj0KNy4aBAECBQciDHRIenJLZkEzM0hBPQ==',
 'names': [{'displayName': 'Charles Babbage',
            'displayNameLastFirst': 'Babbage, Charles',
            'familyName': 'Babbage',
            'givenName': 'Charles',
            'metadata': {'primary': True,
                         'source': {'id': '216ee27389bd1ef4',
                                    'type': 'CONTACT'}}}],
 'nicknames': [{'metadata': {'primary': True,
                             'source': {'id': '216ee27389bd1ef4',
                                        'type': 'CONTACT'}},
                'value': 'charlie'}],
 'resourceName': 'people/c2409111836549783284'}

当我做“get”得到他的昵称时,结果是:

{'etag': '%EgQBCjcuGgQBAgUHIgx0SHpyS2ZBMzNIQT0=',
 'nicknames': [{'metadata': {'primary': True,
                             'source': {'id': '216ee27389bd1ef4',
                                        'type': 'CONTACT'}},
                'value': 'charlie'}],
 'resourceName': 'people/c2409111836549783284'}

我想把查尔斯·巴贝奇的昵称从'charlie'更新为'charlesB'

我试过很多不同的方法来研究"body=*""updatePersonFields"可能是什么,包括

  • 使'body1' = whole person,使body1 = whole person具有昵称的新值

  • 使updatePersonFields中的'nicknames'成为'nicknames'或类似于'get'返回的对象,但具有更改的昵称值。

虽然我的更新代码以'people/c.........'的形式contactId无误地执行,但我没有得到想要的更改

result = service.people().updateContact(resourceName = contactId, body = body1, updatePersonFields = 'nicknames')

Tags: noneidtruesourcetypebodypeoplebabbage
1条回答
网友
1楼 · 发布于 2024-06-10 14:11:38

有效的解决方案如下:

  1. 获取联系人(这将是一个列表)

    aContact = service.people().get(
        resourceName = 'people/c.....',
        personFields = 'nicknames'
    ).execute()
    
  2. 更改联系人列表第一个元素的值。你知道吗

    NickNames = aContact['nicknames'][0]        
    NickNames['value'] = 'newNickName'
    
  3. 用新信息更改aContact

    aContact['nicknames'] = NickNames
    
  4. updateContact

    result = service.people().updateContact(
        'resourceName' = 'people/c....',
        body = aContact, 
        updatePersonFields = 'nicknames'
    ).execute()
    

    注意:body是更改的联系人,updatePersonFields只是更改字段的名称。

相关问题 更多 >