我正在使用Python并尝试从公开的Google电子表格(this one)中检索数据,但与the developer documentation有点挣扎。
如果可能的话,我想避免客户端身份验证,因为它是一个公共电子表格。
这是我当前的代码,使用gdata库:
client = gdata.spreadsheet.service.SpreadsheetsService()
key = '0Atncguwd4yTedEx3Nzd2aUZyNmVmZGRHY3Nmb3I2ZXc'
worksheets_feed = client.GetWorksheetsFeed(key)
第3行使用BadStatusLine失败。
如何从电子表格中读取数据?
答案 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