【问题标题】:Display a Twitter feed from a Rails app显示来自 Rails 应用程序的 Twitter 提要
【发布时间】:2012-04-27 12:43:17
【问题描述】:

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

【问题讨论】:

  • 可能是这个stackoverflow.com/questions/1665213/… 帮助。
  • @gayavat 我看到了那个页面。它不显示任何代码。我需要确切地知道我必须输入什么才能从登录用户的 Twitter 中获取信息。
  • 最后一条评论指向arctickiwi.com/blog/…,其中存在代码示例
  • @gayavat 对不起,我觉得这真的很混乱......我不想存储我自己的推文。我正在寻找一个精简版。

标签: ruby-on-rails twitter omniauth railscasts


【解决方案1】:

首先,如果 Twitter 订阅是公开的,您不需要用户凭据来获取它。看着那(这 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 凭据(不是他们的用户名和密码;您没有这些凭据)代表用户提出请求。 )。这将允许您每秒发出更多请求,因为它们来自不同的用户。只需使用设置为您从 OmniAuth 哈希中获得的内容的 consumer_keyconsumer_secret 字段初始化 Twitter(请参阅 here,查看“凭据”下的“凭据”以了解如何从 OmniAuth 获取它们)。

【讨论】:

  • 谢谢。我还不需要花哨,但我有点悬在这里,因为我仍然不知道将这些东西放在初始化程序中如何导致获取登录用户的推文。您能否告诉我如何使用您提供的示例代码( Twitter.user_timeline("logged_in_users_username") )来做到这一点?
  • 另外,“只需初始化 Twitter...”是什么意思?
  • 我不明白您的第一个问题——初始化程序只是配置 Twitter gem,以便您可以连接到 Twitter 作为您的开发人员帐户。 user_timeline 是你在代码中用来获取用户推文的东西。您知道用户的 Twitter 句柄(对吗?),并且您知道如何为句柄获取推文,因此您将它们放在一起并获得登录用户的推文。
  • 关于您的第二个问题:如果您想使用不同的凭据连接到 Twitter,您需要为每个用户单独执行 Twitter.configure 内容,而不是在全局初始化程序中。
  • 我应该为将来遇到此问题的任何人提一下,我将 Twitter 配置内容从初始化程序中移到了我的身份验证控制器中,因此它可以提取令牌和机密(以及uid) 从当前用户的数据库中取出。
【解决方案2】:

类推文

    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

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 2023-03-18
    • 2014-07-05
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2013-09-16
    相关资源
    最近更新 更多