#!/usr/bin/python3 import spotipy from spotipy.oauth2 import SpotifyOAuth import json import sys import datetime scope = "user-library-read playlist-modify-public" sp = spotipy.Spotify(auth_manager=SpotifyOAuth(scope=scope, client_id="1034e542fa064c27859b61a6ec5f864e", client_secret="2503172e78ce4d5e9146047db0a39077", redirect_uri="http://b.4a.si:25425/")) for playlist, rev in [("0ASvlSEvlQu5nyFwUZqf9n", False), ("4B9TSgOGQRRvFtOnQav42J", True)]: publicized_uris = [] results = {"items": [None]} offset = 0 while len(results["items"]) != 0: results = sp.playlist_items(playlist, None, 100, offset) for idx, item in enumerate(results["items"]): publicized_uris.append(item["track"]["uri"]) offset += 100 results = {"items": [None]} offset = 0 saved_items = [] to_add = [] while len(results["items"]) != 0: results = sp.current_user_saved_tracks(50, offset) for idx, item in enumerate(results['items']): saved_items.append(item) if item["track"]["uri"] not in publicized_uris: to_add.append(item["track"]["uri"]) else: publicized_uris.remove(item["track"]["uri"]) offset += 50 if rev == False: to_add.reverse() if len(to_add) != 0: iterator = [to_add[i:i+50] for i in range(0, len(to_add), 50)] if rev: iterator = reversed(iterator) for batch in iterator: sp.playlist_add_items(playlist, batch, 0 if rev else None) if len(publicized_uris) != 0: sp.playlist_remove_all_occurrences_of_items(playlist, publicized_uris) todaystring = datetime.datetime.now().isoformat().replace("T", " ").split(".")[0] sp.playlist_change_details(playlist, name="public mirror of my liked songs." + " [REVERSED]" if rev else "", public=True, collaborative=False, description=f"updated {todaystring} automatically daily using http://4a.si/spotsync") print(json.dumps(saved_items))