Browse Source

[enh] add safesearch functionality

2 = strict
1 = moderate
0 = none
Thomas Pointhuber 10 years ago
parent
commit
e7de9674b1

+ 7
- 1
searx/engines/bing_images.py View File

@@ -21,12 +21,17 @@ import re
21 21
 # engine dependent config
22 22
 categories = ['images']
23 23
 paging = True
24
+safesearch = True
24 25
 
25 26
 # search-url
26 27
 base_url = 'https://www.bing.com/'
27 28
 search_string = 'images/search?{query}&count=10&first={offset}'
28 29
 thumb_url = "http://ts1.mm.bing.net/th?id={ihk}"
29 30
 
31
+# safesearch definitions
32
+safesearch_types = {2: 'STRICT',
33
+                    1: 'DEMOTE',
34
+                    0: 'OFF'}
30 35
 
31 36
 # do search-request
32 37
 def request(query, params):
@@ -43,7 +48,8 @@ def request(query, params):
43 48
         offset=offset)
44 49
 
45 50
     params['cookies']['SRCHHPGUSR'] = \
46
-        'NEWWND=0&NRSLT=-1&SRCHLANG=' + language.split('-')[0]
51
+        'NEWWND=0&NRSLT=-1&SRCHLANG=' + language.split('-')[0] +\
52
+        '&ADLT=' + safesearch_types.get(params['safesearch'], 'DEMOTE')
47 53
 
48 54
     params['url'] = base_url + search_path
49 55
 

+ 11
- 0
searx/engines/blekko_images.py View File

@@ -14,11 +14,16 @@ from urllib import urlencode
14 14
 # engine dependent config
15 15
 categories = ['images']
16 16
 paging = True
17
+safesearch = True
17 18
 
18 19
 # search-url
19 20
 base_url = 'https://blekko.com'
20 21
 search_url = '/api/images?{query}&c={c}'
21 22
 
23
+# safesearch definitions
24
+safesearch_types = {2: '1',
25
+                    1: '',
26
+                    0: '0'}
22 27
 
23 28
 # do search-request
24 29
 def request(query, params):
@@ -31,6 +36,12 @@ def request(query, params):
31 36
     if params['pageno'] != 1:
32 37
         params['url'] += '&page={pageno}'.format(pageno=(params['pageno']-1))
33 38
 
39
+    # let Blekko know we wan't have profiling
40
+    params['cookies']['tag_lesslogging'] = '1'
41
+
42
+    # parse safesearch argument
43
+    params['cookies']['safesearch'] = safesearch_types.get(params['safesearch'], '')
44
+
34 45
     return params
35 46
 
36 47
 

+ 5
- 0
searx/search.py View File

@@ -457,6 +457,11 @@ class Search(object):
457 457
             request_params['started'] = time()
458 458
             request_params['pageno'] = self.pageno
459 459
             request_params['language'] = self.lang
460
+            try:
461
+                # 0 = None, 1 = Moderate, 2 = Strict
462
+                request_params['safesearch'] = int(request.cookies.get('safesearch', 1))
463
+            except ValueError:
464
+                request_params['safesearch'] = 1
460 465
 
461 466
             # update request parameters dependent on
462 467
             # search-engine (contained in engines folder)

+ 10
- 0
searx/templates/courgette/preferences.html View File

@@ -60,6 +60,16 @@
60 60
         </p>
61 61
     </fieldset>
62 62
     <fieldset>
63
+        <legend>{{ _('SafeSearch') }}</legend>
64
+        <p>
65
+            <select name='safesearch'>
66
+                <option value="2" {% if safesearch == '2' %}selected="selected"{% endif %}>{{ _('Strict') }}</option>
67
+                <option value="1" {% if safesearch == '1' %}selected="selected"{% endif %}>{{ _('Moderate') }}</option>
68
+                <option value="0" {% if safesearch == '0' %}selected="selected"{% endif %}>{{ _('None') }}</option>
69
+            </select>
70
+        </p>
71
+    </fieldset>
72
+    <fieldset>
63 73
         <legend>{{ _('Themes') }}</legend>
64 74
         <p>
65 75
             <select name="theme">

+ 10
- 0
searx/templates/default/preferences.html View File

@@ -61,6 +61,16 @@
61 61
         </p>
