2016-05-20 23 views
0

これは初めてのTwitter APIの作業です。 私は、次のツールを使用しています:Rubyでoauth gemを使用したTwitter APIから401の権限がありません

  • ルビー2.2.0p0(2014年12月25日リビジョン49005)[x86_64の-linuxの]
  • 宝石 'のOAuth'

    • のOAuth(0.5。 1)
    • のOAuth2(1.1.0)
    • omniauth-のOAuth2(1.4.0)

私はTwitterから鍵と秘密を取得しました。

Rubyのexample on Twitterからコピーして貼り付けました。新しい鍵と秘密の取得

  • :私が試した何

    =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 
    

    結果:

    ネット:: HTTPUnauthorized 401認可の必要なreadbody =真

    多くのスタックオーバーフローのポストは401が返されることを述べたため、サーバーの時間が超えて変動した場合
  • は私のサーバの時刻を同期ある点。私はntpをインストールしました。 this list

  • API Console ToolをTwitterで。私のTwitterアカウントでhttps://api.twitter.com/1.1/statuses/home_timeline.json戻り予想データと一緒に

    HTTP/1.1 200 OK

    を認証した後。

  • からどこへ行くのTwitter API operating normally

提案がここに感謝かどうかチェック。

UPDATEOAuth Tool on Twitter Developer戻りカール実行と期待される結果:

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 

予想されるデータが返されます。

[{ "のcreated_at": "金5月20日11時05分21秒0000 2016"、 "ID":733614584754515968、 "id_str":
"733614584754515968"、 "テキスト": "スリー。//トンのCO/1p9AxO5JPg @sitepointdotcom経由」、 "切り捨て:すべての新しいプログラマーが HTTPSを学ぶべきスキル":偽、 "実体":{ "ハッシュタグ":[]、 " (切り捨て)シンボル" ...

答えて

-1

この行では、 "APIKey"と "APISecret"をCONSUMER_ *環境変数から引き出したものに置き換える必要があります。

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

Twitterからのサンプルコードでは、私のために正常に動作します。間違った消費者キーは確かにあなたに401を与えるでしょう。

+0

ありがとうございました!これの多くは、何が起こっているかを理解するのに私には馴染みがなかった。私は助けに感謝します! – DMfll

関連する問題