Я пытался работать с 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", но это не работает.Это делает.Спасибо Дэну К. за помощь!