我是Python的新手,也是使用API的新手,所以这可能是基本的...我可以提出导致浏览器窗口打开的初始请求。此时,用户必须在Google许可页面上进行选择。之后返回授权代码......我得到了所有这些。我的问题是,如何暂停运行python代码,以便等待用户权限并存储下一步所需的代码?我只是使用他们的库在Python 2.7中测试它,但我坚持这一点。我能把什么放在箭头上?感谢任何帮助。
from oauth2client.client import OAuth2WebServerFlow
import webbrowser
flow = OAuth2WebServerFlow(client_id=[id],
client_secret=[secret],
scope='https://www.google.com/m8/feeds',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')
auth_uri = flow.step1_get_authorize_url()
webbrowser.open(auth_uri)
--->
code=''
credentials = flow.step2_exchange(code)
答案 0 :(得分:0)
以下是一些处理Web服务器案例的示例代码。 send_redirect
不是一种真正的方法,您需要先将用户重定向到Google,然后在回拨中交换一组凭据的授权码。
我还提供了一种使用gdata库返回的OAuth2凭据的方法,因为它看起来像是在访问Contacts API:
from oauth2client.client import flow_from_clientsecrets
flow = flow_from_clientsecrets(
"/path/to/client_secrets.json",
scope=["https://www.google.com/m8/feeds"],
redirect_url="http://example.com/auth_return"
)
# 1. To have user authorize, redirect them:
send_redirect(flow.step1_get_authorize_url())
# 2. In handler for "/auth_return":
credentials = flow.step2_exchange(request.get("code"))
# 3. Use them:
import gdata.contacts.client
import httplib2
# Helper class to add headers to gdata
class TokenFromOAuth2Creds:
def __init__(self, creds):
self.creds = creds
def modify_request(self, req):
if self.creds.access_token_expired or not self.creds.access_token:
self.creds.refresh(httplib2.Http())
self.creds.apply(req.headers)
# Create a gdata client
gd_client = gdata.contacts.client.ContactsClient(source='<var>YOUR_APPLICATION_NAME</var>')
# And tell it to use the same credentials
gd_client.auth_token = TokenFromOAuth2Creds(credentials)
另见Unifying OAuth handling between gdata and newer Google APIs
那就是说,看起来你的问题已经包含了大部分代码。希望这能为您提供一个更完整的例子来启动和运行。
进行测试 - 如果您只是想在等待剪切和粘贴代码时暂停Python解释器,我会选择code = raw_input('Code:')
(http://docs.python.org/2/library/functions.html#raw_input)