Преглед изворни кода

Merge pull request #220 from pointhi/safesearch

Safesearch
Adam Tauber пре 10 година
родитељ
комит
67df3c516f

+ 8
- 1
searx/engines/bing_images.py Прегледај датотеку

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

+ 12
- 0
searx/engines/blekko_images.py Прегледај датотеку

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

+ 9
- 2
searx/engines/google_images.py Прегледај датотеку

15
 # engine dependent config
15
 # engine dependent config
16
 categories = ['images']
16
 categories = ['images']
17
 paging = True
17
 paging = True
18
+safesearch = True
18
 
19
 
19
 # search-url
20
 # search-url
20
 url = 'https://ajax.googleapis.com/'
21
 url = 'https://ajax.googleapis.com/'
21
-search_url = url + 'ajax/services/search/images?v=1.0&start={offset}&rsz=large&safe=off&filter=off&{query}'
22
+search_url = url + 'ajax/services/search/images?v=1.0&start={offset}&rsz=large&safe={safesearch}&filter=off&{query}'
22
 
23
 
23
 
24
 
24
 # do search-request
25
 # do search-request
25
 def request(query, params):
26
 def request(query, params):
26
     offset = (params['pageno'] - 1) * 8
27
     offset = (params['pageno'] - 1) * 8
27
 
28
 
29
+    if params['safesearch'] == 0:
30
+        safesearch = 'off'
31
+    else:
32
+        safesearch = 'on'
33
+
28
     params['url'] = search_url.format(query=urlencode({'q': query}),
34
     params['url'] = search_url.format(query=urlencode({'q': query}),
29
-                                      offset=offset)
35
+                                      offset=offset,
36
+                                      safesearch=safesearch)
30
 
37
 
31
     return params
38
     return params
32
 
39
 

+ 5
- 0
searx/search.py Прегледај датотеку

457
             request_params['started'] = time()
457
             request_params['started'] = time()
458
             request_params['pageno'] = self.pageno
458
             request_params['pageno'] = self.pageno
459
             request_params['language'] = self.lang
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
             # update request parameters dependent on
466
             # update request parameters dependent on
462
             # search-engine (contained in engines folder)
467
             # search-engine (contained in engines folder)

+ 10
- 0
searx/templates/courgette/preferences.html Прегледај датотеку

60
         </p>
60
         </p>
61
     </fieldset>
61
     </fieldset>
62
     <fieldset>
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
         <legend>{{ _('Themes') }}</legend>
73
         <legend>{{ _('Themes') }}</legend>
64
         <p>
74
         <p>
65
             <select name="theme">
75
             <select name="theme">

+ 10
- 0
searx/templates/default/preferences.html Прегледај датотеку

61
         </p>
61
         </p>
62
     </fieldset>
62
     </fieldset>
63
     <fieldset>
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
         <legend>{{ _('Themes') }}</legend>
74
         <legend>{{ _('Themes') }}</legend>
65
         <p>
75
         <p>
66
         <select name="theme">
76
         <select name="theme">

+ 11
- 0
searx/templates/oscar/preferences.html Прегледај датотеку

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>
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
                 </div>
89
                 </div>
90
                 <div class="row form-group">
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
                     <label class="col-sm-3 col-md-2">{{ _('Themes') }}</label>
102
                     <label class="col-sm-3 col-md-2">{{ _('Themes') }}</label>
92
                     <div class="col-sm-4 col-md-4">
103
                     <div class="col-sm-4 col-md-4">
93
                         <select class="form-control" name="theme">
104
                         <select class="form-control" name="theme">

+ 1
- 0
searx/tests/engines/test_bing_images.py Прегледај датотеку

12
         dicto = defaultdict(dict)
12
         dicto = defaultdict(dict)
13
         dicto['pageno'] = 1
13
         dicto['pageno'] = 1
14
         dicto['language'] = 'fr_FR'
14
         dicto['language'] = 'fr_FR'
15
+        dicto['safesearch'] = 1
15
         params = bing_images.request(query, dicto)
16
         params = bing_images.request(query, dicto)
16
         self.assertTrue('url' in params)
17
         self.assertTrue('url' in params)
17
         self.assertTrue(query in params['url'])
18
         self.assertTrue(query in params['url'])

+ 1
- 0
searx/tests/engines/test_blekko_images.py Прегледај датотеку

10
         query = 'test_query'
10
         query = 'test_query'
11
         dicto = defaultdict(dict)
11
         dicto = defaultdict(dict)
12
         dicto['pageno'] = 0
12
         dicto['pageno'] = 0
13
+        dicto['safesearch'] = 1
13
         params = blekko_images.request(query, dicto)
14
         params = blekko_images.request(query, dicto)
14
         self.assertTrue('url' in params)
15
         self.assertTrue('url' in params)
15
         self.assertTrue(query in params['url'])
16
         self.assertTrue(query in params['url'])

+ 8
- 0
searx/webapp.py Прегледај датотеку

267
 
267
 
268
     kwargs['method'] = request.cookies.get('method', 'POST')
268
     kwargs['method'] = request.cookies.get('method', 'POST')
269
 
269
 
270
+    kwargs['safesearch'] = request.cookies.get('safesearch', '1')
271
+
270
     # override url_for function in templates
272
     # override url_for function in templates
271
     kwargs['url_for'] = url_for_theme
273
     kwargs['url_for'] = url_for_theme
272
 
274
 
471
         locale = None
473
         locale = None
472
         autocomplete = ''
474
         autocomplete = ''
473
         method = 'POST'
475
         method = 'POST'
476
+        safesearch = '1'
477
+
474
         for pd_name, pd in request.form.items():
478
         for pd_name, pd in request.form.items():
475
             if pd_name.startswith('category_'):
479
             if pd_name.startswith('category_'):
476
                 category = pd_name[9:]
480
                 category = pd_name[9:]
489
                 lang = pd
493
                 lang = pd
490
             elif pd_name == 'method':
494
             elif pd_name == 'method':
491
                 method = pd
495
                 method = pd
496
+            elif pd_name == 'safesearch':
497
+                safesearch = pd
492
             elif pd_name.startswith('engine_'):
498
             elif pd_name.startswith('engine_'):
493
                 if pd_name.find('__') > -1:
499
                 if pd_name.find('__') > -1:
494
                     engine_name, category = pd_name.replace('engine_', '', 1).split('__', 1)
500
                     engine_name, category = pd_name.replace('engine_', '', 1).split('__', 1)
530
 
536
 
531
         resp.set_cookie('method', method, max_age=cookie_max_age)
537
         resp.set_cookie('method', method, max_age=cookie_max_age)
532
 
538
 
539
+        resp.set_cookie('safesearch', safesearch, max_age=cookie_max_age)
540
+
533
         resp.set_cookie('image_proxy', image_proxy, max_age=cookie_max_age)
541
         resp.set_cookie('image_proxy', image_proxy, max_age=cookie_max_age)
534
 
542
 
535
         resp.set_cookie('theme', theme, max_age=cookie_max_age)
543
         resp.set_cookie('theme', theme, max_age=cookie_max_age)