使用Ruby OAuth连接到Yahoo Contacts API

时间:2011-01-14 03:43:21

标签: rest oauth yahoo

我一直在尝试使用最新的Yahoo Contacts API 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]) 

我也从中获得了一个明显优秀的访问令牌。这只是 当我开始使用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>

我在许多地方都看到过这种情况之间存在一些不相容之处 Yahoo OAuth实现和Ruby OAuth gem。但我不确定是否 该信息已过期(我使用的是当前的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”,但这不起作用。这样做。感谢Dan K.的帮助!

2 个答案:

答案 0 :(得分:1)

您正在收回HTTP 415,这意味着服务器无法以您请求的格式回复您的请求。 Yahoo API似乎支持两种指定所需格式的方法。来自the docs,它们是:

1。)使用您请求的内容类型(XML或JSON)设置“接受”HTTP标头。

2.。)将?format = xml或?format = json附加到您的查询字符串。

答案 1 :(得分:0)

我也很难与yahoo oauth和yahoo api请求“HAMC-SHA1”。在经历了所有困难之后,我在这里创建了一个很长的文档:

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

因为太长了以至于我无法在这里写下所有内容。我希望它可以帮助其他人。