【发布时间】:2014-08-01 11:13:33
【问题描述】:
我正在创建一个脚本,该脚本将使用 Google-api-python-client 为特定的 Google Apps 用户下载文件 首先,我试图获取用户帐户包含的文件列表。 我正在按照链接https://developers.google.com/drive/v2/reference/files/list
中给出的示例进行操作代码块如下
用户对客户端的授权
def authorize_application(request):
#setting flow to get permission and code
flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI, ACCESS_TYPE)
authorize_url = flow.step1_get_authorize_url()
code = request.GET.get('code', '')
if code:
#import ipdb
#ipdb.set_trace()
#setting flow step2 to exchage code for access token
credential = flow.step2_exchange(code)
#initialising httplib2 instance and building a DriveAPI service
http = httplib2.Http()
http = credential.authorize(http)
drive_service = build('drive', 'v2', http=http)
# getting user's data
about = drive_service.about().get().execute()
user_info = about.get('user')
email = user_info.get('emailAddress')
request.session['username'] = email[0:email.index('@')]
username = request.session['username']
#import ipdb
#ipdb.set_trace()
#creating a Django user object
user, created = User.objects.get_or_create(username=username, email=email)
#saving credentials to database
if created == True:
storage = Storage(CredentialsModel, 'id', user, 'credential')
storage.put(credential)
return HttpResponseRedirect('/download/')
else:
return HttpResponseRedirect('/download/')
else:
return HttpResponseRedirect(authorize_url)
获取用户云端硬盘中的文件列表
def download_file(request):
#import ipdb
#ipdb.set_trace()
username = request.session['username']
user = User.objects.get(username=username)
storage = Storage(CredentialsModel, 'id', user, 'credential')
credential = storage.get()
access_token = credential.access_token
http = httplib2.Http()
http = credential.authorize(http)
drive_service = build('drive', 'v2', http=http)
result = []
page_token = access_token
while True:
try:
param = {}
if page_token:
param['pageToken'] = page_token
files = drive_service.files().list(**param).execute()
result.extend(files['items'])
page_token = files.get('nextPageToken')
if not page_token:
break
except errors.HttpError, error:
print 'An error occured: %s' % error
break
return HttpResponse(result)
它正在从数据库中保存和检索凭证,但它给出错误“AccessTokenRefreshError:invalid_grant” files = drive_service.files().list(**param).execute() of download_file()
我做错了什么?请提出正确的方法。
【问题讨论】:
-
嘿@Vishnu,你用的是什么范围?
-
感谢 Thibault 提出我的问题。我正在使用这两个范围 'googleapis.com/auth/drive'、'googleapis.com/auth/userinfo.email'、
标签: python google-api-python-client