From 0257355d994f6fe0292dce4f533f048b48064efb Mon Sep 17 00:00:00 2001 From: Casey Chu Date: Fri, 9 Oct 2020 20:02:14 -0700 Subject: [PATCH] Add progress for pagination --- spotify-backup.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spotify-backup.py b/spotify-backup.py index 99d3940..af23668 100755 --- a/spotify-backup.py +++ b/spotify-backup.py @@ -48,9 +48,15 @@ class SpotifyAPI: # The Spotify API breaks long lists into multiple pages. This method automatically # fetches all pages and joins them, returning in a single list of objects. def list(self, url, params={}): + last_log_time = time.time() response = self.get(url, params) items = response['items'] + while response['next']: + if time.time() > last_log_time + 15: + last_log_time = time.time() + logging.info(f"Loaded {len(items)}/{response['total']} items") + response = self.get(response['next']) items += response['items'] return items @@ -142,14 +148,17 @@ def main(): else: spotify = SpotifyAPI.authorize(client_id='5c098bcc800e45d49e476265bc9b6934', scope='playlist-read-private playlist-read-collaborative user-library-read') - logging.info('Loading info...') # Get the ID of the logged in user. + logging.info('Loading user info...') me = spotify.get('me') logging.info('Logged in as {display_name} ({id})'.format(**me)) # List all playlists and all track in each playlist. + logging.info('Loading playlists...') playlists = spotify.list('users/{user_id}/playlists'.format(user_id=me['id']), {'limit': 50}) + logging.info(f'Found {len(playlists)} playlists') + for playlist in playlists: logging.info('Loading playlist: {name} ({tracks[total]} songs)'.format(**playlist)) playlist['tracks'] = spotify.list(playlist['tracks']['href'], {'limit': 100})