Skip to content

Instantly share code, notes, and snippets.

@andregoncalves
Created December 29, 2009 17:51
Show Gist options
  • Save andregoncalves/265460 to your computer and use it in GitHub Desktop.
Save andregoncalves/265460 to your computer and use it in GitHub Desktop.
var sys = require('sys'),
http = require('http'),
ws = require("./vendor/ws"),
base64 = require('./vendor/base64'),
arrays = require('./vendor/arrays');
// Command line args
var USERNAME = process.ARGV[2];
var PASSWORD = process.ARGV[3];
var KEYWORD = process.ARGV[4] || "iphone";
if (!USERNAME || !PASSWORD)
return sys.puts("Usage: node server.js <twitter_username> <twitter_password> <keyword>");
// Authentication Headers for Twitter
var headers = [];
var auth = base64.encode(USERNAME + ':' + PASSWORD);
headers['Authorization'] = "Basic " + auth;
headers['Host'] = "stream.twitter.com";
var clients = [];
// Connection to Twitter's streaming API
var twitter = http.createClient(80, "stream.twitter.com");
var request = twitter.request("GET", "/1/statuses/filter.json?track=" + KEYWORD, headers);
request.finish(function (response) {
response.setBodyEncoding("utf8");
response.addListener("body", function (chunk) {
// Send response to all connected clients
clients.each(function(c) {
c.send(chunk);
});
});
});
// Websocket TCP server
ws.createServer(function (websocket) {
clients.push(websocket);
websocket.addListener("connect", function (resource) {
// emitted after handshake
sys.debug("connect: " + resource);
}).addListener("close", function () {
// emitted when server or client closes connection
clients.remove(websocket);
sys.debug("close");
});
}).listen(8080);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment