[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>
This commit is contained in:
parent
9424bac031
commit
8c8aba8cf5
@ -7196,6 +7196,7 @@
|
|||||||
"km": "khmer",
|
"km": "khmer",
|
||||||
"kn": "kannada",
|
"kn": "kannada",
|
||||||
"ko": "korean",
|
"ko": "korean",
|
||||||
|
"ks": "kashmiri",
|
||||||
"ku": "kurdish",
|
"ku": "kurdish",
|
||||||
"kw": "cornish",
|
"kw": "cornish",
|
||||||
"la": "latin",
|
"la": "latin",
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import random
|
||||||
|
import socket
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
import babel
|
import babel
|
||||||
from flask_babel import gettext
|
from flask_babel import gettext
|
||||||
@ -27,7 +29,6 @@ about = {
|
|||||||
paging = True
|
paging = True
|
||||||
categories = ['music', 'radio']
|
categories = ['music', 'radio']
|
||||||
|
|
||||||
base_url = "https://de1.api.radio-browser.info" # see https://api.radio-browser.info/ for all nodes
|
|
||||||
number_of_results = 10
|
number_of_results = 10
|
||||||
|
|
||||||
station_filters = [] # ['countrycode', 'language']
|
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):
|
def request(query, params):
|
||||||
args = {
|
args = {
|
||||||
@ -73,7 +87,7 @@ def request(query, params):
|
|||||||
if countrycode in traits.custom['countrycodes']: # type: ignore
|
if countrycode in traits.custom['countrycodes']: # type: ignore
|
||||||
args['countrycode'] = countrycode
|
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
|
return params
|
||||||
|
|
||||||
|
|
||||||
@ -135,12 +149,13 @@ def fetch_traits(engine_traits: EngineTraits):
|
|||||||
"""
|
"""
|
||||||
# pylint: disable=import-outside-toplevel
|
# pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
|
init(None)
|
||||||
from babel.core import get_global
|
from babel.core import get_global
|
||||||
|
|
||||||
babel_reg_list = get_global("territory_languages").keys()
|
babel_reg_list = get_global("territory_languages").keys()
|
||||||
|
|
||||||
language_list = get(f'{base_url}/json/languages').json() # type: ignore
|
language_list = get(f'{servers[0]}/json/languages').json() # type: ignore
|
||||||
country_list = get(f'{base_url}/json/countries').json() # type: ignore
|
country_list = get(f'{servers[0]}/json/countries').json() # type: ignore
|
||||||
|
|
||||||
for lang in language_list:
|
for lang in language_list:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user