我按照这里提到的说明进行操作:https://api.stackexchange.com/docs/authentication
但由于没有提供代码,我无法正确理解流程。
我一直在尝试使用下面的两种方法来完成身份验证部分,但我遇到了一个死胡同。
1)
import requests
from pprint import pprint
resp = requests.get('https://stackexchange.com/oauth/dialog?client_id=6667&scope=private_info&redirect_uri=https://stackexchange.com/oauth/login_success/')
pprint(vars(resp))
2)
import oauth2 as oauth
from pprint import pprint
url = 'https://www.stackexchange.com'
request_token_url = '%s/oauth/' % url
access_token_url = '%s/' % url
consumer = oauth.Consumer(key='mykey',
secret='mysecret')
client = oauth.Client(consumer)
response, content = client.request(request_token_url, 'GET')
print(response, content)
我不知道从现在开始该怎么走?我需要使用返回的访问令牌,并使用它来查询API。一个示例代码真的很有帮助!谢谢
编辑:这是我目前使用的代码:
from requests_oauthlib import OAuth2Session
from pprint import pprint
client_id = 'x'
client_secret = 'x'
redirect_uri = 'https://stackexchange.com/oauth/login_success'
scope = 'no_expiry'
oauth = OAuth2Session(client_id, redirect_uri=redirect_uri, scope=scope)
pprint(vars(oauth))
authorization_url, state = oauth.authorization_url('https://stackexchange.com/oauth/dialog')
print(authorization_url)
不必点击authorization_url并获取令牌,有没有一种方法可以直接在脚本中获取令牌?
在您使用的两种方法中,第一种是桌面应用程序的推荐方法。这可能是正确的。
OAuth旨在迫使用户转到特定的网页,并确认他们正在授予应用程序访问其数据的权限(通常通过单击按钮)。您打印的HTTP响应只是用户需要单击接受的网页。
要了解流量,请输入第一个地址(https://stackexchange.com/oauth/dialog?client_id=6667&scope=&重定向uri=https://stackexchange.com/oauth/login_success/)在地址栏中,然后在加载的页面上单击"接受"。access_token
将立即出现在URL中。
如果您只为自己制作应用程序,则可以将access_token
复制到Python脚本中。代币将在一天后到期;如果时间太短,则将CCD_ 3添加到CCD_。不要与其他人共享代币,因为它可以让他们访问您帐户的详细信息!脚本的每个用户都必须生成自己的令牌。
通过在您的应用程序的key
和您刚刚获得的access_token
中插入url来测试access_token
:https://api.stackexchange.com/2.2/me?key=key&site=stackoverflow&order=desc&sort=声誉&access_token=&filter=默认
如果您需要一个更自动化、集成化、用户友好的解决方案,我会查看selenium网络驱动程序来打开浏览器窗口并获得相应的凭据。