Google 스크립트 replaceAllShapesWithImage와 드라이브의 이미지가 더 이상 작동하지 않습니다.

데니스 볼 로미에

어제부터 내 Google 스크립트 중 하나가 더 이상 작동하지 않습니다. 스크립트

  1. 드라이브에 이미지를 찍다
  2. 슬라이드 복사
  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);


}
Tanaike

이 답변은 어떻습니까? 이것은 몇 가지 가능한 답변 중 하나에 불과하다고 생각하십시오.

문제 및 해결 방법 :

문제의 원인은 다음과 같은 공식 문서의 수정 때문이라고 생각합니다 .

먼저 Google Drive API에 대한 승인을 변경하고 있습니다. 쿼리 매개 변수의 액세스 토큰을 사용하여 Drive API에 대한 다운로드 요청을 승인하는 경우 대신 HTTP 헤더를 사용하여 인증하도록 요청을 마이그레이션해야합니다. 2020 년 1 월 1 일부터 쿼리 매개 변수의 액세스 토큰을 사용하여 인증하는 files.get, corrections.get 및 files.export 엔드 포인트에 대한 다운로드 호출이 더 이상 지원되지 않으므로 인증 방법을 업데이트해야합니다.

위 상황에 따라의 URL을 var imageUrl = file.getDownloadUrl() + "&access_token=" + ScriptApp.getOAuthToken();사용할 수 없습니다. 예를 들어 URL에 액세스하면 액세스 토큰을 사용하더라도 로그인 화면이 표시됩니다.

이 문제를 피하기 위해 다음 수정은 어떻습니까?

수정 지점 :

  • 파일이 공개적으로 공유되고 Google 프레젠테이션에 저장됩니다. 그러면 공유 파일이 닫힙니다.
    • 이 경우 파일 공유가 종료 되어도 슬라이드에 올려 진 이미지는 제거되지 않습니다.
  • webContentLink가 URL로 사용됩니다.
    • 마치 https://drive.google.com/uc?export=download&id=###.

수정 된 스크립트 :

스크립트를 수정하면 다음과 같이됩니다.

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
}

참조 :

내가 당신의 질문을 오해하고 이것이 당신이 원하는 방향이 아니라면 사과드립니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관