7

我正在尝试从 Python 脚本中读取 Google Doc 的原始文本/内容(只是一个普通文档,而不是电子表格或演示文稿),但到目前为止收效甚微。

这是我尝试过的:

import gdata.docs.service
client = gdata.docs.service.DocsService()
client.ClientLogin('email', 'password')
q = gdata.docs.service.DocumentQuery()
q.AddNamedFolder('email', 'Folder Name')
feed = client.Query(q.ToUri())
doc = feed.entry[0] # extract one of the documents

但是,这个类型为 gdata.docs.DocumentListEntry 的变量 doc 似乎不包含任何内容,仅包含有关文档的元信息。

我在这里做错了吗?有人可以指出我正确的方向吗?谢谢!

4

2 回答 2

5

更新(2019 年 3 月)好消息!Google Docs REST API现在可用。有关它的更多信息,请参阅我对类似问题的 SO 回答,但为了让您继续前进,这里是官方 Python“快速入门”示例,向您展示如何以纯文本形式获取 Google Doc 的标题。

下面最初回答的 Apps Script 和 Drive REST API 解决方案仍然有效,并且是获取 Google Doc 内容的替代方法。(Drive API 适用于 Python 2 和 3,但 Apps 脚本仅适用于 JavaScript。)

底线:如果您想以纯文本格式下载整个文档,最好使用 Drive API 解决方案。如果您想以编程方式对 Doc 的不同部分进行 CRUD,则必须使用 Docs API 或 Apps 脚本。

(2017 年 2 月) OP 中的代码和唯一的其他答案现在都已过时,因为ClientLogin 身份验证在 2012 年已被弃用(!),而GData API是上一代 Google API。虽然并非所有 GData API 都已弃用,所有较新的Google API都不使用Google Data 协议

虽然Google Apps Script提供了“类似 API”的服务,但 Google Docs 文档没有可用的 REST API,这是一种云中的 JavaScript 解决方案,提供对 Google Docs 的编程访问(通过其DocumentService对象),包括Docs 附加组件

要从 Google Doc 读取纯文本,考虑文件访问,您将使用Google Drive API代替。使用 Drive API 的示例:

(*) - TL;DR:将纯文本文件上传到云端硬盘,导入/转换为 Google Docs 格式,然后将该 Doc 导出为 PDF。上面的帖子使用 Drive API v2;这篇后续帖子描述了将其迁移到 Drive API v3,这是一个结合了“穷人转换器”帖子的开发者视频。

OP 的解决方案是执行与您在上面两篇文章中看到的类似的操作,但请确保您使用的是text/plain导出 MIMEtype。对于 Drive 的其他导入/导出格式,请参阅此相关问题 SO answer以及从 Drive docs page 下载文件。下面是一些伪代码,它在我的 Drive 文件夹中搜索名为“Hello World”的 Google Docs 文档,并显示在屏幕上找到的第一个匹配文件的内容(假设DRIVE是您的 API 服务端点):

from __future__ import print_function

NAME = 'Hello World'
MIME = 'text/plain'

# using Drive API v3; if using v2, change 'pageSize' to 'maxResults',
# 'name=' to 'title=', and ".get('files')" to ".get('items')"
res = DRIVE.files().list(q="name='%s'" % NAME, pageSize=1).execute().get('files')
if res:
    fileID = res[0]['id']  # 1st matching "Hello World" name
    res = DRIVE.files().export(fileId=fileID, mimeType=MIME).execute()
    if res:
        print(res.decode('utf-8')) # decode bytes for Py3; NOP for Py2

如果您需要更多,请观看这​​些视频,了解如何使用 Google API 进行设置OAuth2 授权以及创建 Drive 服务端点以列出您的 Drive 文件,以及所有这三个的相应博客文章

要了解有关如何在 Python 中使用 Google API 的更多信息,请查看我的博客以及我正在制作的各种 Google 开发人员视频(系列 1系列 2 )。

于 2017-02-23T20:49:34.803 回答
2

ADocumentQuery不会将所有文档及其内容返回给您——这将花费很长时间。它只返回一个文档列表,以及每个文档的元数据。(实际上,IIRC 你可以通过这种方式获得预览页面,所以如果你的文档只有一页可能就足够了……)

然后,您需要在单独的请求中下载内容。该content元素有一个type(MIME 类型)和一个src(实际数据的 URL)。你可以下载它src,然后解析它。但是,您可以通过添加exportFormat参数来覆盖默认类型,因此您无需进行任何解析。

请参阅文档中的下载文档和文件部分,其中有一个示例显示如何下载文档并指定格式。(它使用 .NET 而不是 Python,它使用 HTML 而不是纯文本,但您应该能够弄清楚。)

于 2013-02-06T10:34:33.587 回答