2

OAuth gemを使用してツイートの json を取得するにはどうすればよいですか?

次のことを試しましたが、キーが適切であることを知っていても、アクセスが拒否され続けます。

def prepare_access_token(consumer_key, consumer_secret)
   consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {:site => "https://api.twitter.com"})
   consumer.get_request_token.get_access_token
end

token = prepare_access_token(twitter_consumer_key, twitter_consumer_secret)
token.request(:get, "https://api.twitter.com/1.1/statuses/show/344726259449860096.json")

私は twitter gem について知っていますが、一見とても単純に見えるものに依存したくありません。

特に、以下はステータス401で例外です。

consumer.get_request_token.get_access_token

私は何を間違っていますか?

4

2 に答える 2

4

あなたのアプリケーションフローが何であるかはわかりませんが、私は twitter アプリ経由でログインしており、これが私が行ったことです。※ このプロセスにより、ユーザーの access_token が得られるため、そのデータにアクセスできます

まず、 .appを要求する twitter オブジェクトがありますrequest_token

# defines app's consumer
consumer = OAuth::Consumer.new(consumer_key, 
                               consumer_secret,
                               :site => 'https://api.twitter.com',
                               :authorize_path => '/oauth/authenticate',
                               :sign_in => true)
# get the request_token and pass my callback url
request_token = consumer.get_request_token({:oauth_callback => callback_url})

何らかの方法で request_token を保存する必要があります。request_token は access_token を取得しますが、 .get_request_token() は毎回異なるリクエストを生成するため、最終的に access_token を取得するにはオリジナルを保持する必要があります

# setting the src of the login button
link_to 'log via twitter', request_token.authorize_url

ユーザーがログインします
。Twitter から、URLoauth_tokenoauth_verifier. ユーザーがログインする前に、以前に作成した request_token を取得します。アクセスごとに異なる request_token を取得するため、コールバック応答に一致する request_token を見つける必要があります。

request_token = request_tokens.detect do |rt|
                  rt.token == oauth_token
                end
# let's get the access_token
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)

access_token は使用したアプリケーションとリンクされているようですので、consumer_keyconsumer_secretaccess_token.tokenおよびを保存する必要があります。access_token.secret

フォロワー数を取得する方法の例

json_http_response = access_token.get("http://api.twitter.com/1/users/show.json?user_id=#{twitter_account_id}"))
followers_count = JSON.parse(json_http_response.body)['followers_count']

後で access_token を取得したい場合は、次のように行うことができます。

access_token =
  OAuth::AccessToken.from_hash(application_consumer,   # the same as the very top
                               {:oauth_token => token, # access_token.token from above
                                :oauth_token_secret => secret}))  # access_token.secret from above
于 2013-06-13T00:41:53.307 に答える