website/website/spotify/client.py

40 lines
1.3 KiB
Python

from django.conf import settings
from website.common.utils import requests_session
API_LIMIT = 50
def is_valid_playlist(playlist_id: str) -> bool:
return requests_session.get(
settings.SPOTIFY_PROXY_URL + f"/v1/playlists/{playlist_id}"
).ok
def get_playlist(playlist_id: str) -> dict:
playlist_response = requests_session.get(
settings.SPOTIFY_PROXY_URL + f"/v1/playlists/{playlist_id}",
params={"fields": "name,external_urls.spotify,tracks.total,description"},
)
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_session.get(
settings.SPOTIFY_PROXY_URL + f"/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,duration_ms))",
},
)
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