62 62
     </fieldset>
63 63
     <fieldset>
64
+        <legend>{{ _('SafeSearch') }}</legend>
65
+        <p>
66
+        <select name='safesearch'>
67
+            <option value="2" {% if safesearch == '2' %}selected="selected"{% endif %}>{{ _('Strict') }}</option>
68
+            <option value="1" {% if safesearch == '1' %}selected="selected"{% endif %}>{{ _('Moderate') }}</option>
69
+            <option value="0" {% if safesearch == '0' %}selected="selected"{% endif %}>{{ _('None') }}</option>
70
+        </select>
71
+        </p>
72
+    </fieldset>
73
+    <fieldset>
64 74
         <legend>{{ _('Themes') }}</legend>
65 75
         <p>
66 76
         <select name="theme">

+ 11
- 0
searx/templates/oscar/preferences.html View File

@@ -88,6 +88,17 @@
88 88
                     <span class="col-sm-5 col-md-6 help-block">{{ _('Change how forms are submited, <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" rel="external">learn more about request methods</a>') }}</span>
89 89
                 </div>
90 90
                 <div class="row form-group">
91
+                    <label class="col-sm-3 col-md-2">{{ _('SafeSearch') }}</label>
92
+                    <div class="col-sm-4 col-md-4">
93
+                        <select class="form-control" name='safesearch'>
94
+                            <option value="2" {% if safesearch == '2' %}selected="selected"{% endif %}>{{ _('Strict') }}</option>
95
+                            <option value="1" {% if safesearch == '1' %}selected="selected"{% endif %}>{{ _('Moderate') }}</option>
96
+                            <option value="0" {% if safesearch == '0' %}selected="selected"{% endif %}>{{ _('None') }}</option>
97
+                        </select>
98
+                    </div>
99
+                    <span class="col-sm-5 col-md-6 help-block">{{ _('Filter explicite content') }}</span>
100
+                </div>
101
+                <div class="row form-group">
91 102
                     <label class="col-sm-3 col-md-2">{{ _('Themes') }}</label>
92 103
                     <div class="col-sm-4 col-md-4">
93 104
                         <select class="form-control" name="theme">

+ 12
- 0
searx/webapp.py View File

@@ -267,6 +267,8 @@ def render(template_name, override_theme=None, **kwargs):
267 267
 
268 268
     kwargs['method'] = request.cookies.get('method', 'POST')
269 269
 
270
+    kwargs['safesearch'] = request.cookies.get('safesearch', '1')
271
+
270 272
     # override url_for function in templates
271 273
     kwargs['url_for'] = url_for_theme
272 274
 
@@ -455,6 +457,10 @@ def preferences():
455 457
     Settings that are going to be saved as cookies."""
456 458
     lang = None
457 459
     image_proxy = request.cookies.get('image_proxy', settings['server'].get('image_proxy'))
460
+    try:
461
+        savesearch = int(request.cookies.get('savesearch', 1))
462
+    except ValueError:
463
+        savesearch = 1
458 464
 
459 465
     if request.cookies.get('language')\
460 466
        and request.cookies['language'] in (x[0] for x in language_codes):
@@ -471,6 +477,8 @@ def preferences():
471 477
         locale = None
472 478
         autocomplete = ''
473 479
         method = 'POST'
480
+        safesearch = '1'
481
+
474 482
         for pd_name, pd in request.form.items():
475 483
             if pd_name.startswith('category_'):
476 484
                 category = pd_name[9:]
@@ -489,6 +497,8 @@ def preferences():
489 497
                 lang = pd
490 498
             elif pd_name == 'method':
491 499
                 method = pd
500
+            elif pd_name == 'safesearch':
501
+                safesearch = pd
492 502
             elif pd_name.startswith('engine_'):
493 503
                 if pd_name.find('__') > -1:
494 504
                     engine_name, category = pd_name.replace('engine_', '', 1).split('__', 1)
@@ -529,6 +539,8 @@ def preferences():
529 539
             )
530 540
 
531 541
         resp.set_cookie('method', method, max_age=cookie_max_age)
542
+        
543
+        resp.set_cookie('safesearch', safesearch, max_age=cookie_max_age)
532 544
 
533 545
         resp.set_cookie('image_proxy', image_proxy, max_age=cookie_max_age)
534 546