Вопрос: API библиотеки Google Photos - кто-то знает, как он работает?
Я пытаюсь загрузить альбом из Google Фото через javascript, но я не понимаю, как работает API, я начал читать API Google Фото, но не повезло. Есть ли кодовый код, по которому я могу перейти, чтобы получить список фотографий моего альбома?
Я нашел это, но не работает
<script>
var scopeApi = ['https://www.googleapis.com/auth/photoslibrary', 'https://www.googleapis.com/auth/photoslibrary.readonly', 'https://www.googleapis.com/auth/photoslibrary.readonly.appcreateddata'];
function onAuthPhotoApiLoad() {
window.gapi.auth.authorize(
{
'apiKey': 'MY_API_KEY',
'client_id': "MY_CLIEND_ID",
'scope': scopeApi,
'immediate': false
},
handlePhotoApiAuthResult);
}
function handlePhotoApiAuthResult(authResult) {
if (authResult && !authResult.error) {
oauthToken = authResult.access_token;
GetAllPhotoGoogleApi();
}
}
function GetAllPhotoGoogleApi() {
gapi.client.request({
'path': 'https://photoslibrary.googleapis.com/v1/albums',
'method': 'POST'
}).then(function (response) {
console.log(response);
}, function (reason) {
console.log(reason);
});
}
onAuthPhotoApiLoad();
1 ответ
В процессе разработки сценария синхронизации фотографий я потратил несколько дней на изучение и тестирование документации Oauth 2.0. Это много, чтобы принять, но, надеюсь, эта версия Cliff-notes полезна:
Настройка приложения Сначала необходимо получить конфигурацию приложения через консоль разработчика по адресу https://console.developers.google.com/ и убедиться, что данные Photos являются общими.
Вы получите файл JSON, который выглядит следующим образом
{"installed":{ "client_id":"xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", "project_id":"xxxx-xxxxxxxx-123456", "auth_uri":"https://accounts.google.com/o/oauth2/auth", "token_uri":"https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", "client_secret":"xxxxxxxxxxxxxxxxxxxxxxxx", "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] }}
Запрос кода авторизации - вам нужно написать код, который использует эти значения для получения токена авторизации - в основном это строка, которая указывает, что пользователь разрешил вашему приложению доступ к их данным. Отправьте запрос конечной точке auth_uri со следующими значениями в строке запроса:
- область действия - разделенный пробелами список областей на сайте developers.google.com/photos, в котором указано, что вы хотите, чтобы ваш пользователь предоставил доступ к этим функциям.
- redirect_uri - ваш URL-адрес, который может захватывать входящую строку запроса
- client_id - из конфигурации вашего разработчика на шаге 1
- состояние - 32 случайных байта, в кодировке base64 и в соответствии с URL-адресами путем замены "+","/","=" на "-","_","" соответственно
- code_challenge - SHA256-хеш еще 32 случайных байта, закодированных в base64 и совместимых с URL
- code_challenge_method - "S256" (без кавычек)
Авторизация в обе стороны Отправка этого составленного URI в браузер пользователя позволит ему выбрать учетную запись Google и показать, какие области запрашиваются. Как только эта форма будет отправлена, она будет перенаправлена на ваш redirect_uri со значениями querystring (Method = GET):
- код - код авторизации, который вы можете использовать для запроса токена доступа
- state - строка, которую вы можете использовать для проверки вашего хеша
Получите access_token Наконец вы обмениваете код авторизации для OAuth AccessToken, который вы вставляете в заголовок HTTP всех запросов API. Запрос переходит к token_uri из шага 1 и имеет следующие параметры тела запроса (Method = POST):
- код - вы получили из строки запроса перенаправления в шаге 3
- redirect_uri - то же, что и выше, но это не может быть использовано
- client_id - из конфигурации
- code_verifier - code_challenge до того, как он был хеширован
- client_secret - из конфигурации
- область действия - здесь может быть пусто
- grant_type - "код авторизации" (без кавычек)
Используйте маркеры доступа. Ответ от этого запроса будет содержать access_token и refresh_token. Вы можете использовать кратковременный access_token немедленно в HTTP-заголовке вашего запроса API. Сохраните долгоживущий файл refresh_token, чтобы вы могли получить новый access_token без повторной авторизации.
Это суть этого. Вы можете посмотреть в моем скрипте Powershell пример потоков авторизации и аутентификации, которые работают, хотя все остальное немного глючит и неполно. При просмотре альбомов иногда возникает ошибка 401.