Por Leonardo - umactualmente
spotifyatlas es una biblioteca directa destinada a simplificar el proceso de interactuar con la API web de Spotify . Ya sea que intente acceder programáticamente a las características de Spotify, como consultas de búsqueda , o automatizar tareas de usuario como modificar sus listas de reproducción , SpotifyAtlas tiene herramientas para el trabajo. Todo en un estilo limpio y orientado a objetos.
La mayor parte de la funcionalidad del paquete se incluye en la clase SpotifyAPI , que solo debe inicializarse con las credenciales de su aplicación de cliente. Esta base de código se usó originalmente para recuperar los detalles de la pista para bots de discordia , por lo que la mayoría de las funciones, a partir de ahora, giran en torno a listas de reproducción, álbumes, pistas principales de artistas y otras cosas.
Consulte la sección de instalación para obtener información sobre cómo instalar el paquete con pip .
El primer paso para interactuar con la API de Spotify es registrar una nueva aplicación en la página Spotify para desarrolladores . No se preocupe: este proceso es completamente gratuito para cualquier usuario de Spotify (con una cuenta).
Con eso fuera del camino, continúe e inicialice un nuevo objeto SpotifyAPI con las credenciales de su aplicación (ID de cliente y secreto del cliente):
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' ) Si desea recuperar las pistas y/o detalles de cualquier cosa en Spotify, el método Universal get() muchas veces lo cubrirá.
Pruébelo pegando el enlace compartido de su lista de reproducción favorita. Devolverá un objeto Playlist . Las pistas de la lista de reproducción se encuentran en el atributo tracks , y también puede acceder a las pistas por índice , como se muestra a continuación.
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )
playlist = spoti . get ( 'https://open.spotify.com/playlist/6xTnvRqIKptVfgcT8gN4Bb' )
print ( playlist . tracks )
# [<Track name='Goliath' artist='The Mars Volta' id='3bi3Ycf0ZlRHvSg0IxlMwM'>, ... ]
first_track = playlist [ 0 ] # the same as playlist.tracks[0]
print ( first_track )
# Goliath - The Mars Volta Una Track contiene el name , artist , album y id de una canción. Y, como vio arriba, print(track) formateará una pista como '<name> - <artist>' . Puedes enumerar cuidadosamente el contenido de tu lista de reproducción así:
for i , track in enumerate ( playlist , 1 ):
print ( i , '-' , track )
# 1 - Goliath - The Mars Volta
# 2 - Juicy - 2005 Remaster - The Notorious B.I.G.
# 3 - O Peso da Cruz - Supercombo
# 4 - Count The People (feat. Jessie Reyez & T-Pain) - Jacob Collier
# 5 - Touch - Shura
# ... Similar a Playlist y Track , también puedes encontrar estructuras Album , Artist y User . Cada uno de estos está conectado entre sí por atributos . Por ejemplo, track.artist.image_url devolverá la URL de la imagen del artista de una pista, y así seguirá track.album.tracks[0].artist.image_url . Confidentemente, supongo que no lo hará de la segunda manera. La mayor cantidad de solicitudes de API afectará el rendimiento.
Los siguientes métodos ofrecen la misma funcionalidad que get() , aunque con un valor de retorno específico :
get_playlist() para listas de reproducción pública.
get_track() para pistas.
get_artist() para artistas y sus 10 pistas principales.
get_album() para álbumes.
get_user() para usuarios.
Todos requieren la url o la ID del elemento como el primer argumento.
No todo exige que tenga el enlace del artículo en cuestión. Para realizar búsquedas , puede usar los siguientes métodos:
search() para buscar normalmente, con la opción de especificar los tipos de resultados. result = spoti . search ( 'susanne sundfor' )
top_artist_result = result . artists [ 0 ]
print ( top_artist_result . name )
# Susanne Sundfør
result = spoti . search ( 'ok human' )
top_album_result = result . albums [ 0 ]
print ( top_album_result . tracks )
# [<Track name='All My Favorite Songs' artist='Weezer' id='6zVhXpiYbJhLJWmLGV9k1r'>, ... ]im_feeling_lucky() Si sabe de antemano exactamente lo que está buscando. Es esencialmente lo mismo que search() pero devuelve directamente el resultado superior del tipo especificado. from spotifyatlas import ResultType
result = spoti . im_feeling_lucky ( 'quevedo biza' , ResultType . TRACK )
print ( result )
# Quevedo: Bzrp Music Sessions, Vol. 52 - Bizarrapspotifyatlas.advanced_search() puede generar una consulta de búsqueda más potente que el usuario puede pasar a cualquiera de los métodos de búsqueda (o incluso pegar a su cliente de Spotify real). from spotifyatlas import ResultType , Genre , advanced_search
overkill_query = advanced_search (
'juanes' ,
album = 'metallica' ,
year = 2021 ,
genre = Genre . ROCK
)
result = spoti . im_feeling_lucky ( overkill_query , ResultType . TRACK )
print ( result )
# Enter Sandman - JuanesEstos otros métodos requieren el consentimiento del usuario y, por lo tanto, darán como resultado la apertura del navegador para la autorización de su aplicación para actuar en nombre del usuario:
get_me() para obtener detalles de su propio perfil.
get_private_playlist() para listas de reproducción privadas que posee.
create_playlist() para hacer una nueva lista de reproducción vacía en su biblioteca.
add_to_playlist() para agregar un lote de Track a una lista de reproducción.
duplicate_playlist() para duplicar una lista de reproducción en su biblioteca.
clear_playlist() para eliminar todo el contenido de una lista de reproducción.
rearrange_playlist() para cambiar la posición de un rango de pistas.
Las últimas cinco funciones también están disponibles como métodos de la clase Playlist . Esto permite algunos atajos prácticos como los que se ven en más ejemplos.
Nota: Autorizar la aplicación en la página de autorización de Spotify requiere una página de redirección para ir. Esta biblioteca alojará temporalmente una página local en http: // localhost: 8000 siempre que sea necesario. Por lo tanto, deberá agregar esta URL a las URL de redirección permitidas en el tablero de su aplicación en el sitio de Spotify para los desarrolladores .
La lista completa de parámetros/argumentos de una función se puede encontrar en su documentación.
Para instalar SpotifyAtlas, use PIP en el terminal:
Windows
pip install spotifyatlas
MacOS / Linux
python3 -m pip install spotifyatlas
Para el usuario inquisitivo, aquí hay algunos ejemplos de código más en la parte superior de mi cabeza:
from spotifyatlas import SpotifyAPI
def artist_sort_key ( track ):
return track . artist . name . lower ()
# If you want to hierarchically sort by artist, AND album,
# AND track, use this:
# return (
# track.artist.name.lower(),
# track.album.name.lower(),
# track.name.lower())
MY_PLAYLIST = '<my-playlist-link>'
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )
playlist = spoti . get_playlist ( MY_PLAYLIST )
tracks = playlist . tracks
tracks . sort ( key = artist_sort_key )
# make_copy makes a backup of the playlist in your library
# before removing its contents.
playlist . clear ( make_copy = True )
playlist . add ( tracks ) from spotifyatlas import SpotifyAPI
MY_PLAYLIST = '<my-playlist-link>'
MY_FRIENDS_PLAYLIST = '<my-friends-playlist-link>'
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' )
playlist1 = spoti . get ( MY_PLAYLIST )
playlist2 = spoti . get ( MY_FRIENDS_PLAYLIST )
# Set theory!!!
common_tracks = set ( playlist1 ). intersection ( set ( playlist2 ))
for i , track in enumerate ( common_tracks , 1 ):
print ( i , '-' , track )
blend = spoti . create_playlist (
name = f' { playlist1 . owner . name } + { playlist2 . owner . name } ' ,
description = 'I am a blend, I swear' )
blend . add ( list ( common_tracks )) He creado spotifyatlas para alentar a los amantes y programadores de la música por igual, a aprovechar la elegancia de la automatización y las secuencias de comandos de Python. Si se topó con este paquete mientras busca una manera de extender las capacidades de usuario en Spotify más allá de la interfaz de usuario, entonces está en el lugar correcto.
Si, en su lugar, está buscando un envoltorio API para usar en una aplicación web de Python, tal vez este paquete no sea la opción correcta. Para empezar, la funcionalidad de la biblioteca no es asincrónica (al menos aún no). Sin embargo, tal vez esto esté bien para un par de tareas simples. Y también, a partir de ahora, la forma en que implementé el flujo de autorización no es compatible con una aplicación web (literalmente abre una página local). Esto significa que solo funcionaría con funciones que no requieren autenticación de usuario.