2015-08-28 21 views
2

我有一個簡單的腳本設置用於從我的谷歌驅動器帳戶獲取文件並更新它。我沒有任何問題認證和訪問驅動器。該文件是在驅動器上的谷歌電子表格的形式。因此,當我有pydrive文件對象時,我通過google_file['exportLinks']['text/csv']以csv格式獲取文件的URL。這在過去是有效的,但是今天我對這個新文件嘗試了同樣的方法,而不是獲取數據的csv格式,我一直在獲取HTML。另外,如果我複製並粘貼我的google_file['exportLink']['text/csv']中的鏈接並將其放入瀏覽器,則瀏覽器將按照要求開始以csv格式下載文件。我真的不知道發生了什麼,特別是因爲這在過去有效。谷歌驅動器的pydrive庫沒有使用請求的請求格式下載文件

這基本上就是我的代碼呢:

drive = GoogleDrive(gauth) 

drivefiles = drive.ListFile().GetList() 
form_file = None 

for f in drivefiles: 
    if f['title'] == formFileName: 
     form_file = f 
     break 

output = requests.get(form_file['exportLinks']['text/csv']) 
print output.text #this ends up being HTML, not text/csv 

有其他人在那裏見過這個問題嗎?我應該試着刪除並重新添加谷歌電子表格文件在驅動器上?

編輯:UPDATE

因此,改變對谷歌文件的權限從訪問驅動器只有誰該文件已被共享到訪問/編輯所有的人後,我能夠訪問和下載文件。 clients_secret.json文件是否允許特定的谷歌硬盤用戶安全地授權,或者是一個通用密鑰,允許任何人使用該密鑰訪問該特定會話中的Google API?如果文件只與一組有限的電子郵件地址共享,是否有任何特殊數據需要通過http請求發送?

回答

0

如果有其他人遇到問題,將驅動器中的文件設置更改爲「人人都可以查看」解決了問題 - 似乎有一些權限限制。建議您在調試時考慮將文件權限更改爲限制最少的設置(儘可能)。

0

我也發現處理google驅動api的特性有點棘手。我已經寫了一個包裝谷歌驅動器API,這使它相對容易處理它。看看是否有幫助: -

Google Drive Client

示例代碼: -

file_id = 'abc' 
file_access_token = '34244324324' 

scope = 'https://www.googleapis.com/auth/drive.readonly' 
path_to_private_key_file = '#' 
service_account_name = '[email protected]account.com' 

drive_client = GoogleDriveClient(
       scope = scope, 
       private_key = open(path_to_private_key_file).read(), 
       service_account_name = service_account_name) 

file = drive_client.get_drive_file(file_id, file_access_token) 

Ofcourse,你需要根據你的個人資料來更改訪問變量。

+0

這很好,但是這與我已經完成的工作有什麼不同? – themantalope

相關問題