Update app.py
Browse files
app.py
CHANGED
|
@@ -46,19 +46,13 @@ def obtener_canciones_playlist_spotify(token, playlist_id, playlist_name):
|
|
| 46 |
track = item.get('track')
|
| 47 |
if track:
|
| 48 |
artista_info = obtener_info_artista(track['artists'][0]['id'], token) if track['artists'] else {}
|
| 49 |
-
audio_features = obtener_caracteristicas_audio(token, track['id'])
|
| 50 |
canciones.append({
|
| 51 |
'playlist_name': playlist_name,
|
| 52 |
'artista': track['artists'][0]['name'] if track['artists'] else 'Desconocido',
|
| 53 |
'titulo': track['name'],
|
| 54 |
'isrc': track['external_ids'].get('isrc', 'No disponible'),
|
| 55 |
'popularity': track.get('popularity', 'No disponible'),
|
| 56 |
-
'
|
| 57 |
-
'danceability': audio_features.get('danceability', 'No disponible'),
|
| 58 |
-
'energy': audio_features.get('energy', 'No disponible'),
|
| 59 |
-
'tempo': audio_features.get('tempo', 'No disponible'),
|
| 60 |
-
'speechiness': audio_features.get('speechiness', 'No disponible'),
|
| 61 |
-
'instrumentalness': audio_features.get('instrumentalness', 'No disponible'),
|
| 62 |
'link': track['external_urls']['spotify'],
|
| 63 |
'record_label': obtener_record_label_spotify(track['album']['id'], token),
|
| 64 |
'source': 'Spotify',
|
|
@@ -66,15 +60,17 @@ def obtener_canciones_playlist_spotify(token, playlist_id, playlist_name):
|
|
| 66 |
})
|
| 67 |
return canciones
|
| 68 |
|
| 69 |
-
def obtener_caracteristicas_audio(token,
|
| 70 |
-
|
|
|
|
| 71 |
headers = {'Authorization': f'Bearer {token}'}
|
| 72 |
-
|
|
|
|
| 73 |
if response.status_code == 200:
|
| 74 |
-
return response.json()
|
| 75 |
else:
|
| 76 |
-
print(f"No se pudieron obtener las características de audio para
|
| 77 |
-
return
|
| 78 |
|
| 79 |
def obtener_record_label_spotify(album_id, token):
|
| 80 |
url = f'https://api.spotify.com/v1/albums/{album_id}'
|
|
@@ -102,9 +98,27 @@ def interface(query, num_spotify_playlists=50, project_name="Proyecto"):
|
|
| 102 |
token_spotify = obtener_token(client_id, client_secret)
|
| 103 |
playlists_spotify = buscar_playlists_spotify(token_spotify, query, num_spotify_playlists)
|
| 104 |
canciones_spotify = []
|
|
|
|
| 105 |
for playlist in playlists_spotify:
|
| 106 |
songs = obtener_canciones_playlist_spotify(token_spotify, playlist['playlist_id'], playlist['playlist_name'])
|
| 107 |
canciones_spotify.extend(songs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
|
| 109 |
# Crear DataFrame
|
| 110 |
df = pd.DataFrame(canciones_spotify)
|
|
|
|
| 46 |
track = item.get('track')
|
| 47 |
if track:
|
| 48 |
artista_info = obtener_info_artista(track['artists'][0]['id'], token) if track['artists'] else {}
|
|
|
|
| 49 |
canciones.append({
|
| 50 |
'playlist_name': playlist_name,
|
| 51 |
'artista': track['artists'][0]['name'] if track['artists'] else 'Desconocido',
|
| 52 |
'titulo': track['name'],
|
| 53 |
'isrc': track['external_ids'].get('isrc', 'No disponible'),
|
| 54 |
'popularity': track.get('popularity', 'No disponible'),
|
| 55 |
+
'track_id': track['id'],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
'link': track['external_urls']['spotify'],
|
| 57 |
'record_label': obtener_record_label_spotify(track['album']['id'], token),
|
| 58 |
'source': 'Spotify',
|
|
|
|
| 60 |
})
|
| 61 |
return canciones
|
| 62 |
|
| 63 |
+
def obtener_caracteristicas_audio(token, track_ids):
|
| 64 |
+
print("Obteniendo características de audio para las pistas...")
|
| 65 |
+
url = f'https://api.spotify.com/v1/audio-features'
|
| 66 |
headers = {'Authorization': f'Bearer {token}'}
|
| 67 |
+
params = {'ids': ','.join(track_ids)}
|
| 68 |
+
response = requests.get(url, headers=headers, params=params)
|
| 69 |
if response.status_code == 200:
|
| 70 |
+
return response.json().get('audio_features', [])
|
| 71 |
else:
|
| 72 |
+
print(f"No se pudieron obtener las características de audio para las pistas {track_ids}")
|
| 73 |
+
return []
|
| 74 |
|
| 75 |
def obtener_record_label_spotify(album_id, token):
|
| 76 |
url = f'https://api.spotify.com/v1/albums/{album_id}'
|
|
|
|
| 98 |
token_spotify = obtener_token(client_id, client_secret)
|
| 99 |
playlists_spotify = buscar_playlists_spotify(token_spotify, query, num_spotify_playlists)
|
| 100 |
canciones_spotify = []
|
| 101 |
+
track_ids = []
|
| 102 |
for playlist in playlists_spotify:
|
| 103 |
songs = obtener_canciones_playlist_spotify(token_spotify, playlist['playlist_id'], playlist['playlist_name'])
|
| 104 |
canciones_spotify.extend(songs)
|
| 105 |
+
track_ids.extend([song['track_id'] for song in songs])
|
| 106 |
+
|
| 107 |
+
# Obtener características de audio en un solo paso
|
| 108 |
+
audio_features_list = obtener_caracteristicas_audio(token_spotify, track_ids)
|
| 109 |
+
audio_features_dict = {af['id']: af for af in audio_features_list if af}
|
| 110 |
+
|
| 111 |
+
# Añadir características de audio a las canciones
|
| 112 |
+
for song in canciones_spotify:
|
| 113 |
+
audio_features = audio_features_dict.get(song['track_id'], {})
|
| 114 |
+
song.update({
|
| 115 |
+
'valence': audio_features.get('valence', 'No disponible'),
|
| 116 |
+
'danceability': audio_features.get('danceability', 'No disponible'),
|
| 117 |
+
'energy': audio_features.get('energy', 'No disponible'),
|
| 118 |
+
'tempo': audio_features.get('tempo', 'No disponible'),
|
| 119 |
+
'speechiness': audio_features.get('speechiness', 'No disponible'),
|
| 120 |
+
'instrumentalness': audio_features.get('instrumentalness', 'No disponible')
|
| 121 |
+
})
|
| 122 |
|
| 123 |
# Crear DataFrame
|
| 124 |
df = pd.DataFrame(canciones_spotify)
|