From 5d01114a3ed9c95ba7d8eeecad992efea2315554 Mon Sep 17 00:00:00 2001 From: Marvin Schenkel Date: Wed, 6 Jul 2022 17:29:49 +0200 Subject: [PATCH] Add artist to track when possible --- examples/ytmusic.py | 32 ++++++++-------- music_assistant/controllers/music/__init__.py | 4 +- music_assistant/music_providers/ytmusic.py | 37 +++++++++++++------ 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/examples/ytmusic.py b/examples/ytmusic.py index e6247f48..6e7c77bb 100644 --- a/examples/ytmusic.py +++ b/examples/ytmusic.py @@ -123,31 +123,29 @@ async def main(): async with MusicAssistant(mass_conf) as mass: # get some data - # ytm = mass.music.get_provider(ProviderType.YTMUSIC) + ytm = mass.music.get_provider(ProviderType.YTMUSIC) # track = await ytm.get_track("pE3ju1qS848") # album = await ytm.get_album("MPREb_AYetWMZunqA") # await ytm.get_artist_albums("UCFpQsnvFBNlXi7rwQo6IW7g") - # albums = await ytm.get_artist_albums("UCFpQsnvFBNlXi7rwQo6IW7g")*") + tracks = await ytm.get_album_tracks("MPREb_LbqtMRfZssH") + # artist = await ytm.get_artist("UCRwXXG8ovUxqsJe_VwzdnXg") + # print(artist) + for track in tracks: + print(track) # start sync - await mass.music.start_sync(schedule=3) - artists = await mass.music.artists.count() - print(f"Got {artists} artists in library") - albums = await mass.music.albums.count() - print(f"Got {albums} albums in library") - tracks = await mass.music.tracks.count() - print(f"Got {tracks} tracks in library") - playlists = await mass.music.playlists.library() - print(f"Got {len(playlists)} playlists in library") + # await mass.music.start_sync(schedule=3) + # artists = await mass.music.artists.count() + # print(f"Got {artists} artists in library") + # albums = await mass.music.albums.count() + # print(f"Got {albums} albums in library") + # tracks = await mass.music.tracks.count() + # print(f"Got {tracks} tracks in library") + # playlists = await mass.music.playlists.library() + # print(f"Got {len(playlists)} playlists in library") # artists = await mass.music.artists.count() # print(f"Got {artists} artists in library") # albums = await mass.music.albums.count() # print(f"Got {albums} albums in library") - # sd = await yt.get_stream_details(track.item_id) - # print(sd.data) - - # test_player1 = TestPlayer("test1") - # await mass.players.register_player(test_player1) - # await test_player1.active_queue.play_media(track.uri) await asyncio.sleep(3600) diff --git a/music_assistant/controllers/music/__init__.py b/music_assistant/controllers/music/__init__.py index b0727179..81073cde 100755 --- a/music_assistant/controllers/music/__init__.py +++ b/music_assistant/controllers/music/__init__.py @@ -35,9 +35,9 @@ from music_assistant.music_providers.filesystem import FileSystemProvider from music_assistant.music_providers.qobuz import QobuzProvider from music_assistant.music_providers.spotify import SpotifyProvider from music_assistant.music_providers.tunein import TuneInProvider -from music_assistant.music_providers.ytmusic import YTMusic from music_assistant.music_providers.url import PROVIDER_CONFIG as URL_CONFIG from music_assistant.music_providers.url import URLProvider +from music_assistant.music_providers.ytmusic import YoutubeMusicProvider if TYPE_CHECKING: from music_assistant.mass import MusicAssistant @@ -47,7 +47,7 @@ PROV_MAP = { ProviderType.SPOTIFY: SpotifyProvider, ProviderType.QOBUZ: QobuzProvider, ProviderType.TUNEIN: TuneInProvider, - ProviderType.YTMUSIC: YTMusic, + ProviderType.YTMUSIC: YoutubeMusicProvider, } diff --git a/music_assistant/music_providers/ytmusic.py b/music_assistant/music_providers/ytmusic.py index 574f88a6..332770a5 100644 --- a/music_assistant/music_providers/ytmusic.py +++ b/music_assistant/music_providers/ytmusic.py @@ -1,5 +1,4 @@ -"""YT Music support for MusicAssistant.""" -import json +"""Youtube Music support for MusicAssistant.""" import re from datetime import date from typing import AsyncGenerator, Dict, List, Optional @@ -31,7 +30,7 @@ YTM_DOMAIN = "https://music.youtube.com" YTM_BASE_URL = f"{YTM_DOMAIN}/youtubei/v1/" -class YTMusic(MusicProvider): +class YoutubeMusicProvider(MusicProvider): """Provider for Youtube Music.""" _attr_type = ProviderType.YTMUSIC @@ -185,8 +184,11 @@ class YTMusic(MusicProvider): ) artists = [] for artist in item["artists"]: + artist_id = artist["id"] + if not artist_id: + artist_id = "ytm_va" album_artist = Artist( - item_id=artist["id"], name=artist["name"], provider=self.type + item_id=artist_id, name=artist["name"], provider=self.type ) album_artist.add_provider_id( MediaItemProviderId( @@ -492,8 +494,11 @@ class YTMusic(MusicProvider): artists = [] for parsed_artist in parsed_album["artists"]: if parsed_artist["id"]: + artist_id = parsed_artist["id"] + if not artist_id: + artist_id = "ytm_va" artist = Artist( - item_id=parsed_artist["id"], + item_id=artist_id, provider=self.type, name=parsed_artist["name"], ) @@ -579,13 +584,21 @@ class YTMusic(MusicProvider): name=track_obj["videoDetails"]["title"], duration=track_obj["videoDetails"]["lengthSeconds"], ) - print(json.dumps(track_obj)) - # artist = await self.get_artist( - # track_obj["microformat"]["microformatDataRenderer"]["pageOwnerDetails"][ - # "externalChannelId" - # ] - # ) - # track.artists = [artist] + artist_id = track_obj["microformat"]["microformatDataRenderer"][ + "pageOwnerDetails" + ]["externalChannelId"] + if artist_id == "UCUTXlgdcKU5vfzFqHOWIvkA": + artist = Artist( + item_id=artist_id, name="Various Artists", provider=self.type + ) + artist.add_provider_id( + MediaItemProviderId( + item_id=str(artist_id), prov_type=self.type, prov_id=self.id + ) + ) + else: + artist = await self.get_artist(artist_id) + track.artists = [artist] images = [] for thumb in track_obj["microformat"]["microformatDataRenderer"]["thumbnail"][ "thumbnails" -- 2.34.1