Использование Ruby + OAuth для доступа к API Yelp - PullRequest
4 голосов
/ 12 ноября 2010

Я только начал работать с OAuth, и я попытался создать небольшой клиент для подключения к некоторым веб-сервисам ... Я пробовал твиттер, и это работало как чудо, однако я также пытался получить доступ к API Yelp V2 (следуя их 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

Независимо от того, что этот кодбез проблем работает с твиттер API (я действительно следовал примеру кода твиттера)

Приветствия и заранее спасибо, Ze

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Используйте: query_string вместо: header и все будет работать (по крайней мере, для меня).

0 голосов
/ 14 декабря 2010

Тот же код, используя Печатка :

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 не должны бытьпередается в строке запроса.Тот факт, что принятый ответ решил проблему, указывает на то, что, возможно, в геме oauth есть ошибка, вызывающая это.

...