clu*_*ter 7 python oauth access-token
我是Oauth的新手.在过去用Python编写的twitter应用程序中,我使用python-oauth2库来初始化客户端,如下所示:
consumer = oauth.Consumer(key = CONSUMER_KEY, secret = CONSUMER_SECRET)
token = oauth.Token(key = ACCESS_KEY, secret = ACCESS_SECRET)
client = oauth.Client(consumer, token)
Run Code Online (Sandbox Code Playgroud)
这很简单,因为twitter提供了消费者和访问密钥和秘密.但现在我需要为tumblr做同样的事情.问题是tumblr只提供CONSUMER_KEY,CONSUMER_SECRET和这些网址:
Request-token URL http://www.tumblr.com/oauth/request_token
Authorize URL http://www.tumblr.com/oauth/authorize
Access-token URL http://www.tumblr.com/oauth/access_token
Run Code Online (Sandbox Code Playgroud)
使用此数据如何初始化客户端以访问tumblr API?
UPD
jterrace建议我之前尝试使用的代码.它的问题是oauth_callback.如果我没有指定任何,api返回错误"没有oauth_callback指定",但如果我确实指定了一些网址,如"http://example.com/oauthcb/",请点击链接http://www.tumblr.com/oauth/authorize?oauth_token = 9ygTF ...,然后按下允许按钮,tumblr不会显示任何PIN码页面,它会立即重定向到该回调网址,因为它是桌面应用程序,所以没用.为什么不显示PIN码?
UPD 2
Tumblr API不支持PIN码授权.请改用xAuth - https://groups.google.com/group/tumblr-api/browse_thread/thread/857285e6a2b4268/15060607dc306c1d?lnk=gst&q=pin#15060607dc306c1d
jte*_*ace 11
首先,导入oauth2模块并设置服务的URL和消费者信息:
import oauth2
REQUEST_TOKEN_URL = 'http://www.tumblr.com/oauth/request_token'
AUTHORIZATION_URL = 'http://www.tumblr.com/oauth/authorize'
ACCESS_TOKEN_URL = 'http://www.tumblr.com/oauth/access_token'
CONSUMER_KEY = 'your_consumer_key'
CONSUMER_SECRET = 'your_consumer_secret'
consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
client = oauth2.Client(consumer)
Run Code Online (Sandbox Code Playgroud)
第1步:获取请求令牌.这是一个临时令牌,用于让用户授权访问令牌并签署请求以获取所述访问令牌.
resp, content = client.request(REQUEST_TOKEN_URL, "GET")
request_token = dict(urlparse.parse_qsl(content))
print "Request Token:"
print " - oauth_token = %s" % request_token['oauth_token']
print " - oauth_token_secret = %s" % request_token['oauth_token_secret']
Run Code Online (Sandbox Code Playgroud)
第2步:重定向到提供商.由于这是一个CLI脚本,因此我们不会重定向.在Web应用程序中,您可以将用户重定向到下面的URL.
print "Go to the following link in your browser:"
print "%s?oauth_token=%s" % (AUTHORIZATION_URL, request_token['oauth_token'])
# After the user has granted access to you, the consumer, the provider will
# redirect you to whatever URL you have told them to redirect to. You can
# usually define this in the oauth_callback argument as well.
oauth_verifier = raw_input('What is the PIN? ')
Run Code Online (Sandbox Code Playgroud)
步骤3:一旦消费者将用户重定向回oauth_callback URL,您就可以请求用户已批准的访问令牌.您使用请求令牌来签署此请求.完成此操作后,您将丢弃请求令牌并使用返回的访问令牌.您应该将此访问令牌存储在安全的地方,如数据库,以备将来使用.
token = oauth2.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth2.Client(consumer, token)
resp, content = client.request(ACCESS_TOKEN_URL, "POST")
access_token = dict(urlparse.parse_qsl(content))
print "Access Token:"
print " - oauth_token = %s" % access_token['oauth_token']
print " - oauth_token_secret = %s" % access_token['oauth_token_secret']
print
Run Code Online (Sandbox Code Playgroud)
现在您已拥有访问令牌,您可以使用它来调用受保护的方法.
编辑:原来tumblr不支持PIN授权方法.相关帖子在这里.
小智 6
如果您只想获得访问令牌/秘密进行签名,您可以将回调URL设置为:http:// localhost/blah
使用query-parameter'oauth_verifier'的值作为您的PIN:XXXXXXXXXXXXXXXXXXXXXXXXX0123456789abcdefghijklmn
CLI应该打印出你的oauth-token和oauth-token-secret.
HTH!以这种方式为tumblr工作了:)
| 归档时间: |
|
| 查看次数: |
6426 次 |
| 最近记录: |