Google apps script 以HTML格式获取Google文档
我有一个疯狂的想法,我可以用谷歌驱动文档为一个简单的用户朋友建立一个网站博客。我能够创建一个contentService来编译文档列表。但是,我看不到将文档转换为HTML的方法。我知道谷歌可以在网页中呈现文档,所以我想知道是否有可能在我的内容服务中使用呈现版本Google apps script 以HTML格式获取Google文档,google-apps-script,google-docs,Google Apps Script,Google Docs,我有一个疯狂的想法,我可以用谷歌驱动文档为一个简单的用户朋友建立一个网站博客。我能够创建一个contentService来编译文档列表。但是,我看不到将文档转换为HTML的方法。我知道谷歌可以在网页中呈现文档,所以我想知道是否有可能在我的内容服务中使用呈现版本 这可能吗?GAS中没有直接的方法来获取文档的HTML版本,这是一个非常古老的方法,但Henrique Abreu的工作非常好,我一直在使用它 授权过程中唯一烦人的事情是需要从脚本编辑器中调用,这使得在共享应用程序中使用(使用“脚本无法”用
这可能吗?GAS中没有直接的方法来获取文档的HTML版本,这是一个非常古老的方法,但Henrique Abreu的工作非常好,我一直在使用它 授权过程中唯一烦人的事情是需要从脚本编辑器中调用,这使得在共享应用程序中使用(使用“脚本无法”用户)很不方便,但这种情况只发生一次;)
还有一个由创建的,使事情(有点)更容易。。。并添加了一些其他有趣的函数。也许这对您有用
function doGet() {
var blob = DriveApp.getFileById('myFileId').getAsHTML();
return HtmlService.createHtmlOutput(blob);
}
您可以尝试以下代码:
function getGoogleDocumentAsHTML(){
var id = DocumentApp.getActiveDocument().getId() ;
var forDriveScope = DriveApp.getStorageUsed(); //needed to get Drive Scope requested
var url = "https://docs.google.com/feeds/download/documents/export/Export?id="+id+"&exportFormat=html";
var param = {
method : "get",
headers : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions:true,
};
var html = UrlFetchApp.fetch(url,param).getContentText();
Logger.log(html);
}
以下是根据Enrique发布的想法为新版goole AOuth剪下的小片段:
function exportAsHTML(){
var forDriveScope = DriveApp.getStorageUsed(); //needed to get Drive Scope requested
var docID = DocumentApp.getActiveDocument().getId();
var url = "https://docs.google.com/feeds/download/documents/export/Export?id="+docID+"&exportFormat=html";
var param = {
method : "get",
headers : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions:true,
};
var html = UrlFetchApp.fetch(url,param).getContentText();
return html;
}
然后使用常用的mailApp:
function mailer(){
var docbody = exportAsHTML();
MailApp.sendEmail({
to: "email@mail.com",
subject: "document emailer",
htmlBody: docbody });
}
希望新的解决方法能有所帮助
JDNode.js解决方案 使用 以下是如何使用google drive的node.js客户端库以html形式获取google文档
// import googleapis npm package
var google = require('googleapis');
// variables
var fileId = '<google drive doc file id>',
accessToken = '<oauth access token>';
// oauth setup
var OAuth2 = google.auth.OAuth2,
OAuth2Client = new OAuth2();
// set oauth credentials
OAuth2Client.setCredentials({access_token: accessToken});
// google drive setup
var drive = google.drive({version: 'v3', auth: OAuth2Client});
// download file as text/html
var buffers = [];
drive.files.export(
{
fileId: fileId,
mimeType: 'text/html'
}
)
.on('error', function(err) {
// handle error
})
.on('data', function(data) {
buffers.push(data); // data is a buffer
})
.on('end', function() {
var buffer = Buffer.concat(buffers),
googleDocAsHtml = buffer.toString();
console.log(googleDocAsHtml);
});
//导入googleapis npm包
var google=require('googleapis');
//变数
var fileId=“”,
accessToken='';
//oauth设置
var OAuth2=google.auth.OAuth2,
OAuth2Client=新的OAuth2();
//设置oauth凭据
OAuth2Client.setCredentials({access_token:accessToken});
//谷歌硬盘设置
var drive=google.drive({version:'v3',auth:OAuth2Client});
//以text/html格式下载文件
var缓冲区=[];
drive.files.export(
{
fileId:fileId,
mimeType:'text/html'
}
)
.on('error',函数(err){
//处理错误
})
.on('data',函数(data){
buffers.push(data);//数据是一个缓冲区
})
.on('end',function(){
var buffer=buffer.concat(缓冲区),
googleDocAsHtml=buffer.toString();
console.log(googleDocAsHtml);
});
查看以获取更多语言和选项。您可以使用该解决方案
作为fileId传递,google文档的id,并按照说明启用高级驱动器服务。我也遇到了这个问题。文档HTML导出输出的HTML非常难看,因此这是我的解决方案:
/**
*获取Google文档ID,以HTML格式获取该文档,清除标记,并返回生成的HTML字符串。
*
*@param{string}谷歌文档的id
*@param{boolean}[useCaching]启用或禁用缓存。默认为true。
*@return{string}html格式的文档正文
*/
函数getContent(id,useCaching){
如果(!id){
抛出“请使用有效的Google文档ID调用此API”;
}
if(useCaching==null){
useCaching=true;
}
if(使用缓存的类型!=“布尔”){
抛出“若要指定useCaching,它必须是布尔值。”;
}
var cache=CacheService.getScriptCache();
var cached=cache.get(id);//查看是否有已解析html的缓存版本
if(缓存和使用缓存){
var html=cached;
log(“从缓存中提取文档html…”);
}否则{
log(“从文档中获取和解析新的html…”);
试一试{
var doc=DriveApp.getFileById(id);
}捕捉(错误){
抛出“请使用有效的Google文档ID调用此API”+err.message;
}
var docName=doc.getName();
var forDriveScope=DriveApp.getStorageUsed();//需要获取ScriptApp.getOAuthToken()中请求的驱动器作用域;
变量url=”https://docs.google.com/feeds/download/documents/export/Export?id=“+id+”&exportFormat=html”;
变量参数={
方法:“获取”,
标题:{“授权”:“承载者”+ScriptApp.getOAuthToken()},
muteHttpExceptions:true,
};
var html=UrlFetchApp.fetch(url,param.getContentText();
//核化整个头部部分,包括样式表和元标记
html=html.replace(/.*/,“”);
//删除几乎所有的html属性
html=html.replace(/(id | class | style | start | colspan | rowspan)=“[^”]*”/g');
//删除所有跨距以及外部html和正文
html=html.replace(//g',);
//显然,表示换行符的最佳方式
html=html.replace(/
/g,“
”);
cache.put(id,html,900)//缓存文档内容15分钟,以防我们收到大量请求
}
Logger.log(html);
返回html;
}
谷歌文档目前有一个功能可以做到这一点。 只需下载到zip(.html),您就可以拥有一个包含html和image(如果插入)的zip存档 我知道这不是基于代码的解决方案,而是它的工作原理:)
您是否参考了Romain Vialard的库?如果是这样,您应该在您的评论中提及它。我很想回顾一下您在@HenriqueAbreu中提到的解决方法,但是链接不再可用:它是否在其他地方发布了?--谢谢,FaustoYes,我知道,他们删除了档案……无论如何,代码在许多地方仍然可见。例如,这一个。在问题跟踪器上也是如此。注意:您可能认为
DocumentApp.getActiveDocument().getAs(MimeType.HTML)
可以工作,但这会引发一个错误:不支持从application/vnd.google-apps.document转换为text/HTML。
/**
* Converts a file to HTML. The Advanced Drive service must be enabled to use
* this function.
*/
function convertToHtml(fileId) {
var file = Drive.Files.get(fileId);
var htmlExportLink = file.exportLinks['text/html'];
if (!htmlExportLink) {
throw 'File cannot be converted to HTML.';
}
var oAuthToken = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(htmlExportLink, {
headers:{
'Authorization': 'Bearer ' + oAuthToken
},
muteHttpExceptions: true
});
if (!response.getResponseCode() == 200) {
throw 'Error converting to HTML: ' + response.getContentText();
}
return response.getContentText();
}