class Ruboty::Tweets::Stream
Public Class Methods
new(robot)
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 7 def initialize(robot) TweetStream.configure do |config| config.consumer_key = CONSUMER_KEY config.consumer_secret = CONSUMER_SECRET config.oauth_token = ACCESS_TOKEN config.oauth_token_secret = ACCESS_TOKEN_SECRET config.auth_method = :oauth end @robot = robot @client = TweetStream::Client.new @client.on_inited do log(:info , "Connected to twitter stream.") # Every day reconnect the stream to prevent from shutdown. EM::PeriodicTimer.new(60 * 60 * 24) do @client.stream.immediate_reconnect end end @client.on_reconnect do |timeout, retrial| log(:info , "Reconnected to twitter stream: #{timeout} sec.") end @client.on_error do |message| log(:error, message) end end
Public Instance Methods
rest()
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 56 def rest @rest ||= Twitter::REST::Client.new do |config| config.consumer_key = CONSUMER_KEY config.consumer_secret = CONSUMER_SECRET config.access_token = ACCESS_TOKEN config.access_token_secret = ACCESS_TOKEN_SECRET end end
start(users)
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 37 def start(users) return if users.empty? Thread.start do @client.follow(*q(users)) do |object| if userinfo = users[object.user.screen_name] message = Message.new(userinfo[:message].merge(robot: @robot)) message.reply(u(object)) end end end end
update(users)
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 50 def update(users) return start(users) unless @client.stream @client.stream.update(params: {:follow => q(users)}) end
Private Instance Methods
log(level, message)
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 74 def log(level, message) Ruboty.logger.send(level, "[#{Time.now}] ruboty-tweets: #{message}") end
q(users)
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 66 def q(users) users.values.map { |userinfo| userinfo[:twitter_id] } end
u(object)
click to toggle source
# File lib/ruboty/tweets/stream.rb, line 70 def u(object) "https://twitter.com/#{object.user.screen_name}/status/#{object.id}" end