From 558e550350a487e14b8b09672ddf207564135d3b Mon Sep 17 00:00:00 2001 From: Mario Krattenmacher Date: Thu, 17 Dec 2020 15:59:58 +0100 Subject: [PATCH] fixed apiUrl and added favorites --- mopidy_radionet/__init__.py | 3 ++- mopidy_radionet/backend.py | 2 ++ mopidy_radionet/ext.conf | 1 + mopidy_radionet/library.py | 8 ++++++++ mopidy_radionet/radionet.py | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/mopidy_radionet/__init__.py b/mopidy_radionet/__init__.py index 8b6c2f1..7778a36 100644 --- a/mopidy_radionet/__init__.py +++ b/mopidy_radionet/__init__.py @@ -6,7 +6,7 @@ import os from mopidy import config, ext -__version__ = '0.2.1' +__version__ = '0.2.2' logger = logging.getLogger(__name__) @@ -26,6 +26,7 @@ class Extension(ext.Extension): schema = super(Extension, self).get_config_schema() schema['language'] = config.String() schema['min_bitrate'] = config.String() + schema['favorite_stations'] = config.List() return schema def setup(self, registry): diff --git a/mopidy_radionet/backend.py b/mopidy_radionet/backend.py index 5752e2b..da365de 100644 --- a/mopidy_radionet/backend.py +++ b/mopidy_radionet/backend.py @@ -29,6 +29,7 @@ class RadioNetBackend(pykka.ThreadingActor, backend.Backend): self.radionet.min_bitrate = int(config['radionet']['min_bitrate']) self.radionet.set_lang(str(config['radionet']['language'])) + self.radionet.set_favorites(tuple(file_ext.lower() for file_ext in config["radionet"]["favorite_stations"])) def set_update_timeout(self, minutes=2): self.update_timeout = time.time() + 60 * minutes @@ -43,4 +44,5 @@ class RadioNetBackend(pykka.ThreadingActor, backend.Backend): if force or time.time() > self.update_timeout: self.radionet.get_top_stations() self.radionet.get_local_stations() + self.radionet.get_favorites() self.set_update_timeout() diff --git a/mopidy_radionet/ext.conf b/mopidy_radionet/ext.conf index 749507c..b7fbfb3 100644 --- a/mopidy_radionet/ext.conf +++ b/mopidy_radionet/ext.conf @@ -2,3 +2,4 @@ enabled = true language = pl min_bitrate = 96 +favorite_stations = \ No newline at end of file diff --git a/mopidy_radionet/library.py b/mopidy_radionet/library.py index c059974..060e419 100644 --- a/mopidy_radionet/library.py +++ b/mopidy_radionet/library.py @@ -62,6 +62,11 @@ class RadioNetLibraryProvider(backend.LibraryProvider): self.ref_directory( "radionet:category:top100", "Top 100") ) + if self.backend.radionet.favorite_stations: + directories.append( + self.ref_directory( + "radionet:category:favorites", "Favorites") + ) return directories elif variant == 'category' and identifier: if identifier == "localstations": @@ -70,6 +75,9 @@ class RadioNetLibraryProvider(backend.LibraryProvider): if identifier == "top100": for station in self.backend.radionet.top_stations: tracks.append(self.station_to_ref(station)) + if identifier == "favorites": + for station in self.backend.radionet.favorite_stations: + tracks.append(self.station_to_ref(station)) tracks.sort(key=lambda ref: ref.name) return tracks else: diff --git a/mopidy_radionet/radionet.py b/mopidy_radionet/radionet.py index 709a010..e9e86ac 100644 --- a/mopidy_radionet/radionet.py +++ b/mopidy_radionet/radionet.py @@ -76,6 +76,7 @@ class RadioNetClient(object): apiprefix_search = re.search('apiPrefix ?: ?\'(.*)\',?', tmp_str.content.decode()) self.api_prefix = apiprefix_search.group(1) + self.api_prefix = "https://api.radio." + 'de' + "/info/v2" apikey_search = re.search('apiKey ?: ?[\'|"](.*)[\'|"],?', tmp_str.content.decode()) self.api_key = apikey_search.group(1) @@ -170,6 +171,37 @@ class RadioNetClient(object): logger.info('Radio.net: Loaded ' + str(len(self.local_stations)) + ' local stations.') + def set_favorites(self, favorites): + self.favortes = favorites + + def get_favorites(self): + self.favorite_stations = [] + + for station in self.favortes: + api_suffix = '/search/stationsonly' + url_params = { + 'apikey': self.api_key, + '_': self.current_milli_time(), + 'query': station, + 'pageindex': 1, + } + + response = self.do_post(api_suffix, url_params) + + if response.status_code is not 200: + logger.error('Radio.net: Search error ' + response.text) + else: + logger.debug('Radio.net: Done search') + json = response.json() + + # take only the first match! + station = self.get_station_by_id(json['categories'][0]['matches'][0]['id']) + if station and station.playable: + self.favorite_stations.append(station) + + logger.info('Radio.net: Loaded ' + str(len(self.favorite_stations)) + + ' favorite stations.') + def get_top_stations(self): self.top_stations = [] api_suffix = '/search/topstations'