From 872a6c0b30df0ef0f36c81e8a5672e9589d36e75 Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Thu, 18 Aug 2022 09:20:34 +0100 Subject: [PATCH] Get all pages of playlist data This also only gets the fields we need --- website/spotify/client.py | 30 ++++++++++++++++--- .../spotify/spotify_playlist_page.html | 2 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/website/spotify/client.py b/website/spotify/client.py index ae8a3c8..446c972 100644 --- a/website/spotify/client.py +++ b/website/spotify/client.py @@ -1,6 +1,8 @@ import requests from django.conf import settings +API_LIMIT = 50 + def is_valid_playlist(playlist_id: str) -> bool: return requests.get( @@ -9,8 +11,28 @@ def is_valid_playlist(playlist_id: str) -> bool: def get_playlist(playlist_id: str) -> dict: - response = requests.get( - f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}" + playlist_response = requests.get( + f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}", + params={"fields": "name,external_urls.spotify,tracks.total"}, ) - response.raise_for_status() - return response.json() + playlist_response.raise_for_status() + playlist_data = playlist_response.json() + + tracks = [] + for offset in range(0, playlist_data["tracks"]["total"], API_LIMIT): + tracks_response = requests.get( + f"https://{settings.SPOTIFY_PROXY_HOST}/v1/playlists/{playlist_id}/tracks", + params={ + "offset": str(offset), + "limit": str(API_LIMIT), + "fields": "items(track(name,album.name,album.images,artists.name,external_urls.spotify,preview_url))", + }, + ) + tracks_response.raise_for_status() + tracks.extend(tracks_response.json()["items"]) + + playlist_data["tracks"] = sorted( + tracks, key=lambda track: track["track"]["name"].lower() + ) + + return playlist_data diff --git a/website/spotify/templates/spotify/spotify_playlist_page.html b/website/spotify/templates/spotify/spotify_playlist_page.html index 10fa75d..032069f 100644 --- a/website/spotify/templates/spotify/spotify_playlist_page.html +++ b/website/spotify/templates/spotify/spotify_playlist_page.html @@ -14,7 +14,7 @@ - {% include "spotify/spotify-items.html" with tracks=playlist.tracks.items %} + {% include "spotify/spotify-items.html" with tracks=playlist.tracks %}