Skip to content

Commit

Permalink
Fix pytube not matching function name. (#731)
Browse files Browse the repository at this point in the history
* Fix pytube not matching function name.

* Fix personal playlists for multiple instances. (#725)
  • Loading branch information
MarvinSchenkel authored Jun 24, 2023
1 parent 2354edf commit e1bff24
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 12 deletions.
26 changes: 18 additions & 8 deletions music_assistant/server/providers/ytmusic/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,11 @@ async def get_artist(self, prov_artist_id) -> Artist:
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, headers=self._headers):
if track_obj := await get_track(
prov_track_id=prov_track_id,
headers=self._headers,
signature_timestamp=self._signature_timestamp,
):
return await self._parse_track(track_obj)
raise MediaNotFoundError(f"Item {prov_track_id} not found")

Expand Down Expand Up @@ -485,13 +489,19 @@ async def get_similar_tracks(self, prov_track_id, limit=25) -> list[Track]:

async def get_stream_details(self, item_id: str, retry=0) -> StreamDetails:
"""Return the content details for the given track when it will be streamed."""
data = {
"playbackContext": {
"contentPlaybackContext": {"signatureTimestamp": self._signature_timestamp}
},
"video_id": item_id,
}
track_obj = await self._post_data("player", data=data)
# Misschien dit vervangen met api.get_song()? https://github.com/KoljaWindeler/ytube_music_player/blob/main/custom_components/ytube_music_player/media_player.py#L1493
# data = {
# "playbackContext": {
# "contentPlaybackContext": {"signatureTimestamp": self._signature_timestamp}
# },
# "video_id": item_id,
# }
# track_obj = await self._post_data("player", data=data)
track_obj = await get_track(
prov_track_id=item_id,
headers=self._headers,
signature_timestamp=self._signature_timestamp,
)
stream_format = await self._parse_stream_format(track_obj)
url = await self._parse_stream_url(stream_format=stream_format, item_id=item_id)
if not await self._is_valid_deciphered_url(url=url):
Expand Down
7 changes: 5 additions & 2 deletions music_assistant/server/providers/ytmusic/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,14 @@ def _get_playlist():
return await asyncio.to_thread(_get_playlist)


async def get_track(prov_track_id: str, headers: dict[str, str]) -> dict[str, str]:
async def get_track(
prov_track_id: str, headers: dict[str, str], signature_timestamp: str
) -> dict[str, str]:
"""Async wrapper around the ytmusicapi get_playlist function."""

def _get_song():
ytm = ytmusicapi.YTMusic(auth=json.dumps(headers))
track_obj = ytm.get_song(videoId=prov_track_id)
track_obj = ytm.get_song(videoId=prov_track_id, signatureTimestamp=signature_timestamp)
track = {}
track["videoId"] = track_obj["videoDetails"]["videoId"]
track["title"] = track_obj["videoDetails"]["title"]
Expand All @@ -83,6 +85,7 @@ def _get_song():
"thumbnails"
]
track["isAvailable"] = track_obj["playabilityStatus"]["status"] == "OK"
track["streamingData"] = track_obj["streamingData"]
return track

return await asyncio.to_thread(_get_song)
Expand Down
2 changes: 1 addition & 1 deletion music_assistant/server/providers/ytmusic/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"name": "YouTube Music",
"description": "Support for the YouTube Music streaming provider in Music Assistant.",
"codeowners": ["@MarvinSchenkel"],
"requirements": ["ytmusicapi==1.0.0", "git+https://github.com/pytube/pytube.git@refs/pull/1501/head"],
"requirements": ["ytmusicapi==1.0.0", "git+https://github.com/pytube/pytube.git@refs/pull/1680/head"],
"documentation": "https://github.com/music-assistant/hass-music-assistant/discussions/606",
"multi_instance": true
}
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ deezer-python==5.12.0
faust-cchardet>=2.1.18
git+https://github.com/gieljnssns/python-radios.git@main
git+https://github.com/jozefKruszynski/[email protected]
git+https://github.com/pytube/pytube.git@refs/pull/1501/head
git+https://github.com/pytube/pytube.git@refs/pull/1680/head
mashumaro==3.7
memory-tempfile==2.2.3
music-assistant-frontend==20230616.0
Expand Down

0 comments on commit e1bff24

Please sign in to comment.