diff options
| author | Alexandre Flament <alex@al-f.net> | 2020-12-17 11:49:43 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-17 11:49:43 +0100 |
| commit | 9b27935f71ea94ba034d73c09c1f18df05fd33b6 (patch) | |
| tree | c1e7b116220d72f9e541ff4e7e5b108dd8a2f2aa /searx/search/processors/online_currency.py | |
| parent | 13a2b1a44d0e216d3750519239fab2c0abb142e4 (diff) | |
| parent | 02fc4147ce745325ff25146a8085a915a5d3cacd (diff) | |
Merge pull request #2225 from dalf/processors
Processors
Diffstat (limited to 'searx/search/processors/online_currency.py')
| -rw-r--r-- | searx/search/processors/online_currency.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/searx/search/processors/online_currency.py b/searx/search/processors/online_currency.py new file mode 100644 index 000000000..f0e919c03 --- /dev/null +++ b/searx/search/processors/online_currency.py @@ -0,0 +1,57 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later + +import unicodedata +import re + +from searx.data import CURRENCIES +from .online import OnlineProcessor + + +parser_re = re.compile('.*?(\\d+(?:\\.\\d+)?) ([^.0-9]+) (?:in|to) ([^.0-9]+)', re.I) + + +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) + + +class OnlineCurrencyProcessor(OnlineProcessor): + + engine_type = 'online_currency' + + def get_params(self, search_query, engine_category): + params = super().get_params(search_query, engine_category) + if params is None: + return None + + m = parser_re.match(search_query.query) + if not m: + return None + + amount_str, from_currency, to_currency = m.groups() + try: + amount = float(amount_str) + except ValueError: + return None + from_currency = name_to_iso4217(from_currency.strip()) + to_currency = name_to_iso4217(to_currency.strip()) + + 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') + return params |