python – OAuth访问令牌请求(Twitter API)和oauth_verifier字段
作者:互联网
因此,经过几天努力从https://api.twitter.com/oauth/request_token工作获取request_token后,我终于成功生成了基本签名字符串和HMAC-SHA1签名,并从https://收到了oauth_token api.twitter.com/oauth/request_token.
现在,我对下一步感到有点困惑.我的最终目标是能够以编程方式简单地推送推文.
我知道我需要从https://api.twitter.com/oauth/access_token获取访问令牌,但我不确定如何继续.我知道我需要将/ oauth / request_token调用收到的oauth_token值发送到/ oauth / access_token,但我在概念上被Authorization标头中的oauth_verifier字段搞糊涂了.
大多数关于本演讲的教程或文档都将用户的浏览器重定向到登录页面,然后用于生成oauth_verifier的密码.但就我而言,没有浏览器:我只是在Python中编写一个自动守护进程,需要定期提取某些推文.所以没有浏览器,也没有涉及人类“用户”.那么oauth_verifier字段如何应用于此?
解决方法:
你要找的是application-only authentication.
以下是Python 3.3中的一个示例,介绍了如何使用requests软件包获取可用于仅应用程序请求的承载令牌,并假设值consumer_key和consumer_secret分别保存您的Twitter API使用者密钥和密钥:
import base64
import requests
# get bearer token for application only requests
bearer_token_credentials = base64.urlsafe_b64encode(
'{}:{}'.format(consumer_key, consumer_secret).encode('ascii')).decode('ascii')
url = 'https://api.twitter.com/oauth2/token'
headers = {
'Authorization': 'Basic {}'.format(bearer_token_credentials),
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
}
data = 'grant_type=client_credentials'
response = requests.post(url, headers=headers, data=data)
response_data = response.json()
if response_data['token_type'] == 'bearer':
bearer_token = response_data['access_token']
else:
raise RuntimeError('unexpected token type: {}'.format(response_data['token_type']))
然后,可以使用承载令牌为您的请求创建授权标头,如下所示:
headers = {
'Authorization': 'Bearer {}'.format(bearer_token),
'Accept-Encoding': 'gzip',
}
标签:python,twitter,oauth,twitter-oauth 来源: https://codeday.me/bug/20190725/1531605.html