class Twitterpunch::Streamer
Public Class Methods
new(config)
click to toggle source
# File lib/twitterpunch/streamer.rb, line 10 def initialize(config) @config = config @viewer = config[:display] @client = Twitter::Streaming::Client.new(config[:twitter]) @logger = Twitterpunch::Logger.new(config) @output = File.expand_path(config[:photodir]) begin @handle = Twitter::REST::Client.new(config[:twitter]).current_user.screen_name rescue Twitter::Error => e puts "Cannot retrieve Twitter username." puts "It's likely that you're on Windows and your SSL environment isn't complete" puts "Download http://curl.haxx.se/ca/cacert.pem and set the environment variable" puts "SSL_CERT_FILE to point to it." puts e.message end FileUtils.mkdir_p(@output) unless File.directory?(@output) end
Public Instance Methods
handle(tweet)
click to toggle source
# File lib/twitterpunch/streamer.rb, line 48 def handle(tweet) if tweet.is_a?(Twitter::Tweet) @logger.info(tweet.text) @logger.log(tweet.user.screen_name, tweet.text) content = tweet.text.gsub(/http\S*/,'').gsub(/#\S*/,'').gsub(/@#{@config[:handle]}/, '') if tweet.media? uri = tweet.media.first.media_uri http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) image = File.basename uri.path File.open("#{@output}/#{image}", 'wb') do |file| file.write(response.body) end unless tweet.user.screen_name == @handle @config[:state][image] = content end if @viewer @viewer.pop(image, content) else # OS X screensaver doesn't reload images dynamically. This kinda sucks. if RUBY_PLATFORM =~ /darwin/ and system('pgrep ScreenSaverEngine >/dev/null') system('osascript', '-e', 'tell application "System Events" to stop current screen saver') system('osascript', '-e', 'tell application "System Events" to start current screen saver') end end end unless tweet.user.screen_name == @handle message = "#{tweet.user.name} says #{content}" case RUBY_PLATFORM when /mingw|cygwin/ system('cscript', "#{@config[:resources]}/say.vbs", message) when /darwin/ system('say', message) end end end end
stream()
click to toggle source
# File lib/twitterpunch/streamer.rb, line 36 def stream begin if @config[:hashtag] @client.filter(:track => @config[:hashtag]) { |tweet| handle(tweet) } else @client.user { |tweet| handle(tweet) } end rescue Interrupt => e @logger.error "Exiting: #{e.message}" end end
thread()
click to toggle source
# File lib/twitterpunch/streamer.rb, line 30 def thread Thread.new do stream end end