3

問題が発生しました。

#!/usr/bin/python

import httplib2
import pprint

from apiclient.discovery import build
from apiclient.http import MediaFileUpload
from oauth2client.client import OAuth2WebServerFlow


# Copy your credentials from the console
CLIENT_ID = 'YOUR_CLIENT_ID'
CLIENT_SECRET = 'YOUR_CLIENT_SECRET'

# Check https://developers.google.com/drive/scopes for all available scopes
OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive'

# Redirect URI for installed apps
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'

# Path to the file to upload
FILENAME = 'document.txt'

# Run through the OAuth flow and retrieve credentials
flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
authorize_url = flow.step1_get_authorize_url()
print 'Go to the following link in your browser: ' + authorize_url
code = raw_input('Enter verification code: ').strip()
credentials = flow.step2_exchange(code)

# Create an httplib2.Http object and authorize it with our credentials
http = httplib2.Http()
http = credentials.authorize(http)

drive_service = build('drive', 'v2', http=http)

# Insert a file
media_body = MediaFileUpload(FILENAME, mimetype='text/plain', resumable=True)
body = {
  'title': 'My document',
  'description': 'A test document',
  'mimeType': 'text/plain'
}

file = drive_service.files().insert(body=body, media_body=media_body).execute()
pprint.pprint(file)

上記のコードは、ユーザーに URL をブラウザーにコピーし、アカウントを承認してから、コードをコピーして貼り付け、端末に貼り付けるように求めています。資格情報を保存し、更新トークンを使用することを知っています。ユーザーはこれを一度だけ行う必要があります。

しかし、私はユーザーとのやり取りをあまり望んでいません。ユーザーが gmail アカウントにログインするだけで承認することは可能ですか? のように、私のコード自体から、認証リンクはユーザーがそれをしなくてもWebブラウザーで開かれ、自分のアカウントにサインインするだけで、認証が完了し、このログインも1つだけ発生するはずです1 回限りの承認のように、何をアップロードしても、Google ドライブ アカウントにアップロードされて維持されます。認証コードは直接取得する必要があり、これらの資格情報は通常どおりに保存して使用する必要があり、トークンも更新する必要があります。

Google Drive Service Account に出会いました。ユーザーの介入が完全になくなったことは良いことですが、悪い点は、ファイルをアップロードするアカウントを許可していないことです。アプリを作成したドライブにファイルをアップロードします。

誰でもこれで私を助けてくれますか? 上記のコードを使用する場合、タスクを自動化するにはどうすればよいですか? サービス アカウントを使用する場合、アプリがデータをユーザー自身のドライブ アカウントにアップロードするようにするにはどうすればよいですか?

どんな助けでも大歓迎です。

ありがとう!

4

2 に答える 2