From 7a5c36408ae6278c3d56022cdc17132d0406da19 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Mon, 21 Jun 2021 12:18:28 +0200 Subject: [PATCH] [mod] google: add "use_mobile_ui" parameter to use mobile endpoint. disable by default, it has to be enabled in settings.yml related to #159 --- searx/engines/google.py | 35 ++++++++++++++++++++++++----------- searx/settings.yml | 1 + 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/searx/engines/google.py b/searx/engines/google.py index 841212e09..6ba164814 100644 --- a/searx/engines/google.py +++ b/searx/engines/google.py @@ -34,6 +34,7 @@ categories = ['general'] paging = True time_range_support = True safesearch = True +use_mobile_ui = False supported_languages_url = 'https://www.google.com/preferences?#languages' # based on https://en.wikipedia.org/wiki/List_of_Google_domains and tests @@ -266,6 +267,13 @@ def request(query, params): params, supported_languages, language_aliases, True ) + additional_parameters = {} + if use_mobile_ui: + additional_parameters = { + 'asearch': "arc", + 'async': 'arc_id:srp_510,ffilt:all,ve_name:MoreResultsContainer,next_id:srp_5,use_ac:true,_id:arc-srp_510,_pms:qs,_fmt:pc' # pylint: disable=line-too-long + } + # https://www.google.de/search?q=corona&hl=de&lr=lang_de&start=0&tbs=qdr%3Ad&safe=medium query_url = 'https://' + lang_info['subdomain'] + '/search' + "?" + urlencode({ 'q': query, @@ -273,6 +281,7 @@ def request(query, params): 'ie': "utf8", 'oe': "utf8", 'start': offset, + **additional_parameters, }) if params['time_range'] in time_range_dict: @@ -282,9 +291,12 @@ def request(query, params): params['url'] = query_url params['headers'].update(lang_info['headers']) - params['headers']['Accept'] = ( - 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' - ) + if use_mobile_ui: + params['headers']['Accept'] = '*/*' + else: + params['headers']['Accept'] = ( + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' + ) return params @@ -307,14 +319,15 @@ def response(resp): logger.debug("did not find 'answer'") # results --> number_of_results - try: - _txt = eval_xpath_getindex(dom, '//div[@id="result-stats"]//text()', 0) - _digit = ''.join([n for n in _txt if n.isdigit()]) - number_of_results = int(_digit) - results.append({'number_of_results': number_of_results}) - except Exception as e: # pylint: disable=broad-except - logger.debug("did not 'number_of_results'") - logger.error(e, exc_info=True) + if not use_mobile_ui: + try: + _txt = eval_xpath_getindex(dom, '//div[@id="result-stats"]//text()', 0) + _digit = ''.join([n for n in _txt if n.isdigit()]) + number_of_results = int(_digit) + results.append({'number_of_results': number_of_results}) + except Exception as e: # pylint: disable=broad-except + logger.debug("did not 'number_of_results'") + logger.error(e, exc_info=True) # parse results for result in eval_xpath_list(dom, results_xpath): diff --git a/searx/settings.yml b/searx/settings.yml index 1b19cc29e..0b5802cae 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -583,6 +583,7 @@ engines: - name: google engine: google shortcut: go + use_mobile_ui: true # additional_tests: # android: *test_android