2 # -*- coding: UTF-8 -*-
6 from gotovienna import argparse
7 from gotovienna.utils import *
8 from gotovienna.routing import *
10 parser = argparse.ArgumentParser(description='Get public transport route for Vienna')
11 parser.add_argument('-ot', metavar='type', type=str,
12 help='origin type: %s' % ' | '.join(POSITION_TYPES),
13 default=None, choices=POSITION_TYPES)
14 parser.add_argument('-dt', metavar='type', type=str,
15 help='destination type: %s' % ' | '.join(POSITION_TYPES),
16 default=None, choices=POSITION_TYPES)
17 parser.add_argument('origin', nargs='?',
18 help='origin station name')
19 parser.add_argument('destination', nargs='?',
20 help='destination station name')
22 args = parser.parse_args()
25 args.origin = raw_input('Origin: ')
27 if not args.destination:
28 args.destination = raw_input('Destination: ')
31 if isinstance(args.origin, unicode):
32 args.origin = args.origin.encode('utf-8', 'ignore')
33 elif isinstance(args.destination, unicode):
34 args.destination = args.destination.encode('utf-8', 'ignore')
36 result = search((args.origin, args.ot),
37 (args.destination, args.dt))
39 return sParser(result.read())
41 print >>sys.stderr, 'Searching...\n',
42 parser = do_search(args)
43 print >>sys.stderr, 'done.'
45 while parser.state == PageType.CORRECTION:
46 origin_corr, destination_corr = parser.get_correction()
50 print '* Origin ambiguous:'
52 while not lo or not lo.isdigit() or int(lo) > len(origin_corr):
53 for idx, correction in enumerate(origin_corr):
54 print '%3d. %s' % (idx+1, correction)
55 lo = sys.stdin.readline().strip()
57 args.origin = origin_corr[int(lo) - 1]
61 print '* Destination ambiguous:'
63 while not ld or not ld.isdigit() or int(ld) > len(destination_corr):
64 for idx, correction in enumerate(destination_corr):
65 print '%3d. %s' % (idx+1, correction)
66 ld = sys.stdin.readline().strip()
68 args.destination = destination_corr[int(ld) - 1]
70 parser = do_search(args)
72 if parser.state == PageType.RESULT:
73 parser = parser.get_result()
74 overviews = parser.overview
75 details = parser.details
78 for idx, overview in enumerate(overviews):
79 timespan = overview['timespan']
81 # XXX: Bogus data for e.g. Pilgramgasse->Karlsplatz?!
84 str_timespan = timespan[0].strftime('[%Y-%d-%m] %H:%M')
85 str_timespan += '-' + timespan[1].strftime('%H:%M')
86 timedelta = timespan[1] - timespan[0]
87 print '%d. %s (%s)' % (idx + 1,
92 l = sys.stdin.readline().strip()
96 if l.isdigit() and int(l) <= len(details):
97 for detail in details[int(l) - 1]:
98 if detail['timespan'] and detail['station']:
99 time = '%s - %s' % (detail['timespan'][0].strftime(TIMEFORMAT),
100 detail['timespan'][1].strftime(TIMEFORMAT))
101 print '[%s] %s\n%s' % (time,
102 ' -> '.join(detail['station']),
103 '\n'.join(detail['info']))
105 print '\n'.join(detail['info'])
109 print 'Error - unknown page returned.'