OAuth访问令牌请求(Twitter API)和oauth_verifier字段

时间:2014-02-08 21:08:40

标签: python twitter oauth twitter-oauth

因此,经过天努力从https://api.twitter.com/oauth/request_token获取request_token后,我终于成功生成了基本签名字符串和HMAC-SHA1签名,并收到了{{1}来自oauth_token

现在,我对下一步感到有点困惑。我的最终目标是能够以编程方式简单地推送推文。

我知道我需要从https://api.twitter.com/oauth/request_token获取访问令牌,但我不确定如何继续。我知道我需要将来自https://api.twitter.com/oauth/access_token的来电收到的oauth_token值发送到/oauth/request_token,但我在概念上被/oauth/access_token oauth_verifier字段混淆了标头

关于此演讲的大多数教程或文档都是根据将用户的浏览器重定向到登录页面,然后用于为{{生成图钉编号 1}}。但就我而言,没有浏览器:我只是在Python中编写一个自动守护进程,需要定期提取某些推文。所以没有浏览器,也没有涉及人类“用户”。那么Authorization字段如何适用于此?

1 个答案:

答案 0 :(得分:8)

您要找的是application-only authentication

以下是 Python 3.3 中的一个示例,介绍如何使用requests包获取可用于仅应用程序请求的承载令牌,并假设值consumer_key和{ {1}}分别保存您的Twitter API使用者密钥和密码:

consumer_secret

然后,可以使用承载令牌为您的请求创建授权标头,如下所示:

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']))