2011-01-14 2 views
3

Ich habe versucht, mit der Yahoo Contacts API mit der neuesten Version von Ruby OAuth zu arbeiten, aber ich bin mir nicht sicher, ob ich mit die letzte auflegen Phase des Autorisierungsprozesses oder etwas in der API. Ich hoffe, du kannst mir helfen, das herauszufinden.Verwenden von Ruby OAuth zum Herstellen einer Verbindung mit Yahoo Contacts API

Mit der aktuellen Version von OAuth kann ich scheinbar einen Arbeitszugriffsschlüssel erhalten. Ich habe einen Controller, der die request_token fordert etwa so:

@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/[email protected]_link} 
) 

ich eine scheinbar gute Anforderungs-Token von diesem erhalten, und in der neuen Controller-Methode nach Genehmigung vor:

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

ich ein anscheinend auch ein guter Zugangsmarker von diesem. Es ist nur , wenn ich die API benutze, dass die Dinge birnenförmig werden.

# 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') 

Wenn ich die Antwort Körper kontrollieren, bekomme ich diese:

<?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> 

Ich habe in vielen Orten zu sehen, dass es eine Unverträglichkeit ist zwischen der Yahoo OAuth Implementierung und der Ruby OAuth gem. Aber ich bin mir nicht sicher, ob diese Information veraltet ist (ich verwende die aktuelle 0.4.4).

Danke für jede Hilfe, die Sie anbieten können! Aaron.

Update: Die Lösung ist den Header korrekt zu formatieren:

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

Beachten Sie den "Content-Type" Header. Ich habe "text/xml" ausprobiert, aber das funktioniert nicht. Das macht. Danke an Dan K. für die Hilfe!

Antwort

1

Sie erhalten eine HTTP 415 zurück, was bedeutet, dass der Server nicht auf Ihre Anfrage im angeforderten Format antworten kann. Die Yahoo APIs scheinen zwei Möglichkeiten zu unterstützen, die gewünschten Formate zu spezifizieren. Von the docs sind das:

1.) Legen Sie den HTTP-Header "Accept" mit dem angeforderten Inhaltstyp (entweder XML oder JSON) fest.

2.) Hängen Sie format = xml oder? Format = json an Ihre Abfragezeichenfolge an.

+0

Okay, das war eine gute Führung! Ich habe eine XML-Anfrage angegeben und es erneut versucht. Ich bekomme jetzt einen anderen Fehler, also ist das ein Fortschritt ... :-) Der Fehler ist \ N \ n application/x-www-form-urlencoded wird nicht von OAuth unterstützt \ n \ n \ n –

+0

Übrigens, so habe ich die Anfrage mit OAuth gesendet: @response = @ access_token.request (: post, 'http: // social.yahooapis.com/v1/user/ '+ yahoo_guid +'/contacts ', {' Inhaltstyp '=>' application/atom + xml '}) –

+0

Es klingt, als würdest du deinen "Content-Type" einstellen Anfragekopf an "application/x-www-form-urlencoded". Ich schätze, Ihr Versuch, es auf "application/atom + xml" zu setzen, funktioniert nicht. Können Sie in Ihren Dokumenten nachlesen, wie Sie den Inhaltstyp festlegen? –

Verwandte Themen