2 # -*- coding: UTF-8 -*-
4 from BeautifulSoup import BeautifulSoup, NavigableString
5 from urllib2 import urlopen
6 from urllib import urlencode
8 from datetime import datetime, time
9 from textwrap import wrap
14 from gotovienna.routing import *
16 parser = argparse.ArgumentParser(description='Get public transport route for Vienna')
17 parser.add_argument('-ot', metavar='type', type=str, help='origin type: %s' % ' | '.join(POSITION_TYPES), default='stop', choices=POSITION_TYPES)
18 parser.add_argument('-dt', metavar='type', type=str, help='destination type: %s' % ' | '.join(POSITION_TYPES), default='stop', choices=POSITION_TYPES)
19 parser.add_argument('origin')
20 parser.add_argument('destination')
22 args = parser.parse_args()
23 html = search((args.origin, args.ot), (args.destination, args.dt)).read()
25 parser = sParser(html)
26 state = parser.check_page()
28 if state == PageType.CORRECTION:
30 cor = parser.get_correction()
33 print '* Origin ambiguous:'
35 while not lo or not lo.isdigit() or int(lo) > len(cor[0]):
38 print '%d. %s' % (i, c)
40 lo = sys.stdin.readline().strip()
42 args.origin = cor[0][int(lo) - 1]
46 print '* Destination ambiguous:'
48 while not ld or not ld.isdigit() or int(ld) > len(cor[1]):
51 print '%d. %s' % (j, c)
53 ld = sys.stdin.readline().strip()
55 args.destination = cor[1][int(ld) - 1]
57 html = search((args.origin.encode('UTF-8'), args.ot), (args.destination.encode('UTF-8'), args.dt)).read()
59 parser = sParser(html)
60 state = parser.check_page()
63 print 'PANIC at correction page'
65 if state == PageType.RESULT:
66 parser = rParser(html)
68 overviews = parser.overview
69 details = parser.details
72 for idx, overview in enumerate(overviews):
73 if not overview['date'] or not overview['time']:
74 # XXX: Bogus data for e.g. Pilgramgasse->Karlsplatz?!
77 print '%d. [%s] %s-%s (%s)' % (idx + 1,
83 l = sys.stdin.readline().strip()
87 if l.isdigit() and int(l) <= len(details):
88 for detail in details[int(l) - 1]:
89 if detail['time'] and detail['station']:
90 time = '%s - %s' % (detail['time'][0].strftime(TIMEFORMAT), detail['time'][1].strftime(TIMEFORMAT))
91 print '[%s] %s\n%s' % (time, ' -> '.join(detail['station']), '\n'.join(detail['info']))
93 print '\n'.join(detail['info'])
100 elif state == PageType.UNKNOWN:
101 print 'PANIC unknown result'