Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with sp.track(track_id) function freezing code execution #1105

Closed
JosepVargasf opened this issue May 9, 2024 · 3 comments
Closed

Issue with sp.track(track_id) function freezing code execution #1105

JosepVargasf opened this issue May 9, 2024 · 3 comments
Labels

Comments

@JosepVargasf
Copy link

Hello everyone.

I am encountering an issue while using the sp.track(track_id) function in my code. Whenever I execute this function, my code freezes, seemingly awaiting a response from Spotify that never arrives. I suspect there might be a delay or lack of response from Spotify's end. Could someone provide assistance or guidance on how to resolve this issue?

`from .escribir_metadata import escribir_metadata

def obtener_genero_cancion(spotify, track_id):
# Obtener los detalles de la pista
track_data = spotify.track(track_id)

# Inicializar una lista para almacenar los géneros de los artistas
artist_genres = []

# Obtener los géneros de cada artista asociado a la canción
for artist in track_data["artists"]:
    artist_data = spotify.artist(artist["id"])
    artist_genres.extend(artist_data["genres"])

# Contar la frecuencia de cada género
genre_counts = {}
for genre in artist_genres:
    genre_counts[genre] = genre_counts.get(genre, 0) + 1

# Obtener el género más común
if genre_counts:
    common_genre = max(genre_counts, key=genre_counts.get)
else:
    common_genre = None

return common_genre

def obtener_metadata(sp, funcion_opciones):

opciones = funcion_opciones(["Carpeta", "Playlist"])
lista_total_a_analizar = []

for opcion in opciones:
    print("Ejecutando:", opcion)
    if opcion == "Carpeta":
        from Data_general.obtencion_uris_canciones_desde_libreria import obtencion_uris_canciones_desde_libreria
        from Data_general.obtencion_libreria_personal import canciones_de_mi_librería, mi_libreria
        lista_total_a_analizar, canciones_no_encontradas = obtencion_uris_canciones_desde_libreria(canciones_de_mi_librería, [], sp)
        print("No se han encontrado las siguientes canciones:", canciones_no_encontradas)
        print("Se han encontrado las siguientes canciones:", lista_total_a_analizar)
    


    elif opcion == "Playlist":
        from Data_general.obtener_lista_total import lista_total, sp
        lista_total_a_analizar = lista_total
        print("Se han encontrado las siguientes canciones:", lista_total_a_analizar)

lista_canciones_con_metadata = []


for song in lista_total_a_analizar:
    print("Obteniendo metadata de", song[0])
    track_name = song[0]
    track_id = song[1]
    print(f'Nombre: {track_name}\nId: {track_id}')
    track_data = sp.track(track_id)
    print("Obtenida la data de", song[0])
    audio_features = sp.audio_features(track_id)
    print("Obtenido el las features de audio de", song[0])
    try:
        release_year = track_data["album"]["release_date"][:4]  # Extraer año de la fecha de lanzamiento
        print("Obtenido el año de", track_name)
    except KeyError:
        release_year = None  # Manejar de forma elegante la falta de fecha de lanzamiento
    album_name = track_data["album"]["name"]
    print("Obtenido el album de", track_name)
    popularity = track_data["popularity"]
    print("Obtenida la popularidad de", track_name)
    danceability = audio_features[0]["danceability"]
    print("Obtenida la danceabilidad de", track_name)
    energy = audio_features[0]["energy"]
    print("Obtenida la energia de", track_name)
    bpm = audio_features[0]["tempo"]
    print("Obtenido el tempo de", track_name)
    
    # # Obtener el género del álbum
    # album_id = track_data["album"]["id"]
    # album_data = sp.album(album_id)
    # album_genres = album_data["genres"]
    # print(album_data)
    # # Si hay varios géneros, selecciona el primero de la lista
    # if album_genres:
    #     album_genre = album_genres[0]
    # else:
    #    album_genre = None
    
    genero = obtener_genero_cancion(sp,track_id)
    print("Obtenido el genero de", track_name)
    if genero == None:
        genero = " "

    lista_canciones_con_metadata.append({
        "nombre": track_name, 
        "Bpm": bpm,
        "año": release_year,
        "album": album_name,
        "genero": genero,  # Agregar el género del álbum
        "popularidad": popularity,
        "Bailable": danceability,
        "Energía": energy
    })
    print("Escrita!")

print(lista_canciones_con_metadata)

escirbir_metadata = funcion_opciones(["Si", "No"])
for opcion in escirbir_metadata:
    if opcion == "Si":
        escribir_metadata(lista_canciones_con_metadata, mi_libreria)
    else:
        print("Chao")`
@JosepVargasf
Copy link
Author

As a newcomer to posting issues, I apologize if the formatting is not correct

@dieser-niko
Copy link
Member

The freezing effect is due to the urllib library being triggered by a rate limit. urllib basically waits until the rate limit is gone.

If you want to throw an error instead, you can pass retries=0 to the Spotify init function like this:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

sp = spotipy.Spotify(retries=0,
                     auth_manager=SpotifyClientCredentials(client_id="YOUR_APP_CLIENT_ID",
                                                           client_secret="YOUR_APP_CLIENT_SECRET"))

results = sp.search(q='weezer', limit=20)
for idx, track in enumerate(results['tracks']['items']):
    print(idx, track['name'])

@dieser-niko
Copy link
Member

Closing as the problem seems to have been solved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants