Skip to content

Instantly share code, notes, and snippets.

@marlun
Created December 15, 2010 21:33
Show Gist options
  • Save marlun/742645 to your computer and use it in GitHub Desktop.
Save marlun/742645 to your computer and use it in GitHub Desktop.
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.sendHeader(404, {'Content-Type': 'text/plain'});
response.write('404 Not Found\n');
response.close();
return;
}
fs.readFile(filename, 'binary', function (err, file) {
if (err) {
response.sendHeader(500, {'Content-Type': 'text/plain'});
response.write(err + '\n');
response.close();
return;
}
response.sendHeader(200);
response.write(file, 'binary');
response.close();
});
});
}
var twitter_client = http.createClient(80, 'api.twitter.com');
var tweet_emitter = new events.EventEmitter();
function get_tweets() {
var request = twitter_client.request('GET', '/1/statuses/public_timeline.json', {
'host': '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);
}
});
});
}
http.createServer(function (request, response) {
var uri = url.parse(request.url).pathname;
if (uri === '/stream') {
var listener = tweet_emitter.on('tweets', function (tweets) {
response.sendHeader(200, {'Content-Type': 'text/plain'});
response.write(JSON.stringify(tweets));
response.close();
clearTimeout(timeout);
});
var timeout = setTimeout(function () {
response.sendHeader(200, {'Content-Type': 'text/plain'});
response.write(JSON.stringify([]));
response.close();
tweet_emitter.removeListener('tweets', listener);
}, 10000);
}
else {
load_static_file(uri, response);
}
}).listen(8080);
sys.puts('Server running at http://localhost:8080/');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment