#!/usr/bin/env python # -*- encoding: utf-8 -*- # -*- vim: set encoding=utf8 -*- # lisens: gpl v2 # copyright 2009 havard@gulldahl.no import sys, urllib, re from xml.etree.cElementTree import ElementTree as et from datetime import datetime, timedelta URL="http://avinor.no/portlets/traffic/trafficSearch/trafficXml.jsp?ap=%(airport)s&type=%(direction)s" TOS="TOS" EVENES="EVE" rex = re.compile(r'^([^\d]+)(\d\d):(\d\d)$') class flight(object): direction = None flight_id = "" from_airport = "" to_airport ="" departure = -1 arrival = -1 status = "" carrier = "" delayed = False updated = None servertime = None _dateformat = "%Y%m%d%H%M" # 200901240530 def __init__(self, etree, direction, updated, servertime): self.direction = direction self.servertime = datetime.strptime(servertime, self._dateformat) h, m = map(int, updated.split(':')) self.updated = self.servertime.replace(hour=h, minute=m) self.flight_id = etree.find('fid').text self.from_airport = etree.find('f').text self.to_airport = etree.find('t').text self.departure = datetime.strptime(etree.find('d').text, self._dateformat) self.arrival = datetime.strptime(etree.find('a').text, self._dateformat) self.status = etree.find('s').text self.carrier = etree.find('al').text self.delayed = bool(int(etree.find('dc').text)) def delay(self): return self.new_time() - self.scheduled_time() def is_delayed(self): return self.delay() > timedelta(minutes=10) def past(self): return self.updated > self.scheduled_time() def other_airport(self): if self.direction == "a": return "Fra %s" % self.from_airport else: return "Til %s" % self.to_airport def new_time(self): #if not self.delayed: return self.scheduled_time() try: status, hours, minutes = rex.match(self.status).groups() except AttributeError: return self.scheduled_time() return self.scheduled_time().replace(hour=int(hours), minute=int(minutes)) def new_time_s(self): return self.new_time().strftime('%H:%M') def scheduled_time(self): if self.direction == "a": return self.arrival else: return self.departure def scheduled_time_s(self): return self.scheduled_time().strftime('%H:%M') def parse_airport(airport, direction): xml = et(file=urllib.urlopen(URL % {'airport':airport, 'direction':direction})) root = xml.getroot() updated = root.find('lastupdatetime').text servertime = root.find('currenttime').text for line in root.findall('fl'): yield flight(line, direction, updated, servertime) def print_head(): print "Content-type: text/html; encoding=utf8\r\n" print "\r\n" print """
| FLIGHT | FRA/TIL | RUTETID | FORSINKELSE |
|---|---|---|---|
| %s %s | %s | %s | %s minutter (%s) |