2010-11-12 117 views
4

我剛開始使用OAuth,並試圖讓一個小型客戶端連接到一些Web服務......我嘗試了Twitter並且它的工作方式像一個魅力,但是,我也嘗試訪問Yelp的V2 API(以下他們的Python的例子),但我總是回來作爲一個答案: HTTP 400錯誤的請求使用Ruby + OAuth訪問Yelp API

缺少參數: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 A沒有任何問題PI(我居然也跟着Twitter的示例代碼)提前

歡呼和感謝, 澤

回答

2

用途:QUERY_STRING代替:頭,一切都將正常工作(至少對我來說)。

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 documentation,在OAuth的參數做在查詢字符串傳遞。被接受的答案解決了這個問題的事實表明,在導致這種情況的oauth寶石中可能存在一個錯誤。