4

我刚开始使用 OAuth,我尝试创建一个小客户端来连接一些 Web 服务......我尝试了 twitter,它就像一个魅力,但是,我也尝试访问 Yelp V2 API(按照他们的 Python 示例)但是我总是回复:HTTP 400 Bad Request

缺少参数:oauth_consumer_key

这是我的代码:

require 'rubygems'
require 'oauth'

CONSUMER_KEY = "MY_CONSUMER_KEY"
SECRET = "MY_CONSUMER_SECRET"
TOKEN = "MY_TOKEN"
TOKEN_SECRET = "MY_TOKEN_SECRET"


consumer = OAuth::Consumer.new( CONSUMER_KEY,SECRET, {:site => "http://api.yelp.com", :signature_method => "HMAC-SHA1", :scheme => :header})

access_token = OAuth::AccessToken.new( consumer, TOKEN,TOKEN_SECRET)

p access_token.get("/v2/search?location=new+york").body

不管怎么说,该代码可以毫无问题地与 twitter API 一起使用(我实际上遵循了 twitter 的示例代码)

提前干杯和感谢,泽

4

2 回答 2

2

使用 :query_string 而不是 :header 一切都会奏效(至少对我而言)。

于 2010-11-14T08:02:47.487 回答
0

相同的代码,使用Signet

require 'signet/oauth_1/client'
client = Signet::OAuth1::Client.new(
  :consumer_key =>        'MY_CONSUMER_KEY',
  :consumer_secret =>     'MY_CONSUMER_SECRET',
  :access_token_key =>    'MY_TOKEN_KEY',
  :access_token_secret => 'MY_TOKEN_SECRET'
)
response = client.fetch_protected_resource(
  :uri => 'http://api.yelp.com/v2/search?location=new+york'
)
# The Rack response format is used here
status, headers, body = response
p body

根据Yelp 文档,OAuth 参数不必查询字符串中传递。接受的答案解决了问题这一事实向我表明,oauthgem 中可能存在导致此问题的错误。

于 2010-12-13T21:28:03.507 回答