使用tweetstream守护进程写入数据库

时间:2011-05-19 14:24:09

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

我正在尝试将与关键字匹配的所有推文写入我的数据库。我在tracker.rb中设置了以下内容:

require 'rubygems'
require 'tweetstream'

TweetStream::Daemon.new('Bill Gates','money','Twitter Tracker').track('ladygaga') do |status|
  Tweet.new(:content => status.text)
end

但没有任何反应。我在这里做错了什么?

提前致谢

更新 我将所有内容放在名为.rake的{​​{1}}文件中,并使用twitter.rake启动恶魔:

$ rake scrap

3 个答案:

答案 0 :(得分:1)

你是如何召唤守护进程的?

您需要提供命令(开始/停止..)

例如:

rails runner "TweetStream::Daemon.new('tracker').track('ladygaga') { |status| do_something }" start

这将在后台启动工作

答案 1 :(得分:1)

您的第一种方法是最好的方法,您需要从命令行运行“deamon”,但由于您想要使用rails和activerecord,您需要将rails环境引导到脚本中。

你需要做这样的事情:

#!/usr/bin/env ruby
# encoding: utf-8

ENV["RAILS_ENV"] ||= "development"

root  = File.expand_path(File.join(File.dirname(__FILE__), '..'))
require File.join(root, "config", "environment")

require 'tweetstream'

p "Initializing daemon..."

TweetStream.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'
  config.auth_method        = :oauth
end

terms = ['ladygaga']

daemon = TweetStream::Daemon.new('tracker',
  :log_output => true,
  :backtrace  => true,
)

daemon.on_inited do
  ActiveRecord::Base.connection.reconnect!
  p "Listening..."
end

daemon.on_error do |message|
  puts "on_error: #{message}"
end

daemon.on_reconnect do |timeout, retries|
  puts "on_reconnect: #{timeout}, #{retries}"
end

daemon.on_limit do |discarded_count|
  puts "on_limit: #{skip_count}"
end

daemon.track(terms) do |status|
  # put here your model.create code!
  # Tweet.create!( :uid => status.id, ... )
end

要运行脚本,只需输入:

ruby scrip-name.rb run

答案 2 :(得分:0)

我假设这是更大的rails应用程序的一部分。如果是这样,问题1是Tweet.new如果它是标准的activerecord对象,则不会将任何内容持久化到数据库。尝试Tweet.create其次,我不确定脚本是否必须知道Tweet,如果它是一个活跃的记录,而不是拉入rails应用程序,可能包括environment.rb文件。

类似的东西:

ENV["RAILS_ENV"] ||= "production"

require File.dirname(__FILE__) + "/../../config/application"
Rails.application.require_environment!

如果这不起作用,你可以尝试只包括活动记录这里的问题和答案描述它:

How to use ActiveRecord in a ruby script outside Rails?