簡體   English   中英

通過 Google Apps 腳本檢索修訂文本

[英]Retrieve revision text through Google Apps Script

我正在嘗試通過 Google Apps Script 獲取文檔的修訂歷史記錄,並且正在尋找有關如何以編程方式訪問修訂內容的一些建議。

使用 Drive API,我可以訪問文檔上的一系列修訂並根據用戶進行迭代。 返回的對象不包括修訂的內容,只是一個 ID。 但是,您可以獲得各種內容類型(pdf、純文本等)的下載 URL。

我想使用UrlFetchApp檢索下載 URL 並將該內容附加到文檔中。 問題是 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);


    }
  }
}

當它使用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
    }
  }
}

更新時間:2020 年 2 月 7 日

從 2020 年 1 月起,訪問令牌不能與諸如access_token=###類的查詢參數一起使用。 Ref所以請使用訪問令牌到請求頭而不是查詢參數。 如下。

var res = UrlFetchApp.fetch(url, {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM