Skip to content
Twitter Streaming API client for EventMachine
Find file
Latest commit 6155310 @stve stve version 0.3.5
Failed to load latest commit information.
examples Cleanup trailing whitespace
lib version 0.3.5
spec update to rspec 3.1
.gemtest initial commit
.gitignore initial commit
.rspec Fail fast
.yardopts update changelog for 0.3.3 [ci skip]
Gemfile update to rspec 3.1
Guardfile added guard Update copyright year [ci skip] fix badges in README [ci skip]
Rakefile Remove executable attributes and shebang line
em-twitter.gemspec change homepage url in gemspec to point to tweetstream org


Gem Version Build Status Dependency Status Code Climate

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

Stream Processing

We recommend using TweetStream for a higher abstraction level interface.


To access the Twitter REST API, we recommend the Twitter gem.


  • 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.


Copyright (c) 2011-2013 Steve Agalloco. See LICENSE for details.

Something went wrong with that request. Please try again.