diff --git a/searx/data/engine_traits.json b/searx/data/engine_traits.json index df8f1f295..dcbeba8e4 100644 --- a/searx/data/engine_traits.json +++ b/searx/data/engine_traits.json @@ -7196,6 +7196,7 @@ "km": "khmer", "kn": "kannada", "ko": "korean", + "ks": "kashmiri", "ku": "kurdish", "kw": "cornish", "la": "latin", diff --git a/searx/engines/radio_browser.py b/searx/engines/radio_browser.py index a8f07a638..64208304e 100644 --- a/searx/engines/radio_browser.py +++ b/searx/engines/radio_browser.py @@ -6,6 +6,8 @@ """ +import random +import socket from urllib.parse import urlencode import babel from flask_babel import gettext @@ -27,7 +29,6 @@ about = { paging = True categories = ['music', 'radio'] -base_url = "https://de1.api.radio-browser.info" # see https://api.radio-browser.info/ for all nodes number_of_results = 10 station_filters = [] # ['countrycode', 'language'] @@ -51,6 +52,19 @@ none filters are applied. Valid filters are: """ +servers = [] + + +def init(_): + # see https://api.radio-browser.info + ips = socket.getaddrinfo("all.api.radio-browser.info", 80, 0, 0, socket.IPPROTO_TCP) + for ip_tuple in ips: + _ip: str = ip_tuple[4][0] # type: ignore + url = socket.gethostbyaddr(_ip)[0] + srv = "https://" + url + if srv not in servers: + servers.append(srv) + def request(query, params): args = { @@ -73,7 +87,7 @@ def request(query, params): if countrycode in traits.custom['countrycodes']: # type: ignore args['countrycode'] = countrycode - params['url'] = f"{base_url}/json/stations/search?{urlencode(args)}" + params['url'] = f"{random.choice(servers)}/json/stations/search?{urlencode(args)}" return params @@ -135,12 +149,13 @@ def fetch_traits(engine_traits: EngineTraits): """ # pylint: disable=import-outside-toplevel + init(None) from babel.core import get_global babel_reg_list = get_global("territory_languages").keys() - language_list = get(f'{base_url}/json/languages').json() # type: ignore - country_list = get(f'{base_url}/json/countries').json() # type: ignore + language_list = get(f'{servers[0]}/json/languages').json() # type: ignore + country_list = get(f'{servers[0]}/json/countries').json() # type: ignore for lang in language_list: