on master help sign in
[enh] suggestion support added
66ff28basciimoo
searx/engines/__init__.py+8−3
@@ -83,7 +83,7 @@ for engine_config_name in engines_config.sections():
83def default_request_params():
83def default_request_params():
84 return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}
84 return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}
85
85
86−def make_callback(engine_name, results, callback, params):
86+def make_callback(engine_name, results, suggestions, callback, params):
87 # creating a callback wrapper for the search engine results
87 # creating a callback wrapper for the search engine results
88 def process_callback(response, **kwargs):
88 def process_callback(response, **kwargs):
89 cb_res = []
89 cb_res = []
@@ -98,6 +98,10 @@ def make_callback(engine_name, results, callback, params):
98 return
98 return
99 for result in search_results:
99 for result in search_results:
100 result['engine'] = engine_name
100 result['engine'] = engine_name
101+ if 'suggestion' in result:
102+ # TODO type checks
103+ suggestions.add(result['suggestion'])
104+ continue
101 cb_res.append(result)
105 cb_res.append(result)
102 results[engine_name] = cb_res
106 results[engine_name] = cb_res
103 return process_callback
107 return process_callback
@@ -167,6 +171,7 @@ def search(query, request, selected_engines):
167 global engines, categories, number_of_searches
171 global engines, categories, number_of_searches
168 requests = []
172 requests = []
169 results = {}
173 results = {}
174+ suggestions = set()
170 number_of_searches += 1
175 number_of_searches += 1
171 user_agent = request.headers.get('User-Agent', '')
176 user_agent = request.headers.get('User-Agent', '')
172
177
@@ -182,7 +187,7 @@ def search(query, request, selected_engines):
182 request_params['started'] = datetime.now()
187 request_params['started'] = datetime.now()
183 request_params = engine.request(query, request_params)
188 request_params = engine.request(query, request_params)
184
189
185− callback = make_callback(selected_engine['name'], results, engine.response, request_params)
190+ callback = make_callback(selected_engine['name'], results, suggestions, engine.response, request_params)
186
191
187 request_args = dict(headers = request_params['headers']
192 request_args = dict(headers = request_params['headers']
188 ,hooks = dict(response=callback)
193 ,hooks = dict(response=callback)
@@ -214,7 +219,7 @@ def search(query, request, selected_engines):
214 for res_engine in result['engines']:
219 for res_engine in result['engines']:
215 engines[result['engine']].stats['score_count'] += result['score']
220 engines[result['engine']].stats['score_count'] += result['score']
216
221
217− return results
222+ return results, suggestions
218
223
219def get_engines_stats():
224def get_engines_stats():
220 pageloads = []
225 pageloads = []
searx/webapp.py+2−1
@@ -96,7 +96,7 @@ def index():
96 for categ in selected_categories:
96 for categ in selected_categories:
97 selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
97 selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
98
98
99− results = search(query, request, selected_engines)
99+ results, suggestions = search(query, request, selected_engines)
100 for result in results:
100 for result in results:
101 if len(result['url']) > 74:
101 if len(result['url']) > 74:
102 result['pretty_url'] = result['url'][:35] + '[..]' + result['url'][-35:]
102 result['pretty_url'] = result['url'][:35] + '[..]' + result['url'][-35:]
@@ -109,6 +109,7 @@ def index():
109 ,q=request_data['q']
109 ,q=request_data['q']
110 ,selected_categories=selected_categories
110 ,selected_categories=selected_categories
111 ,number_of_results=len(results)
111 ,number_of_results=len(results)
112+ ,suggestions=suggestions
112 )
113 )
113 resp = make_response(template)
114 resp = make_response(template)
114 resp.set_cookie('categories', ','.join(selected_categories))
115 resp.set_cookie('categories', ','.join(selected_categories))