Получение полной веб-страницы альбома Google Фото из скрипта Apps - PullRequest
1 голос
/ 10 января 2020

Я пытался очистить общедоступный фотоальбом, который у меня есть в Google Photos: при публикации альбома есть ссылка в формате photos.app.goo.gl/ enjSOME_ID}. Цель состоит в том, чтобы иметь возможность извлекать отдельные URL-адреса фотографий (URL-адреса, срок действия которых не истекает, в формате lh3.googleusercontent.com и которые затем можно встроить в любой другой веб-сайт в теге).

Я хотел бы сделать это в Google Apps Script и попробовал следующее:

var response = UrlFetchApp.fetch("https://photos.app.goo.gl/{SOME_ID}");
Logger.log(response.getContentText());

Однако в ответе не отображается ни одно из изображений, как если бы страницу вместо этого нужно было загрузить еще немного, хотя я тестирую это на альбоме всего с 2 фотографиями. Если я осматриваю страницу вручную, я четко вижу ссылки на изображения + изображения в формате lh3.googleusercontent.com. Что я должен изменить в своем запросе на получение?

Я видел другие реализации (кроме скрипта приложений), использующие Ax ios, которым удалось получить нужные мне URL-адреса, но не нашел способа импорта библиотека Ax ios в скрипте приложений. Есть мысли?

Спасибо!

1 Ответ

1 голос
/ 10 января 2020

Ответ:

Вы можете использовать API Google Фото в скрипте приложений для получения отдельных URL-адресов фотографий общего альбома.

Дополнительная информация:

UrlFetchApp.fetch() возвращает объект HTTPResponse в скрипте приложений, который содержит заголовки, HTML содержимое и другую информацию, такую ​​как код ответа HTTP, как если бы страница выбиралась и загружалась через браузер. На странице «Квоты для служб Google» также есть набор ограничений для получения URL-адресов, в результате чего вы получаете усеченный ответ для достаточно больших страниц.

Однако в API фотографий есть методы, специально разработанные для описываемой вами цели, и эти данные можно получить из ресурса mediaItems REST. Имейте в виду, однако, что это возвращает все фотографии, а не те, которые находятся в определенном c альбоме; оттуда потребуется дальнейшая обработка.

Пример кода:

После создания нового проекта в консоли Developers Console необходимо включить API Photos из Элемент меню APIs & Services > Library, а затем свяжите его с вашим проектом скриптов приложений, перейдя в пользовательский интерфейс скрипта и следуя Resources > Cloud Platform project. Добавьте номер проекта только что созданного в консоли разработчика и нажмите Set Project.

Вот небольшой фрагмент кода, который вернет фотографии из вашей учетной записи Google Фото и зарегистрирует отдельные URL-адреса фотографий в Logger. :

function logPhotoUrls() { 
  var url = 'https://photoslibrary.googleapis.com/v1/mediaItems'; 
  var options = {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    },
    method: 'get',
    muteHtteExceptions: false
  };

  var response = UrlFetchApp.fetch(url, options);
  for (var i = 0; i < 10; i++) {
    Logger.log(JSON.parse(response.getContentText()).mediaItems[i].productUrl);
  }
}

Вам также необходимо отредактировать appscript.json, который можно увидеть, следуя View > Show manifest file, чтобы включить следующее:

{
  "oauthScopes": ["https://www.googleapis.com/auth/photoslibrary.readonly", 
                  "https://www.googleapis.com/auth/script.external_request"]
}

Я надеюсь, что это полезно для you!

Ссылки:

...