on master help sign in
[fix] fetch extra search param of gigablast - fixes #1293
commite5305f886c0d7d5fb3f34d1fbd7f9a545c14c284 authorAdam Tauber <asciimoo@gmail.com> dateSat 21 Dec 2019, 20:51 (7 years ago) parent8850036
1 file changed+28−13
searx/engines/gigablast.py+28−13
searx/engines/gigablast.py+28−13
@@ -14,6 +14,7 @@ import random
1414from json import loads
1515from time import time
1616from lxml.html import fromstring
17+from searx.poolrequests import get
1718from searx.url_utils import urlencode
1819from searx.utils import eval_xpath
1920
@@ -31,13 +32,9 @@ search_string = 'search?{query}'\
3132 '&c=main'\
3233 '&s={offset}'\
3334 '&format=json'\
34− '&qh=0'\
35− '&qlang={lang}'\
35+ '&langcountry={lang}'\
3636 '&ff={safesearch}'\
37− '&rxiec={rxieu}'\
38− '&ulse={ulse}'\
39− '&rand={rxikd}'\
40− '&dbez={dbez}'
37+ '&rand={rxikd}'
4138# specific xpath variables
4239results_xpath = '//response//result'
4340url_xpath = './/url'
@@ -46,9 +43,26 @@ content_xpath = './/sum'
4643
4744supported_languages_url = 'https://gigablast.com/search?&rxikd=1'
4845
46+extra_param = '' # gigablast requires a random extra parameter
47+# which can be extracted from the source code of the search page
48+
49+
50+def parse_extra_param(text):
51+ global extra_param
52+ param_lines = [x for x in text.splitlines() if x.startswith('var url=') or x.startswith('url=url+')]
53+ extra_param = ''
54+ for l in param_lines:
55+ extra_param += l.split("'")[1]
56+ extra_param = extra_param.split('&')[-1]
57+
58+
59+def init(engine_settings=None):
60+ parse_extra_param(get('http://gigablast.com/search?c=main&qlangcountry=en-us&q=south&s=10').text)
61+
4962
5063# do search-request
5164def request(query, params):
65+ print("EXTRAPARAM:", extra_param)
5266 offset = (params['pageno'] - 1) * number_of_results
5367
5468 if params['language'] == 'all':
@@ -67,14 +81,11 @@ def request(query, params):
6781 search_path = search_string.format(query=urlencode({'q': query}),
6882 offset=offset,
6983 number_of_results=number_of_results,
70− rxikd=int(time() * 1000),
71− rxieu=random.randint(1000000000, 9999999999),
72− ulse=random.randint(100000000, 999999999),
7384 lang=language,
74− safesearch=safesearch,
75− dbez=random.randint(100000000, 999999999))
85+ rxikd=int(time() * 1000),
86+ safesearch=safesearch)
7687
77− params['url'] = base_url + search_path
88+ params['url'] = base_url + search_path + '&' + extra_param
7889
7990 return params
8091
@@ -84,7 +95,11 @@ def response(resp):
8495 results = []
8596
8697 # parse results
87− response_json = loads(resp.text)
98+ try:
99+ response_json = loads(resp.text)
100+ except:
101+ parse_extra_param(resp.text)
102+ return results
88103
89104 for result in response_json['results']:
90105 # append result