Mthrfkr commited on
Commit
7aa341a
·
verified ·
1 Parent(s): 8c854c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -15
app.py CHANGED
@@ -62,11 +62,14 @@ def obtener_nuevo_token():
62
  print(f"Nuevo token obtenido: {token}")
63
  return token
64
 
65
- def realizar_solicitud_con_nuevo_token(url, params):
66
  token = obtener_nuevo_token()
67
- headers = {'Authorization': f'Bearer {token}'}
68
  response = session.get(url, headers=headers, params=params)
69
- print(f"Solicitud realizada con nuevo token. Código de estado: {response.status_code}")
 
 
 
70
  return response
71
 
72
  def buscar_playlists_spotify(token, query, limit=50):
@@ -81,7 +84,7 @@ def buscar_playlists_spotify(token, query, limit=50):
81
  response = session.get(url, headers=headers, params=params)
82
  if response.status_code == 429: # Límite alcanzado
83
  print("Límite de peticiones alcanzado, cambiando API Key...")
84
- response = realizar_solicitud_con_nuevo_token(url, params)
85
  playlists.extend(response.json().get('playlists', {}).get('items', []))
86
  else:
87
  offset = 0
@@ -90,7 +93,7 @@ def buscar_playlists_spotify(token, query, limit=50):
90
  response = session.get(url, headers=headers, params=params)
91
  if response.status_code == 429: # Límite alcanzado
92
  print("Límite de peticiones alcanzado, cambiando API Key...")
93
- response = realizar_solicitud_con_nuevo_token(url, params)
94
  playlists.extend(response.json().get('playlists', {}).get('items', []))
95
  limit -= min(50, limit)
96
  offset += 50
@@ -110,13 +113,13 @@ def obtener_canciones_playlist_spotify(token, playlist_id, playlist_name):
110
  response = session.get(url, headers=headers)
111
  if response.status_code == 429: # Límite alcanzado
112
  print("Límite de peticiones alcanzado, cambiando API Key...")
113
- response = realizar_solicitud_con_nuevo_token(url, {})
114
  if response.status_code == 200:
115
  tracks = response.json().get('items')
116
  for item in tracks:
117
  track = item.get('track')
118
  if track:
119
- audio_features = obtener_caracteristicas_audio(token, track['id'])
120
  canciones.append({
121
  'playlist_name': playlist_name,
122
  'artista': track['artists'][0]['name'] if track['artists'] else 'Desconocido',
@@ -131,35 +134,35 @@ def obtener_canciones_playlist_spotify(token, playlist_id, playlist_name):
131
  'instrumentalness': audio_features.get('instrumentalness', 'No disponible'),
132
  'duration': track.get('duration_ms', 'No disponible'),
133
  'release_year': track.get('album', {}).get('release_date', 'No disponible').split('-')[0] if track.get('album', {}).get('release_date') else 'No disponible',
134
- 'record_label': obtener_record_label_spotify(track['album']['id'], token)
135
  })
136
  except Exception as e:
137
  print(f"Error al obtener canciones de la playlist: {e}")
138
 
139
  return canciones
140
 
141
- def obtener_caracteristicas_audio(token, track_id):
142
  url = f'https://api.spotify.com/v1/audio-features/{track_id}'
143
- headers = {'Authorization': f'Bearer {token}'}
144
  response = session.get(url, headers=headers)
145
  if response.status_code == 429: # Límite alcanzado
146
  print("Límite de peticiones alcanzado al obtener características de audio, cambiando API Key...")
147
- response = realizar_solicitud_con_nuevo_token(url, {})
148
  return response.json() if response.status_code == 200 else {}
149
 
150
- def obtener_record_label_spotify(album_id, token):
151
  url = f'https://api.spotify.com/v1/albums/{album_id}'
152
- headers = {'Authorization': f'Bearer {token}'}
153
  response = session.get(url, headers=headers)
154
  if response.status_code == 429: # Límite alcanzado
155
  print("Límite de peticiones alcanzado al obtener la discográfica, cambiando API Key...")
156
- response = realizar_solicitud_con_nuevo_token(url, {})
157
  album_info = response.json() if response.status_code == 200 else {}
158
  return album_info.get('label', 'No disponible')
159
 
160
  def interface(project_name, query, num_spotify_playlists=50):
161
  # Obtener tokens y claves
162
- token_spotify = obtener_token(client_ids[current_api_index], client_secrets[current_api_index])
163
  if not token_spotify:
164
  return pd.DataFrame(), "Error obteniendo el token de Spotify. Intenta de nuevo."
165
 
 
62
  print(f"Nuevo token obtenido: {token}")
63
  return token
64
 
65
+ def realizar_solicitud_con_nuevo_token(url, headers, params, retry=True):
66
  token = obtener_nuevo_token()
67
+ headers['Authorization'] = f'Bearer {token}'
68
  response = session.get(url, headers=headers, params=params)
69
+ if response.status_code == 429 and retry:
70
+ print("Límite de peticiones alcanzado, esperando 30 segundos antes de reintentar...")
71
+ time.sleep(30) # Esperar 30 segundos antes de reintentar
72
+ return realizar_solicitud_con_nuevo_token(url, headers, params, retry=False)
73
  return response
74
 
75
  def buscar_playlists_spotify(token, query, limit=50):
 
84
  response = session.get(url, headers=headers, params=params)
85
  if response.status_code == 429: # Límite alcanzado
86
  print("Límite de peticiones alcanzado, cambiando API Key...")
87
+ response = realizar_solicitud_con_nuevo_token(url, headers, params)
88
  playlists.extend(response.json().get('playlists', {}).get('items', []))
89
  else:
90
  offset = 0
 
93
  response = session.get(url, headers=headers, params=params)
94
  if response.status_code == 429: # Límite alcanzado
95
  print("Límite de peticiones alcanzado, cambiando API Key...")
96
+ response = realizar_solicitud_con_nuevo_token(url, headers, params)
97
  playlists.extend(response.json().get('playlists', {}).get('items', []))
98
  limit -= min(50, limit)
99
  offset += 50
 
113
  response = session.get(url, headers=headers)
114
  if response.status_code == 429: # Límite alcanzado
115
  print("Límite de peticiones alcanzado, cambiando API Key...")
116
+ response = realizar_solicitud_con_nuevo_token(url, headers, {})
117
  if response.status_code == 200:
118
  tracks = response.json().get('items')
119
  for item in tracks:
120
  track = item.get('track')
121
  if track:
122
+ audio_features = obtener_caracteristicas_audio(track['id'])
123
  canciones.append({
124
  'playlist_name': playlist_name,
125
  'artista': track['artists'][0]['name'] if track['artists'] else 'Desconocido',
 
134
  'instrumentalness': audio_features.get('instrumentalness', 'No disponible'),
135
  'duration': track.get('duration_ms', 'No disponible'),
136
  'release_year': track.get('album', {}).get('release_date', 'No disponible').split('-')[0] if track.get('album', {}).get('release_date') else 'No disponible',
137
+ 'record_label': obtener_record_label_spotify(track['album']['id'])
138
  })
139
  except Exception as e:
140
  print(f"Error al obtener canciones de la playlist: {e}")
141
 
142
  return canciones
143
 
144
+ def obtener_caracteristicas_audio(track_id):
145
  url = f'https://api.spotify.com/v1/audio-features/{track_id}'
146
+ headers = {'Authorization': f'Bearer {obtener_nuevo_token()}'}
147
  response = session.get(url, headers=headers)
148
  if response.status_code == 429: # Límite alcanzado
149
  print("Límite de peticiones alcanzado al obtener características de audio, cambiando API Key...")
150
+ response = realizar_solicitud_con_nuevo_token(url, headers, {})
151
  return response.json() if response.status_code == 200 else {}
152
 
153
+ def obtener_record_label_spotify(album_id):
154
  url = f'https://api.spotify.com/v1/albums/{album_id}'
155
+ headers = {'Authorization': f'Bearer {obtener_nuevo_token()}'}
156
  response = session.get(url, headers=headers)
157
  if response.status_code == 429: # Límite alcanzado
158
  print("Límite de peticiones alcanzado al obtener la discográfica, cambiando API Key...")
159
+ response = realizar_solicitud_con_nuevo_token(url, headers, {})
160
  album_info = response.json() if response.status_code == 200 else {}
161
  return album_info.get('label', 'No disponible')
162
 
163
  def interface(project_name, query, num_spotify_playlists=50):
164
  # Obtener tokens y claves
165
+ token_spotify = obtener_nuevo_token()
166
  if not token_spotify:
167
  return pd.DataFrame(), "Error obteniendo el token de Spotify. Intenta de nuevo."
168