通过Google Apps脚本

时间:2017-09-25 18:41:37

标签: javascript google-apps-script

我正在玩通过Google Apps脚本获取文档的修订历史记录,我正在寻找有关如何以编程方式访问修订内容的一些建议。

使用Drive API,我可以访问文档的一系列修订版并根据用户进行迭代。返回的对象不包含修订版的内容,只包含ID。但是,您可以获取各种内容类型的下载URL(pdf,纯文本等)。

我想使用UrlFetchApp检索下载网址,并将该内容附加到文档中。问题是fetch应用程序返回整个文档标记(HTML和CSS),我只喜欢文件的内容。

脚本

function revisionHistoryLite() {
  var doc = DocumentApp.getActiveDocument();
  var eds = doc.getEditors();
  var body = doc.getBody();

  var revs = Drive.Revisions.list(doc.getId())

  var editsList = [];

  for(var i=0; i<revs.items.length; i++) {
    var revision = revs.items[i];
    editsList.push([revision.id, revision.kind, revision.modifiedDate, revision.lastModifyingUser.emailAddress]);

    if(revision.lastModifyingUser.emailAddress == "bbennett@elkhart.k12.in.us") {
      var revUrl = Drive.Revisions.get(doc.getId(), revision.id).exportLinks["text/plain"];

      // revUrl returns https://docs.google.com/feeds/download/documents/export/Export?id=docIdString&revision=1&exportFormat=txt

      var revString = UrlFetchApp.fetch(revUrl, { contentType: "text/plain",  }).getContentText();
      Logger.log(revString); // Contains full HTTP markup

      // Append the body contents to a temporary document for further processing
      // var tempDoc = DocumentApp.create("Temp").getBody().appendParagraph(revString);


    }
  }
}

1 个答案:

答案 0 :(得分:0)

使用UrlFetchApp.fetch()从exportLinks下载文件时,需要授权。所以请修改你的脚本如下。

来自:

var revUrl = Drive.Revisions.get(doc.getId(), revision.id).exportLinks["text/plain"];
var revString = UrlFetchApp.fetch(revUrl, { contentType: "text/plain",  }).getContentText();

致:

var revUrl = Drive.Revisions.get(doc.getId(), revision.id).exportLinks["text/plain"]  + "&access_token=" + ScriptApp.getOAuthToken();
var revString = UrlFetchApp.fetch(revUrl).getContentText();

这样,您就可以从修订数据中下载文本数据。

编辑:

function revisionHistoryLite() {
  var doc = DocumentApp.getActiveDocument();
  var eds = doc.getEditors();
  var body = doc.getBody();
  var revs = Drive.Revisions.list(doc.getId())
  var editsList = [];
  for(var i=0; i<revs.items.length; i++) {
    var revision = revs.items[i];
    editsList.push([revision.id, revision.kind, revision.modifiedDate, revision.lastModifyingUser.emailAddress]);
    if(revision.lastModifyingUser.emailAddress == "### mail address ###") {
      var revUrl = Drive.Revisions.get(doc.getId(), revision.id).exportLinks["text/plain"]  + "&access_token=" + ScriptApp.getOAuthToken();
      var revString = UrlFetchApp.fetch(revUrl).getContentText();
      Logger.log(revString); // Contains full HTTP markup
    }
  }
}