67 servers = CACHE.get(
"servers", [])
72 ips = socket.getaddrinfo(
"all.api.radio-browser.info", 80, 0, 0, socket.IPPROTO_TCP)
74 _ip: str = ip_tuple[4][0]
75 url = socket.gethostbyaddr(_ip)[0]
76 srv =
"https://" + url
77 if srv
not in servers:
81 CACHE.set(key=
"servers", value=servers, expire=60 * 60 * 24)
167 """Fetch languages and countrycodes from RadioBrowser
169 - ``traits.languages``: `list of languages API`_
170 - ``traits.custom['countrycodes']``: `list of countries API`_
172 .. _list of countries API: https://de1.api.radio-browser.info/#List_of_countries
173 .. _list of languages API: https://de1.api.radio-browser.info/#List_of_languages
178 from babel.core
import get_global
180 babel_reg_list = get_global(
"territory_languages").keys()
183 language_list = get(f
'{server}/json/languages').
json()
184 country_list = get(f
'{server}/json/countries').
json()
186 for lang
in language_list:
188 babel_lang = lang.get(
'iso_639')
194 sxng_tag = language_tag(babel.Locale.parse(babel_lang, sep=
"-"))
195 except babel.UnknownLocaleError:
199 eng_tag = lang[
'name']
200 conflict = engine_traits.languages.get(sxng_tag)
202 if conflict != eng_tag:
203 print(
"CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, eng_tag))
205 engine_traits.languages[sxng_tag] = eng_tag
208 for region
in country_list:
210 _reg = region[
'iso_3166_1'].upper()
211 if _reg
not in babel_reg_list:
212 print(f
"ERROR: region tag {region['iso_3166_1']} is unknown by babel")
214 countrycodes.add(_reg)
216 countrycodes = list(countrycodes)
218 engine_traits.custom[
'countrycodes'] = countrycodes