forked from zaclys/searxng

Currency engine has DuckDuckGo metadata In the engine selector of the preferences window, the currency search engine has the same metadata and wikidata url as duckduckgo, I'd assume there should be a difference of some sort there clarifying what source the currency uses or, if it's a duckduckgo service, at least clarifying that it's a currency service by duck duck go. Closes: https://github.com/searxng/searxng/issues/787 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
currency convert (DuckDuckGo)
|
|
"""
|
|
|
|
import json
|
|
|
|
# about
|
|
about = {
|
|
"website": 'https://duckduckgo.com/',
|
|
"wikidata_id": 'Q12805',
|
|
"official_api_documentation": 'https://duckduckgo.com/api',
|
|
"use_official_api": False,
|
|
"require_api_key": False,
|
|
"results": 'JSONP',
|
|
"description": "Service from DuckDuckGo.",
|
|
}
|
|
|
|
engine_type = 'online_currency'
|
|
categories = []
|
|
url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}'
|
|
weight = 100
|
|
|
|
https_support = True
|
|
|
|
|
|
def request(query, params):
|
|
params['url'] = url.format(params['from'], params['to'])
|
|
return params
|
|
|
|
|
|
def response(resp):
|
|
"""remove first and last lines to get only json"""
|
|
json_resp = resp.text[resp.text.find('\n') + 1 : resp.text.rfind('\n') - 2]
|
|
results = []
|
|
try:
|
|
conversion_rate = float(json.loads(json_resp)['conversion']['converted-amount'])
|
|
except:
|
|
return results
|
|
answer = '{0} {1} = {2} {3}, 1 {1} ({5}) = {4} {3} ({6})'.format(
|
|
resp.search_params['amount'],
|
|
resp.search_params['from'],
|
|
resp.search_params['amount'] * conversion_rate,
|
|
resp.search_params['to'],
|
|
conversion_rate,
|
|
resp.search_params['from_name'],
|
|
resp.search_params['to_name'],
|
|
)
|
|
|
|
url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}'.format(
|
|
resp.search_params['from'].upper(), resp.search_params['to']
|
|
)
|
|
|
|
results.append({'answer': answer, 'url': url})
|
|
|
|
return results
|