var sys = require('sys'), http = require('http'), url = require('url'), path = require('path'), fs = require('fs'), events = require('events'); function load_static_file( uri, response ) { var filename = path.join( process.cwd(), uri ); path.exists( filename, function( exists ) { if( !exists ) { response.setHeader('Content-Type', 'text/plain'); response.statusCode = 404; response.write('404 Not Found\n'); response.end(); return; } fs.readFile( filename, 'binary', function( err, file ) { if( err ) { response.setHeader( 'Content-Type', 'text/plain' ); response.statusCode = 500; response.write( err, + '\n' ); response.end(); return; } response.statusCode = 200; response.write( file, 'binary' ); response.end(); }); }); } var tweet_emitter = new events.EventEmitter(); function get_tweets() { var request = http.request({ method:'GET', port:80, path:'/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=sam3k_&count=2', hostname:'api.twitter.com' }); request.addListener( 'response', function(response) { var body = ''; response.addListener( 'data', function(data) { body += data; }); response.addListener( 'end', function() { var tweets = JSON.parse(body); if( tweets.length > 0) { tweet_emitter.emit('tweets', tweets); } }); }); request.end(); } setInterval( get_tweets, 5000 ); http.createServer(function(request, response) { var uri = url.parse(request.url).pathname; if(uri === '/stream') { var listener = tweet_emitter.addListener('tweets', function(tweets) { response.statusCode = 200; response.write(JSON.stringify(tweets)); response.end(); clearTimeout(timeout); }); var timeout = setTimeout(function(){ response.setHeader('Content-Type', 'text/plain'); response.write(JSON.stringify([])); response.end(); tweet_emitter.removeListener(listener); },10000); } else { load_static_file(uri, response); } }).listen(8080); sys.puts('Server Running at http://localhost:8080/');