Преглед на файлове

[enh] display number of results

Adam Tauber преди 8 години
родител
ревизия
2f7752b410
променени са 5 файла, в които са добавени 31 реда и са изтрити 6 реда
  1. 6
    4
      searx/engines/bing.py
  2. 7
    0
      searx/engines/yahoo.py
  3. 4
    0
      searx/results.py
  4. 10
    0
      searx/templates/oscar/results.html
  5. 4
    2
      searx/webapp.py

+ 6
- 4
searx/engines/bing.py Целия файл

@@ -54,6 +54,12 @@ def response(resp):
54 54
 
55 55
     dom = html.fromstring(resp.text)
56 56
 
57
+    try:
58
+        results.append({'number_of_results': int(dom.xpath('//span[@class="sb_count"]/text()')[0]
59
+                                                 .split()[0].replace(',', ''))})
60
+    except:
61
+        pass
62
+
57 63
     # parse results
58 64
     for result in dom.xpath('//div[@class="sa_cc"]'):
59 65
         link = result.xpath('.//h3/a')[0]
@@ -66,10 +72,6 @@ def response(resp):
66 72
                         'title': title,
67 73
                         'content': content})
68 74
 
69
-    # return results if something is found
70
-    if results:
71
-        return results
72
-
73 75
     # parse results again if nothing is found yet
74 76
     for result in dom.xpath('//li[@class="b_algo"]'):
75 77
         link = result.xpath('.//h2/a')[0]

+ 7
- 0
searx/engines/yahoo.py Целия файл

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

+ 4
- 0
searx/results.py Целия файл

@@ -99,6 +99,7 @@ class ResultContainer(object):
99 99
         self._infobox_ids = {}
100 100
         self.suggestions = set()
101 101
         self.answers = set()
102
+        self.number_of_results = 0
102 103
 
103 104
     def extend(self, engine_name, results):
104 105
         for result in list(results):
@@ -111,6 +112,9 @@ class ResultContainer(object):
111 112
             elif 'infobox' in result:
112 113
                 self._merge_infobox(result)
113 114
                 results.remove(result)
115
+            elif 'number_of_results' in result:
116
+                self.number_of_results = max(self.number_of_results, result['number_of_results'])
117
+                results.remove(result)
114 118
 
115 119
         with RLock():
116 120
             engines[engine_name].stats['search_count'] += 1

+ 10
- 0
searx/templates/oscar/results.html Целия файл

@@ -78,6 +78,16 @@
78 78
         </div><!-- /#main_results -->
79 79
 
80 80
         <div class="col-sm-4" id="sidebar_results">
81
+            {% if number_of_results %}
82
+            <div class="panel panel-default">
83
+                <div class="panel-heading">
84
+                    <h4 class="panel-title">{{ _('Number of results') }}</h4>
85
+                </div>
86
+                <div class="panel-body">
87
+                    {{ number_of_results }}
88
+                </div>
89
+            </div>
90
+            {% endif %}
81 91
             {% if infoboxes %}
82 92
                 {% for infobox in infoboxes %}
83 93
                     {% include 'oscar/infobox.html' %}

+ 4
- 2
searx/webapp.py Целия файл

@@ -48,7 +48,7 @@ from flask import (
48 48
     Flask, request, render_template, url_for, Response, make_response,
49 49
     redirect, send_from_directory
50 50
 )
51
-from flask.ext.babel import Babel, gettext, format_date
51
+from flask.ext.babel import Babel, gettext, format_date, format_decimal
52 52
 from flask.json import jsonify
53 53
 from searx import settings, searx_dir
54 54
 from searx.engines import (
@@ -420,6 +420,7 @@ def index():
420 420
 
421 421
     if search.request_data.get('format') == 'json':
422 422
         return Response(json.dumps({'query': search.query,
423
+                                    'number_of_results': search.result_container.number_of_results,
423 424
                                     'results': search.result_container.get_ordered_results()}),
424 425
                         mimetype='application/json')
425 426
     elif search.request_data.get('format') == 'csv':
@@ -439,7 +440,7 @@ def index():
439 440
             'opensearch_response_rss.xml',
440 441
             results=search.result_container.get_ordered_results(),
441 442
             q=search.request_data['q'],
442
-            number_of_results=search.result_container.results_length(),
443
+            number_of_results=search.result_container.number_of_results,
443 444
             base_url=get_base_url()
444 445
         )
445 446
         return Response(response_rss, mimetype='text/xml')
@@ -450,6 +451,7 @@ def index():
450 451
         q=search.request_data['q'],
451 452
         selected_categories=search.categories,
452 453
         paging=search.paging,
454
+        number_of_results=format_decimal(search.result_container.number_of_results),
453 455
         pageno=search.pageno,
454 456
         base_url=get_base_url(),
455 457
         suggestions=search.result_container.suggestions,