0

最初のポイント: 質問があります。Google ドライブ API を使用して、ドライブから PDF ファイルを doc またはその他の形式でダウンロードすることはできますか? ドライブで手動でできるのと同じように、pdf ファイルを Google ドキュメントとして開き、ダウンロードします。

EDIT:2番目のポイント:私がしたこと:クイックスタート経由でapidriveに接続します。Drive API を有効にして (Step1)、Google Client Library をインストールしました (step2)。その後、コードを使用して 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ファイルは次のようになります(問題に関連しているかどうかはわかりません): {"web":{"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","re​​direct_uris":[" http://localhost:8080/ "],"javascript_origins":[" http: //localhost:8080 "]}}

私の質問に対する答えを見つけて (最初のポイント)、エラーを解決するのを手伝ってくれる人はいますか (2 番目のポイント)?

どうもありがとうございます

4

2 に答える 2

0

あなたのスクリプトはうまくいくと思います。しかし のエラーから、Quickstart for Drive API をNameError: name 'drive_service' is not defined使用してもよいと思いました。質問のスニペットは、クイックスタートの一部として使用できます。あなたのエラーはクイックスタートです。あなたの場合、の変数はクイックスタートにあります。したがって、スニペットを使用するための流れは次のとおりです。service = discovery.build('drive', 'v3', http=http)drive_serviceservice

  1. クイックスタートのステップ 1 とステップ 2 を実行します。
  2. ステップ 3 では、 に変更service = discovery.build('drive', 'v3', http=http)drive_service = discovery.build('drive', 'v3', http=http)ます。
  3. drive_service = discovery.build('drive', 'v3', http=http)以下のスクリプトmain()をスニペットに置き換えます。これを行うときは、スクリプトのインデントに注意してください。
于 2017-10-05T22:16:10.840 に答える