3

我正在尝试验证我的凭据以访问 GMail API。以前我使用run()OAuth2 中的方法和代码执行此操作,credentials = tools.run(flow, STORAGE, http=http)但现在这是一个已弃用的方法。我现在正在使用该run_flow()方法来验证我的凭据。

import httplib2
import argparse
from apiclient import errors
from apiclient.discovery import build
from oauth2client import tools
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets

CLIENT_SECRET_FILE = 'your_client_secret.json'
OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.modify'
STORAGE = Storage('gmail.storage')
flow = flow_from_clientsecrets(CLIENT_SECRET_FILE, scope=OAUTH_SCOPE)
http = httplib2.Http()
credentials = STORAGE.get()there are credentials, no reauth is needed
#parser = argparse.ArgumentParser(parents=[tools.argparser])
#flags = parser.parse_args()    #Put your arguments in the parenthesis
if credentials is None or credentials.access_token_expired:
    credentials = run(flow, STORAGE, http=http)
    #credentials = tools.run_flow(flow, STORAGE, flags, http=http)
http = credentials.authorize(http)
gmail_service = build('gmail', 'v1', http=http)

注释行是使用而run_flow()不是run().

注释掉的代码给了我错误:run.py: error: unrecognized arguments: AdminTests, AdminTests 不是我给 Python 的参数。

当我更改解析为的参数时,flags = parser.parse_args(['--noauth_local_webserver'])我没有收到任何错误,但没有任何反应。

我应该使用哪个来尽可能接近flag地模拟它,我应该如何解析它?run()

编辑:当使用该run()方法验证我的凭据时,访问的 URL 是:( http://localhost:8080/?code=4/myuniqueID在示例中缺少我的唯一 ID)

4

2 回答 2

8

你需要做的是像这样将一个空的 args 列表传递给 argparser

flags = tools.argparser.parse_args(args=[])
credentials = tools.run_flow(flow, storage, flags)
于 2015-01-02T01:06:32.593 回答
-1

在将您的代码与 OAuth 的源代码进行比较后runrun_flow发现是否包含http参数之间存在显着差异。

所以,

tools.run(flow, STORAGE, http=http)

可以模拟,

tools.run_flow(flow, STORAGE, flags, http=http)

但是你有,

tools.run_flow(flow, STORAGE, flags)
于 2014-08-26T15:32:14.313 回答