каков формат Python People API 'updateContact' и содержимое аргументов функции - PullRequest
0 голосов
/ 03 марта 2019

Меня смущает, как обновить контакт с помощью python.Согласно API Google People, эта функция имеет вид

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 с новым значением для псевдонима

  • делая 'nicknames' вupdatePersonFields будет 'nicknames' или объект, аналогичный тому, что возвращает 'get', но с измененным значением псевдонима.

В то время как мой код обновления выполняется без ошибок с contactIdформы 'people/c.........', я не получаю нужное изменение

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

1 Ответ

0 голосов
/ 03 марта 2019

Решение, которое сработало, следующее:

  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 - это просто имя изменяемого поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...