我想在我的示例twitter rails应用程序中找到所有关注者的推文

时间:2014-01-13 06:44:58

标签: ruby-on-rails ruby ruby-on-rails-4

我想找到followed_users

的推文

用户模型

class User < ActiveRecord::Base
    has_many :tweets, dependent: :destroy  
    has_many :relationships, foreign_key: "follower_id", dependent: :destroy  
    has_many :followed_users, through: :relationships, source: :followed
    has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy
    has_many :followers, through: :reverse_relationships, source: :follower  

推特模型

class Tweet < ActiveRecord::Base  
    belongs_to :user

关系模型

class Relationship < ActiveRecord::Base  
    belongs_to :follower, class_name: "User"
    belongs_to :followed, class_name: "User

请帮我找

  • 我所有followed_users
  • 的推文
  • 推文应按:created_at
  • 订购

编辑:
    我不想要Twitter的实际推文。我想要我的应用推文。

3 个答案:

答案 0 :(得分:1)

首先,您需要了解如何将rails应用程序与Twitter集成。为此,您必须使用Twitter API。

  1. 要将rails应用程序与Twitter集成,请阅读此博客 发布 - http://www.manaslutech.com/blogs/3-Ruby-on-Rails-integration-with-Facebook-and-Twitter 。您可以跳过Facebook部分,只关注Twitter 集成。

  2. 获得Twitter身份验证后,您可以获得关注者Twitter ID或用户名

  3. 现在,您可以阅读第2步中所有关注者的推文

答案 1 :(得分:1)

Twitter's new v1.1 API允许您稍微执行此操作,但您不会通过一次调用获取您的关注者推文列表

以下是我接近它的方法:


<强>集成

不再是oAuth与Twitter连接的情况,你必须通过v1.1 authentication process

您需要使用Twitter Gem启用Rails应用:

#config/initializers/twitter.rb
#creates a constant
TWITTER = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

然后你可以直接调用Twitter API:

#app/views/shared/footer.html.erb
<%= TWITTER.followers(213747670) %>

您必须记住Twitter的新API是throttled


<强>后端

因为你只能得到你的粉丝,然后是推文,你必须让这个过程分为两个步骤。我会通过将关注者存储在他们自己的表中并使用rake task每天或每小时获取他们的最新推文来接近它:

#app/models/tweet.rb
Class Tweet < ActiveRecord::Base
end

tweets
id | username | latest | created_at | updated_at

这将允许您将twitter关注者添加到表中,并使用rake任务更新他们的最新推文:

#app/controllers/tweets_controller.rb
def new
    @tweet = Tweet.new
end

def create
    @tweet = Tweet.new(tweet_params)
    @tweet.save
end

private

def tweet_params
    params.require(:tweet).permit(:username)
end

#lib/tasks/tweet.rake
namespace :tweets do 
    desc "Update Latest Tweets"
    task :latest => :environment do
        followers = Tweet.all.map(&:username).to_a
        followers.each do |follower|
             tweets = TWITTER.user_timeline(follower)
             follower.update_attributes({latest: tweets.first})
        end
    end
end

您可以从控制台运行rake任务,如下所示:rake tweets:latest

答案 2 :(得分:0)

尝试这是一件有趣的事情!我最近制作了一个基于浏览器的小游戏,使用twitter进行身份验证。通过这样做,我发现以下资源非常有用:

github上的

Sferik提供了项目Sign in With Twitter,作为如何将rails应用程序与twitter的API集成的示例。那里有很多优秀的代码,非常简单。我使用该项目作为我自己的基础。

Sferik还提供了twitter gem和t,一个twitter CLI。这些将对您的旅程有所帮助。

@royalGhost's answer中建议的资源外,我还会提到this SO question