Skip to content

Instantly share code, notes, and snippets.

@Bound3R
Created June 15, 2023 00:21
Show Gist options
  • Save Bound3R/75580747763e27a3104ceeaa93bf905b to your computer and use it in GitHub Desktop.
Save Bound3R/75580747763e27a3104ceeaa93bf905b to your computer and use it in GitHub Desktop.
Spotify - mix old/new songs
import spotipy
from spotipy.oauth2 import SpotifyOAuth
# ID de la playlist que deseas reorganizar
playlist_id = ''
client_id = ''
client_secret = ''
redirect_uri = 'http://localhost:8000/callback/'
def find_repeated_tracks(tracks):
track_names = {}
repeated_tracks = []
remix_tracks = []
similar_tracks = []
for track in tracks:
name = track['track']['name']
track_uri = track['track']['uri']
if name in track_names:
if track_uri not in track_names[name]:
repeated_tracks.append(name)
track_names[name].append(track_uri)
else:
track_names[name] = [track_uri]
if 'remix' in name.lower():
remix_tracks.append(name)
for existing_name in track_names.keys():
if existing_name.lower() in name.lower() and existing_name != name:
similar_tracks.append((name, existing_name))
if repeated_tracks:
print("Canciones repetidas:")
for track in repeated_tracks:
print(track)
if remix_tracks:
print("Canciones que son remix:")
for track in remix_tracks:
print(track)
if similar_tracks:
print("Canciones similares:")
for track, similar_track in similar_tracks:
print(f"{track} es similar a {similar_track}")
def reorder_playlist(playlist_id):
# Configurar autenticación de Spotify
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=client_id, client_secret=client_secret, redirect_uri=redirect_uri, scope='playlist-modify-private'))
# Obtener la lista de canciones de la playlist utilizando paginación
tracks = []
results = sp.playlist_items(playlist_id)
tracks.extend(results['items'])
while results['next']:
results = sp.next(results)
tracks.extend(results['items'])
# Encontrar canciones repetidas y remix
find_repeated_tracks(tracks)
# Ordenar las canciones por fecha de lanzamiento (de más antigua a más reciente)
tracks.sort(key=lambda x: x['track']['album']['release_date'])
# Eliminar todas las canciones de la playlist
sp.playlist_replace_items(playlist_id, [])
# Crear una nueva playlist para almacenar las canciones reorganizadas
# original_playlist = sp.playlist(playlist_id)
# new_playlist_name = original_playlist['name'] + ' - mixed'
# new_playlist = sp.user_playlist_create(sp.current_user()['id'], new_playlist_name, public=False)
# new_playlist_id = new_playlist['id']
# Reorganizar las canciones de forma intercalada
num_tracks = len(tracks)
mid_index = (num_tracks - 1) // 2
for i in range(mid_index + 1):
# Agregar la canción más antigua
track_uri = tracks[i]['track']['uri']
sp.playlist_add_items(playlist_id, [track_uri])
# Agregar la canción más nueva, si hay más de una canción
if i != mid_index:
track_uri = tracks[num_tracks - i - 1]['track']['uri']
sp.playlist_add_items(playlist_id, [track_uri])
print("La playlist ha sido reorganizada exitosamente.")
# Llamar a la función para reorganizar la playlist
reorder_playlist(playlist_id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment