我遇到了一个问题。
#!/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 帐户进行授权?从我的代码本身来看,授权链接应该在没有用户做的情况下在网络浏览器中打开,只需登录到他/她的帐户,就是这样,授权完成,并且这个登录也应该只发生一次一次授权,因此无论上传什么,都会上传到他的 Google Drive 帐户并进行维护。应该直接检索授权码,并且这些凭据应该像往常一样存储和使用,并且还应该刷新令牌。
我遇到了 Google Drive 服务帐户,好在用户干预完全消失了,但不好的是,它不允许上传文件的帐户。它将文件上传到创建应用程序的驱动器上。
谁能帮我解决这个问题?如果使用上面的代码,那么我应该怎么做才能使任务自动化?如果使用服务帐户,我应该怎么做才能让应用程序将数据上传到用户自己的驱动器帐户?
任何帮助,将不胜感激。
谢谢!