appscript UrlFetchApp,并将幻灯片导出到txt

时间:2020-05-20 08:46:05

标签: google-apps-script google-slides-api urlfetch

我真诚地有人可以帮助我。 我的最终目标是能够像在编辑器中一样获得Google幻灯片的纯文本表示,然后转到“文件”->“下载-纯文本”。 我需要将此txt作为字符串保存在我的google appscript代码中。

根据我到目前为止的收集,使用Slides API无法做到这一点。像Presentation,Slide等对象似乎没有导出asString()方法。因此,我查看了在编辑器模式下使用UI时执行的http请求。

事实证明,如果您用任何Google幻灯片的/ export / txt替换URL中的/ edit,您将被重定向到txt导出。

所以我在应用程序项目中使用URL提取对该代码进行了编码:

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。当我在浏览器中命中相同的URL(已通过google域的身份验证)时,就会发生重定向,并获得所需的内容。

如果还有其他方法可以代替Google内部的HTTP往返,我很乐意看到这一点,但我还没有找到。

我的项目基于REST包装,因此使用DriveApp等。我不知道是否可以在没有包装的情况下将其与V2 REST api混合使用,但是如果是这样,我很乐意考虑是否也可以解决此问题。

请帮助任何人?

1 个答案:

答案 0 :(得分:1)

我相信您的目标如下。

  • 您要使用UrlFetchApp和Google Apps脚本将Google幻灯片导出为文本数据。

为此,这个答案如何?

修改点:

  • 关于用于导出文本数据的端点,当您要在Drive API中使用“文件:”导出方法时,请使用"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"作为端点。
  • 在您的请求标头中,未包含headers。请在Authorization中加入headers
  • 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);

注意:

参考文献: