Использование Ruby OAuth для подключения к API контактов Yahoo - PullRequest
3 голосов
/ 14 января 2011

Я пытался работать с API контактов Yahoo, используя последнюю версию Ruby OAuth, но я не уверен, что я застрял на последнем этапе процесса авторизации или что-то в API,Я надеюсь, что вы можете помочь мне понять это.

Используя текущую версию OAuth, я могу получить работающий ключ доступа.У меня есть контроллер, который запрашивает request_token следующим образом:

@consumer = OAuth::Consumer.new(api_key, shared_secret, 
{ 
:site => 'https://api.login.yahoo.com', 
:request_token_path => '/oauth/v2/get_request_token', 
:access_token_path => '/oauth/v2/get_token', 
:authorize_path => '/oauth/v2/request_auth',
:signature_method => 'HMAC-SHA1', 
:oauth_version => '1.0' 
}) 

@request_token = @consumer.get_request_token( 
{:oauth_callback => 'http://contactmonkey.com/cards/yahoo_auth?redir...@card.short_link} 
) 

Я получаю по-видимому хороший токен запроса и продолжаю после авторизации в новом методе контроллера:

@access_token = 
@request_token.get_access_token(:oauth_verifier=>params[:oauth_verifier]) 

Iполучите, по-видимому, хороший токен доступа от этого.Только когда я начинаю использовать API, вещи становятся грушевидными.

# make initial contact so we get a contact ID 
yahoo_guid = @access_token.params[:xoauth_yahoo_guid] 
@response = @access_token.request(:post, 'http://social.yahooapis.com/v1/user/' + yahoo_guid + '/contacts') 

Когда я проверяю тело ответа, я получаю следующее:

<?xml version=\"1.0\" encoding=\"utf-8\"?><error xmlns=\"http://social.yahooapis.com/v1/schema.rng\" xmlns:yahoo=\"http://www.yahooapis.com/v1/base.rng\" yahoo:uri=\"http://www.yahooapis.com/v1/errors/415\" yahoo:lang=\"en-US\"><description>Requested representation not available for the resource</description><detail>Invalid media type</detail></error>

Во многих местах я видел, что существует некоторая несовместимость между реализацией OAuth Yahoo и гемом Ruby OAuth,Но я не уверен, что эта информация устарела (я использую текущий 0.4.4).

Спасибо за любую помощь, которую вы можете предложить!Аарон.

Обновление: Решение состоит в том, чтобы правильно отформатировать заголовок:

@response =  @access_token.request(:post, 'http://social.yahooapis.com/v1/user/' + yahoo_guid + '/contacts', entry, { 'Content-Type' => 'application/xml' } )

Обратите внимание на заголовок "content-type".Я пробовал "text / xml", но это не работает.Это делает.Спасибо Дэну К. за помощь!

Ответы [ 2 ]

1 голос
/ 14 января 2011

Вы получаете обратно HTTP 415, что означает, что сервер не может ответить на ваш запрос в запрошенном формате.Похоже, API-интерфейсы Yahoo поддерживают два способа указать, какие форматы вы хотите.Из документов они являются:

1.) Установите заголовок HTTP «Принять» с запрошенным типом содержимого (XML или JSON).

2.) Добавьте? Format = xml или? Format = json в строку запроса.

0 голосов
/ 06 ноября 2013

Мне также было тяжело с Yahoo Yahoo и Java-запросом API для "HAMC-SHA1".Пройдя через все сложные вещи, я создал здесь длинный документ:

https://docs.google.com/document/d/1SdGSfakQM3ZuiqJK7keXhOfh6310-z_h0THl1_Jswxk/pub

Потому что это слишком долго, и я не могу все здесь написать.Я надеюсь, что это может помочь кому-то еще.

...