Вопрос: 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 полезна:

  1. Настройка приложения Сначала необходимо получить конфигурацию приложения через консоль разработчика по адресу 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"]
         }}
    
  2. Запрос кода авторизации - вам нужно написать код, который использует эти значения для получения токена авторизации - в основном это строка, которая указывает, что пользователь разрешил вашему приложению доступ к их данным. Отправьте запрос конечной точке 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" (без кавычек)
  3. Авторизация в обе стороны Отправка этого составленного URI в браузер пользователя позволит ему выбрать учетную запись Google и показать, какие области запрашиваются. Как только эта форма будет отправлена, она будет перенаправлена ​​на ваш redirect_uri со значениями querystring (Method = GET):

    • код - код авторизации, который вы можете использовать для запроса токена доступа
    • state - строка, которую вы можете использовать для проверки вашего хеша
  4. Получите access_token Наконец вы обмениваете код авторизации для OAuth AccessToken, который вы вставляете в заголовок HTTP всех запросов API. Запрос переходит к token_uri из шага 1 и имеет следующие параметры тела запроса (Method = POST):

    • код - вы получили из строки запроса перенаправления в шаге 3
    • redirect_uri - то же, что и выше, но это не может быть использовано
    • client_id - из конфигурации
    • code_verifier - code_challenge до того, как он был хеширован
    • client_secret - из конфигурации
    • область действия - здесь может быть пусто
    • grant_type - "код авторизации" (без кавычек)
  5. Используйте маркеры доступа. Ответ от этого запроса будет содержать access_token и refresh_token. Вы можете использовать кратковременный access_token немедленно в HTTP-заголовке вашего запроса API. Сохраните долгоживущий файл refresh_token, чтобы вы могли получить новый access_token без повторной авторизации.

Это суть этого. Вы можете посмотреть в моем скрипте Powershell пример потоков авторизации и аутентификации, которые работают, хотя все остальное немного глючит и неполно. При просмотре альбомов иногда возникает ошибка 401.

Другие вопросы по тегам