summaryrefslogblamecommitdiffstats
path: root/skripti/spotify_publish_saved.py
blob: a7f737a668c6c22e16a7f306da3221f28fe15123 (plain) (tree)
1
2
3
4
5
6
7
8




                                       
               

                                                                                                                                                                                                  


































                                                                                                                                                                                                                                            
#!/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))