2015-12-21 201 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