我想首先回应您的观点,即文档真的很差。但是,这是我目前能够弄清楚的。
公开发布
您的电子表格必须“发布到网络”而不是“在网络上公开”,这一点非常重要。第一个是通过转到“文件 -> 发布到 Web ...”菜单项来实现的。第二个是通过单击电子表格左上角的“共享”按钮来实现的。
我检查了,您的电子表格键 = '0Atncguwd4yTedEx3Nzd2aUZyNmVmZGRHY3Nmb3I2ZXc' 只是“在网络上公开”。我制作了一个副本以用于我的示例代码。我的副本有一个密钥 = '0Aip8Kl9b7wdidFBzRGpEZkhoUlVPaEg2X0F2YWtwYkE',稍后您将在我的示例代码中看到它。
这种“在网上公开”与“在网上发布”的废话显然是一个常见的混淆点。它实际上记录在主要 API 文档的 "Visibilities and Projections" 部分的红色框中。但是,阅读该文档确实很难。
可见性和预测
正如同一份文件所说,除了“完整”之外,还有其他预测。事实上(未记录),“完整”似乎不能很好地与“公共”的可见性一起发挥作用,这在进行未经身份验证的调用时也很重要。
您可以从pydocs 中了解到,SpreadsheetsService 对象上的许多方法都可以采用“可见性”和“投影”参数。我只知道“公共”和“私人”的可见性。如果您了解其他任何人,我也想了解他们。似乎在进行未经身份验证的呼叫时应该使用“public”。
至于投影,就更复杂了。我知道“完整”、“基本”和“价值”预测。我很幸运,通过阅读优秀的 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
找到组织为字典的每一行的数据