Skip to content

Commit

Permalink
fix get_playlist continuations
Browse files Browse the repository at this point in the history
  • Loading branch information
sigma67 committed Feb 1, 2025
1 parent 535f153 commit f598dd5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 6 deletions.
27 changes: 27 additions & 0 deletions ytmusicapi/continuations.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
from typing import Any, Optional

from ytmusicapi.navigation import nav

CONTINUATION_TOKEN = ["continuationItemRenderer", "continuationEndpoint", "continuationCommand", "token"]
CONTINUATION_ITEMS = ["onResponseReceivedActions", 0, "appendContinuationItemsAction", "continuationItems"]


def get_continuation_token(results: list[dict[str, Any]]) -> Optional[str]:
return nav(results[-1], CONTINUATION_TOKEN, True)


def get_continuations_2025(results, limit, request_func, parse_func):
items = []
continuation_token = get_continuation_token(results["contents"])
while continuation_token and (limit is None or len(items) < limit):
response = request_func({"continuation": continuation_token})
continuation_items = nav(response, CONTINUATION_ITEMS, True)
if not continuation_items:
break

contents = get_continuation_contents(results, parse_func)
if len(contents) == 0:
break
items.extend(contents)
continuation_token = get_continuation_token(continuation_items)

return items


def get_continuations(
results, continuation_type, limit, request_func, parse_func, ctoken_path="", reloadable=False
Expand Down
8 changes: 2 additions & 6 deletions ytmusicapi/mixins/playlists.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,12 +182,8 @@ def get_playlist(
playlist["tracks"] = parse_playlist_items(content_data["contents"])

parse_func = lambda contents: parse_playlist_items(contents)
if "continuations" in content_data:
playlist["tracks"].extend(
get_continuations(
content_data, "musicPlaylistShelfContinuation", limit, request_func, parse_func
)
)
request_func = lambda body: self._send_request(endpoint, body)
playlist["tracks"].extend(get_continuations_2025(content_data, limit, request_func, parse_func))

playlist["duration_seconds"] = sum_total_duration(playlist)
return playlist
Expand Down

0 comments on commit f598dd5

Please sign in to comment.