appscript UrlFetchApp 和幻灯片导出到 txt
appscript UrlFetchApp and slides export to txt
我真诚地希望有人能帮我解决这个问题。
我的最终目标是能够获得 google 幻灯片组的纯文本表示,就像您在编辑器中转到文件 -> 下载 - 纯文本时所获得的一样。
我需要将此 txt 作为字符串放入我的 google appscript 代码中。
根据我目前收集到的信息,使用幻灯片 API 是不可能的。 Presentation、Slide 等对象似乎没有 export asString() 方法。所以我查看了在编辑器模式下使用 UI 时执行的 http 请求。
事实证明,如果您将 URL 中的 /edit 替换为任何 google 幻灯片的 /export/txt,您将被重定向到导出到 txt。
所以我在我的 appscript 项目中使用 URL fetch 对其进行了编码:
var l_sDocID = _deck.getId(); // A Drive File
var l_httpOptions = {"contentType" : "text/plain",
"method" : "get",
"followRedirects" : true,
"muteHttpExceptions" : true,
"Authorization" : "Bearer " + ScriptApp.getOAuthToken()};
var l_sExportURL = "https://docs.google.com/presentation/d/" + l_sDocID + "/export/txt";
logger.log(UrlFetchApp.fetch(l_sExportURL, l_httpOptions).getContentText());
我这辈子都弄不清自己做错了什么,但每次都会收到错误 400。当我在已经通过 google 域认证的浏览器中点击相同的 URL 时,重定向发生了,我得到了我想要的内容。
如果有其他方法可以代替内部的 http 往返google,我很高兴看到它,但我还没有找到。
我的项目基于 REST 包装器,因此使用 DriveApp 等。我不知道是否可以将其与不带包装器的 V2 REST api 混合使用,但如果可以,我很乐意考虑如果它将解决这个问题。
请帮助任何人?
我相信你的目标如下。
- 您想使用
UrlFetchApp
和 Google Apps 脚本将 Google 幻灯片导出为文本数据。
为此,这个答案怎么样?
修改点:
- 关于导出文本数据的端点,当您要在Drive API中使用Files:导出方法时,请使用
"https://www.googleapis.com/drive/v3/files/" + l_sDocID + "/export?mimeType=text/plain"
作为l_sExportURL
。
- 此外,您可以使用
"https://docs.google.com/feeds/download/presentations/Export?id=" + l_sDocID + "&exportFormat=txt"
作为端点。
- 在您的请求 header 中,
headers
未包含在内。请在 headers
. 中包含 Authorization
followRedirects
默认为 true
。
method
默认为 get
。
- 在get方法中,不需要
contentType
。
logger.log
不正确。这是 Logger.log
.
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
var l_sDocID = _deck.getId(); // This is the Google Slides ID.
var l_httpOptions = {
muteHttpExceptions : true,
headers: {Authorization : "Bearer " + ScriptApp.getOAuthToken()}
};
var l_sExportURL = "https://www.googleapis.com/drive/v3/files/" + l_sDocID + "/export?mimeType=text/plain";
var res = UrlFetchApp.fetch(l_sExportURL, l_httpOptions).getContentText();
Logger.log(res);
注:
- 如果发生与范围相关的错误并且 API,请在 Advanced Google services 启用驱动器 API。
参考文献:
我真诚地希望有人能帮我解决这个问题。 我的最终目标是能够获得 google 幻灯片组的纯文本表示,就像您在编辑器中转到文件 -> 下载 - 纯文本时所获得的一样。 我需要将此 txt 作为字符串放入我的 google appscript 代码中。
根据我目前收集到的信息,使用幻灯片 API 是不可能的。 Presentation、Slide 等对象似乎没有 export asString() 方法。所以我查看了在编辑器模式下使用 UI 时执行的 http 请求。
事实证明,如果您将 URL 中的 /edit 替换为任何 google 幻灯片的 /export/txt,您将被重定向到导出到 txt。
所以我在我的 appscript 项目中使用 URL fetch 对其进行了编码:
var l_sDocID = _deck.getId(); // A Drive File
var l_httpOptions = {"contentType" : "text/plain",
"method" : "get",
"followRedirects" : true,
"muteHttpExceptions" : true,
"Authorization" : "Bearer " + ScriptApp.getOAuthToken()};
var l_sExportURL = "https://docs.google.com/presentation/d/" + l_sDocID + "/export/txt";
logger.log(UrlFetchApp.fetch(l_sExportURL, l_httpOptions).getContentText());
我这辈子都弄不清自己做错了什么,但每次都会收到错误 400。当我在已经通过 google 域认证的浏览器中点击相同的 URL 时,重定向发生了,我得到了我想要的内容。
如果有其他方法可以代替内部的 http 往返google,我很高兴看到它,但我还没有找到。
我的项目基于 REST 包装器,因此使用 DriveApp 等。我不知道是否可以将其与不带包装器的 V2 REST api 混合使用,但如果可以,我很乐意考虑如果它将解决这个问题。
请帮助任何人?
我相信你的目标如下。
- 您想使用
UrlFetchApp
和 Google Apps 脚本将 Google 幻灯片导出为文本数据。
为此,这个答案怎么样?
修改点:
- 关于导出文本数据的端点,当您要在Drive API中使用Files:导出方法时,请使用
"https://www.googleapis.com/drive/v3/files/" + l_sDocID + "/export?mimeType=text/plain"
作为l_sExportURL
。- 此外,您可以使用
"https://docs.google.com/feeds/download/presentations/Export?id=" + l_sDocID + "&exportFormat=txt"
作为端点。
- 此外,您可以使用
- 在您的请求 header 中,
headers
未包含在内。请在headers
. 中包含 followRedirects
默认为true
。method
默认为get
。- 在get方法中,不需要
contentType
。 logger.log
不正确。这是Logger.log
.
Authorization
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
var l_sDocID = _deck.getId(); // This is the Google Slides ID.
var l_httpOptions = {
muteHttpExceptions : true,
headers: {Authorization : "Bearer " + ScriptApp.getOAuthToken()}
};
var l_sExportURL = "https://www.googleapis.com/drive/v3/files/" + l_sDocID + "/export?mimeType=text/plain";
var res = UrlFetchApp.fetch(l_sExportURL, l_httpOptions).getContentText();
Logger.log(res);
注:
- 如果发生与范围相关的错误并且 API,请在 Advanced Google services 启用驱动器 API。