Скрипт Google заменяет AllShapesWithImage изображением с диска, больше не работает - PullRequest
1 голос
/ 05 февраля 2020

Со вчерашнего дня один из моих скриптов Google больше не работает. Скрипт

  1. снимок изображения на диске
  2. коп ie слайд
  3. замена фигуры на изображение

Но я получил эту ошибку:

"Предоставленное изображение в неподдерживаемом формате."

-> Я даю всем доступ к изображению: оно ничего не меняет

-> Сценарий сработает, если я возьму URL вне диска

Любая идея

function test_image(){
  var imageUrls = DriveApp.getFilesByName("DSC_3632.png");
  var file = "undefined";
  while ( imageUrls.hasNext()) {
    var file = imageUrls.next();
  }

  var imageUrl = file.getDownloadUrl() + "&access_token=" + ScriptApp.getOAuthToken();

  var model_file = DriveApp.getFileById("your-id");
  var presentation = model_file.makeCopy("totot");
  var presentation =Slides.Presentations.get(presentation.getId())

  var requests = [{
      "replaceAllShapesWithImage":
        {
          "imageUrl": imageUrl,
          "imageReplaceMethod": "CENTER_INSIDE",
          "containsText": {
            "text": "toto",
            "matchCase": false,
          }
        }
    }];


  var presentationId = presentation.presentationId

  var createSlideResponse = Slides.Presentations.batchUpdate({
    requests: requests
  }, presentationId);


}

1 Ответ

8 голосов
/ 06 февраля 2020

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходной путь:

Я думаю, что причина вашей проблемы заключается в следующем изменении официального документа .

Сначала мы вносим изменения в авторизацию для Google Drive API. Если вы авторизуете запросы на загрузку в Drive API с помощью токена доступа в параметре запроса, вам нужно будет перенести ваши запросы для аутентификации с использованием заголовка HTTP. Начиная с 1 января 2020 года, загрузка вызовов на конечные точки files.get, revisions.get и files.export, которые аутентифицируются с использованием токена доступа в параметре запроса, больше не поддерживаются, что означает, что вам необходимо обновить метод аутентификации.

В описанной выше ситуации URL var imageUrl = file.getDownloadUrl() + "&access_token=" + ScriptApp.getOAuthToken(); не может быть использован. Например, при доступе к URL-адресу экран входа в систему отображается даже при использовании токена доступа.

Чтобы избежать этой проблемы, как насчет следующей модификации?

Точки модификации :

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

Модифицированный скрипт:

Когда ваш скрипт модифицируется, он становится следующим:

function test_image(){
  var imageUrls = DriveApp.getFilesByName("DSC_3632.png");
  var file; // Modified
  while (imageUrls.hasNext()) {
    file = imageUrls.next();
  }
  file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // Added
  var imageUrl = "https://drive.google.com/uc?export=download&id=" + file.getId(); // Modified
  var model_file = DriveApp.getFileById("your-id");
  var presentation = model_file.makeCopy("totot");
  var presentation =Slides.Presentations.get(presentation.getId())
  var requests = [{
    "replaceAllShapesWithImage": {
      "imageUrl": imageUrl,
      "imageReplaceMethod": "CENTER_INSIDE",
      "containsText": {
        "text": "toto",
        "matchCase": false,
      }
    }
  }];
  var presentationId = presentation.presentationId
  var createSlideResponse = Slides.Presentations.batchUpdate({requests: requests}, presentationId);
  file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); // Added
}

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

...