Language: Javascript (View Plain Text)
March 19, 2010 5:59 am
var sys = require('sys') var http = require('http'); (function(options) { var arrivingFlights = new Array(); var util = { trim: function( text ) { return (text || "").replace( rtrim, "" ); }}; var rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g var baseUrl = "/go/weblet?guid=c228b59beca1b817:44617f82:117d601a4c6:221f&weblet=status&action=AirportFlightStatus&airportCode=USM&airportQueryType=1"; var host = "www.flightstats.com"; var refer = "http://www.samuiairportonline.com/flight-status"; var userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6"; var retrieve = function(url,complete) { var flightStat = http.createClient(80, host); var request = flightStat.request("GET", url, {"Host": host , "Referer": refer , "User-Agent": userAgent }); request.addListener('response', function(response) { response.setBodyEncoding("utf8"); var body = ""; response.addListener('data', function(chunk) { body += chunk; }); response.addListener('end', function() { complete(body); }); }); request.close(); } var updateFlightTimes = function() { var completedCounter = 0; // reset var lastArrivingFlights = new Array(); // copy over the global collection only after all 8 result sets have returned var completed = function() { if(completedCounter++ && completedCounter == 8 ) arrivingFlights = lastArrivingFlights; }; var processTable = function(page) { var tableContent = page.match(/class="tableListingTable"[^>]+>([^]*)<\/table>/gmi)[0]; var rowRegExp = /<tr>\s*?<td[^>]*?>\s*?<a[^>]*?>([^<]*?)<\/a>\s*?(?:<span[^>]*>.*?<\/span>)?\s*?<\/td>\s*?<td[^>]*?>([^<]*?)<\/td>\s*?<td[^>]*?>\s*?\(\s*?<a[^>]*>.*?<\/a>\s*?\)([^<]*?)<\/td>\s*?<td[^>]*?>([^<]*?)</mgi; while(rowMatch = rowRegExp.exec(tableContent)) { lastArrivingFlights.push({ code: util.trim(rowMatch[1]), carrier: util.trim(rowMatch[2]), origin: util.trim(rowMatch[3]), arriveTime: util.trim(rowMatch[4]) }); } completed(); }; // full 24hr period - have to pull 8 pages back for(var i = 1; i <= 8; i++) { retrieve(baseUrl + "&airportQueryTimePeriod=" + i,processTable); } } updateFlightTimes(); setInterval(updateFlightTimes,options.updateInterval); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'application/json'}); res.write(JSON.stringify(arrivingFlights)); res.close(); }).listen(8000); })({ updateInterval: 300000 });