Skip to content
Snippets Groups Projects
Commit 47977cf7 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

added SpotifyImport

parent 9b2754e5
No related branches found
No related tags found
No related merge requests found
exports/ exports/
config/settings.json config/settings-backup.json
config/settings-import.json
Pipfile.lock Pipfile.lock
\ No newline at end of file
...@@ -99,7 +99,7 @@ class SpotifyBackup: ...@@ -99,7 +99,7 @@ class SpotifyBackup:
if __name__ == '__main__': if __name__ == '__main__':
with open('config/settings.json', 'r', encoding='utf-8') as f: with open('config/settings-backup.json', 'r', encoding='utf-8') as f:
SETTINGS = json.load(f) SETTINGS = json.load(f)
spotifyBackup = SpotifyBackup(SETTINGS['spotifyAPI']['clientID'], spotifyBackup = SpotifyBackup(SETTINGS['spotifyAPI']['clientID'],
......
import csv
import json
import time
from typing import List
import spotipy
from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger
from spotipy.oauth2 import SpotifyPKCE
LOG_FORMAT = '[%(levelname)-7s] - %(asctime)s - %(message)s'
LOGGER = DefaultLogger().create_logger_if_not_exists('SpotifyBackup', logFormat=LOG_FORMAT)
class SpotifyImport:
def __init__(self, clientID: str):
client_credentials_manager = SpotifyPKCE(client_id=clientID, redirect_uri='http://localhost',
scope='playlist-modify-private')
self._spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
def import_playlist(self, backupFilePath: str, username: str, playlistID: str):
tracks = self.__load_backup_file(backupFilePath)
identifier = f'spotify:user:{username}:playlist:{playlistID}'
LOGGER.info(f'>>> Importing tracks to playlist "{playlistID}"...')
numberOfImportedTracks = 0
for index, track in enumerate(tracks):
LOGGER.info(f'Importing {index + 1}/{len(tracks)} - "{track}"...')
try:
self._spotify.playlist_add_items(identifier, [track])
numberOfImportedTracks += 1
time.sleep(1)
except:
LOGGER.error(f'Error importing track {index + 1}/{len(tracks)} - "{track}"!')
LOGGER.info(f'Importing DONE ({numberOfImportedTracks}/{len(tracks)}) successful')
def __load_backup_file(self, backupFilePath: str) -> List[str]:
LOGGER.info(f'>>> Parsing backup file "{backupFilePath}"...')
tracks = []
with open(backupFilePath, 'r', newline='', encoding='utf-8') as f:
reader = csv.reader(f, delimiter=';', quotechar='|', quoting=csv.QUOTE_MINIMAL)
next(reader) # skip header
for row in reader:
trackUrl = row[-1]
if trackUrl:
tracks.append(trackUrl)
LOGGER.info(f'>>> Found {len(tracks)} tracks in backup file')
return tracks
if __name__ == '__main__':
with open('config/settings-import.json', 'r', encoding='utf-8') as f:
SETTINGS = json.load(f)
spotifyImport = SpotifyImport(SETTINGS['spotifyAPI']['clientID'])
for playlist in SETTINGS['playlists']:
spotifyImport.import_playlist(playlist['backupFilePath'], playlist['user'], playlist['id'])
LOGGER.info('### DONE ###')
File moved
{
"spotifyAPI": {
"clientID": ""
},
"playlists": [
{
"backupFilePath": "",
"user": "",
"id": ""
}
]
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment