Недопустимый аргумент userId в REST people.get () с использованием API Google People

Согласно документации Google OAUTH API , области userinfo.profile и userinfo.email устарели в пользу использования profile и email . Также имеется много информации от других пользователей API об этом коммутаторе.

Однако при попытке использовать API-интерфейс People я получаю эту ошибку:

 2016-02-22 13:01:25,044 :Exception on /admin/testbank/settings [GET] Traceback (most recent call last): (Flask traceback omitted...) File "/home/somedev/testweb/views/admin_view.py", line 78, in admin_view res_acct_info = people_service.people().get(userId='me').execute() File "/home/somedev/env/lib/python3.4/site-packages/googleapiclient/discovery.py", line 676, in method raise TypeError('Got an unexpected keyword argument "%s"' % name) TypeError: Got an unexpected keyword argument "userId" 

Если посмотреть на образец API Google , это должен быть правильный вызов. Тем не менее, dumping parameters.argmap в обнаружении библиотеки.py показывает, что userId не существует. Что я делаю не так?

(Примечание. Я пытаюсь пометить google-people , так как это предлагает страницы API, но мне не хватает rep, чтобы пометить это. Может ли кто-то добавить этот тег для меня?)

Оказывается, я был слеп к точному коду, который я читаю … все эти примеры (в частности, пример Google) используют API Google+, который действительно имеет аргумент userId.

Для справки, «старый способ» – это использование службы oauth2 / userinfo:

 service = build('oauth2', 'v2', http=http) user = users_service.userinfo().get().execute() name = user.get('name') email = user.get('email') 

Вы можете использовать Google+ API для получения той же информации – он будет работать, даже если у пользователя нет Google+ :

 service = discovery.build("plus", "v1", http=http) user = service.people().get(userId='me').execute() # This assumes that user['emailAddresses'] exists and # has at least one element... name = user.get('displayName') email = user.get('emailAddresses')[0].get("value") 

На момент написания, кажется, что API People был выпущен недавно (10 февраля 2016 года)! Имеет смысл, что об этом не будет много документации …

Чтобы использовать новый API People (и, возможно, претендовать на чистоту из Google+), это правильный способ получить информацию о текущем пользователе:

 service = discovery.build('people', 'v1', http_auth) user = people_service.people().get(resourceName='people/me').execute() # This assumes that user['names'] and user['emailAddresses'] # exists and has at least one element... name = user.get('names')[0].get("displayName") email = user.get('emailAddresses')[0].get("value") 

resourceName заменяет userId в API-интерфейсе People. Он имеет аналогичную цель (для идентификации текущего пользователя или другого пользователя), но имеет другой формат, как видно из использования 'people/me' вместо 'me' .

И API Google+, и новый API для людей просто требуют области email и profile . Однако, в отличие от прежнего API userinfo , вам необходимо вручную включить API Google+ и / или API People, чтобы использовать их.

tl; dr : API Google+ использует userId='me' , новый API People использует resourceName='people/me' , вы должны использовать один из этих поддерживаемых API – и возвращать ту же информацию, только в немного другом формате!