From 3beec61fed75da29fcb496ef0c2a91a94c9fe72a Mon Sep 17 00:00:00 2001 From: Marvin Schenkel Date: Tue, 13 Jun 2023 19:08:30 +0200 Subject: [PATCH] Change radio endpoint + oauth fixes (#712) --- music_assistant/server/providers/ytmusic/__init__.py | 6 ++++++ music_assistant/server/providers/ytmusic/helpers.py | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/music_assistant/server/providers/ytmusic/__init__.py b/music_assistant/server/providers/ytmusic/__init__.py index e5c9733a..a13693cb 100644 --- a/music_assistant/server/providers/ytmusic/__init__.py +++ b/music_assistant/server/providers/ytmusic/__init__.py @@ -264,12 +264,14 @@ class YoutubeMusicProvider(MusicProvider): async def get_album(self, prov_album_id) -> Album: """Get full album details by id.""" + await self._check_oauth_token() if album_obj := await get_album(prov_album_id=prov_album_id): return await self._parse_album(album_obj=album_obj, album_id=prov_album_id) raise MediaNotFoundError(f"Item {prov_album_id} not found") async def get_album_tracks(self, prov_album_id: str) -> list[Track]: """Get album tracks for given album id.""" + await self._check_oauth_token() album_obj = await get_album(prov_album_id=prov_album_id) if not album_obj.get("tracks"): return [] @@ -286,12 +288,14 @@ class YoutubeMusicProvider(MusicProvider): async def get_artist(self, prov_artist_id) -> Artist: """Get full artist details by id.""" + await self._check_oauth_token() if artist_obj := await get_artist(prov_artist_id=prov_artist_id, headers=self._headers): return await self._parse_artist(artist_obj=artist_obj) raise MediaNotFoundError(f"Item {prov_artist_id} not found") async def get_track(self, prov_track_id) -> Track: """Get full track details by id.""" + await self._check_oauth_token() if track_obj := await get_track(prov_track_id=prov_track_id): return await self._parse_track(track_obj) raise MediaNotFoundError(f"Item {prov_track_id} not found") @@ -336,6 +340,7 @@ class YoutubeMusicProvider(MusicProvider): async def get_artist_albums(self, prov_artist_id) -> list[Album]: """Get a list of albums for the given artist.""" + await self._check_oauth_token() artist_obj = await get_artist(prov_artist_id=prov_artist_id, headers=self._headers) if "albums" in artist_obj and "results" in artist_obj["albums"]: albums = [] @@ -350,6 +355,7 @@ class YoutubeMusicProvider(MusicProvider): async def get_artist_toptracks(self, prov_artist_id) -> list[Track]: """Get a list of 25 most popular tracks for the given artist.""" + await self._check_oauth_token() artist_obj = await get_artist(prov_artist_id=prov_artist_id, headers=self._headers) if artist_obj.get("songs") and artist_obj["songs"].get("browseId"): prov_playlist_id = artist_obj["songs"]["browseId"] diff --git a/music_assistant/server/providers/ytmusic/helpers.py b/music_assistant/server/providers/ytmusic/helpers.py index 2ab2b070..dc9ec5db 100644 --- a/music_assistant/server/providers/ytmusic/helpers.py +++ b/music_assistant/server/providers/ytmusic/helpers.py @@ -216,7 +216,9 @@ async def get_song_radio_tracks( def _get_song_radio_tracks(): ytm = ytmusicapi.YTMusic(auth=json.dumps(headers)) playlist_id = f"RDAMVM{prov_item_id}" - result = ytm.get_watch_playlist(videoId=prov_item_id, playlistId=playlist_id, limit=limit) + result = ytm.get_watch_playlist( + videoId=prov_item_id, playlistId=playlist_id, limit=limit, radio=True + ) # Replace inconsistensies for easier parsing for track in result["tracks"]: if track.get("thumbnail"): -- 2.34.1