第一点:我有一个问题,是否可以使用Google Drive API从我的驱动器下载pdf文件作为doc或任何其他格式? 正如我们可以在驱动器上做的那样:打开一个pdf文件作为谷歌文件并下载它。
编辑: 第二点:我做了什么: 通过快速入门连接到apidrive。我打开了Drive API(Step1),并安装了Google Client Library(步骤2)。 之后,我尝试使用以下代码将文件从我的HD上传到我的驱动器:
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 :(得分:0)
我认为你的脚本运行正常。但是从NameError: name 'drive_service' is not defined
的错误中,我认为您可以使用Quickstart for Drive API。您问题的片段可以用作快速入门的一部分。您的错误是Quickstart的service = discovery.build('drive', 'v3', http=http)
。在您的情况下,Quickstart中的drive_service
变量为service
。因此,使用您的代码段的流程如下:
service = discovery.build('drive', 'v3', http=http)
修改为drive_service = discovery.build('drive', 'v3', http=http)
。drive_service = discovery.build('drive', 'v3', http=http)
中main()
下方的脚本替换为您的代码段。执行此操作时,请注意脚本的缩进。答案 1 :(得分:0)
最后,我回答了我的问题。
第一点:它不允许以另一种格式下载pdf。但是,我们可以首先使用Google文档格式 <LinearLayout
android:id="@+id/ll_send_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<EditText
android:id="@+id/editMessage"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_weight="5"
android:gravity="top|left"
android:inputType="textMultiLine|textCapSentences"
android:maxLines="5"
android:minLines="3"
android:scrollHorizontally="false" />
<Button
android:id="@+id/buttonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center"
android:text="send"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</LinearLayout>
上传文件,即使它是pdf格式。我会工作得很好。
关于第二点:因为现在解决了第一点问题,我不需要修复错误。因为我想要的东西非常好。