Files
spotify-explicit/pull.py

65 lines
2.5 KiB
Python

import os
import sys
import auth
import json
import shutil
import pprint
import spotipy
import logging
from hurry.filesize import size, alternative
import spotipy.util as util
def main():
# Get Authorization
logging.basicConfig(level=logging.INFO)
logging.info('Authorizing with Spotify via Spotipy')
logging.warning('May require User Interaction to authenticate properly!')
token = util.prompt_for_user_token(
username=auth.username,
scope=auth.scope,
client_id=auth.client_id,
client_secret=auth.client_secret,
redirect_uri=auth.redirect_uri
)
sp = spotipy.Spotify(auth=token)
logging.info('Authorized with Spotify via Spotipy')
tracks_folder = os.path.join(sys.path[0], 'tracks')
logging.warning('Clearing all files in tracks folder for new files')
if os.path.exists(tracks_folder):
shutil.rmtree(tracks_folder) # Delete folder and all contents (old track files)
os.makedirs(tracks_folder) # Recreate the folder just deleted
logging.info('Cleared folder, ready to download new track files')
curoffset, curlimit = 0, 50
while curoffset >= 0:
# Request and identify what was received
logging.info('Requesting {} to {}'.format(curoffset, curoffset + curlimit))
response = sp.current_user_saved_tracks(limit=curlimit, offset=curoffset)
received = len(response['items'])
logging.info('Received {} to {}'.format(curoffset, curoffset + received))
# Create path/filename
filename = f'saved-tracks-{curoffset}-{curoffset + received}.json'
filepath = os.path.join(tracks_folder, filename)
# Save track file
with open(filepath, 'w+') as file:
json.dump(response, file)
logging.info('Saved at "{}" ({})'.format(
f'\\tracks\\{filename}',
size(os.path.getsize(filepath)))
)
# Decide whether we have received all possible tracks
if received < curlimit:
logging.info('Requested and saved {} tracks split over {} files ({})'.format(
curoffset + received,
len(os.listdir(tracks_folder)),
size(
sum(
os.path.getsize(os.path.join(tracks_folder, file)) for file in os.listdir(tracks_folder)
),
system=alternative
)
))
break
# Continuing, so increment offset
curoffset += curlimit