Twitter Site Stream using EventMachine

I’ve spend some time to try to use Twitter Site Streaming API with event machine, so here is just a small snipet of code on how to do it. In fact it’s pretty simple

Just go to your app page on twitter ( http://www.twitter.com/apps ) and go to your application. Get the access token here. You will find also a button “get my access token” where you can get the oauth access token and access token secret.

With these, you will be able to sign the request

require 'rubygems'
require 'eventmachine'
require 'em-http'
require 'json'
require 'oauth'
require 'oauth/client/em_http'

# Edit in your details.
CONSUMER_KEY = "<put your consumer secret key here>"
CONSUMER_SECRET = "<put your consumer key here>"
ACCESS_TOKEN = "<put your access token here>"
ACCESS_TOKEN_SECRET = "<put your access token secrethere>"

def twitter_oauth_consumer
  @twitter_oauth_consumer ||= OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => "http://twitter.com")
end

def twitter_oauth_access_token
  @twitter_oauth_access_token ||= OAuth::AccessToken.new(twitter_oauth_consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
end

EventMachine.run do
		  # now, let's subscribe to twitter site stream
		  # check informaiton on twitter site
		  # here we are followig to user that have signed to our app...
		  toFollow=[17590452,2071231]
		 http = EventMachine::HttpRequest.new('https://betastream.twitter.com/2b/site.json'
).post(:body=>{"follow"=>toFollow.join(",")},
		 	:head => {"Content-Type" => "application/x-www-form-urlencoded"},
		 	:timeout => -1) do |client|
    		twitter_oauth_consumer.sign!(client, twitter_oauth_access_token)
  		end

	  	buffer = ""

		http.stream do |chunk|
    		buffer += chunk
   			while line = buffer.slice!(/.+\r?\n/)
   				puts "handling a new event:"+line
    		end
  		end
   		http.errback { puts "oops" }
   		http.disconnect { puts "oops, dropped connection?" }

 end

For this, I use the eventmachine plugins for ruby, as well as the oauth and em-http plugins.

Please note that you must you https with twitter in order for this to work.

TvTweet: Real time Twitt about Tv Shows

I’ll present you a small side project, named “TvTweet“. Basically, the idea of TvTweet is to be able to check real time what are the discussion in twitter about TvChannel. And even better, to help you if you see something interesting and hot happening on a channel.

You can also react on Tv Shows, by sending Tweets.

Here are some screen shots:




Unfortunately, the App is only available in French and for French channels, but anybody interested by a converstion for US or UK channels (or other countries) is welcome.

There is a nice server part, “TvTweet.fr” where you can see the tweets, and also the statistics. The application is mostly client side, but the initial idea of the server side was to get statistics, like this one:

It was done quite rapidly and this was fun to create. Was build of course in Coca on the iPhone side, and using several technologies on the server side:
* Ruby On Rails for the server front end
* Node.js for a server side dispatcher, allowing you to follow real time twitter stream without being authentified.
* php for the server side stream tracker

So what I’ve learned:

* Node.js is definitvely too young, it was hard to make something work as expected , but the principle was nice. But thanks to node.js, I’ve take a deeper look to EventMachine for Ruby, and it’s probable that this part will be rewrite using rails

So last reminder: Download TvTweet for iPhone now!