76 servers = CACHE.get(
"servers", [])
81 ips = socket.getaddrinfo(
"all.api.radio-browser.info", 80, 0, 0, socket.IPPROTO_TCP)
83 _ip: str = ip_tuple[4][0]
84 url = socket.gethostbyaddr(_ip)[0]
85 srv =
"https://" + url
86 if srv
not in servers:
90 CACHE.set(key=
"servers", value=servers, expire=60 * 60 * 24)
176 """Fetch languages and countrycodes from RadioBrowser
178 - ``traits.languages``: `list of languages API`_
179 - ``traits.custom['countrycodes']``: `list of countries API`_
181 .. _list of countries API: https://de1.api.radio-browser.info/#List_of_countries
182 .. _list of languages API: https://de1.api.radio-browser.info/#List_of_languages
187 from babel.core
import get_global
189 babel_reg_list = get_global(
"territory_languages").keys()
192 language_list = get(f
'{server}/json/languages').
json()
193 country_list = get(f
'{server}/json/countries').
json()
195 for lang
in language_list:
197 babel_lang = lang.get(
'iso_639')
203 sxng_tag = language_tag(babel.Locale.parse(babel_lang, sep=
"-"))
204 except babel.UnknownLocaleError:
208 eng_tag = lang[
'name']
209 conflict = engine_traits.languages.get(sxng_tag)
211 if conflict != eng_tag:
212 print(
"CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, eng_tag))
214 engine_traits.languages[sxng_tag] = eng_tag
217 for region
in country_list:
219 _reg = region[
'iso_3166_1'].upper()
220 if _reg
not in babel_reg_list:
221 print(f
"ERROR: region tag {region['iso_3166_1']} is unknown by babel")
223 countrycodes.add(_reg)
225 countrycodes = list(countrycodes)
227 engine_traits.custom[
'countrycodes'] = countrycodes