#!/usr/bin/env python # -*- encoding: utf-8 -*- # -*- vim: set encoding=utf8 -*- # lisens: gpl v2 # copyright 2009 havard@gulldahl.no import sys, cgi from xml.etree.cElementTree import ElementTree as et import urllib, re from datetime import datetime 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 past(self): return self.updated > self.scheduled_time() def other_airport(self): if self.direction == "a": return self.from_airport else: return 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 "Error" 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 """ Flyplassinfo """ def print_foot(): print "" def print_airport(airport, direction): print "" % ({'d':'avganger', 'a':'ankomster'}.get(direction), airport) print "" #for f in [ parse_airport(airport, d) for d in ('a', 'd')]: for f in parse_airport(airport, direction): #for f in flight_list: print ("" % \ ( {False:'no-delay', True:'delayed'}.get(f.delayed), {True:'past',}.get(f.past(), ''), f.flight_id, f.other_airport(), f.new_time(), f.status, )).encode('utf8') print "
%s ved %s
FLIGHTFRA/TILRUTETIDFORSINKELSE
%s%s%s%s
" print_head() print_airport(TOS, 'a') print_airport(TOS, 'd') print_airport(EVENES, 'a') print_airport(EVENES, 'd') print_foot()