diff --git a/searx/engines/xpath.py b/searx/engines/xpath.py index fec47cf9..9acfb208 100644 --- a/searx/engines/xpath.py +++ b/searx/engines/xpath.py @@ -5,6 +5,39 @@ from urllib.parse import urlencode from searx.utils import extract_text, extract_url, eval_xpath, eval_xpath_list search_url = None +<<<<<<< HEAD +======= +""" +Search URL of the engine, replacements are: + +``{query}``: + Search terms from user. + +``{pageno}``: + Page number if engine supports pagging :py:obj:`paging` + +``{lang}``: + ISO 639-1 language code (en, de, fr ..) + +``{time_range}``: + :py:obj:`URL parameter ` if engine :py:obj:`supports time + range `. The value for the parameter is taken from + :py:obj:`time_range_map`. + +""" + +lang_all='en' +'''Replacement ``{lang}`` in :py:obj:`search_url` if language ``all`` is +selected. +''' + +soft_max_redirects = 0 +'''Maximum redirects, soft limit. Record an error but don't stop the engine''' + +results_xpath = '' +'''XPath selector for the list of result items''' + +>>>>>>> 6bfe3fd0 ([enh] XPath engine - add time range support) url_xpath = None content_xpath = None title_xpath = None @@ -29,6 +62,37 @@ page_size = 1 first_page_num = 1 +time_range_support = False +'''Engine supports search time range.''' + +time_range_url = '&hours={time_range_val}' +'''Time range URL parameter in the in :py:obj:`search_url`. If no time range is +requested by the user, the URL paramter is an empty string. The +``{time_range_val}`` replacement is taken from the :py:obj:`time_range_map`. + +.. code:: yaml + + time_range_url : '&days={time_range_val}' +''' + +time_range_map = { + 'day': 24, + 'week': 24*7, + 'month': 24*30, + 'year': 24*365, +} +'''Maps time range value from user to ``{time_range_val}`` in +:py:obj:`time_range_url`. + +.. code:: yaml + + time_range_map: + day: 1 + week: 7 + month: 30 + year: 365 +''' + def request(query, params): query = urlencode({'q': query})[2:] @@ -40,6 +104,16 @@ def request(query, params): if params['safesearch']: safe_search = safe_search_map[params['safesearch']] + ''' + lang = lang_all + if params['language'] != 'all': + lang = params['language'][:2] + + time_range = '' + if params.get('time_range'): + time_range_val = time_range_map.get(params.get('time_range')) + time_range = time_range_url.format(time_range_val=time_range_val) + fargs = { 'query': urlencode({'q': query})[2:], 'lang': lang,