Я слежу за документами на https://developers.google.com/photos/library/guides/authentication-authorization, и считаю, что приведенный ниже код довольно близок к правильному ...
import requests # from https://developers.google.com/identity/protocols/OAuth2ForDevices#step-1-request-device-and-user-codes def get_token(client_id="661666866149-42r2bldb8karc5bv5vltj0suis2fm4up.apps.googleusercontent.com"): response = requests.post( 'https://accounts.google.com/o/oauth2/device/code', data={ 'client_id': client_id, 'scope': 'https://www.googleapis.com/auth/photoslibrary https://www.googleapis.com/auth/photoslibrary.readonly.appcreateddata https://www.googleapis.com/auth/photoslibrary.sharing' }) print(response.text) return response
Вышеперечисленное продолжает работать с
{ "error": "invalid_scope" } <Response [400]>
Однако, если я изменю значение scope на email, это сработает.Я получил указанное выше значение из документации Google, поэтому я не знаю, что еще можно там разместить.
scope
email
Похоже, что вы следуете руководству для OAuth 2.0 для приложений телевизоров и устройств с ограниченным вводом для авторизации пользовательских областей OAuth на телевизоре или аналогичном устройстве.
Как указано на этой странице, этот поток поддерживает только ограниченный набор областей . К сожалению, в настоящее время эта область не включает в себя области действия API библиотеки Google Photos .
В системе отслеживания проблем открыт запрос на добавление поддержки для этого потока OAuth: https://issuetracker.google.com/113342106 (Вы можете "пометить" проблему, чтобы получать уведомления о любых обновлениях.)
(Если в вашем потоке задействованы мобильное устройство и серверный компонент, вы можете выполнить нечто подобное с помощью входа в Google путем обмена учетными данными пользователя между вашим сервером и службами Google . Вы можете предложить пользователям чтобы авторизовать область в вашем приложении, и после обмена токенами с вашим сервером выполняйте вызовы API таким образом. Вам придется самостоятельно обрабатывать связь между телевизором / устройством с ограниченным вводом и вашим приложением.)