如何使用oauth2访问StackExchange API



我按照这里提到的说明进行操作: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网络驱动程序来打开浏览器窗口并获得相应的凭据。

相关内容

  • 没有找到相关文章

最新更新