如何从C#中提取Google Doc的HTML内容?

时间:2013-10-27 18:13:57

标签: c# gdata google-docs-api gdata-api

我们有一个内联网,内置.Net(C#)。我们希望我们的CMS能够从Google文档中提取HTML内容以与其他内容集成。

具体来说,我们希望编辑能够创建和维护Google Doc,并将此doc(通过其ID)的引用嵌入到Intranet上的页面中。在呈现页面时,CMS将联系Google Docs,获取文档的HTML内容,并将其作为页面的一部分呈现(是的,将涉及缓存)。

我已经绕过GData API了。这比我想象的要难。

身份验证是通过OAuth进行的,因此我们要为CMS创建另一个Google Apps用户,以便我可以通过身份验证。

但是一旦我检索到文档,就没有HTML。有各种各样的属性(包括一个非常被称为“内容”的属性,但是没有),但我看不到文档的实际HTML内容。它似乎有关于文档的各种信息,除了内容本身。

谷歌搜索和研究的时间告诉我,我可能必须形成导出URL,然后通过HTTP将其下载为HTML文件。我可以在浏览器中执行此操作 - 只需粘贴正确的URL即可。

但我无法从代码中做到这一点。当然,我可以发出一个HTTP请求,但它没有进行我已经通过的身份验证来获取文档对象本身。

所以,有两个问题:

  1. 有更简单的方法吗?我有一种唠叨的怀疑,我说这一切都错了。
  2. 如何在经过身份验证的用户的上下文中向Google文档网址发出HTTP请求?

1 个答案:

答案 0 :(得分:1)

有几个指示......

  1. 作为Gdata的替代品,您可能会发现使用较新的Drive API和SDK更容易。有关API调用,请参阅https://developers.google.com/drive/v2/reference/files/get以使用exportLink检索文件对象。您可以选择是直接使用REST API参与云端硬盘,还是使用Google提供的C#库。
  2. 将oauth(更具体地说是oauth2)作为一个单独的问题处理。一旦你有oauth2工作并赢得访问令牌,那么(并且只有这样)继续使用该访问令牌的驱动器。与Drive一样,您可以选择直接使用其URL或使用Google提供的库来驱动Oauth。如果您更喜欢DIY方法,那么您需要知道的所有内容都在https://developers.google.com/oauthplayground/https://developers.google.com/accounts/docs/OAuth2
  3. 您询问用户互动情况。为此...

    好消息是你可以做你想要的。具体细节在很大程度上取决于谁拥有文件。 请记住,Oauth是关于授权(将身份验证作为一种副产品)。

    因此,您拥有“用户”所拥有的Google文档文档“Doc”。应用程序“App”想要阅读Doc。因此,第一步是用户授权App访问Doc。这就是以用户为中心的东西。如果App请求“离线”访问,则Oauth将为其提供刷新令牌,该App将存储并可随时用于生成访问令牌并读取Doc。从刷新令牌生成访问令牌可以在没有任何用户交互的情况下完成,它只是对Google URL的POST。

    因此,在这种情况下,用户交互只发生一次。

    您可以采取的另一种方法是让App拥有Doc,并与User共享。在这种情况下,App(可能)将成为服务帐户(https://developers.google.com/accounts/docs/OAuth2ServiceAccount)。由于App创建并拥有Doc,因此用户无需授权。