@@ -10,7 +10,9 @@
1010 @parse url, title
1111"""
1212
13+import re
1314from json import loads
15+from flask_babel import gettext
1416
1517# engine dependent config
1618categories = ['map']
@@ -21,10 +23,15 @@ base_url = 'https://nominatim.openstreetmap.org/'
2123search_string = 'search/{query}?format=json&polygon_geojson=1&addressdetails=1'
2224result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'
2325
26+route_url = 'https://graphhopper.com/maps/?point={}&point={}&locale=en-US&vehicle=car&weighting=fastest&turn_costs=true&use_miles=false&layer=Omniscale'
27+route_re = re.compile('(?:from )?(.+) to (.+)')
28+
2429
2530# do search-request
2631def request(query, params):
32+
2733 params['url'] = base_url + search_string.format(query=query.decode('utf-8'))
34+ params['route'] = route_re.match(query.decode('utf-8'))
2835
2936 return params
3037
@@ -34,6 +41,13 @@ def response(resp):
3441 results = []
3542 json = loads(resp.text)
3643
44+
45+ if resp.search_params['route']:
46+ results.append({
47+ 'answer': gettext('Get directions'),
48+ 'url': route_url.format(*resp.search_params['route'].groups()),
49+ })
50+
3751 # parse results
3852 for r in json:
3953 if 'display_name' not in r: