diff --git a/ycast/radiobrowser.py b/ycast/radiobrowser.py index 04d1d45..3daa0e0 100644 --- a/ycast/radiobrowser.py +++ b/ycast/radiobrowser.py @@ -7,6 +7,7 @@ import ycast.generic as generic MINIMUM_COUNT_GENRE = 5 MINIMUM_COUNT_COUNTRY = 5 +MINIMUM_COUNT_LANGUAGE = 5 DEFAULT_STATION_LIMIT = 200 SHOW_BROKEN_STATIONS = False ID_PREFIX = "RB" @@ -78,6 +79,20 @@ def get_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(): genre_directories = [] apicall = 'tags' @@ -101,6 +116,15 @@ def get_stations_by_country(country): 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): stations = [] stations_json = request('stations/search?order=name&reverse=false&tagExact=true&tag=' + str(genre)) diff --git a/ycast/server.py b/ycast/server.py index eb399f6..aa6ae6c 100644 --- a/ycast/server.py +++ b/ycast/server.py @@ -11,6 +11,7 @@ PATH_ROOT = 'ycast' PATH_MY_STATIONS = 'my_stations' PATH_RADIOBROWSER = 'radiobrowser' PATH_RADIOBROWSER_COUNTRY = 'country' +PATH_RADIOBROWSER_LANGUAGE = 'language' PATH_RADIOBROWSER_GENRE = 'genre' PATH_RADIOBROWSER_POPULAR = 'popular' PATH_RADIOBROWSER_SEARCH = 'search' @@ -87,7 +88,7 @@ def landing(path): if request.args.get('token') == '0': return vtuner.get_init_token() 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: page.add(vtuner.Directory('My Stations', url_for('my_stations_landing', _external=True), len(my_stations.get_category_directories()))) @@ -118,6 +119,8 @@ def radiobrowser_landing(): len(radiobrowser.get_genre_directories()))) page.add(vtuner.Directory('Countries', url_for('radiobrowser_countries', _external=True), 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), len(radiobrowser.get_stations_by_votes()))) 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() +@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 + '/') +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 + '/') def radiobrowser_genres(): directories = radiobrowser.get_genre_directories()