2015-12-21 191 views
0

我不是很有经验的Python,所以请原谅我可能的愚蠢。 我想通过python阅读Google电子表格。我不是电子表格的所有者,但拥有者与我分享(只读,不写)。Python:阅读谷歌电子表格

这就是我现在所拥有的:

import json 
import gspread 
from oauth2client.client import SignedJwtAssertionCredentials 

json_key = json.load(open('MyProject-ab2f3b9e6d60.json')) 
scope = ['https://spreadsheets.google.com/feeds'] 
credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'].encode(), scope) 
client = gspread.authorize(credentials) 
client.login() 
client.open_by_key('11Z_6NMLa0e3QDNozj6kExij8TG6bWRsxPT_ZppV13w') 

不幸的是我总是得到:“gspread.exceptions.SpreadsheetNotFound”

所以登录/授权似乎工作正常,但不知何故gspread无法找到电子表格。它不适用于open_by_url或打开..

那么,它甚至可以阅读我不拥有的Google电子表格吗?

我使用python 3.5

+0

我不确定您是否被允许访问谷歌电子表格,如果*你不是所有者,并且电子表格与你共享*。但是,如果你**不**拥有它,那么**没有**出于安全原因(类似于未经他们许可访问别人的文件) – jmugz3

+0

感谢您的快速回复。我确实有权读取所有者授予的许可。我可以通过浏览器手动轻松访问并阅读它。这就是我现在想通过Python做的事情。 – kikstart

回答

0

如果工作正常登录,那么问题可能是电子表格键:

对于这一点,您可以发送一个GET请求到以下链接:

https://spreadsheets.google.com/feeds/spreadsheets/private/full

这将在JSON或XML返回所有的电子表格列表(你选择哪一个),然后查找包含你想要的电子表格中的整个URL ID字段,最后确认日您使用的密钥与请求返回的密钥相同。

在JSON:

entry: { 
    id: https://spreadsheets.google.com/feeds/spreadsheets/(this-is-where-the-key-will-be) 
    ... 
} 

在XML:

<entry gd:etag=... > 
    <id> https://spreadsheets.google.com/feeds/spreadsheets/(this-is-where-the-key-will-be) </id> 
    ... 
</entry> 

这里给Sheets API

+0

谢谢你的回答。获取请求确实为我发送了与我已经使用的相同的密钥。所以我期待的关键是正确的。 – kikstart

0

请注意,你必须用自己的帐户不能共享您的文档的链接,但与json_key['client_email']帐号(这是很长很奇怪的电子邮件地址)。这可能是一个问题。

+0

谢谢!听起来很合理。不幸。 – kikstart