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)
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
ProviderType.SPOTIFY: SpotifyProvider,
ProviderType.QOBUZ: QobuzProvider,
ProviderType.TUNEIN: TuneInProvider,
- ProviderType.YTMUSIC: YTMusic,
+ ProviderType.YTMUSIC: YoutubeMusicProvider,
}
-"""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
YTM_BASE_URL = f"{YTM_DOMAIN}/youtubei/v1/"
-class YTMusic(MusicProvider):
+class YoutubeMusicProvider(MusicProvider):
"""Provider for Youtube Music."""
_attr_type = ProviderType.YTMUSIC
)
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(
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"],
)
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"