如何使用OAuth gem获取推文的json?
我尝试了以下操作,但即使我知道我的密钥是好的,它也会一直拒绝访问:
def prepare_access_token(consumer_key, consumer_secret)
consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {:site => "https://api.twitter.com"})
consumer.get_request_token.get_access_token
end
token = prepare_access_token(twitter_consumer_key, twitter_consumer_secret)
token.request(:get, "https://api.twitter.com/1.1/statuses/show/344726259449860096.json")
我知道twitter的宝石,但是不想把依赖看似那么简单。
我特别注意,以下是状态401的例外情况。
consumer.get_request_token.get_access_token
我做错了什么?
答案 0 :(得分:4)
我不确定您的申请流程是什么,但我通过Twitter应用程序登录,这就是我所做的。 ※此过程为我提供了用户的access_token,因此我可以访问其数据
首先,我有一个Twitter app
对象要求request_token
。
# defines app's consumer
consumer = OAuth::Consumer.new(consumer_key,
consumer_secret,
:site => 'https://api.twitter.com',
:authorize_path => '/oauth/authenticate',
:sign_in => true)
# get the request_token and pass my callback url
request_token = consumer.get_request_token({:oauth_callback => callback_url})
你需要以某种方式存储request_token! request_token将为您提供access_token,但.get_request_token()每次都会生成不同的请求,因此您需要保留原始文件以最终获取access_token
# setting the src of the login button
link_to 'log via twitter', request_token.authorize_url
用户登录。
在Twitter上,您会在网址oauth_token
和oauth_verifier
中获得两个参数。您在用户登录之前返回先前创建的request_token,并且由于您将在每次访问时获得不同的request_token,您需要找到与回调响应匹配的request_token
request_token = request_tokens.detect do |rt|
rt.token == oauth_token
end
# let's get the access_token
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)
似乎access_token与您使用的应用程序相关联,因此您必须存储consumer_key
,consumer_secret
,access_token.token
和access_token.secret
如何获取粉丝的示例
json_http_response = access_token.get("http://api.twitter.com/1/users/show.json?user_id=#{twitter_account_id}"))
followers_count = JSON.parse(json_http_response.body)['followers_count']
稍后,如果你想获得一个access_token,你可以这样做
access_token =
OAuth::AccessToken.from_hash(application_consumer, # the same as the very top
{:oauth_token => token, # access_token.token from above
:oauth_token_secret => secret})) # access_token.secret from above
答案 1 :(得分:0)