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

Sil*_*ler 3 python twitter oauth twitter-oauth

因此,经过天努力获得request_token https://api.twitter.com/oauth/request_token工作,我终于成功生成了一个Base Signature String和HMAC-SHA1签名,并收到了一个oauth_tokenfrom https://api.twitter.com/oauth/request_token.

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

我知道我需要从中获取访问令牌https://api.twitter.com/oauth/access_token,但我不确定如何继续.我知道我需要oauth_token将调用接收到的值发送/oauth/request_token/oauth/access_token,但是我在概念上被标题中的oauth_verifier字段搞糊涂了Authorization.

大多数的教程或文档中有关这次谈话来讲用户的浏览器重定向到登录页面,然后将其用于生产管脚数oauth_verifier.但就我而言,没有浏览器:我只是在Python中编写一个自动守护进程,需要定期提取某些推文.所以没有浏览器,也没有涉及人类"用户".那么该oauth_verifier领域如何适用于此?

Ped*_*ano 8

您正在寻找的是仅应用程序身份验证.

下面是一个例子的Python 3.3,如何获得你可以使用应用程序只要求使用承载令牌请求包,并假设值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']))
Run Code Online (Sandbox Code Playgroud)

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

headers = {
    'Authorization': 'Bearer {}'.format(bearer_token),
    'Accept-Encoding': 'gzip',
}
Run Code Online (Sandbox Code Playgroud)