使用gdata库从公共Google电子表格中检索数据?

时间:2011-09-26 20:50:02

标签: python gdata google-sheets

我正在使用Python并尝试从公开的Google电子表格(this one)中检索数据,但与the developer documentation有点挣扎。

如果可能的话,我想避免客户端身份验证,因为它是一个公共电子表格。

这是我当前的代码,使用gdata库:

client = gdata.spreadsheet.service.SpreadsheetsService()  
key = '0Atncguwd4yTedEx3Nzd2aUZyNmVmZGRHY3Nmb3I2ZXc'  
worksheets_feed = client.GetWorksheetsFeed(key)  

第3行使用BadStatusLine失败。

如何从电子表格中读取数据?

1 个答案:

答案 0 :(得分:17)

我想首先回应一下你的文档真的很差的观点。但是,到目前为止,这是我能够弄清楚的。

发布公开

您的电子表格“发布到网络”非常重要,而不仅仅是“在网上公开”。第一个是通过转到“文件 - >发布到Web ...”菜单项来实现的。第二个是通过单击电子表格左上角的“共享”按钮来实现的。

我查了一下,你的密钥='0Atncguwd4yTedEx3Nzd2aUZyNmVmZGRHY3Nmb3I2ZXc'的电子表格只是“公开在网上”。我为它的示例代码制作了它的副本。我的副本有一个键='0Aip8Kl9b7wdidFBzRGpEZkhoUlVPaEg2X0F2YWtwYkE',您稍后会在我的示例代码中看到它。

这种“在网上公开”与“在网上发布”的废话显然是一个常见的混淆点。它实际上记录在主API文档的"Visibilities and Projections"部分的红色框中。但是,阅读该文件真的很难。

可见性和预测

正如同一份文件所述,除了“完整”之外还有其他预测。事实上(没有文件记录),“完整”似乎不能很好地与“公共”的可见性一起发挥作用,这在制作未经认证的电话时也很重要。

您可以从pydocs收集SpreadsheetsService对象上的许多方法可以获取“可见性”和“投影”参数。我只知道“公共”和“私人”的可见性。如果您了解其他任何人,我也想了解他们。似乎“公共”是您在进行未经身份验证的电话时应该使用的。

至于预测,它更复杂。我知道“完整”,“基本”和“价值”预测。我很幸运,通过阅读优秀的Tabletop javascript库的源代码找到了“值”投影。而且,猜猜是什么,这是让事情发挥作用的秘密缺失因素。

工作代码

以下是一些代码,您可以使用这些代码从我的电子表格副本中查询工作表。

#!/usr/bin/python
from gdata.spreadsheet.service import SpreadsheetsService

key = '0Aip8Kl9b7wdidFBzRGpEZkhoUlVPaEg2X0F2YWtwYkE'

client = SpreadsheetsService()
feed = client.GetWorksheetsFeed(key, visibility='public', projection='basic')

for sheet in feed.entry:
  print sheet.title.text

**提示** 我发现在使用完全记录的python API在运行的python解释器中使用dir()方法来查找有关我可以从python对象获得的信息类型的更多信息时,它确实非常有用。在这种情况下,它没有太大帮助,因为基于XML和URL的API之上的抽象很差。

顺便说一下,我确定你会想要开始处理电子表格中的实际数据,所以我会继续并再投入一个指针。可以使用GetListFeed(key,sheet_key,visibility ='public',projection ='values')找到组织为字典的每一行的数据。entry [0] .custom