Quellcode durchsuchen

[enh] display number of results

Adam Tauber vor 8 Jahren
Ursprung
Commit
2f7752b410
5 geänderte Dateien mit 31 neuen und 6 gelöschten Zeilen
  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 Datei anzeigen

54
 
54
 
55
     dom = html.fromstring(resp.text)
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
     # parse results
63
     # parse results
58
     for result in dom.xpath('//div[@class="sa_cc"]'):
64
     for result in dom.xpath('//div[@class="sa_cc"]'):
59
         link = result.xpath('.//h3/a')[0]
65
         link = result.xpath('.//h3/a')[0]
66
                         'title': title,
72
                         'title': title,
67
                         'content': content})
73
                         'content': content})
68
 
74
 
69
-    # return results if something is found
70
-    if results:
71
-        return results
72
-
73
     # parse results again if nothing is found yet
75
     # parse results again if nothing is found yet
74
     for result in dom.xpath('//li[@class="b_algo"]'):
76
     for result in dom.xpath('//li[@class="b_algo"]'):
75
         link = result.xpath('.//h2/a')[0]
77
         link = result.xpath('.//h2/a')[0]

+ 7
- 0
searx/engines/yahoo.py Datei anzeigen

77
 
77
 
78
     dom = html.fromstring(resp.text)
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
     # parse results
87
     # parse results
81
     for result in dom.xpath(results_xpath):
88
     for result in dom.xpath(results_xpath):
82
         try:
89
         try:

+ 4
- 0
searx/results.py Datei anzeigen

99
         self._infobox_ids = {}
99
         self._infobox_ids = {}
100
         self.suggestions = set()
100
         self.suggestions = set()
101
         self.answers = set()
101
         self.answers = set()
102
+        self.number_of_results = 0
102
 
103
 
103
     def extend(self, engine_name, results):
104
     def extend(self, engine_name, results):
104
         for result in list(results):
105
         for result in list(results):
111
             elif 'infobox' in result:
112
             elif 'infobox' in result:
112
                 self._merge_infobox(result)
113
                 self._merge_infobox(result)
113
                 results.remove(result)
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
         with RLock():
119
         with RLock():
116
             engines[engine_name].stats['search_count'] += 1
120
             engines[engine_name].stats['search_count'] += 1

+ 10
- 0
searx/templates/oscar/results.html Datei anzeigen

78
         </div><!-- /#main_results -->
78
         </div><!-- /#main_results -->
79
 
79
 
80
         <div class="col-sm-4" id="sidebar_results">
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
             {% if infoboxes %}
91
             {% if infoboxes %}
82
                 {% for infobox in infoboxes %}
92
                 {% for infobox in infoboxes %}
83
                     {% include 'oscar/infobox.html' %}
93
                     {% include 'oscar/infobox.html' %}

+ 4
- 2
searx/webapp.py Datei anzeigen

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