我正在尝试将与关键字匹配的所有推文写入我的数据库。我在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
答案 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!
如果这不起作用,你可以尝试只包括活动记录这里的问题和答案描述它: