Fix parsing bugs
authorMarvin Schenkel <marvinschenkel@gmail.com>
Fri, 8 Jul 2022 18:50:26 +0000 (20:50 +0200)
committerMarvin Schenkel <marvinschenkel@gmail.com>
Fri, 8 Jul 2022 18:50:26 +0000 (20:50 +0200)
music_assistant/music_providers/ytmusic/helpers.py
music_assistant/music_providers/ytmusic/ytmusic.py

index cb559ce7d38ee91f6751ae51e5e9b03c9879e8cd..97a4478679fb36ddd612f2732b169dfa6717febb 100644 (file)
@@ -19,7 +19,12 @@ async def get_artist(prov_artist_id: str) -> Dict[str, str]:
 
     def _get_artist():
         ytm = ytmusicapi.YTMusic()
-        return ytm.get_artist(channelId=prov_artist_id)
+        try:
+            artist = ytm.get_artist(channelId=prov_artist_id)
+        except KeyError:
+            user = ytm.get_user(channelId=prov_artist_id)
+            artist = {"channelId": prov_artist_id, "name": user["name"]}
+        return artist
 
     loop = asyncio.get_running_loop()
     return await loop.run_in_executor(None, _get_artist)
index ece93b20cc6165c6a4b7a2b43664a39891bf5dc2..f303d34f0486f0cf53beb7970981986632ff784e 100644 (file)
@@ -104,7 +104,16 @@ class YoutubeMusicProvider(MusicProvider):
             elif result["resultType"] == "playlist":
                 parsed_results.append(await self._parse_playlist(result))
             elif result["resultType"] == "song":
-                parsed_results.append(await self._parse_track(result))
+                # Tracks from search results sometimes do not have a valid artist id
+                # In that case, call the API for track details based on track id
+                try:
+                    track = await self._parse_track(result)
+                    if track:
+                        parsed_results.append(track)
+                except InvalidDataError:
+                    track = await self.get_track(result["videoId"])
+                    if track:
+                        parsed_results.append(track)
         return parsed_results
 
     async def get_library_artists(self) -> AsyncGenerator[Artist, None]:
@@ -366,8 +375,6 @@ class YoutubeMusicProvider(MusicProvider):
             playlist.metadata.images = await self._parse_thumbnails(
                 playlist_obj["thumbnails"]
             )
-        if "author" in playlist_obj:
-            playlist.owner = playlist_obj["author"]
         playlist.add_provider_id(
             MediaItemProviderId(
                 item_id=playlist_obj["id"], prov_type=self.type, prov_id=self.id
@@ -413,8 +420,6 @@ class YoutubeMusicProvider(MusicProvider):
                 available=available,
             )
         )
-        if not track.item_id:
-            print("what?")
         return track
 
     async def _get_signature_timestamp(self):