显示来自Rails应用的Twitter Feed

时间:2012-04-16 06:56:48

标签: ruby-on-rails twitter omniauth railscasts

我已经能够让用户通过OmniAuth登录Twitter(我遵循Railscast#235-6并制作了一个简单的应用程序)。现在我正在尝试显示登录用户的Twitter提要。谁能告诉我这是怎么做到的?我如何初始化Twitter?如何传入登录用户的用户名和密码?我是Rails的新手,所以如果我确切地知道放置代码的位置会有所帮助。感谢

2 个答案:

答案 0 :(得分:17)

首先,如果公开,您不需要用户凭据来获取Twitter Feed。看着那(这 Twitter gem。安装gem之后,您需要做的就是:

require 'twitter'
Twitter.user_timeline("icambron")

在IRB中尝试一下即可开始使用。很简单吧?

现在,您可能希望使用API​​密钥,因为Twitter会限制匿名请求,而且共享服务器可能会出现问题。在initializer中执行此操作:

Twitter.configure do |config|
  config.consumer_key = YOUR_CONSUMER_KEY
  config.consumer_secret = YOUR_CONSUMER_SECRET
  config.oauth_token = YOUR_OAUTH_TOKEN
  config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET
end

从Twitter开发者页面获取实际值。

最后,为了获得真正的想象力,如果你想扩大规模,你可以使用从OmniAuth获得的OAuth凭证代表用户提出请求(不是他们的用户名和密码;你没有那些)。这将允许您每秒发出更多请求,因为它们来自不同的用户。只需将consumer_keyconsumer_secret字段设置为您从OmniAuth哈希中获取的内容来初始化Twitter(请参阅here,查看“凭据”以了解如何从OmniAuth获取它们)。

答案 1 :(得分:0)

班级推文

    BASE_URL = "http://api.twitter.com/1.1/statuses/user_timeline.json"
    SCREEN_NAME = "OMGFacts"
    MAX_TWEETS = 10000

    CONSUMER_KEY = "PMiAyrY5cASMnmbd1tg"
    CONSUMER_SECRET = "0TYRYg0hrWBsr1YZrEJvS5txfA9O9aWhkEqcRaVtoA"

    class << self
      def base_url
        BASE_URL
      end

      def screen_name
        SCREEN_NAME
      end

      def url(count = MAX_TWEETS)
        params = {:screen_name => screen_name, :count => count}
        [base_url, params.to_param].join('?')
      end

      def prepare_access_token(oauth_token, oauth_token_secret)
        consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET,
          { :site => "http://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,
                       :open_timeout => 500000000
                     }
        access_token = OAuth::AccessToken.from_hash(consumer, token_hash )
        return access_token
      end

      def get(count = MAX_TWEETS)
        count = Preference.get(:2000).to_i
        access_token = prepare_access_token("178394859-cJlRaiQvqVusPAPjqC2Nn7r3Uc7wWsGua7sGHzs","3T8LCZTYXzuPLGzmWX1yRnKs1JFpfJLKemoo59Piyl8")
        response = JSON.parse access_token.request(:get, url).body

        response[0...count]
      end

    end

  end