on master help sign in
[enh] add safesearch functionality

2 = strict 1 = moderate 0 = none

commite7de9674b14c2ff06fac009274742819d6468138 authorThomas Pointhuber <thomas.pointhuber@gmx.at> dateSun 8 Feb 2015, 21:53 (12 years ago) parentdd4686a
7 files changed+66−1
searx/engines/bing_images.py+7−1 searx/engines/blekko_images.py+11 searx/search.py+5 searx/templates/courgette/preferences.html+10 searx/templates/default/preferences.html+10 searx/templates/oscar/preferences.html+11 searx/webapp.py+12
searx/engines/bing_images.py+7−1
@@ -21,12 +21,17 @@ import re
2121# engine dependent config
2222categories = ['images']
2323paging = True
24+safesearch = True
2425
2526# search-url
2627base_url = 'https://www.bing.com/'
2728search_string = 'images/search?{query}&count=10&first={offset}'
2829thumb_url = "http://ts1.mm.bing.net/th?id={ihk}"
2930
31+# safesearch definitions
32+safesearch_types = {2: 'STRICT',
33+ 1: 'DEMOTE',
34+ 0: 'OFF'}
3035
3136# do search-request
3237def request(query, params):
@@ -43,7 +48,8 @@ def request(query, params):
4348 offset=offset)
4449
4550 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')
4753
4854 params['url'] = base_url + search_path
4955
searx/engines/blekko_images.py+11
@@ -14,11 +14,16 @@ from urllib import urlencode
1414# engine dependent config
1515categories = ['images']
1616paging = True
17+safesearch = True
1718
1819# search-url
1920base_url = 'https://blekko.com'
2021search_url = '/api/images?{query}&c={c}'
2122
23+# safesearch definitions
24+safesearch_types = {2: '1',
25+ 1: '',
26+ 0: '0'}
2227
2328# do search-request
2429def request(query, params):
@@ -31,6 +36,12 @@ def request(query, params):
3136 if params['pageno'] != 1:
3237 params['url'] += '&page={pageno}'.format(pageno=(params['pageno']-1))
3338
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+
3445 return params
3546
3647
searx/search.py+5
@@ -457,6 +457,11 @@ class Search(object):
457457 request_params['started'] = time()
458458 request_params['pageno'] = self.pageno
459459 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
460465
461466 # update request parameters dependent on
462467 # search-engine (contained in engines folder)
searx/templates/courgette/preferences.html+10
@@ -59,6 +59,16 @@
5959 </select>
6060 </p>
6161 </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>
6272 <fieldset>
6373 <legend>{{ _('Themes') }}</legend>
6474 <p>
searx/templates/default/preferences.html+10
@@ -60,6 +60,16 @@
6060 </select>
6161 </p>
6262 </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>
6373 <fieldset>
6474 <legend>{{ _('Themes') }}</legend>
6575 <p>
searx/templates/oscar/preferences.html+11
@@ -87,6 +87,17 @@
8787 </div>
8888 <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>
8989 </div>
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>
90101 <div class="row form-group">
91102 <label class="col-sm-3 col-md-2">{{ _('Themes') }}</label>
92103 <div class="col-sm-4 col-md-4">
searx/webapp.py+12
@@ -267,6 +267,8 @@ def render(template_name, override_theme=None, **kwargs):
267267
268268 kwargs['method'] = request.cookies.get('method', 'POST')
269269
270+ kwargs['safesearch'] = request.cookies.get('safesearch', '1')
271+
270272 # override url_for function in templates
271273 kwargs['url_for'] = url_for_theme
272274
@@ -455,6 +457,10 @@ def preferences():
455457 Settings that are going to be saved as cookies."""
456458 lang = None
457459 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
458464
459465 if request.cookies.get('language')\
460466 and request.cookies['language'] in (x[0] for x in language_codes):
@@ -471,6 +477,8 @@ def preferences():
471477 locale = None
472478 autocomplete = ''
473479 method = 'POST'
480+ safesearch = '1'
481+
474482 for pd_name, pd in request.form.items():
475483 if pd_name.startswith('category_'):
476484 category = pd_name[9:]
@@ -489,6 +497,8 @@ def preferences():
489497 lang = pd
490498 elif pd_name == 'method':
491499 method = pd
500+ elif pd_name == 'safesearch':
501+ safesearch = pd
492502 elif pd_name.startswith('engine_'):
493503 if pd_name.find('__') > -1:
494504 engine_name, category = pd_name.replace('engine_', '', 1).split('__', 1)
@@ -529,6 +539,8 @@ def preferences():
529539 )
530540
531541 resp.set_cookie('method', method, max_age=cookie_max_age)
542+
543+ resp.set_cookie('safesearch', safesearch, max_age=cookie_max_age)
532544
533545 resp.set_cookie('image_proxy', image_proxy, max_age=cookie_max_age)
534546