无法使用Ruby OAUTH Gem从Yahoo API获取访问令牌

时间:2015-01-17 16:48:30

标签: ruby api oauth yahoo-api

我几周来一直试图从雅虎的梦幻足球联赛中获得名单。我已经写了下面的内容来从OAUTH获取访问令牌。

第1步(我之前已将消费者密钥和消费者密钥作为变量输入,我在consumer.new语句中也有3个网址,但堆栈溢出不允许我在帖子中包含超过1个URL。)

@consumer = OAuth::Consumer.new(consumer_key, consumer_secret":request_token_path => URL ,:access_token_path  =>URL, :authorize_path =>URL)

第2步

@request_token = @consumer.get_request_token()

第3步(这成功地给了我一个URL,我可以给我的雅虎幻想足球帐户的许可,然后它向用户显示一个代码。我把这个代码和下面的代码作为我的誓言验证字符串。)

@request_token.authorize_url
sleep(30)

@token = OAuth::Token.new("ucjuyt",@request_token)

@access_token=OAuth::AccessToken.new(@consumer, token=@token, secret=@request_token.secret)

p @access_token.get("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20fantasysports.draftresults&diagnostics=true")

返回以下错误。

#<Net::HTTPBadRequest 400 Bad Request readbody=true>

我确信这与我如何请求我的访问令牌有关,但我无法弄清楚如何让这件事工作。我没有UI,我试图在我的Ruby代码中运行所有这些,是吗?我查看了Yahoos文档并且没有帮助我。

1 个答案:

答案 0 :(得分:0)

试试这个:

consumer_key= <your consumer key>
consumer_secret = <your consumer secret>
code = <the user code you got after you gave permission>
uri = URI('https://api.login.yahoo.com/oauth2/get_token')
req = Net::HTTP::Post.new(uri.path)

req.basic_auth consumer_key, consumer_secret

req.set_form_data({client_id: consumer_key, client_secret: consumer_secret, redirect_uri: 'oob', code: code, grant_type: 'authorization_code'})

sock = Net::HTTP.new(uri.host, uri.port)
sock.use_ssl = true
res = sock.start {|http| http.request(req) }
puts res.body
access_token = JSON.parse(res.body)['access_token']
refresh_token = JSON.parse(res.body)['refresh_token']