Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 9b75895815
Fetching contributors…

Cannot retrieve contributors at this time

120 lines (87 sloc) 3.449 kb

EM-Twitter Build Status Dependency Status

EM-Twitter is an EventMachine-based ruby client for the Twitter Streaming API.


require 'em-twitter'

options = {
  :path   => '/1/statuses/filter.json',
  :params => { :track => 'yankees' },
  :oauth  => {
    :consumer_key     => ENV['CONSUMER_KEY'],
    :consumer_secret  => ENV['CONSUMER_SECRET'],
    :token            => ENV['OAUTH_TOKEN'],
    :token_secret     => ENV['OAUTH_TOKEN_SECRET']
} do
  client = EM::Twitter::Client.connect(options)

  client.each do |result|
    puts result


SSL is used by default (EventMachine defaults to verify_peer => false), and can be configured:

options = {
  :ssl => {
    :private_key_file => "path/to/key.pem",
    :cert_chain_file => "path/to/cert.pem",
    :verify_peer => true

client = EM::Twitter.Client.connect(options)

Proxy Support

EM-Twitter includes proxy support via a configuration option:

options = {
  :proxy => {
    :username => 'myusername',
    :passowrd => 'mypassword',
    :uri => 'http://my-proxy:8080'

client = EM::Twitter.Client.connect(options)

Error Handling

EM-Twitter supports the following callbacks for handling errors:

  • on_unauthorized
  • on_forbidden
  • on_not_found
  • on_not_acceptable
  • on_too_long
  • on_range_unacceptable
  • on_enhance_your_calm (aliased as on_rate_limited)

Errors callbacks are invoked on a Client like so:

client = EM::Twitter.Client.connect(options)
client.on_forbidden do
  puts 'oops'


EM-Twitter has two callbacks for reconnection handling:

client = EM::Twitter.Client.connect(options)
client.on_reconnect do |timeout, count|
  # called each time the client reconnects

client.on_max_reconnects do |timeout, count|
  # called when the client has exceeded either:
  # 1. the maximum number of reconnect attempts
  # 2. the maximum timeout limit for reconnections


  • Gzip encoding support (see issue #1 for more information)
  • JSON Parser (see issue #2 for more information)


EM-Twitter is heavily inspired by Vladimir Kolesnikov's twitter-stream. I learned an incredible amount from studying his code and much of the reconnection handling in EM-Twitter is derived/borrowed from his code as are numerous other bits. Eloy Durán's ssalleyware was very helpful in adding SSL Certificate verification as was David Graham's vines.

Testing with EM can be a challenge, but was made incredibly easy through the use of Hayes Davis' awesome mockingbird gem.


Pull requests welcome: fork, make a topic branch, commit (squash when possible) with tests and I'll happily consider.


Copyright (c) 2012 Steve Agalloco. See LICENSE for details.

Jump to Line
Something went wrong with that request. Please try again.