60 ips = socket.getaddrinfo(
"all.api.radio-browser.info", 80, 0, 0, socket.IPPROTO_TCP)
62 _ip: str = ip_tuple[4][0]
63 url = socket.gethostbyaddr(_ip)[0]
64 srv =
"https://" + url
65 if srv
not in servers:
142 """Fetch languages and countrycodes from RadioBrowser
144 - ``traits.languages``: `list of languages API`_
145 - ``traits.custom['countrycodes']``: `list of countries API`_
147 .. _list of countries API: https://de1.api.radio-browser.info/#List_of_countries
148 .. _list of languages API: https://de1.api.radio-browser.info/#List_of_languages
153 from babel.core
import get_global
155 babel_reg_list = get_global(
"territory_languages").keys()
157 language_list = get(f
'{servers[0]}/json/languages').
json()
158 country_list = get(f
'{servers[0]}/json/countries').
json()
160 for lang
in language_list:
162 babel_lang = lang.get(
'iso_639')
168 sxng_tag = language_tag(babel.Locale.parse(babel_lang, sep=
"-"))
169 except babel.UnknownLocaleError:
173 eng_tag = lang[
'name']
174 conflict = engine_traits.languages.get(sxng_tag)
176 if conflict != eng_tag:
177 print(
"CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, eng_tag))
179 engine_traits.languages[sxng_tag] = eng_tag
182 for region
in country_list:
184 _reg = region[
'iso_3166_1'].upper()
185 if _reg
not in babel_reg_list:
186 print(f
"ERROR: region tag {region['iso_3166_1']} is unknown by babel")
188 countrycodes.add(_reg)
190 countrycodes = list(countrycodes)
192 engine_traits.custom[
'countrycodes'] = countrycodes