Ver Fonte

Add Radiobrowser station language listing

Co-authored-by: Zenith-Nadir <Zenith-Nadir@users.noreply.github.com>
milaq há 6 anos atrás
pai
commit
1a51bd195c
2 ficheiros alterados com 40 adições e 1 exclusões
  1. 24 0
      ycast/radiobrowser.py
  2. 16 1
      ycast/server.py

+ 24 - 0
ycast/radiobrowser.py

@@ -7,6 +7,7 @@ import ycast.generic as generic
 
 
 MINIMUM_COUNT_GENRE = 5
 MINIMUM_COUNT_GENRE = 5
 MINIMUM_COUNT_COUNTRY = 5
 MINIMUM_COUNT_COUNTRY = 5
+MINIMUM_COUNT_LANGUAGE = 5
 DEFAULT_STATION_LIMIT = 200
 DEFAULT_STATION_LIMIT = 200
 SHOW_BROKEN_STATIONS = False
 SHOW_BROKEN_STATIONS = False
 ID_PREFIX = "RB"
 ID_PREFIX = "RB"
@@ -78,6 +79,20 @@ def get_country_directories():
     return country_directories
     return country_directories
 
 
 
 
+def get_language_directories():
+    language_directories = []
+    apicall = 'languages'
+    if not SHOW_BROKEN_STATIONS:
+        apicall += '?hidebroken=true'
+    languages_raw = request(apicall)
+    for language_raw in languages_raw:
+        if get_json_attr(language_raw, 'name') and get_json_attr(language_raw, 'stationcount') and \
+                int(get_json_attr(language_raw, 'stationcount')) > MINIMUM_COUNT_LANGUAGE:
+            language_directories.append(generic.Directory(get_json_attr(language_raw, 'name'),
+                                                          get_json_attr(language_raw, 'stationcount')))
+    return language_directories
+
+
 def get_genre_directories():
 def get_genre_directories():
     genre_directories = []
     genre_directories = []
     apicall = 'tags'
     apicall = 'tags'
@@ -101,6 +116,15 @@ def get_stations_by_country(country):
     return stations
     return stations
 
 
 
 
+def get_stations_by_language(language):
+    stations = []
+    stations_json = request('stations/search?order=name&reverse=false&languageExact=true&language=' + str(language))
+    for station_json in stations_json:
+        if SHOW_BROKEN_STATIONS or get_json_attr(station_json, 'lastcheckok') == '1':
+            stations.append(Station(station_json))
+    return stations
+
+
 def get_stations_by_genre(genre):
 def get_stations_by_genre(genre):
     stations = []
     stations = []
     stations_json = request('stations/search?order=name&reverse=false&tagExact=true&tag=' + str(genre))
     stations_json = request('stations/search?order=name&reverse=false&tagExact=true&tag=' + str(genre))

+ 16 - 1
ycast/server.py

@@ -11,6 +11,7 @@ PATH_ROOT = 'ycast'
 PATH_MY_STATIONS = 'my_stations'
 PATH_MY_STATIONS = 'my_stations'
 PATH_RADIOBROWSER = 'radiobrowser'
 PATH_RADIOBROWSER = 'radiobrowser'
 PATH_RADIOBROWSER_COUNTRY = 'country'
 PATH_RADIOBROWSER_COUNTRY = 'country'
+PATH_RADIOBROWSER_LANGUAGE = 'language'
 PATH_RADIOBROWSER_GENRE = 'genre'
 PATH_RADIOBROWSER_GENRE = 'genre'
 PATH_RADIOBROWSER_POPULAR = 'popular'
 PATH_RADIOBROWSER_POPULAR = 'popular'
 PATH_RADIOBROWSER_SEARCH = 'search'
 PATH_RADIOBROWSER_SEARCH = 'search'
@@ -87,7 +88,7 @@ def landing(path):
     if request.args.get('token') == '0':
     if request.args.get('token') == '0':
         return vtuner.get_init_token()
         return vtuner.get_init_token()
     page = vtuner.Page()
     page = vtuner.Page()
-    page.add(vtuner.Directory('Radiobrowser', url_for('radiobrowser_landing', _external=True), 4))
+    page.add(vtuner.Directory('Radiobrowser', url_for('radiobrowser_landing', _external=True), 5))
     if my_stations_enabled:
     if my_stations_enabled:
         page.add(vtuner.Directory('My Stations', url_for('my_stations_landing', _external=True),
         page.add(vtuner.Directory('My Stations', url_for('my_stations_landing', _external=True),
                                   len(my_stations.get_category_directories())))
                                   len(my_stations.get_category_directories())))
@@ -118,6 +119,8 @@ def radiobrowser_landing():
                               len(radiobrowser.get_genre_directories())))
                               len(radiobrowser.get_genre_directories())))
     page.add(vtuner.Directory('Countries', url_for('radiobrowser_countries', _external=True),
     page.add(vtuner.Directory('Countries', url_for('radiobrowser_countries', _external=True),
                               len(radiobrowser.get_country_directories())))
                               len(radiobrowser.get_country_directories())))
+    page.add(vtuner.Directory('Languages', url_for('radiobrowser_languages', _external=True),
+                              len(radiobrowser.get_language_directories())))
     page.add(vtuner.Directory('Most Popular', url_for('radiobrowser_popular', _external=True),
     page.add(vtuner.Directory('Most Popular', url_for('radiobrowser_popular', _external=True),
                               len(radiobrowser.get_stations_by_votes())))
                               len(radiobrowser.get_stations_by_votes())))
     page.add(vtuner.Search('Search', url_for('radiobrowser_search', _external=True, path='')))
     page.add(vtuner.Search('Search', url_for('radiobrowser_search', _external=True, path='')))
@@ -136,6 +139,18 @@ def radiobrowser_country_stations(directory):
     return get_stations_page(stations, request.args).to_string()
     return get_stations_page(stations, request.args).to_string()
 
 
 
 
+@app.route('/' + PATH_ROOT + '/' + PATH_RADIOBROWSER + '/' + PATH_RADIOBROWSER_LANGUAGE + '/')
+def radiobrowser_languages():
+    directories = radiobrowser.get_language_directories()
+    return get_directories_page('radiobrowser_language_stations', directories, request.args).to_string()
+
+
+@app.route('/' + PATH_ROOT + '/' + PATH_RADIOBROWSER + '/' + PATH_RADIOBROWSER_LANGUAGE + '/<directory>')
+def radiobrowser_language_stations(directory):
+    stations = radiobrowser.get_stations_by_language(directory)
+    return get_stations_page(stations, request.args).to_string()
+
+
 @app.route('/' + PATH_ROOT + '/' + PATH_RADIOBROWSER + '/' + PATH_RADIOBROWSER_GENRE + '/')
 @app.route('/' + PATH_ROOT + '/' + PATH_RADIOBROWSER + '/' + PATH_RADIOBROWSER_GENRE + '/')
 def radiobrowser_genres():
 def radiobrowser_genres():
     directories = radiobrowser.get_genre_directories()
     directories = radiobrowser.get_genre_directories()