diff trip2xml.py @ 2:e07789816ca5

adding more python files from lib/python on origen
author Henry Thompson <ht@markup.co.uk>
date Mon, 09 Mar 2020 16:48:09 +0000
parents
children 2d7c91f89f6b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trip2xml.py	Mon Mar 09 16:48:09 2020 +0000
@@ -0,0 +1,93 @@
+#!/usr/bin/python
+'''Convert a screen-scrape from Check My Trip to diary-style XML'''
+import re, sys, datetime
+year="2016"
+leg=re.compile(year+"TO")
+duration=re.compile("([0-9][0-9]) ([A-Za-z]*) %s .*duration"%year)
+plusOne=re.compile(" [+]1 day$")
+flight=re.compile("\\\\| *([^ ]*) *confirmed")
+dep=re.compile("^Dep: (.*)")
+arr=re.compile("^Arr: (.*)")
+CS=", "
+
+cleg=None
+class Leg:
+  def __init__(self):
+    self.flights=[]
+    self.p1=False
+    self.dd=None
+
+  def addFlight(self,flight):
+    self.flights.append(flight)
+
+  def setDD(self,m):
+    print 'sdd'
+    td="%s-%s-%s"%(year,m.group(2),m.group(1))
+    self.ddate=datetime.datetime.strptime(td,"%Y-%B-%d").date()
+    self.dd=self.ddate.isoformat()
+    if self.p1:
+      self.ads=" -- %s"%(self.ddate+datetime.timedelta(1)).isoformat()
+    else:
+      self.ads=""
+
+  def setPlusOne(self):
+    print 'p1'
+    self.p1=True
+
+  def __str__(self):
+    fa=self.flights[0].fa
+    ta=self.flights[-1].ta
+    if len(self.flights)>1:
+      va=" via "+CS.join([f.fa for f in self.flights[1:]])
+    else:
+      va=""
+    ff=CS.join([f.fn for f in self.flights])
+    tt=CS.join(["%s--%s"%(f.dt,f.at) for f in self.flights])
+    return "<item term='%s%s'>%s->%s%s; %s; %s</item>"%(self.dd,self.ads,fa,ta,va,ff,tt)
+
+class Flight():
+  def __init__(self,fn):
+    self.fn=fn # flight number
+
+  def setDep(self,ds):
+    dss=ds.split('|')
+    self.dt=dss[0][:2]+dss[0][3:5]
+    self.fa=dss[1].split()[-1]
+
+  def setArr(self,ax):
+    ass=ax.split('|')
+    self.at=ass[0][:2]+ass[0][3:5]
+    if (ass[0].find('(+1 day)')==6):
+      self.at+="+1"
+    self.ta=ass[1].split()[-1]
+    
+print "<list type='defn'>"
+for l in sys.stdin:
+  if leg.search(l):
+    if cleg is not None:
+      print cleg
+    cleg=Leg()
+  m = flight.search(l)
+  if m:
+    fl=Flight(m.group(1))
+    cleg.addFlight(fl)
+    continue
+  if ((cleg is not None) and
+      (cleg.dd is None)):
+    m=duration.search(l)
+    if m:
+      cleg.setDD(m)
+      continue
+  m=plusOne.search(l)
+  if m:
+    cleg.setPlusOne()
+    continue
+  m=dep.search(l)
+  if m:
+    fl.setDep(m.group(1))
+    continue
+  m=arr.search(l)
+  if m:
+    fl.setArr(m.group(1))
+print cleg
+print "</list>"