es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener los géneros de las canciones utilizando la API de Spotify.

Estoy tratando de crear un conjunto de datos de todas mis pistas guardadas en Spotify con sus metadatos. He obtenido todas las características de las canciones, el nombre de la pista y el ID de la pista. Quiero agregar una columna del artista de la pista y otra del género.

Intenté agregarlo con “liked_tracks.extend”, pero no pude hacer que funcionara.

cid = ""
secret = ""
redirect_uri = 'http://localhost:8000/callback'

FEATURE_KEYS = ['danceability', 'energy', 'key', 'loudness', 'mode', 'speechiness', 'acousticness', 'instrumentalness', 'liveness', 'valence', 'tempo']

OFFSET = 0
SAVED_TRACKS_LIMIT = 50
FEATURE_LIMIT = 100

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=cid,
                                               client_secret=secret,
                                               redirect_uri=redirect_uri,
                                               scope="user-library-read"))

liked_tracks = list()
print(liked_tracks)

while(True):
    paged_tracks = sp.current_user_saved_tracks(offset=OFFSET, limit=SAVED_TRACKS_LIMIT)
    liked_tracks.extend([{'name': el['track']['name'], 'id': el['track']['id']} for el in paged_tracks['items']])
    print(f'Fetched {len(liked_tracks)} tracks')
    OFFSET += SAVED_TRACKS_LIMIT
    if paged_tracks['next'] is None:
        break

def get_windowed_track_ids(liked_tracks, limit):
    for i in range(0, len(liked_tracks), limit):
        track_window = liked_tracks[i:i + limit]
        yield track_window, [t['id'] for t in track_window]

track_feature_list = list()
print('')

for track_window, track_window_ids in get_windowed_track_ids(liked_tracks, FEATURE_LIMIT):
    track_features = sp.audio_features(tracks=track_window_ids)
    for index, track in enumerate(track_window):
        track.update({k: v for k, v in track_features[index].items() if k in FEATURE_KEYS})
        track_feature_list.append(track)
    print(f'Fetched features for {len(track_feature_list)} tracks')

df = pd.DataFrame.from_dict(track_feature_list)
mysavedsongs = f'liked_tracks{int(time())}.csv'
df.to_csv(mysavedsongs, index=False)
print('')
print(f'Saved features to {mysavedsongs}')
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar las columnas de artista y género al conjunto de datos existente, puedes utilizar el ID de la pista para obtener los detalles de la pista, incluyendo la información del artista y el género. Puedes agregar nuevas claves al diccionario existente de detalles de la pista mientras lo actualizas con los detalles de la pista obtenidos.

    Puedes modificar el código de la siguiente manera:

    FEATURE_KEYS = ['danceability', 'energy', 'key', 'loudness', 'mode', 'speechiness', 'acousticness', 'instrumentalness', 'liveness', 'valence', 'tempo', 'artist', 'genre']
    
    # ...
    
    track_feature_list = list()
    
    for track_window, track_window_ids in get_windowed_track_ids(liked_tracks, FEATURE_LIMIT):
        track_features = sp.audio_features(tracks=track_window_ids)
        track_details = sp.tracks(track_window_ids)['tracks']
        for index, _track in enumerate(track_window):
            _track.update({k:v for k,v in track_features[index].items() if k in FEATURE_KEYS})
            # Agregar información de artista y género
            _track['artist'] = track_details[index]['artists'][0]['name']
            _track['genre'] = track_details[index]['album']['genres'][0]
            track_feature_list.append(_track)
        print(f'Características obtenidas para {len(track_feature_list)} pistas')
    
    # ...
    

    Aquí, hemos agregado dos claves nuevas, ‘artist’ y ‘genre’, a la lista de FEATURE_KEYS. Después de obtener las características de la pista, también obtenemos los detalles de la pista utilizando los IDs de las pistas y actualizamos los detalles de la pista existentes para cada pista de la ventana con la información adicional del artista y el género. Por último, añadimos los detalles de la pista actualizados a la lista de track_feature_list.

Comments are closed.