Sha256: 5c9672f17d9904b7827d1bb09ac0f3f025d923ba5b148dc732360d4b74a1b4b4

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

require 'logger'
require 'oauth/cli/twitter'

class UserStreamReceiver
  include OAuth::CLI::Twitter

  CONSUMER_TOKEN = 'kHOuxYqXSINzOW3UzEqEcA'
  CONSUMER_SECRET = 'x6dzx1oFjgDrtJSM2v8YYEYhyN2LnB1zUOeNo9Y'

  def run(&block)
    loop {
      begin
        self.process &block
      rescue => error
        self.logger.warn error
        sleep 1
      end
    }
  end

  protected
  ENDPOINT = URI.parse('https://userstream.twitter.com/2/user.json')

  def access_token
    @access_token ||= self.get_access_token(:pit => 'user-stream-receiver')
  end

  def logger
    @logger ||= Logger.new(STDOUT)
    @logger.level = Logger::INFO
    @logger
  end

  def process(&block)
    self.logger.info("connecting")
    https = Net::HTTP.new(ENDPOINT.host, ENDPOINT.port)
    https.use_ssl = true
    https.verify_mode = OpenSSL::SSL::VERIFY_NONE

    https.start{ |https|
      request = Net::HTTP::Get.new(ENDPOINT.request_uri)
      request.oauth!(https, self.access_token.consumer, self.access_token)
      https.request(request){ |response|
        raise response.code.to_i unless response.code.to_i == 200
        raise 'Response is not chuncked' unless response.chunked?
        self.logger.info("connected")
        response.read_body{ |chunk|
          self.logger.debug("received: #{chunk}")
          yield chunk
        }
      }
    }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
user-stream-receiver-0.1.0 lib/user-stream-receiver.rb