diff options
| author | asciimoo <asciimoo@gmail.com> | 2014-01-14 18:17:19 +0100 |
|---|---|---|
| committer | asciimoo <asciimoo@gmail.com> | 2014-01-14 18:17:19 +0100 |
| commit | 9cb744f440f72e3a4a5c1eb3e4b8a3daf88299a7 (patch) | |
| tree | 4b5c9e3b8fcc52e03e2a269b83a3c9c0609a5a30 /searx/webapp.py | |
| parent | 467ab3791f4363c3a7e5cb70acf326729a595486 (diff) | |
[enh] opensearch/rss support part I.
Diffstat (limited to 'searx/webapp.py')
| -rw-r--r-- | searx/webapp.py | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/searx/webapp.py b/searx/webapp.py index 606e109b9..f4654324f 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -36,6 +36,7 @@ from searx.utils import highlight_content, html_to_text app = Flask(__name__) app.secret_key = settings.secret_key + opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>searx</ShortName> @@ -48,6 +49,18 @@ opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?> </OpenSearchDescription> ''' + +def get_base_url(): + if settings.base_url: + hostname = settings.base_url + else: + scheme = 'http' + if request.is_secure: + scheme = 'https' + hostname = url_for('index', _external=True, _scheme=scheme) + return hostname + + def render(template_name, **kwargs): global categories kwargs['categories'] = sorted(categories.keys()) @@ -69,7 +82,8 @@ def parse_query(query): query = query.replace(query_parts[0], '', 1).strip() return query, query_engines -@app.route('/', methods=['GET', 'POST']) + +@APp.route('/', methods=['GET', 'POST']) def index(): global categories @@ -132,6 +146,17 @@ def index(): response = Response(csv.stream.read(), mimetype='application/csv') response.headers.add('Content-Disposition', 'attachment;Filename=searx_-_{0}.csv'.format('_'.join(query.split()))) return response + elif request_data.get('format') == 'rss': + response_rss = render('opensearch_response_rss.xml' + ,results=results + ,q=request_data['q'] + ,number_of_results=len(results) + ,base_url=get_base_url() + ) + response = Response(response_rss, mimetype='application/xml') + response.headers.add('Content-Disposition', 'attachment;Filename=searx_-_{0}.xml'.format('_'.join(query.split()))) + return response + return render('results.html' ,results=results @@ -187,17 +212,11 @@ Disallow: /stats def opensearch(): global opensearch_xml method = 'post' - scheme = 'http' # chrome/chromium only supports HTTP GET.... if request.headers.get('User-Agent', '').lower().find('webkit') >= 0: method = 'get' - if request.is_secure: - scheme = 'https' - if settings.base_url: - hostname = settings.base_url - else: - hostname = url_for('index', _external=True, _scheme=scheme) - ret = opensearch_xml.format(method=method, host=hostname) + base_url = get_base_url() + ret = opensearch_xml.format(method=method, host=base_url) resp = Response(response=ret, status=200, mimetype="application/xml") |