[enh] display number of results

This commit is contained in:
Adam Tauber 2016-06-28 00:06:50 +02:00
parent 36c8977390
commit 2f7752b410
5 changed files with 31 additions and 6 deletions

View File

@ -54,6 +54,12 @@ def response(resp):
dom = html.fromstring(resp.text) dom = html.fromstring(resp.text)
try:
results.append({'number_of_results': int(dom.xpath('//span[@class="sb_count"]/text()')[0]
.split()[0].replace(',', ''))})
except:
pass
# parse results # parse results
for result in dom.xpath('//div[@class="sa_cc"]'): for result in dom.xpath('//div[@class="sa_cc"]'):
link = result.xpath('.//h3/a')[0] link = result.xpath('.//h3/a')[0]
@ -66,10 +72,6 @@ def response(resp):
'title': title, 'title': title,
'content': content}) 'content': content})
# return results if something is found
if results:
return results
# parse results again if nothing is found yet # parse results again if nothing is found yet
for result in dom.xpath('//li[@class="b_algo"]'): for result in dom.xpath('//li[@class="b_algo"]'):
link = result.xpath('.//h2/a')[0] link = result.xpath('.//h2/a')[0]

View File

@ -77,6 +77,13 @@ def response(resp):
dom = html.fromstring(resp.text) dom = html.fromstring(resp.text)
try:
results_num = int(dom.xpath('//div[@class="compPagination"]/span[last()]/text()')[0]
.split()[0].replace(',', ''))
results.append({'number_of_results': results_num})
except:
pass
# parse results # parse results
for result in dom.xpath(results_xpath): for result in dom.xpath(results_xpath):
try: try:

View File

@ -99,6 +99,7 @@ class ResultContainer(object):
self._infobox_ids = {} self._infobox_ids = {}
self.suggestions = set() self.suggestions = set()
self.answers = set() self.answers = set()
self.number_of_results = 0
def extend(self, engine_name, results): def extend(self, engine_name, results):
for result in list(results): for result in list(results):
@ -111,6 +112,9 @@ class ResultContainer(object):
elif 'infobox' in result: elif 'infobox' in result:
self._merge_infobox(result) self._merge_infobox(result)
results.remove(result) results.remove(result)
elif 'number_of_results' in result:
self.number_of_results = max(self.number_of_results, result['number_of_results'])
results.remove(result)
with RLock(): with RLock():
engines[engine_name].stats['search_count'] += 1 engines[engine_name].stats['search_count'] += 1

View File

@ -78,6 +78,16 @@
</div><!-- /#main_results --> </div><!-- /#main_results -->
<div class="col-sm-4" id="sidebar_results"> <div class="col-sm-4" id="sidebar_results">
{% if number_of_results %}
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">{{ _('Number of results') }}</h4>
</div>
<div class="panel-body">
{{ number_of_results }}
</div>
</div>
{% endif %}
{% if infoboxes %} {% if infoboxes %}
{% for infobox in infoboxes %} {% for infobox in infoboxes %}
{% include 'oscar/infobox.html' %} {% include 'oscar/infobox.html' %}

View File

@ -48,7 +48,7 @@ from flask import (
Flask, request, render_template, url_for, Response, make_response, Flask, request, render_template, url_for, Response, make_response,
redirect, send_from_directory redirect, send_from_directory
) )
from flask.ext.babel import Babel, gettext, format_date from flask.ext.babel import Babel, gettext, format_date, format_decimal
from flask.json import jsonify from flask.json import jsonify
from searx import settings, searx_dir from searx import settings, searx_dir
from searx.engines import ( from searx.engines import (
@ -420,6 +420,7 @@ def index():
if search.request_data.get('format') == 'json': if search.request_data.get('format') == 'json':
return Response(json.dumps({'query': search.query, return Response(json.dumps({'query': search.query,
'number_of_results': search.result_container.number_of_results,
'results': search.result_container.get_ordered_results()}), 'results': search.result_container.get_ordered_results()}),
mimetype='application/json') mimetype='application/json')
elif search.request_data.get('format') == 'csv': elif search.request_data.get('format') == 'csv':
@ -439,7 +440,7 @@ def index():
'opensearch_response_rss.xml', 'opensearch_response_rss.xml',
results=search.result_container.get_ordered_results(), results=search.result_container.get_ordered_results(),
q=search.request_data['q'], q=search.request_data['q'],
number_of_results=search.result_container.results_length(), number_of_results=search.result_container.number_of_results,
base_url=get_base_url() base_url=get_base_url()
) )
return Response(response_rss, mimetype='text/xml') return Response(response_rss, mimetype='text/xml')
@ -450,6 +451,7 @@ def index():
q=search.request_data['q'], q=search.request_data['q'],
selected_categories=search.categories, selected_categories=search.categories,
paging=search.paging, paging=search.paging,
number_of_results=format_decimal(search.result_container.number_of_results),
pageno=search.pageno, pageno=search.pageno,
base_url=get_base_url(), base_url=get_base_url(),
suggestions=search.result_container.suggestions, suggestions=search.result_container.suggestions,