Loading docs/dev/engine_overview.rst +47 −19 Original line number Diff line number Diff line Loading @@ -37,15 +37,16 @@ settings. However, the standard way is the following: engine file ----------- ======================= =========== =========================================== ======================= =========== ======================================================== argument type information ======================= =========== =========================================== ======================= =========== ======================================================== categories list pages, in which the engine is working paging boolean support multible pages language_support boolean support language choosing time_range_support boolean support search time range engine_type str ``online`` by default, ``offline`` ======================= =========== =========================================== engine_type str ``online`` by default, other possibles values are ``offline``, ``online_dictionnary``, ``online_currency`` ======================= =========== ======================================================== .. _engine settings: Loading Loading @@ -111,21 +112,48 @@ passed arguments These arguments can be used to construct the search query. Furthermore, parameters with default value can be redefined for special purposes. ====================== ============ ======================================================================== If the ``engine_type`` is ``online```: ====================== ============== ======================================================================== argument type default-value, information ====================== ============ ======================================================================== url string ``''`` method string ``'GET'`` ====================== ============== ======================================================================== url str ``''`` method str ``'GET'`` headers set ``{}`` data set ``{}`` cookies set ``{}`` verify boolean ``True`` headers.User-Agent string a random User-Agent category string current category, like ``'general'`` started datetime current date-time verify bool ``True`` headers.User-Agent str a random User-Agent category str current category, like ``'general'`` safesearch int ``0``, between ``0`` and ``2`` (normal, moderate, strict) time_range Optional[str] ``None``, can be ``day``, ``week``, ``month``, ``year`` pageno int current pagenumber language string specific language code like ``'en_US'``, or ``'all'`` if unspecified language str specific language code like ``'en_US'``, or ``'all'`` if unspecified ====================== ============== ======================================================================== If the ``engine_type`` is ``online_dictionnary```, in addition to the ``online`` arguments: ====================== ============ ======================================================================== argument type default-value, information ====================== ============ ======================================================================== from_lang str specific language code like ``'en_US'`` to_lang str specific language code like ``'en_US'`` query str the text query without the languages ====================== ============ ======================================================================== If the ``engine_type`` is ``online_currency```, in addition to the ``online`` arguments: ====================== ============ ======================================================================== argument type default-value, information ====================== ============ ======================================================================== amount float the amount to convert from str ISO 4217 code to str ISO 4217 code from_name str currency name to_name str currency name ====================== ============ ======================================================================== parsed arguments ---------------- Loading @@ -137,12 +165,12 @@ request: =================== =========== ========================================================================== argument type information =================== =========== ========================================================================== url string requested url method string HTTP request method url str requested url method str HTTP request method headers set HTTP header information data set HTTP data information (parsed if ``method != 'GET'``) data set HTTP data information cookies set HTTP cookies verify boolean Performing SSL-Validity check verify bool Performing SSL-Validity check max_redirects int maximum redirects, hard limit soft_max_redirects int maximum redirects, soft limit. Record an error but don't stop the engine raise_for_httperror bool True by default: raise an exception if the HTTP code of response is >= 300 Loading searx/engines/currency_convert.py +2 −40 Original line number Diff line number Diff line import json import re import unicodedata from searx.data import CURRENCIES # NOQA engine_type = 'online_currency' categories = [] url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}' weight = 100 parser_re = re.compile('.*?(\\d+(?:\\.\\d+)?) ([^.0-9]+) (?:in|to) ([^.0-9]+)', re.I) https_support = True def normalize_name(name): name = name.lower().replace('-', ' ').rstrip('s') name = re.sub(' +', ' ', name) return unicodedata.normalize('NFKD', name).lower() def name_to_iso4217(name): global CURRENCIES name = normalize_name(name) currency = CURRENCIES['names'].get(name, [name]) return currency[0] def iso4217_to_name(iso4217, language): global CURRENCIES return CURRENCIES['iso4217'].get(iso4217, {}).get(language, iso4217) def request(query, params): m = parser_re.match(query) if not m: # wrong query return params amount, from_currency, to_currency = m.groups() amount = float(amount) from_currency = name_to_iso4217(from_currency.strip()) to_currency = name_to_iso4217(to_currency.strip()) params['url'] = url.format(from_currency, to_currency) params['amount'] = amount params['from'] = from_currency params['to'] = to_currency params['from_name'] = iso4217_to_name(from_currency, 'en') params['to_name'] = iso4217_to_name(to_currency, 'en') params['url'] = url.format(params['from'], params['to']) return params Loading searx/engines/dictzone.py +6 −18 Original line number Diff line number Diff line Loading @@ -9,36 +9,24 @@ @parse url, title, content """ import re from urllib.parse import urljoin from lxml import html from searx.utils import is_valid_lang, eval_xpath from searx.utils import eval_xpath engine_type = 'online_dictionnary' categories = ['general'] url = 'https://dictzone.com/{from_lang}-{to_lang}-dictionary/{query}' weight = 100 parser_re = re.compile('.*?([a-z]+)-([a-z]+) ([^ ]+)$', re.I) results_xpath = './/table[@id="r"]/tr' https_support = True def request(query, params): m = parser_re.match(query) if not m: return params from_lang, to_lang, query = m.groups() from_lang = is_valid_lang(from_lang) to_lang = is_valid_lang(to_lang) if not from_lang or not to_lang: return params params['url'] = url.format(from_lang=from_lang[2], to_lang=to_lang[2], query=query) params['url'] = url.format(from_lang=params['from_lang'][2], to_lang=params['to_lang'][2], query=params['query']) return params Loading searx/engines/translated.py +4 −22 Original line number Diff line number Diff line Loading @@ -8,44 +8,26 @@ @stable yes @parse url, title, content """ import re from searx.utils import is_valid_lang engine_type = 'online_dictionnary' categories = ['general'] url = 'https://api.mymemory.translated.net/get?q={query}&langpair={from_lang}|{to_lang}{key}' web_url = 'https://mymemory.translated.net/en/{from_lang}/{to_lang}/{query}' weight = 100 https_support = True parser_re = re.compile('.*?([a-z]+)-([a-z]+) (.{2,})$', re.I) api_key = '' def request(query, params): m = parser_re.match(query) if not m: return params from_lang, to_lang, query = m.groups() from_lang = is_valid_lang(from_lang) to_lang = is_valid_lang(to_lang) if not from_lang or not to_lang: return params if api_key: key_form = '&key=' + api_key else: key_form = '' params['url'] = url.format(from_lang=from_lang[1], to_lang=to_lang[1], query=query, params['url'] = url.format(from_lang=params['from_lang'][1], to_lang=params['to_lang'][1], query=params['query'], key=key_form) params['query'] = query params['from_lang'] = from_lang params['to_lang'] = to_lang return params Loading Loading
docs/dev/engine_overview.rst +47 −19 Original line number Diff line number Diff line Loading @@ -37,15 +37,16 @@ settings. However, the standard way is the following: engine file ----------- ======================= =========== =========================================== ======================= =========== ======================================================== argument type information ======================= =========== =========================================== ======================= =========== ======================================================== categories list pages, in which the engine is working paging boolean support multible pages language_support boolean support language choosing time_range_support boolean support search time range engine_type str ``online`` by default, ``offline`` ======================= =========== =========================================== engine_type str ``online`` by default, other possibles values are ``offline``, ``online_dictionnary``, ``online_currency`` ======================= =========== ======================================================== .. _engine settings: Loading Loading @@ -111,21 +112,48 @@ passed arguments These arguments can be used to construct the search query. Furthermore, parameters with default value can be redefined for special purposes. ====================== ============ ======================================================================== If the ``engine_type`` is ``online```: ====================== ============== ======================================================================== argument type default-value, information ====================== ============ ======================================================================== url string ``''`` method string ``'GET'`` ====================== ============== ======================================================================== url str ``''`` method str ``'GET'`` headers set ``{}`` data set ``{}`` cookies set ``{}`` verify boolean ``True`` headers.User-Agent string a random User-Agent category string current category, like ``'general'`` started datetime current date-time verify bool ``True`` headers.User-Agent str a random User-Agent category str current category, like ``'general'`` safesearch int ``0``, between ``0`` and ``2`` (normal, moderate, strict) time_range Optional[str] ``None``, can be ``day``, ``week``, ``month``, ``year`` pageno int current pagenumber language string specific language code like ``'en_US'``, or ``'all'`` if unspecified language str specific language code like ``'en_US'``, or ``'all'`` if unspecified ====================== ============== ======================================================================== If the ``engine_type`` is ``online_dictionnary```, in addition to the ``online`` arguments: ====================== ============ ======================================================================== argument type default-value, information ====================== ============ ======================================================================== from_lang str specific language code like ``'en_US'`` to_lang str specific language code like ``'en_US'`` query str the text query without the languages ====================== ============ ======================================================================== If the ``engine_type`` is ``online_currency```, in addition to the ``online`` arguments: ====================== ============ ======================================================================== argument type default-value, information ====================== ============ ======================================================================== amount float the amount to convert from str ISO 4217 code to str ISO 4217 code from_name str currency name to_name str currency name ====================== ============ ======================================================================== parsed arguments ---------------- Loading @@ -137,12 +165,12 @@ request: =================== =========== ========================================================================== argument type information =================== =========== ========================================================================== url string requested url method string HTTP request method url str requested url method str HTTP request method headers set HTTP header information data set HTTP data information (parsed if ``method != 'GET'``) data set HTTP data information cookies set HTTP cookies verify boolean Performing SSL-Validity check verify bool Performing SSL-Validity check max_redirects int maximum redirects, hard limit soft_max_redirects int maximum redirects, soft limit. Record an error but don't stop the engine raise_for_httperror bool True by default: raise an exception if the HTTP code of response is >= 300 Loading
searx/engines/currency_convert.py +2 −40 Original line number Diff line number Diff line import json import re import unicodedata from searx.data import CURRENCIES # NOQA engine_type = 'online_currency' categories = [] url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}' weight = 100 parser_re = re.compile('.*?(\\d+(?:\\.\\d+)?) ([^.0-9]+) (?:in|to) ([^.0-9]+)', re.I) https_support = True def normalize_name(name): name = name.lower().replace('-', ' ').rstrip('s') name = re.sub(' +', ' ', name) return unicodedata.normalize('NFKD', name).lower() def name_to_iso4217(name): global CURRENCIES name = normalize_name(name) currency = CURRENCIES['names'].get(name, [name]) return currency[0] def iso4217_to_name(iso4217, language): global CURRENCIES return CURRENCIES['iso4217'].get(iso4217, {}).get(language, iso4217) def request(query, params): m = parser_re.match(query) if not m: # wrong query return params amount, from_currency, to_currency = m.groups() amount = float(amount) from_currency = name_to_iso4217(from_currency.strip()) to_currency = name_to_iso4217(to_currency.strip()) params['url'] = url.format(from_currency, to_currency) params['amount'] = amount params['from'] = from_currency params['to'] = to_currency params['from_name'] = iso4217_to_name(from_currency, 'en') params['to_name'] = iso4217_to_name(to_currency, 'en') params['url'] = url.format(params['from'], params['to']) return params Loading
searx/engines/dictzone.py +6 −18 Original line number Diff line number Diff line Loading @@ -9,36 +9,24 @@ @parse url, title, content """ import re from urllib.parse import urljoin from lxml import html from searx.utils import is_valid_lang, eval_xpath from searx.utils import eval_xpath engine_type = 'online_dictionnary' categories = ['general'] url = 'https://dictzone.com/{from_lang}-{to_lang}-dictionary/{query}' weight = 100 parser_re = re.compile('.*?([a-z]+)-([a-z]+) ([^ ]+)$', re.I) results_xpath = './/table[@id="r"]/tr' https_support = True def request(query, params): m = parser_re.match(query) if not m: return params from_lang, to_lang, query = m.groups() from_lang = is_valid_lang(from_lang) to_lang = is_valid_lang(to_lang) if not from_lang or not to_lang: return params params['url'] = url.format(from_lang=from_lang[2], to_lang=to_lang[2], query=query) params['url'] = url.format(from_lang=params['from_lang'][2], to_lang=params['to_lang'][2], query=params['query']) return params Loading
searx/engines/translated.py +4 −22 Original line number Diff line number Diff line Loading @@ -8,44 +8,26 @@ @stable yes @parse url, title, content """ import re from searx.utils import is_valid_lang engine_type = 'online_dictionnary' categories = ['general'] url = 'https://api.mymemory.translated.net/get?q={query}&langpair={from_lang}|{to_lang}{key}' web_url = 'https://mymemory.translated.net/en/{from_lang}/{to_lang}/{query}' weight = 100 https_support = True parser_re = re.compile('.*?([a-z]+)-([a-z]+) (.{2,})$', re.I) api_key = '' def request(query, params): m = parser_re.match(query) if not m: return params from_lang, to_lang, query = m.groups() from_lang = is_valid_lang(from_lang) to_lang = is_valid_lang(to_lang) if not from_lang or not to_lang: return params if api_key: key_form = '&key=' + api_key else: key_form = '' params['url'] = url.format(from_lang=from_lang[1], to_lang=to_lang[1], query=query, params['url'] = url.format(from_lang=params['from_lang'][1], to_lang=params['to_lang'][1], query=params['query'], key=key_form) params['query'] = query params['from_lang'] = from_lang params['to_lang'] = to_lang return params Loading