2017-10-05 91 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