Authentication Tutorial
简介
Tweepy支持 oauth认证。Tweepy中的身份认证由 tweepy.AuthHandler 类进行处理。
OAuth 身份认证
Tweepy尽可能试着简化OAuth认证。首先我们需要在Twitter注册一个客户端应用。当创建完成之后你应该能获得你的consumer token 和 consumer secret。将这两个码存好,你将经常用到。
下一部就是创建 OAuthHandler 实例。在这我们需要把之前得到的 consumer token 和 consumer secret 传入:
auth = tweepy.OAuthHandler(consumer_token, consumer_secret)
如果你已经有了一个网络应用并且正在使用一个响应链接(callback URL),那么你就应该按如下方式进行传递:
auth = tweepy.OAuthHandler(consumer_token, consumer_secret,
callback_url)
如果你认为你的响应url不会再变化了,那么你最好直接在twitter.com中应用的设置中将url设置进去。
与基本 auth 不同,在使用OAuth时我们必须再夺走几步才能正式开始使用API。下面就是我们需要完成的步骤。
1. 从 twitter 获得一个 request token。
2. 将用户重定向至 twitter.com 来给应用授权。
3. 如果twitter使用响应函数,它就会将用户重定向给我们,否则用户必须手动给我们提供verifier code(不知道对不对)(原文:If using a callback, twitter will redirect the user to us. Otherwise the user must manually supply us with the verifier code.)
4. 将授权的 request token 换为 access token。
所以,下面让我们取回 request token 以进行之后的内容:
try:
redirect_url = auth.get_authorization_url()
except tweepy.TweepError:
print 'Error! Failed to get request token.'
这段代码从twitter请求token,并且返回得到用户应该被重定向以用来给我们授权的URL。现在,如果这是一个桌面应用,我们只能先抓住OAuthHandler实例并等待用户返回。在一个网页应用里,我们可以使用响应请求。所以我们必须将这个request token储存在绘画中,因为我们在响应URL的请求内会使用到这个token。下面是一个关于在绘画中储存request token的伪例子:
session.set('request_token', auth.request_token)
所以现在我们可以将用户重定向到 get_authorization_url() 方法之前返回给我们的url上了。
注:所以这块实际上的意思就是用户在使用你的app并要登陆时,app向Twitter发送一个请求,让其返回一个url好使用户可以在这个twitter的url上给你的app授权,使得你的app可以以用户twitter账号的名义获得数据或进行操作。
如果这是一个桌面应用(或者任何不用响应函数的应用),那么我们必须向用户询问twitter在对我们授权后返回的 verifier code。 在一个网络应用内部,这个 verifier value 会作为 从Twitter 返回的 URL 中的 GET query 参数而被响应 request 返回。
# Example using callback (web app)
verifier = request.GET.get('oauth_verifier')
# Example w/o callback (desktop)
verifier = raw_input('Verifier:')
最后一步就是用 request token 来交换一个 access token。这个 access token 是真正的打开 Twitter API 宝库的钥匙。我们通过以下操作来获得这个 token:
# Let's say this is a web app, so we need to re-build the auth handler
# first...
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
token = session.get('request_token')
session.delete('request_token')
auth.request_token = token
try:
auth.get_access_token(verifier)
except tweepy.TweepError:
print 'Error! Failed to get access token.'
auth.access_token
auth.access_token_secret
你可以将它们放入数据库,文件或任何你储存数据的地方。同样你也可以在 OAuthHandler 实例中设置这两个提前储存好的 token:
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(key, secret)
注:当然,access_token 和 access_token_secret 也可以在 app.twitter.com 轻松获得。
所以到目前为止,OAuthHandler 就全部设定好了,我们已经可以开始正式的工作了:
api = tweepy.API(auth)
api.update_status('tweepy + oauth!')