2016-05-20 5 views
0

Dies ist meine erste Erfahrung mit Twitter APIs arbeiten. ich die folgenden Tools verwenden:401 nicht autorisiert von Twitter API mit oauth Juwel in Ruby

  • Rubin 2.2.0p0 (2014.12.25 Revision 49005) [x86_64-Linux]
  • gem 'oauth'

    • oauth (0,5. 1)
    • oauth2 (1.1.0)
    • omniauth-oauth2 (1.4.0)

Ich erhielt einen Schlüssel und ein Geheimnis von Twitter.

Ich kopiert und eingefügt von der example on Twitter für Ruby.

=begin 
code taken directly from the example at 
https://dev.twitter.com/oauth/overview/single-user 
=end 

require 'oauth' 
consumer_key, \ 
    consumer_secret = [ 
    'CONSUMER_KEY', 
    'CONSUMER_SECRET' 
].map { |key| ENV[key] } 
raise "Some key undefined." unless [consumer_key, consumer_secret].all? 

# Exchange your oauth_token and oauth_token_secret for an AccessToken instance. 
def prepare_access_token(oauth_token, oauth_token_secret) 
    consumer = OAuth::Consumer.new("APIKey", "APISecret", { :site => "https://api.twitter.com", :scheme => :header }) 

    # now create the access token object from passed values 
    token_hash = { :oauth_token => oauth_token, :oauth_token_secret => oauth_token_secret } 
    access_token = OAuth::AccessToken.from_hash(consumer, token_hash) 

    return access_token 
end 

# Exchange our oauth_token and oauth_token secret for the AccessToken instance. 
access_token = prepare_access_token(consumer_key, consumer_secret) 
p access_token 

# use the access token as an agent to get the home timeline 
response = access_token.request(:get, "https://api.twitter.com/1.1/statuses/home_timeline.json") 
p response 

=begin 

|| #<OAuth::AccessToken:0x000000021ed938 
@token="redacted", @secret="redacted", 
@consumer=#<OAuth::Consumer:0x000000021edb68 
@key="APIKey", 
@secret="APISecret", @options={:signature_method=>"HMAC-SHA1", 
:request_token_path=>"/oauth/request_token", 
:authorize_path=>"/oauth/authorize", 
:access_token_path=>"/oauth/access_token", 
:proxy=>nil, :scheme=>:header, 
:http_method=>:post, :oauth_version=>"1.0", 
:site=>"https://api.twitter.com"}>, 
@params={:oauth_token=>"redacted", :oauth_token_secret=>"redacted"}> 
|| #<Net::HTTPUnauthorized 401 Authorization Required readbody=true> 
=end 

Was ich versucht:

Vorschläge von wo aus hier geschätzt gehen.

UPDATEOAuth Tool on Twitter Developer kehrt das erwartete Ergebnis mit einer Locke Ausführung:

curl --get 'https://api.twitter.com/1.1/statuses/home_timeline.json' --header 'Authorization: OAuth oauth_consumer_key="redacted", oauth_nonce="redacted", oauth_signature="redacted", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1463742270", oauth_token="redacted", oauth_version="1.0"' --verbose 

Erwartete Daten zurückgegeben werden.

[{ "created_at": "Fr 20. Mai 11.05.21 0.000 2016", "id": 733614584754515968 "id_str":
"733614584754515968", "text": "Three Fähigkeiten Jedes neue Programmierer sollte Lernen Sie https: // t co/1p9AxO5JPg über @sitepointdotcom“, "abgeschnitten.": false, "Entitäten": { "Hashtags"[] "Symbole" (abgeschnitten) ...

Antwort

-1

In dieser Zeile sollten Sie "APIKey" und "APISecret" mit dem ersetzen, was Sie aus den Umgebungsvariablen CONSUMER_ * gezogen haben.

consumer = OAuth::Consumer.new("APIKey", "APISecret", { :site => "https://api.twitter.com", :scheme => :header }) 

Der Beispielcode von Twitter funktioniert gut für mich. Die falschen Consumer Keys geben Ihnen 401 sicher.

+0

Vielen Dank! Zu viel davon war mir unbekannt, um zu erkennen, was vor sich ging. Ich schätze die Hilfe! – DMfll

Verwandte Themen