2010-11-12 37 views
4

Je commençais tout juste à utiliser OAuth, et j'ai essayé de faire un petit client pour me connecter à certains services web ... J'ai essayé twitter et ça a marché comme un charme, cependant, j'ai aussi essayé l'accès API Yelp V2 (suivant leur exemple Python) mais je reçois toujours revenir comme une réponse: HTTP 400 Bad RequestUtiliser Ruby + OAuth pour accéder à l'API Yelp

paramètre manquant: oauth_consumer_key

Voici mon code:

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 

Peu importe à dire , ce code fonctionne avec twitter A PI sans aucun problème (je fait suivi le code exemple de twitter)

Vive et merci à l'avance, Ze

Répondre

2

Utilisation: query_string au lieu de: en-tête et tout fonctionne (au moins pour moi).

0

Même code, en utilisant 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 

Selon le Yelp documentation, les paramètres OAuth ne pas doivent être transmis dans la chaîne de requête. Le fait que la réponse acceptée ait résolu le problème m'indique qu'il y a probablement un bug dans la gemme oauth causant cela.