handle non 200 responses better

This commit is contained in:
Akbar Rahman 2024-01-26 01:36:49 +00:00
parent e168b6f2df
commit 7b2ea2a93f
Signed by: alvierahman90
GPG Key ID: 6217899F07CA2BDF

View File

@ -18,13 +18,23 @@ class PlaylistUpdater:
def _update_tracks(self): def _update_tracks(self):
self._tracks = [] self._tracks = []
headers = { 'Authorization': f"Bearer {self._auth_token}" }
rnext = f"{self._spotify_api_endpoint}/me/tracks?limit=50" rnext = f"{self._spotify_api_endpoint}/me/tracks?limit=50"
while rnext is not None: while rnext is not None:
r = rq.get(rnext, headers = headers).json() r = self._fetch(rnext);
self._tracks += r['items'] self._tracks += r['items']
rnext = r['next'] rnext = r['next']
def _fetch(self, url):
headers = { 'Authorization': f"Bearer {self._auth_token}" }
while True:
r = rq.get(f"{url}", headers=headers)
if 200 <= r.status_code <= 299:
return r.json()
# slow down if spotify is applying rate limiting
if r.status_code == 429:
time.sleep(30)
# don't try again in a crazy fast loop to avoid rate limits
time.sleep(1)
def update_playlist(self, playlist_id): def update_playlist(self, playlist_id):
pltracks = [] pltracks = []
@ -34,12 +44,12 @@ class PlaylistUpdater:
headers = { 'Authorization': f"Bearer {self._auth_token}" } headers = { 'Authorization': f"Bearer {self._auth_token}" }
added_at_dict = {} added_at_dict = {}
r = rq.get(f"{self._spotify_api_endpoint}/playlists/{playlist_id}?fields=tracks,snapshot_id", headers = headers).json() r = self._fetch(f"{self._spotify_api_endpoint}/playlists/{playlist_id}?fields=tracks,snapshot_id")
snapshot_id = r['snapshot_id'] snapshot_id = r['snapshot_id']
pltracks = [t['track']['id'] for t in r['tracks']['items']] pltracks = [t['track']['id'] for t in r['tracks']['items']]
rnext = r['tracks']['next'] rnext = r['tracks']['next']
while rnext is not None: while rnext is not None:
r = rq.get(rnext, headers = headers).json() r = self._fetch(rnext)
for track in r['items']: for track in r['items']:
pltracks.append(track['track']['id']) pltracks.append(track['track']['id'])
rnext = r['next'] rnext = r['next']