0

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

具体来说,我们希望编辑器能够创建和维护 Google 文档,并将对该文档的引用(通过其 ID)嵌入到我们内部网上的页面中。渲染页面时,CMS 会联系 Google Docs,获取文档的 HTML 内容,并将其渲染为页面的一部分(是的,会涉及到缓存)。

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

身份验证是通过 OAuth 进行的,所以我们要做的是为我们的 CMS 创建另一个 Google Apps 用户,这样我就可以获得身份验证。

但是一旦我检索到一个文档,里面就没有 HTML。有多种属性(包括一个叫作“Content.”的属性,它不是),但我看不到文档的实际 HTML 内容。它似乎有关于文档的各种信息,除了内容本身。

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

但我不能从代码中做到这一点。当然,我可以发出 HTTP 请求,但它不携带我已经通过的身份验证来获取文档对象本身。

所以,两个问题:

  1. 有没有更简单的方法来做到这一点?我有一个挥之不去的怀疑,我认为这一切都是错误的。
  2. 如何在经过身份验证的用户的上下文中向 Google Docs URL 发出 HTTP 请求?
4

1 回答 1

1

几个指针...

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

您询问用户交互。对此...

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

因此,您有一个“用户”拥有的 Google Docs 文档“Doc”。应用程序“App”想要阅读 Doc。所以第一步是用户授权App访问Doc。这就是以用户为中心的东西。如果 App 请求“离线”访问,那么 Oauth 会为其提供一个 refresh-token,App 将存储并随时使用它来生成访问令牌并读取 Doc。无需任何用户交互即可从刷新令牌生成访问令牌,它只是对 Google URL 的 POST。

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

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

于 2013-10-28T09:19:46.320 回答