mirror of
https://github.com/searxng/searxng.git
synced 2024-12-23 01:36:29 +00:00
[enh] add routing directions to osm search - closes #254
This commit is contained in:
parent
785f0938fd
commit
2c6531b233
6 changed files with 38 additions and 12 deletions
|
@ -10,7 +10,9 @@
|
|||
@parse url, title
|
||||
"""
|
||||
|
||||
import re
|
||||
from json import loads
|
||||
from flask_babel import gettext
|
||||
|
||||
# engine dependent config
|
||||
categories = ['map']
|
||||
|
@ -21,10 +23,15 @@ base_url = 'https://nominatim.openstreetmap.org/'
|
|||
search_string = 'search/{query}?format=json&polygon_geojson=1&addressdetails=1'
|
||||
result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'
|
||||
|
||||
route_url = 'https://graphhopper.com/maps/?point={}&point={}&locale=en-US&vehicle=car&weighting=fastest&turn_costs=true&use_miles=false&layer=Omniscale'
|
||||
route_re = re.compile('(?:from )?(.+) to (.+)')
|
||||
|
||||
|
||||
# do search-request
|
||||
def request(query, params):
|
||||
|
||||
params['url'] = base_url + search_string.format(query=query.decode('utf-8'))
|
||||
params['route'] = route_re.match(query.decode('utf-8'))
|
||||
|
||||
return params
|
||||
|
||||
|
@ -34,6 +41,13 @@ def response(resp):
|
|||
results = []
|
||||
json = loads(resp.text)
|
||||
|
||||
|
||||
if resp.search_params['route']:
|
||||
results.append({
|
||||
'answer': gettext('Get directions'),
|
||||
'url': route_url.format(*resp.search_params['route'].groups()),
|
||||
})
|
||||
|
||||
# parse results
|
||||
for r in json:
|
||||
if 'display_name' not in r:
|
||||
|
|
|
@ -37,10 +37,8 @@ def post_search(request, search):
|
|||
ip = x_forwarded_for[0]
|
||||
else:
|
||||
ip = request.remote_addr
|
||||
search.result_container.answers.clear()
|
||||
search.result_container.answers.add(ip)
|
||||
search.result_container.answers['ip'] = {'answer': ip}
|
||||
elif p.match(search.search_query.query):
|
||||
ua = request.user_agent
|
||||
search.result_container.answers.clear()
|
||||
search.result_container.answers.add(ua)
|
||||
search.result_container.answers['user-agent'] = {'answer': ua}
|
||||
return True
|
||||
|
|
|
@ -131,7 +131,7 @@ class ResultContainer(object):
|
|||
self._merged_results = []
|
||||
self.infoboxes = []
|
||||
self.suggestions = set()
|
||||
self.answers = set()
|
||||
self.answers = {}
|
||||
self.corrections = set()
|
||||
self._number_of_results = []
|
||||
self._ordered = False
|
||||
|
@ -146,7 +146,7 @@ class ResultContainer(object):
|
|||
self.suggestions.add(result['suggestion'])
|
||||
results.remove(result)
|
||||
elif 'answer' in result:
|
||||
self.answers.add(result['answer'])
|
||||
self.answers[result['answer']] = result
|
||||
results.remove(result)
|
||||
elif 'correction' in result:
|
||||
self.corrections.add(result['correction'])
|
||||
|
|
|
@ -33,8 +33,12 @@
|
|||
|
||||
{% if answers %}
|
||||
<div id="answers"><span>{{ _('Answers') }}</span>
|
||||
{% for answer in answers %}
|
||||
<span>{{ answer }}</span>
|
||||
{% for answer in answers.values() %}
|
||||
{% if answer.url %}
|
||||
<a href="{{ answer.url }}">{{ answer.answer }}</a>
|
||||
{% else %}
|
||||
<span>{{ answer.answer }}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -94,9 +94,13 @@
|
|||
{%- endif %}
|
||||
|
||||
{% if answers -%}
|
||||
{%- for answer in answers %}
|
||||
{%- for answer in answers.values() %}
|
||||
<div class="result well">
|
||||
<span>{{ answer }}</span>
|
||||
{% if answer.url %}
|
||||
<a href="{{ answer.url }}">{{ answer.answer }}</a>
|
||||
{% else %}
|
||||
<span>{{ answer.answer }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
{%- endfor %}
|
||||
{%- endif %}
|
||||
|
|
|
@ -15,8 +15,14 @@
|
|||
<div id="results" class="{{ only_template }}">
|
||||
{% if answers -%}
|
||||
<div id="answers"><h4 class="title">{{ _('Answers') }} : </h4>
|
||||
{%- for answer in answers -%}
|
||||
<div class="answer">{{- answer -}}</div>
|
||||
{%- for answer in answers.values() -%}
|
||||
<div class="answer">
|
||||
{% if answer.url %}
|
||||
<a href="{{ answer.url }}">{{ answer.answer }}</a>
|
||||
{% else %}
|
||||
<span>{{ answer.answer }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
{%- endfor -%}
|
||||
</div>
|
||||
{%- endif %}
|
||||
|
|
Loading…
Reference in a new issue