【问题标题】:How do you iterate through Twitter gem user timeline?你如何遍历 Twitter gem 用户时间线?
【发布时间】:2013-12-21 16:01:14
【问题描述】:

Rails 新手。我正在编写一个应用程序,该应用程序使用 sferik Twitter gem 提取 Twitter 用户时间线,遍历时间线并将每条单独的推文写入模型/表中。我可以将用户时间线放入哈希中,但是当我尝试迭代(例如 tweet.each 做..)并保存每条推文时,应用程序只会保存哈希中的最后一条推文,而不是每条单独的推文。我试图做一个嵌套循环,但在第二级迭代中得到一个未定义的“每个”方法。代码如下,欢迎所有建议。

Rails 3、PostgreSQL、Twitter gem。

**Controller**
**class TweetController < ApplicationController**
require 'twitter'

**def tweet**
    @tweet = Tweet.new
    @tweeters = User.tweeters.all #get twitter users in my application
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = secret
  config.consumer_secret     = secret
  config.access_token        = secret
  config.access_token_secret = secret
end

  @tweeters.each do |element| *#for each user get tweets to insert into the model*
    @tweet.user_id = element.id
    @tweet.screen_name = element.screen_name
    @content = client.user_timeline(element.twitter_id, :since_id => element.tweet_since_id).reverse

  @content.each do |post| *#if I return 4 twitter posts this loop only inserts the last post*
        if post.id > element.tweet_since_id
      element.tweet_since_id = post.id 
          @tweet.content = post.text
          @tweet.save
        end
      end
   end
 end

所以“@content.each 做 |post|”部分不会遍历每条推文并插入 4 条不同的记录,它只插入最后一条记录。我已经尝试了以下每种形式并收到“未定义 Twitter id 的每种方法...”

  @content.each do |post|
       post.id.each do |t|
        if t.id > element.tweet_since_id
      element.tweet_since_id = t.id 
          @tweet.content = t.text
          @tweet.save
        end
      end

有什么想法或建议吗?

【问题讨论】:

  • 这是因为您将数据存储到单个@tweet 记录中,您还需要在@tweet.save 之后创建一个新记录
  • 谢谢!!!!我不得不在“@content”循环中移动一些代码行,但创建一个新的“@tweet”记录就可以了。我真的很感激帮助。再次感谢您。

标签: ruby-on-rails ruby twitter twitter-gem


【解决方案1】:

这是因为您将数据存储到单个@tweet 记录中,您还需要在@tweet.save 之后创建一个新记录,以便新数据不会覆盖旧数据。执行以下操作:

  @content.each do |post|
     if post.id > element.tweet_since_id
        @tweet = Tweet.new :screen_name => element.screen_name, :content => post.text
        @tweet.user_id = element.id
        @tweet.save
        element.tweet_since_id = post.id 
     end
  end

请注意,视图something_id 的记录字段属于数据库中的其他记录类型是一种很好的风格,如果您没有与该字段关联的记录,请使用其他命名,例如something_xidsomethind_sid.

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多