teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

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

2019/10/23 07:00

投稿

s.kono
s.kono

スコア37

title CHANGED
File without changes
body CHANGED
@@ -70,4 +70,88 @@
70
70
  }
71
71
 
72
72
 
73
+ ```
74
+ **結論としては**
75
+ エラーはchordによるエラーではなく、環境回りの設定がうまくいっていなかったということでした。
76
+ 最終的にはマイドライブに保存された画像ファイルを元スライドにあるフォルダに移動する部分も追加した次のコードでうまく動いています。
77
+
78
+ **不要だったもの**
79
+ - OAuth2ライブラリの追加
80
+ - Google Slides API
81
+
82
+ ```Google Apps Script
83
+ /* 参考サイト
84
+ 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
85
+ https://codeday.me/jp/qa/20190305/364927.html
86
+ */
87
+ function main(){
88
+ var id=PropertiesService.getScriptProperties().getProperty('slide_id');
89
+ var folderid=PropertiesService.getScriptProperties().getProperty('folder_id');
90
+ downloadPresentation(id,folderid)
91
+ }
92
+
93
+ function downloadPresentation(id,folderid) {
94
+ var slideIds = getSlideIds(id);
95
+
96
+ for (var i = 0, slideId; slideId = slideIds[i]; i++) {
97
+ var file = downloadSlide('Slide ' + (i + 1), id, slideId);
98
+ moveSlides(file,folderid);
99
+ }
100
+ }
101
+
102
+ function downloadSlide(name, presentationId, slideId) {
103
+
104
+ var url = 'https://docs.google.com/presentation/d/' + presentationId +
105
+ '/export/png?id=' + presentationId + '&pageid=' + slideId;
106
+ var options = {
107
+ "muteHttpExceptions" : true,  //エラー捕捉
108
+ headers: {
109
+ Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
110
+ }
111
+ };
112
+ try {
113
+ //成功時
114
+ var response = UrlFetchApp.fetch(url, options);
115
+ var image = response.getAs(MimeType.PNG);
116
+ image.setName(name);
117
+ var file=DriveApp.createFile(image);
118
+ return file;
119
+ } catch(e) {
120
+ //エラー時
121
+ Logger.log(e.message);
122
+ }
123
+
124
+ }
125
+
126
+ function getSlideIds(presentationId) {
127
+
128
+ var url = 'https://slides.googleapis.com/v1/presentations/' + presentationId;
129
+ var options = {
130
+ "muteHttpExceptions" : true, //エラー捕捉
131
+ headers: {
132
+ Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
133
+ }
134
+ };
135
+ try{
136
+ var response = UrlFetchApp.fetch(url, options);
137
+ } catch(e) {
138
+ //エラー時
139
+ Logger.log(e.message);
140
+ }
141
+ var slideData = JSON.parse(response);
142
+ return slideData.slides.map(function(slide) {
143
+ return slide.objectId;
144
+ });
145
+
146
+ }
147
+
148
+ function moveSlides(file,folderid){
149
+
150
+ var folder = DriveApp.getFolderById(folderid);
151
+ file.makeCopy(file.getName(),folder);//ルート(マイドライブ直下)に作られた画像ファイルをコピーする
152
+ Logger.log(file.getName() + ": this file delete");
153
+ file.setTrashed(true);
154
+
155
+ }
156
+
73
157
  ```