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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -6
app.py CHANGED
@@ -2,7 +2,6 @@ import gradio as gr
2
  import requests
3
  import pandas as pd
4
  from tempfile import NamedTemporaryFile
5
- from openpyxl import Workbook
6
  import shutil
7
 
8
  # Funciones para Spotify
@@ -35,7 +34,7 @@ def buscar_playlists_spotify(token, query, limit=50):
35
 
36
  return [{'playlist_id': playlist['id'], 'playlist_name': playlist['name']} for playlist in playlists]
37
 
38
- def obtener_canciones_playlist_spotify(token, playlist_id):
39
  print(f"Obteniendo canciones de la playlist {playlist_id} de Spotify...")
40
  url = f'https://api.spotify.com/v1/playlists/{playlist_id}/tracks'
41
  headers = {'Authorization': f'Bearer {token}'}
@@ -46,8 +45,10 @@ def obtener_canciones_playlist_spotify(token, playlist_id):
46
  for item in tracks:
47
  track = item.get('track')
48
  if track:
 
49
  audio_features = obtener_caracteristicas_audio(token, track['id'])
50
  canciones.append({
 
51
  'artista': track['artists'][0]['name'] if track['artists'] else 'Desconocido',
52
  'titulo': track['name'],
53
  'isrc': track['external_ids'].get('isrc', 'No disponible'),
@@ -60,7 +61,8 @@ def obtener_canciones_playlist_spotify(token, playlist_id):
60
  'instrumentalness': audio_features.get('instrumentalness', 'No disponible'),
61
  'link': track['external_urls']['spotify'],
62
  'record_label': obtener_record_label_spotify(track['album']['id'], token),
63
- 'source': 'Spotify'
 
64
  })
65
  return canciones
66
 
@@ -68,7 +70,11 @@ def obtener_caracteristicas_audio(token, track_id):
68
  url = f'https://api.spotify.com/v1/audio-features/{track_id}'
69
  headers = {'Authorization': f'Bearer {token}'}
70
  response = requests.get(url, headers=headers)
71
- return response.json() if response.status_code == 200 else {}
 
 
 
 
72
 
73
  def obtener_record_label_spotify(album_id, token):
74
  url = f'https://api.spotify.com/v1/albums/{album_id}'
@@ -77,6 +83,15 @@ def obtener_record_label_spotify(album_id, token):
77
  album_info = response.json() if response.status_code == 200 else {}
78
  return album_info.get('label', 'No disponible')
79
 
 
 
 
 
 
 
 
 
 
80
  # Funci贸n principal de la interfaz
81
  def interface(query, num_spotify_playlists=50, project_name="Proyecto"):
82
  # Obtener tokens y claves
@@ -88,7 +103,7 @@ def interface(query, num_spotify_playlists=50, project_name="Proyecto"):
88
  playlists_spotify = buscar_playlists_spotify(token_spotify, query, num_spotify_playlists)
89
  canciones_spotify = []
90
  for playlist in playlists_spotify:
91
- songs = obtener_canciones_playlist_spotify(token_spotify, playlist['playlist_id'])
92
  canciones_spotify.extend(songs)
93
 
94
  # Crear DataFrame
@@ -114,6 +129,6 @@ iface = gr.Interface(
114
  ],
115
  outputs=[gr.Dataframe(), gr.File(label="Descargar Excel")],
116
  title="Busca Playlists con Keywords",
117
- description="Ingresa tu busqueda para encontrar playlists en Spotify con esas palabras en sus titulos."
118
  )
119
  iface.launch()
 
2
  import requests
3
  import pandas as pd
4
  from tempfile import NamedTemporaryFile
 
5
  import shutil
6
 
7
  # Funciones para Spotify
 
34
 
35
  return [{'playlist_id': playlist['id'], 'playlist_name': playlist['name']} for playlist in playlists]
36
 
37
+ def obtener_canciones_playlist_spotify(token, playlist_id, playlist_name):
38
  print(f"Obteniendo canciones de la playlist {playlist_id} de Spotify...")
39
  url = f'https://api.spotify.com/v1/playlists/{playlist_id}/tracks'
40
  headers = {'Authorization': f'Bearer {token}'}
 
45
  for item in tracks:
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'),
 
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',
65
+ 'genero_artista': ', '.join(artista_info.get('genres', []))
66
  })
67
  return canciones
68
 
 
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}'
 
83
  album_info = response.json() if response.status_code == 200 else {}
84
  return album_info.get('label', 'No disponible')
85
 
86
+ def obtener_info_artista(artista_id, token):
87
+ url = f'https://api.spotify.com/v1/artists/{artista_id}'
88
+ headers = {'Authorization': f'Bearer {token}'}
89
+ response = requests.get(url, headers=headers)
90
+ artista_info = response.json() if response.status_code == 200 else {}
91
+ return {
92
+ 'genres': artista_info.get('genres', [])
93
+ }
94
+
95
  # Funci贸n principal de la interfaz
96
  def interface(query, num_spotify_playlists=50, project_name="Proyecto"):
97
  # Obtener tokens y claves
 
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
 
129
  ],
130
  outputs=[gr.Dataframe(), gr.File(label="Descargar Excel")],
131
  title="Busca Playlists con Keywords",
132
+ description="Ingresa tu b煤squeda para encontrar playlists en Spotify con esas palabras en sus t铆tulos."
133
  )
134
  iface.launch()