我正在玩通过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);
}
}
}
答案 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
}
}
}