diff options
| author | Markus Heiser <markus.heiser@darmarit.de> | 2025-04-06 18:38:38 +0200 |
|---|---|---|
| committer | Markus Heiser <markus.heiser@darmarIT.de> | 2025-04-06 18:59:10 +0200 |
| commit | 8c8aba8cf50c74399d1ba7a86e0953ab32dbc3f3 (patch) | |
| tree | cb6261403e03d2470038b5df45d82b6750f3886c | |
| parent | 9424bac031db78ab23d1e5f21ec2906e3d603433 (diff) | |
[fix] engine radio browser: get servers from DNS api.radio-browser.info
Do a DNS-lookup of 'all.api.radio-browser.info', add reverse lookup and select
randomly a URL from available servers
Closes: https://github.com/searxng/searxng/issues/4576
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
| -rw-r--r-- | searx/data/engine_traits.json | 1 | ||||
| -rw-r--r-- | searx/engines/radio_browser.py | 23 |
2 files changed, 20 insertions, 4 deletions
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: |