使用tweetstream守护进程写入数据库
我正在尝试将与关键字匹配的所有推文写入我的数据库。 我在tracker.rb
设置了以下内容:
require 'rubygems' require 'tweetstream' TweetStream::Daemon.new('Bill Gates','money','Twitter Tracker').track('ladygaga') do |status| Tweet.new(:content => status.text) end
但没有任何反应。 我在这做错了什么?
提前致谢
更新:我将所有内容放在名为twitter.rake
的.rake
文件中,然后使用$ rake scrap
启动恶魔:
task :scrap => :environment do desc "Run Twitter Scraper" TweetStream::Client.new('TWITTER_USER','TWITTER_PASS').track('ladygaga') do |status| Tweet.create(:user_id => status.user.id, :user_screen_name => status.user.screen_name, :user_profile_image_url => status.user.profile_image_url, :status_text => status.text, :status_id => status.id) puts "[#{status.user.screen_name}] #{status.text}" end end
你是怎么称呼守护进程的?
你需要提供一个命令(开始/停止..)
例如:
rails runner "TweetStream::Daemon.new('tracker').track('ladygaga') { |status| do_something }" start
这将在后台开始工作
您的第一种方法是最好的方法,您需要从命令行运行“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
我假设这是更大的rails应用程序的一部分。 如果是这样,问题1是如果Tweet.new
是标准的activerecord对象,它将不会持久存储到数据库。 尝试Tweet.create
其次我不确定脚本是否必须知道Tweet,如果它是一个activerecord而不是拉入rails应用程序,可能包括environment.rb文件。
就像是:
ENV["RAILS_ENV"] ||= "production" require File.dirname(__FILE__) + "/../../config/application" Rails.application.require_environment!
如果这不起作用你可以尝试只包括活动记录这里的问题和答案描述它:
如何在Rails外的ruby脚本中使用ActiveRecord?