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);

注:

参考文献: