|
@@ -36,6 +36,7 @@ from searx.utils import highlight_content, html_to_text
|
36
|
36
|
app = Flask(__name__)
|
37
|
37
|
app.secret_key = settings.secret_key
|
38
|
38
|
|
|
39
|
+
|
39
|
40
|
opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
|
40
|
41
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
41
|
42
|
<ShortName>searx</ShortName>
|
|
@@ -48,6 +49,18 @@ opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
|
48
|
49
|
</OpenSearchDescription>
|
49
|
50
|
'''
|
50
|
51
|
|
|
52
|
+
|
|
53
|
+def get_base_url():
|
|
54
|
+ if settings.base_url:
|
|
55
|
+ hostname = settings.base_url
|
|
56
|
+ else:
|
|
57
|
+ scheme = 'http'
|
|
58
|
+ if request.is_secure:
|
|
59
|
+ scheme = 'https'
|
|
60
|
+ hostname = url_for('index', _external=True, _scheme=scheme)
|
|
61
|
+ return hostname
|
|
62
|
+
|
|
63
|
+
|
51
|
64
|
def render(template_name, **kwargs):
|
52
|
65
|
global categories
|
53
|
66
|
kwargs['categories'] = sorted(categories.keys())
|
|
@@ -69,7 +82,8 @@ def parse_query(query):
|
69
|
82
|
query = query.replace(query_parts[0], '', 1).strip()
|
70
|
83
|
return query, query_engines
|
71
|
84
|
|
72
|
|
-@app.route('/', methods=['GET', 'POST'])
|
|
85
|
+
|
|
86
|
+@APp.route('/', methods=['GET', 'POST'])
|
73
|
87
|
def index():
|
74
|
88
|
global categories
|
75
|
89
|
|
|
@@ -132,6 +146,17 @@ def index():
|
132
|
146
|
response = Response(csv.stream.read(), mimetype='application/csv')
|
133
|
147
|
response.headers.add('Content-Disposition', 'attachment;Filename=searx_-_{0}.csv'.format('_'.join(query.split())))
|
134
|
148
|
return response
|
|
149
|
+ elif request_data.get('format') == 'rss':
|
|
150
|
+ response_rss = render('opensearch_response_rss.xml'
|
|
151
|
+ ,results=results
|
|
152
|
+ ,q=request_data['q']
|
|
153
|
+ ,number_of_results=len(results)
|
|
154
|
+ ,base_url=get_base_url()
|
|
155
|
+ )
|
|
156
|
+ response = Response(response_rss, mimetype='application/xml')
|
|
157
|
+ response.headers.add('Content-Disposition', 'attachment;Filename=searx_-_{0}.xml'.format('_'.join(query.split())))
|
|
158
|
+ return response
|
|
159
|
+
|
135
|
160
|
|
136
|
161
|
return render('results.html'
|
137
|
162
|
,results=results
|
|
@@ -187,17 +212,11 @@ Disallow: /stats
|
187
|
212
|
def opensearch():
|
188
|
213
|
global opensearch_xml
|
189
|
214
|
method = 'post'
|
190
|
|
- scheme = 'http'
|
191
|
215
|
# chrome/chromium only supports HTTP GET....
|
192
|
216
|
if request.headers.get('User-Agent', '').lower().find('webkit') >= 0:
|
193
|
217
|
method = 'get'
|
194
|
|
- if request.is_secure:
|
195
|
|
- scheme = 'https'
|
196
|
|
- if settings.base_url:
|
197
|
|
- hostname = settings.base_url
|
198
|
|
- else:
|
199
|
|
- hostname = url_for('index', _external=True, _scheme=scheme)
|
200
|
|
- ret = opensearch_xml.format(method=method, host=hostname)
|
|
218
|
+ base_url = get_base_url()
|
|
219
|
+ ret = opensearch_xml.format(method=method, host=base_url)
|
201
|
220
|
resp = Response(response=ret,
|
202
|
221
|
status=200,
|
203
|
222
|
mimetype="application/xml")
|