Skip to content

Instantly share code, notes, and snippets.

@tomash
Created September 29, 2011 09:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomash/1250403 to your computer and use it in GitHub Desktop.
Save tomash/1250403 to your computer and use it in GitHub Desktop.
twitter worker: multiple twitter streams
require "daemon_spawn"
require "socket"
require "tmpdir"
require 'twitter/json_stream'
require 'json'
require "./config/environment"
# todo: write tests
class TwitterWorker
def start(args)
@streams = {}
@em_thread = Thread.new { EventMachine::run }
add_event('4de7626877c7f80370003079')
add_event('4de7587577c7f80370000001')
add_event('4de7591f77c7f8037000025c')
loop {}
end
def add_event(event_id)
event = Event.find(event_id)
puts "querying Twitter for event #{event.id} :: #{event.name}"
stream = Twitter::JSONStream.connect(
:path => '/1/statuses/filter.json',
## keywords for given event
:content => "track=#{event.twitter_query_string}",
:method => 'POST',
:auth => 'GigsnitchWorker:EhVd97u2nDudz2TB'
)
stream.each_item do |item|
parsed = JSON.parse(item)
# puts parsed.inspect
# save this tweet for given event
event_tweet = EventTweet.build_from_twitter_hash(parsed)
event_tweet.event_id = event.id
event_tweet.save
puts "saved event tweet: #{event_tweet.text}"
end
stream.on_error do |message|
puts "STREAM ERROR: #{message}"
# No need to worry here. It might be an issue with Twitter.
# Log message for future reference. JSONStream will try to reconnect after a timeout.
end
stream.on_max_reconnects do |timeout, retries|
# Something is wrong on your side. Send yourself an email.
end
@streams[event.id] = stream
end
def remove_event(event_id)
@streams[event.id].stop
end
def stop
puts "stopping..."
@em_thread.kill
end
end
TwitterWorker.new.start([])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment