2017-10-05 87 views
0

第一點的另一種格式:我有一個問題,請,有沒有下載從我的驅動器作爲文檔或使用谷歌雲端硬盤API任何其他格式的PDF文件的可能性? 就像我們可以在驅動器上做manualy一樣:打開PDF文件作爲谷歌文檔並下載它。的Python:下載從驅動器中的文件中使用apidrive

編輯: 第二點:我做了什麼: 通過快速啓動連接到apidrive。我開啓了Drive API(第1步),並安裝了Google客戶端庫(第2步)。 在那之後,我tryed使用代碼從我的高清文件上傳到我的驅動器:

from pydrive.auth import GoogleAuth 
from pydrive.drive import GoogleDrive 

#1st authentification 
gauth = GoogleAuth() 
gauth.LocalWebserverAuth() # Creates local webserver and auto handles 
authentication. 
drive = GoogleDrive(gauth) 

file1 = drive.CreateFile() 
file1.SetContentFile('documt.pdf') 
file1.Upload() 

在我的計劃中的下一個步驟,是要下載我剛剛上傳到雲端硬盤「documt.pdf」 ,以不同的格式(例如.doc)。所以我搜索瞭如何做所以,我發現了下面的腳本,即使它沒有做我想要的東西(就像文檔所說的那樣),它只能下載Google文檔作爲pdf(與我想要的相反) :

file_id = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo' 
request = drive_service.files().export_media(fileId=file_id, 
             mimeType='application/pdf') 
fh = io.BytesIO() 
downloader = MediaIoBaseDownload(fh, request) 
done = False 
while done is False: 
status, done = downloader.next_chunk() 
print "Download %d%%." % int(status.progress() * 100) 

然而,即使這個代碼顯示了一個錯誤:

Traceback (most recent call last): 
File "C:\Users\OU\AppData\Local\Programs\Python\Python36- 
32\download_from_drive.py", line 10, in <module> 
request = drive_service.files().export_media(fileId=file_id, 
NameError: name 'drive_service' is not defined 

我CLIENT_SECRETS文件看起來像(不知道它確實有關係的問題): {「網絡」: { 「CLIENT_ID」: 「xxxxx.apps.googleusercontent.com」, 「PROJECT_ID」: 「XXXX」, 「auth_uri」: 「https://accounts.google.com/o/oauth2/auth」, 「token_uri」: 「https://accounts.google.com/x/oauth2/token」, 「auth_provider_x509_cert_url」:」 https://www.googleapis.com/oauth2/v1/c 「 」client_secret「: 」ERM-XXXX「, 」redirect_uris中「:」 http://localhost:8080/ 「],」 javascript_origins 「:」 http://localhost:8080「]}}

誰能幫我找到了答案,我的問題(第一點),並解決錯誤(第二點)?

非常感謝

回答

0

Finnally,我已經回答了我的問題。第一點: :不允許以另一種格式下載PDF。不過,我們可以首先使用google文檔格式application/vnd.google-apps.document上傳文件,即使它是pdf。我會工作得很好。

對於第二點:因爲第一點問題現在已經解決,我不需要修復錯誤。導致我想要的作品完美無缺。

0

我認爲你的腳本工作正常。但從NameError: name 'drive_service' is not defined的錯誤,我認爲你可以使用Quickstart for Drive API。您的問題片段可以用作快速入門的一部分。你的錯誤是快速入門的service = discovery.build('drive', 'v3', http=http)。在你的情況下,drive_service的變量是在Quickstart的service。所以使用你的代碼片段的流程如下。

  1. Quickstart的第1步和第2步。
  2. 對於步驟3,修改service = discovery.build('drive', 'v3', http=http)drive_service = discovery.build('drive', 'v3', http=http)
  3. main()替換下面drive_service = discovery.build('drive', 'v3', http=http)腳本代碼片段。當你這樣做的時候,請小心腳本的縮進。
+0

感謝您的回答。我試圖做你告訴我的。但我必須通知您,我已經完成了第1步和第2步以上傳一些文件。但現在我想從我的驅動器以其他格式(doc,txt ...)下載。這就是爲什麼我找到了我在我的問題中發佈的腳本。但是,我做了你告訴我的,但第三點中的代碼僅用於連接驅動器並列出文件。所以你有一個想法,我怎麼能從驅動器使用apidrive下載文件。 – Elroum

+0

@Elroum謝謝您的回覆。在我的環境中,你的腳本工作正常。那麼你能告訴我們你的整個當前劇本嗎?如果你能做到,請將其添加到你的問題上。那時,請刪除您的私人信息。 – Tanaike

+0

非常感謝你的努力。 okey我會告訴你我做了什麼。我會編輯我的問題 – Elroum