diff --git a/searx/templates/__common__/opensearch_response_rss.xml b/searx/templates/__common__/opensearch_response_rss.xml index 32c42e7c..3781dd87 100644 --- a/searx/templates/__common__/opensearch_response_rss.xml +++ b/searx/templates/__common__/opensearch_response_rss.xml @@ -25,5 +25,29 @@ {% if r.pubdate %}{{ r.pubdate }}{% endif %} {% endfor %} + {% if answers %} + {% for a in answers %} + + {{ a }} + answer + + {% endfor %} + {% endif %} + {% if corrections %} + {% for a in corrections %} + + {{ a }} + correction + + {% endfor %} + {% endif %} + {% if suggestions %} + {% for a in suggestions %} + + {{ a }} + suggestion + + {% endfor %} + {% endif %} diff --git a/searx/webapp.py b/searx/webapp.py index b661e39d..0c5ed457 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -626,20 +626,34 @@ def index(): mimetype='application/json') elif output_format == 'csv': csv = UnicodeWriter(StringIO()) - keys = ('title', 'url', 'content', 'host', 'engine', 'score') + keys = ('title', 'url', 'content', 'host', 'engine', 'score', 'type') csv.writerow(keys) for row in results: row['host'] = row['parsed_url'].netloc + row['type'] = 'result' + csv.writerow([row.get(key, '') for key in keys]) + for a in result_container.answers: + row = {'title': a, 'type': 'answer'} + csv.writerow([row.get(key, '') for key in keys]) + for a in result_container.suggestions: + row = {'title': a, 'type': 'suggestion'} + csv.writerow([row.get(key, '') for key in keys]) + for a in result_container.corrections: + row = {'title': a, 'type': 'correction'} csv.writerow([row.get(key, '') for key in keys]) csv.stream.seek(0) response = Response(csv.stream.read(), mimetype='application/csv') - cont_disp = 'attachment;Filename=searx_-_{0}.csv'.format(search_query.query) + cont_disp = 'attachment;Filename=searx_-_{0}.csv'.format(search_query.query.decode('utf-8')) response.headers.add('Content-Disposition', cont_disp) return response elif output_format == 'rss': + print(results) response_rss = render( 'opensearch_response_rss.xml', results=results, + answers=result_container.answers, + corrections=result_container.corrections, + suggestions=result_container.suggestions, q=request.form['q'], number_of_results=number_of_results, base_url=get_base_url(), diff --git a/tests/unit/test_webapp.py b/tests/unit/test_webapp.py index 72ace485..f31332fa 100644 --- a/tests/unit/test_webapp.py +++ b/tests/unit/test_webapp.py @@ -99,9 +99,9 @@ class ViewsTestCase(SearxTestCase): result = self.app.post('/', data={'q': 'test', 'format': 'csv'}) self.assertEqual( - b'title,url,content,host,engine,score\r\n' - b'First Test,http://first.test.xyz,first test content,first.test.xyz,startpage,\r\n' # noqa - b'Second Test,http://second.test.xyz,second test content,second.test.xyz,youtube,\r\n', # noqa + b'title,url,content,host,engine,score,type\r\n' + b'First Test,http://first.test.xyz,first test content,first.test.xyz,startpage,,result\r\n' # noqa + b'Second Test,http://second.test.xyz,second test content,second.test.xyz,youtube,,result\r\n', # noqa result.data )