0

是否可以检索 Google Doc 的内容并将其显示在 html 页面的 div 中?如果是这样,在下面的精简示例中实现“MAGIC”的正确方法是什么?

<html>
    <head>
    </head>
    <body>
       <div>
          <MAGIC>
            Script or link that retrieves and displays the body of a Google Doc.
          </MAGIC>
       </div>
    </body>
</html> 

在上面,你可以假设

  1. html 由 Google Drive Hosting 提供。
  2. 对 Google Doc 的引用是静态的。
  3. 无需从公共 html 页面中编辑 Doc(即在该上下文中它是只读的)。

我已经通读了 Apps Script 文档,看起来似乎可以通过文档服务和内容服务的某种组合来实现。例如,文档服务有 getBody() 和 copy() 方法,但不清楚这些调用返回的对象是否可以将所见即所得呈现为 html 以插入到 html 容器中。

背景:我正在尝试为一家小型非营利组织实施安全且易于使用的 CMS。我已经制作了一个托管在 Google Drive 上的网站框架原型。到目前为止,它看起来很有希望,但更改需要能够编辑 html。我们有很多人可以在类似文字处理器的环境中创建内容,但只有包括我自己在内的几个人可以处理 HTML/CSS/JQuery/AppsScript。

如果我可以专注于整体框架并让其他人更新事件等的内容,那将是一个巨大的胜利。基本上,如果他们能够编辑 Google Doc,然后手动重新加载网页以查看结果,我会非常高兴。

我意识到 CMS 有很多方法,但现在,我有兴趣探索纯粹的 Google Docs/Google Drive 解决方案。

4

2 回答 2

2

我已经决定发布内容文档并包括 Google 提供的 iframe 嵌入代码,以实现我最初问题中的“MAGIC”,例如

<iframe class="cmsframe" src="https://docs.google.com/document/d/1rhkuAB3IIu5Hq0tEtA4E_Qy_-sJMMnb33WBMlAEqlJU/pub?embedded=true"></iframe>

类标签是手动添加的,因此我可以使用 CSS 控制 iframe 的大小。

于 2013-08-31T13:24:47.780 回答
1

您可以通过使用 urlFetch 调用驱动器 API 来获取 google 文档的原始 html 内容,这是它的工作原理

      var id = 'Doc-Very-Long-ID-Here';
      var url = 'https://docs.google.com/feeds/';
      var doc = UrlFetchApp.fetch(url+'download/documents/Export?exportFormat=html&format=html&id='+id,
                                  googleOAuth_('docs',url)).getContentText();

   // the variable doc is the HTML content that you can use

    function googleOAuth_(name,scope) {
      var oAuthConfig = UrlFetchApp.addOAuthService(name);
      oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
      oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
      oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
      oAuthConfig.setConsumerKey('anonymous');
      oAuthConfig.setConsumerSecret('anonymous');
      return {oAuthServiceName:name, oAuthUseToken:"always"};
    }

这里还有一个 Romain Vialard提供的库,它被称为 DocsListExtended,并提供了一大堆不错的扩展。


编辑: 按照您的编辑:

不能像那样使用它,要在 webapp 中使用html 服务呈现 HTML 内容,下面的示例带有您的完整代码和工作示例

function doGet() {

    var id = '1el3DpTp1sukDjzlKXh8plf0Zj-qm0drI7KbytroVrNU';
    var url = 'https://docs.google.com/feeds/';
    var doc = UrlFetchApp.fetch(url+'download/documents/Export?exportFormat=html&format=html&id='+id, googleOAuth_('docs',url)).getContentText();
    return HtmlService.createHtmlOutput(doc);
}

// the variable doc is the HTML content that you can use

function googleOAuth_(name,scope) {
    var oAuthConfig = UrlFetchApp.addOAuthService(name);
    oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
    oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
    oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
    oAuthConfig.setConsumerKey('anonymous');
    oAuthConfig.setConsumerSecret('anonymous');
    return {oAuthServiceName:name, oAuthUseToken:"always"};
}
于 2013-08-30T17:07:40.767 回答