Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .cache
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"access_token": "BQDFy2pPrB4KXVP3HAtoMMUpBNEPtgfbq1I5P19hZ6OhXewFj1peVz_zUDXtBvRsu0zh50pbYBx3e6rn-RiJkihmHjpHkX-p5W6exu2HgBypRdm1UYAtjiIPzRFa9_z-43oVATJMBGw", "token_type": "Bearer", "expires_in": 3600, "expires_at": 1763296802}
237 changes: 217 additions & 20 deletions lab-apis.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,6 @@
"CLIENT_SECRET = \"5cb719fae80c4191a9c0b288f51bfe50\""
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "04e12954-fd70-4311-88a5-fb7e2c29799c",
"metadata": {},
"outputs": [],
"source": [
"# If you havent done so, install the spotipy wrapper\n",
"!pip install spotipy"
]
},
{
"cell_type": "markdown",
"id": "dc0e86da-8846-4207-84c3-cd20b9e01d0e",
Expand Down Expand Up @@ -387,7 +376,70 @@
"metadata": {},
"outputs": [],
"source": [
"# Your answer here"
"# Your answer here\n",
"\n",
"import spotipy\n",
"from spotipy.oauth2 import SpotifyOAuth\n",
"\n",
"# ---------------------------\n",
"# Autenticación de Spotify\n",
"# ---------------------------\n",
"sp = spotipy.Spotify(\n",
" auth_manager=SpotifyOAuth(\n",
" client_id=\"TU_CLIENT_ID\",\n",
" client_secret=\"TU_CLIENT_SECRET\",\n",
" redirect_uri=\"http://localhost:8888/callback\",\n",
" scope=\"user-library-read playlist-modify-public\"\n",
" )\n",
")\n",
"\n",
"# ---------------------------\n",
"# 1. Lista de artistas\n",
"# ---------------------------\n",
"\n",
"artists = [\"Los Fabulosos Cadillacs\", \"Manu Chao\", \"Muchachito Bombo Infierno\"]\n",
"\n",
"\n",
"# ---------------------------\n",
"# 2. Función: obtener top tracks\n",
"# ---------------------------\n",
"\n",
"def get_top_tracks(artist_name, sp):\n",
" results = sp.search(q=artist_name, type=\"artist\", limit=1)\n",
"\n",
" if not results[\"artists\"][\"items\"]:\n",
" print(f\"No se encontró el artista: {artist_name}\")\n",
" return []\n",
"\n",
" artist_id = results[\"artists\"][\"items\"][0][\"id\"]\n",
"\n",
" # obtener sus top tracks\n",
" tracks = sp.artist_top_tracks(artist_id)\n",
" track_names = [track[\"name\"] for track in tracks[\"tracks\"][:5]]\n",
"\n",
" return track_names\n",
"\n",
"\n",
"# ---------------------------\n",
"# 3. Función: artistas relacionados (con manejo de error 404)\n",
"# ---------------------------\n",
"\n",
"def find_related_artists(artist_name, sp):\n",
" results = sp.search(q=artist_name, type=\"artist\", limit=1)\n",
"\n",
" if not results[\"artists\"][\"items\"]:\n",
" print(f\"No se encontró el artista: {artist_name}\")\n",
" return []\n",
"\n",
" artist_id = results[\"artists\"][\"items\"][0][\"id\"]\n",
"\n",
" try:\n",
" related = sp.artist_related_artists(artist_id)\n",
" related_names = [artist[\"name\"] for artist in related[\"artists\"][:5]]\n",
" return related_names\n",
"\n",
" except Exception as e:\n",
" print(f\"No hay artistas relacionados para '{artist_name}'. Error: {e}\")\n"
]
},
{
Expand All @@ -409,7 +461,54 @@
"metadata": {},
"outputs": [],
"source": [
"sp.featured_playlists() # We get a playlist id of a playlist we like"
"import spotipy\n",
"from spotipy.oauth2 import SpotifyOAuth\n",
"\n",
"# -----------------------------------------\n",
"# Autenticación (modifica con tus credenciales)\n",
"# -----------------------------------------\n",
"sp = spotipy.Spotify(auth_manager=SpotifyOAuth(\n",
" client_id=\"TU_CLIENT_ID\",\n",
" client_secret=\"TU_CLIENT_SECRET\",\n",
" redirect_uri=\"http://localhost:8888/callback\",\n",
" scope=\"playlist-read-private\"\n",
"))\n",
"\n",
"# -----------------------------------------\n",
"# 1. Obtener playlists destacadas\n",
"# -----------------------------------------\n",
"featured = sp.featured_playlists()\n",
"\n",
"# Mostramos el mensaje promocional de Spotify\n",
"print(\"Mensaje de Spotify:\", featured[\"message\"])\n",
"print(\"\\nPlaylists destacadas:\\n\")\n",
"\n",
"# -----------------------------------------\n",
"# 2. Recorrer las playlists y mostrar nombre + ID\n",
"# -----------------------------------------\n",
"playlists = featured[\"playlists\"][\"items\"]\n",
"\n",
"for idx, playlist in enumerate(playlists, start=1):\n",
" print(f\"{idx}. {playlist['name']} | ID: {playlist['id']}\")\n",
"\n",
"# -----------------------------------------\n",
"# 3. Elegimos una playlist destacada específica\n",
"# -----------------------------------------\n",
"# Por ejemplo, seleccionamos la primera\n",
"selected_playlist_id = playlists[0][\"id\"]\n",
"\n",
"print(\"\\nID de la playlist seleccionada:\")\n",
"print(selected_playlist_id)\n",
"\n",
"# -----------------------------------------\n",
"# 4. (Opcional) Obtener sus canciones\n",
"# -----------------------------------------\n",
"tracks = sp.playlist_tracks(selected_playlist_id)\n",
"\n",
"print(\"\\nPrimeras canciones de la playlist seleccionada:\\n\")\n",
"\n",
"for t in tracks[\"items\"][:5]: # mostramos solo 5\n",
" print(\"-\", t[\"track\"][\"name\"])\n"
]
},
{
Expand Down Expand Up @@ -533,18 +632,116 @@
},
{
"cell_type": "code",
"execution_count": null,
"id": "ed92d961-9646-4375-a386-ccc320a958f5",
"metadata": {},
"outputs": [],
"execution_count": 9,
"id": "e57f31b1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Top 5 Playlists encontradas ===\n",
"1. TOP ÉXITOS ESPAÑA 2025 🇪🇸 Lo más escuchado - ID: 3O5cscCkI0ZuGuGRSJTqnv\n",
"2. Temazos muy top en inglés - ID: 7b3HPHKLP0yh8BBKjqAmR2\n",
"3. INDIE Español TOP 2025 (Actualizado) - ID: 4lKOBXoYWsEBLyZkzNmnfP\n",
"4. POP ESPAÑOL 2025 🇪🇸 Top Éxitos España 2025 - ID: 7w0Fy9FiPOKFTYkZDPiY6R\n",
"\n",
"=== Playlist Elegida ===\n",
"Nombre: TOP ÉXITOS ESPAÑA 2025 🇪🇸 Lo más escuchado\n",
"Descripción: La mejor lista con las 100 canciones más escuchadas del momento. Música actual y temazos más populares. Los mejores temas de Pop Español, Reguetón, Flamenco y más. Incluye los hits de Lola Indigo, Karol G, Sabrina Carpenter, Aitana, Sebastián Yatra, Antonio José, Pablo López, Morat..\n",
"Total de canciones: 100\n",
"\n",
"=== Primeras 10 canciones ===\n",
"1. SUPERESTRELLA\n",
"2. MOJA1TA\n",
"3. Golden\n",
"4. Si Antes Te Hubiera Conocido\n",
"5. The Fate of Ophelia\n",
"6. Dolor Y Gloria\n",
"7. Última Noche\n",
"8. bandaids\n",
"9. La vida en rosa\n",
"10. CANCIÓN PARA REGRESAR\n",
"\n",
"=== Diccionario Canción → Artistas ===\n",
"{'SUPERESTRELLA': ['Aitana'], 'MOJA1TA': ['Lola Indigo'], 'Golden': ['HUNTR/X', 'EJAE', 'AUDREY NUNA', 'REI AMI', 'KPop Demon Hunters Cast'], 'Si Antes Te Hubiera Conocido': ['KAROL G'], 'The Fate of Ophelia': ['Taylor Swift'], 'Dolor Y Gloria': ['Viva Suecia'], 'Última Noche': ['Bad Gyal', 'Ozuna'], 'bandaids': ['Katy Perry'], 'La vida en rosa': ['La Maravillosa Orquesta del Alcohol'], 'CANCIÓN PARA REGRESAR': ['Sebastian Yatra', 'Lucho RK', 'Belinda', 'Gente De Zona']}\n"
]
}
],
"source": [
"# Your answer here"
"import spotipy\n",
"from spotipy.oauth2 import SpotifyClientCredentials\n",
"\n",
"CLIENT_ID = \"4109b2d9f5014671863bb2df1d1fbdd3\"\n",
"CLIENT_SECRET = \"5cb719fae80c4191a9c0b288f51bfe50\"\n",
"\n",
"auth_manager = SpotifyClientCredentials(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)\n",
"sp = spotipy.Spotify(auth_manager=auth_manager)\n",
"\n",
"# --------------------------------------------------------\n",
"# 1. BUSCAR PLAYLISTS POPULARES\n",
"# --------------------------------------------------------\n",
"results = sp.search(q=\"top\", type=\"playlist\", limit=20)\n",
"\n",
"# Filtrar playlists válidas\n",
"playlists = [\n",
" p for p in results[\"playlists\"][\"items\"]\n",
" if p is not None and \"name\" in p and \"id\" in p\n",
"]\n",
"\n",
"# Quedarnos con las primeras 5 válidas\n",
"playlists = playlists[:5]\n",
"\n",
"print(\"=== Top 5 Playlists encontradas ===\")\n",
"for i, p in enumerate(playlists, start=1):\n",
" print(f\"{i}. {p['name']} - ID: {p['id']}\")\n",
"\n",
"# Elegir la primera playlist válida\n",
"chosen = playlists[0]\n",
"chosen_id = chosen[\"id\"]\n",
"\n",
"# --------------------------------------------------------\n",
"# 2. INFO DE LA PLAYLIST\n",
"# --------------------------------------------------------\n",
"playlist_info = sp.playlist(chosen_id)\n",
"\n",
"print(\"\\n=== Playlist Elegida ===\")\n",
"print(\"Nombre:\", playlist_info[\"name\"])\n",
"print(\"Descripción:\", playlist_info[\"description\"])\n",
"print(\"Total de canciones:\", playlist_info[\"tracks\"][\"total\"])\n",
"\n",
"# --------------------------------------------------------\n",
"# 3. PRIMERAS 10 CANCIONES\n",
"# --------------------------------------------------------\n",
"tracks_data = sp.playlist_tracks(chosen_id, limit=10)\n",
"tracks = tracks_data[\"items\"]\n",
"\n",
"print(\"\\n=== Primeras 10 canciones ===\")\n",
"for i, item in enumerate(tracks, start=1):\n",
" track = item.get(\"track\")\n",
" if track:\n",
" print(f\"{i}. {track['name']}\")\n",
"\n",
"# --------------------------------------------------------\n",
"# 4. Diccionario Canción → Artistas\n",
"# --------------------------------------------------------\n",
"track_artists_dict = {}\n",
"\n",
"for item in tracks:\n",
" track = item.get(\"track\")\n",
" if track:\n",
" name = track[\"name\"]\n",
" artists = [a[\"name\"] for a in track[\"artists\"]]\n",
" track_artists_dict[name] = artists\n",
"\n",
"print(\"\\n=== Diccionario Canción → Artistas ===\")\n",
"print(track_artists_dict)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
Expand All @@ -558,7 +755,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
"version": "3.12.9"
}
},
"nbformat": 4,
Expand Down