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!
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 Xml version = '1.0' encoding = 'UTF-8'?> \ N \ n application/x-www-form-urlencoded wird nicht von OAuth unterstützt yahoo: Beschreibung> \ n yahoo: Fehler> \ n \ n –
Ü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 '}) –
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? –