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', nargs='?')
20 parser.add_argument('destination', nargs='?')
22 args = parser.parse_args()
25 args.origin = raw_input('Origin: ')
27 if not args.destination:
28 args.destination = raw_input('Destination: ')
30 print >>sys.stderr, 'Searching...',
31 html = search((args.origin, args.ot), (args.destination, args.dt)).read()
32 print >>sys.stderr, 'done.'
34 parser = sParser(html)
35 state = parser.check_page()
37 if state == PageType.CORRECTION:
39 cor = parser.get_correction()
42 print '* Origin ambiguous:'
44 while not lo or not lo.isdigit() or int(lo) > len(cor[0]):
47 print '%d. %s' % (i, c)
49 lo = sys.stdin.readline().strip()
51 args.origin = cor[0][int(lo) - 1]
55 print '* Destination ambiguous:'
57 while not ld or not ld.isdigit() or int(ld) > len(cor[1]):
60 print '%d. %s' % (j, c)
62 ld = sys.stdin.readline().strip()
64 args.destination = cor[1][int(ld) - 1]
66 html = search((args.origin.encode('UTF-8'), args.ot), (args.destination.encode('UTF-8'), args.dt)).read()
68 parser = sParser(html)
69 state = parser.check_page()
72 print 'PANIC at correction page'
74 if state == PageType.RESULT:
75 parser = rParser(html)
77 overviews = parser.overview
78 details = parser.details
81 for idx, overview in enumerate(overviews):
82 if not overview['date'] or not overview['time']:
83 # XXX: Bogus data for e.g. Pilgramgasse->Karlsplatz?!
86 print '%d. [%s] %s-%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['time'] and detail['station']:
99 time = '%s - %s' % (detail['time'][0].strftime(TIMEFORMAT), detail['time'][1].strftime(TIMEFORMAT))
100 print '[%s] %s\n%s' % (time, ' -> '.join(detail['station']), '\n'.join(detail['info']))
102 print '\n'.join(detail['info'])
109 elif state == PageType.UNKNOWN:
110 print 'PANIC unknown result'