1

我正在尝试使用 Ruby Twitter Gem 根据某些关键字对推文是否进行地理标记进行分类。我可以从 Rails 控制台很好地做到这一点,但我去在一个视图中反映我的发现,我只是不知道该怎么做。

这是我在命令行上所做的事情:

我首先设置我的流媒体客户端:

client = Twitter::Streaming::Client.new do |config|
  config.consumer_key        = "MYCODE"
  config.consumer_secret     = "NOTYOURS"
  config.access_token        = "HANSHOT"
  config.access_token_secret = "FIRST"
end

然后我初始化我的计数:

count = 0
geo = 0

最后我粘贴了我的简短脚本并运行输入:

client.filter(:track => "cat") do |tweet|
    count += 1

    if(tweet.place.nil?)
      # Do nothing
    else
      geo += 1
    end
end

要访问我的结果,我需要按 Ctrl+C 并在控制台中输入“geo”或“count”。

在理想的世界中,我会有一个显示计数和地理数字的视图。每当我刷新视图时,所述视图都会刷新更新后的数字。

我尝试将其放入控制器中,但页面永远不会加载,因为据推测,控制器正在无限解析流并且永远没有机会呈现。

我把它放在一个模型文件中,但这也没有做任何事情。

那么,我是否会以完全错误的方式来解决这个问题?除了 IRB 之外,从任何地方都无法获得这些数字吗?

4

1 回答 1

0

创建控制器代码时需要牢记以下几点:

  • 您希望出现在视图中的所有内容都必须由数据库调用、辅助方法或实例变量提供。
  • 控制器必须及时完成计划执行的任何操作。无限循环和需要几分钟的长时间运行操作是严重的问题。
  • 视图可以进行自己的计算,通常它们可以自由地运行任意 Ruby 代码,但是在那里完成繁重的工作被认为是不好的形式,因为这是控制器的主要职责。

因此,一般而言,您的控制器代码可能如下所示:

def index
  @client = Twitter::Streaming::Client.new do |config|
    # ... (Configuration)
  end

  @count = 0
  @geo = 0

  client.filter(track: "cat") do |tweet|
    @count += 1

    if (tweet.place)
      @geo += 1
    end

    break if (@count > 10)
  end
end

这假定该client.filter操作可以在短时间内产生十个结果。

于 2015-06-10T20:03:55.837 回答