Por Leonardo - Umactual
spotifyatlas é uma biblioteca direta destinada a simplificar o processo de interação com a API da Web do Spotify . Esteja você tentando acessar programaticamente os recursos do Spotify, como consultas de pesquisa ou automatizar tarefas de usuário como modificar suas listas de reprodução , o SpotifyAtlas possui ferramentas para o trabalho. Tudo em um estilo limpo e orientado a objetos.
A maior parte da funcionalidade do pacote está incluída na classe SpotifyAPI , que só precisa ser inicializada com as credenciais do seu aplicativo cliente. Esta base de código foi originalmente usada para recuperar detalhes da faixa para os bots Discord , então a maioria das funções, a partir de agora, gira em torno de listas de reprodução, álbuns, faixas de artistas e outros enfeites.
Consulte a seção de instalação para obter informações sobre como instalar o pacote com pip .
O primeiro passo para interagir com a API do Spotify é registrar um novo aplicativo na página Spotify for Developers . Não se preocupe: esse processo é totalmente gratuito para qualquer usuário do Spotify (com uma conta).
Com isso fora do caminho, vá em frente e inicialize um novo objeto SpotifyAPI com as credenciais do seu aplicativo (ID do cliente e segredo do cliente):
from spotifyatlas import SpotifyAPI
spoti = SpotifyAPI ( '<my-client-id>' , '<my-client-secret>' ) Se você deseja recuperar as faixas e/ou detalhes de qualquer coisa no Spotify, o método universal get() muitas vezes o abordará.
Experimente colando o link de compartilhamento da sua lista de reprodução favorita. Ele retornará um objeto Playlist . As faixas da lista de reprodução estão localizadas no atributo tracks e você também pode acessar faixas por índice , como mostrado abaixo.
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 Uma Track contém o name , artist , album e id de uma música. E, como você viu acima, print(track) formatará uma faixa como '<name> - <artist>' . Você pode listar bem o conteúdo da sua lista de reprodução assim:
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
# ... Semelhante à Playlist e Track , você também pode encontrar Album , Artist e estruturas User . Cada um deles está conectado entre si por atributos . Por exemplo, track.artist.image_url retornará o URL da imagem do artista de uma faixa, e assim irá track.album.tracks[0].artist.image_url . Eu suponho que você não fará isso da segunda maneira. A quantidade aumentada de solicitações de API afetará o desempenho.
Os métodos a seguir oferecem a mesma funcionalidade que get() , embora com um valor de retorno específico :
get_playlist() para listas de reprodução públicas.
get_track() para faixas.
get_artist() para artistas e suas 10 principais faixas.
get_album() para álbuns.
get_user() para usuários.
Todos eles exigem o url ou o ID do elemento como o primeiro argumento.
Nem tudo exige que você tenha o link do item em questão. Para executar pesquisas , você pode usar os seguintes métodos:
search() para pesquisar normalmente, com a opção de especificar 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() se você souber com antecedência exatamente o que está procurando. É essencialmente o mesmo que search() , mas retorna diretamente o resultado superior do 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() pode gerar uma consulta de pesquisa mais poderosa que o usuário pode passar para qualquer um dos métodos de pesquisa (ou até mesmo colar no cliente 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 - JuanesEsses outros métodos exigem o consentimento do usuário e, portanto, resultarão na abertura do navegador para a autorização de seu aplicativo para agir em nome do usuário:
get_me() para obter detalhes do seu próprio perfil.
get_private_playlist() para listas de reprodução privadas que você possui.
create_playlist() para criar uma nova lista de reprodução vazia em sua biblioteca.
add_to_playlist() para adicionar um lote de Track S a uma lista de reprodução.
duplicate_playlist() para duplicar uma lista de reprodução em sua biblioteca.
clear_playlist() para remover todo o conteúdo de uma lista de reprodução.
rearrange_playlist() para alterar a posição de uma variedade de faixas.
As últimas cinco funções também estão disponíveis como métodos da classe Playlist . Isso permite alguns atalhos úteis, como os vistos em mais exemplos.
Nota: Autorização do aplicativo na página de autorização do Spotify requer uma página de redirecionamento para ir. Esta biblioteca hospedará temporariamente uma página local em http: // localhost: 8000 sempre que necessário. Assim, você precisará adicionar este URL aos URLs de redirecionamento permitidos no painel do seu aplicativo no site Spotify for Developers .
A lista completa de parâmetros/argumentos de uma função pode ser encontrada em sua documentação.
Para instalar o SpotifyAtlas, use PIP no terminal:
Windows
pip install spotifyatlas
MacOS / Linux
python3 -m pip install spotifyatlas
Para o usuário curioso, aqui estão mais alguns exemplos de código no topo da minha cabeça:
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 )) Criei spotifyatlas para incentivar os amantes e programadores da música, a se basear na elegância da automação e dos scripts do Python. Se você tropeçou neste pacote enquanto procurava uma maneira de estender os recursos do usuário no Spotify além da interface do usuário, você estará no lugar certo.
Se você estiver procurando um invólucro de API para uso em um aplicativo da Web Python, talvez este pacote não seja a escolha certa. Para iniciantes, a funcionalidade da biblioteca não é assíncrona (ainda não, pelo menos). Talvez isso seja bom para algumas tarefas simples, no entanto. E também, a partir de agora, a maneira como implementei o fluxo de autorização não é compatível com um aplicativo da Web (literalmente abre uma página de localhost). Isso significa que funcionaria apenas com funções que não exigem autenticação do usuário.