Mthrfkr commited on
Commit
6cd9583
·
verified ·
1 Parent(s): 6ff194f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -13
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
- 'valence': audio_features.get('valence', 'No disponible'),
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, track_id):
70
- url = f'https://api.spotify.com/v1/audio-features/{track_id}'
 
71
  headers = {'Authorization': f'Bearer {token}'}
72
- response = requests.get(url, headers=headers)
 
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 la pista {track_id}")
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)