質問編集履歴

1 解決された原因の追加、最終chord追加

s.kono

s.kono score 14

2019/10/23 16:00  投稿

GAS スライドをページごとに画像化してGoogle ドライブに保存する方法について
Google Apps Script でGoogleドライブにあるスライドやパワーポイントの1スライドを自動で画像化して同じフォルダに保存したいです。
こちらのサイトを参考にというか、ほぼ同じchordなのですが以下のエラーが出て実現できません。
事前準備としてOAuth2 for Apps Scriptのライブラリを有効化しています。
参考サイト:[https://codeday.me/jp/qa/20190305/364927.html](https://codeday.me/jp/qa/20190305/364927.html)
エラー:text/html から image/png への変換はサポートされていません。
ご教示よろしくお願いします。
```javascript
/* 参考サイト
https://codeday.me/jp/qa/20190305/364927.html
*/
function main(){
 var id=PropertiesService.getScriptProperties().getProperty('slide_id');
 downloadPresentation(id)
}
function downloadPresentation(id) {
 var slideIds = getSlideIds(id);
 for (var i = 0, slideId; slideId = slideIds[i]; i++) {
   downloadSlide('Slide ' + (i + 1), id, slideId);
 }
}
function downloadSlide(name, presentationId, slideId) {
 var url = 'https://docs.google.com/presentation/d/' + presentationId +
   '/export/png?id=' + presentationId + '&pageid=' + slideId;
 var options = {
   "muteHttpExceptions" : true,  //エラー捕捉
   headers: {
     Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
   }
 };
   try {
   //成功時
     var response = UrlFetchApp.fetch(url, options);
     var image = response.getAs(MimeType.PNG);//←text/html から image/png への変換はサポートされていませんとエラーになります
     image.setName(name);
     DriveApp.createFile(image);
 } catch(e) {
   //エラー時
   Logger.log(e.message);
 }
 
}
function getSlideIds(presentationId) {
 
 var url = 'https://slides.googleapis.com/v1/presentations/' + presentationId;
 var options = {
   "muteHttpExceptions" : true, //エラー捕捉
   headers: {
     Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
   }
 };
 try{
   var response = UrlFetchApp.fetch(url, options);
 } catch(e) {
   //エラー時
    Logger.log(e.message);
 }
 var slideData = JSON.parse(response);
 return slideData.slides.map(function(slide) {
   return slide.objectId;
 });
 
}
 
```
```
**結論としては**
エラーはchordによるエラーではなく、環境回りの設定がうまくいっていなかったということでした。
最終的にはマイドライブに保存された画像ファイルを元スライドにあるフォルダに移動する部分も追加した次のコードでうまく動いています。
**不要だったもの**
- OAuth2ライブラリの追加
- Google Slides API
```Google Apps Script
/* 参考サイト
https://medium.com/@gw_cule/gas%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E8%AA%8D%E5%8F%AF%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-67f195d7a425
https://codeday.me/jp/qa/20190305/364927.html
*/
function main(){
 var id=PropertiesService.getScriptProperties().getProperty('slide_id');
 var folderid=PropertiesService.getScriptProperties().getProperty('folder_id');
 downloadPresentation(id,folderid)
}
function downloadPresentation(id,folderid) {
 var slideIds = getSlideIds(id);
 for (var i = 0, slideId; slideId = slideIds[i]; i++) {
   var file = downloadSlide('Slide ' + (i + 1), id, slideId);
   moveSlides(file,folderid);
 }
}
function downloadSlide(name, presentationId, slideId) {
 var url = 'https://docs.google.com/presentation/d/' + presentationId +
   '/export/png?id=' + presentationId + '&pageid=' + slideId;
 var options = {
   "muteHttpExceptions" : true,  //エラー捕捉
   headers: {
     Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
   }
 };
   try {
   //成功時
     var response = UrlFetchApp.fetch(url, options);
     var image = response.getAs(MimeType.PNG);
     image.setName(name);
     var file=DriveApp.createFile(image);
     return file;
 } catch(e) {
   //エラー時
   Logger.log(e.message);
 }
 
}
function getSlideIds(presentationId) {
 
 var url = 'https://slides.googleapis.com/v1/presentations/' + presentationId;
 var options = {
   "muteHttpExceptions" : true, //エラー捕捉
   headers: {
     Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
   }
 };
 try{
   var response = UrlFetchApp.fetch(url, options);
 } catch(e) {
   //エラー時
    Logger.log(e.message);
 }
 var slideData = JSON.parse(response);
 return slideData.slides.map(function(slide) {
   return slide.objectId;
 });
 
}
 
function moveSlides(file,folderid){
 var folder = DriveApp.getFolderById(folderid);
 file.makeCopy(file.getName(),folder);//ルート(マイドライブ直下)に作られた画像ファイルをコピーする
 Logger.log(file.getName() + ": this file delete");
 file.setTrashed(true);
 
}
```
  • Google Apps Script

    1823 questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • 保存

    97 questions

    保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

  • Google スライド

    7 questions

    Google スライドは、Google社が提供している文書作成ツール。Googleアカウントがあれば利用が可能です。プレゼンテーション用テンプレートフォーマットやフォントなどが多く用意されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る