Codifiquei meu próprio Spotify em Python, veja como

por Nada Em Troca
6 minutos de leitura
Codifiquei meu próprio Spotify em Python, veja como

Com a API do Spotify, você pode obter os principais dados “embrulhados” e usá-los como quiser. Uma biblioteca simplifica o processo e uma versão HTML básica do Spotify Wrapped pode ser sua em 100 linhas de código.

O que é Spotify Wrapped e o que este tutorial produzirá?

Todos os anos, o Spotify lança “Wrapped”, um infográfico interativo que mostra estatísticas como seus artistas favoritos e faixas que você mais ouviu. Existem maneiras de obter esses dados fora do Wrapped, e alguns deles estão disponíveis por meio da API Web do Spotify.

Aqui, vou usar essa API para buscar dados semelhantes sobre os hábitos de escuta do Spotify, apresentando-os em um formato simples para consumo. O resultado final não rivalizará com o Wrapped em termos de aparência, mas demonstrará os princípios básicos por trás da obtenção dos dados e sua formatação.

Uma lista dos principais artistas de curto prazo (4 semanas), cada um com uma imagem e um link correspondente.

Usando a biblioteca Spotipy para simplificar a maior parte do processo de back-end, o código final é direto e fácil de adaptar às suas necessidades.

Todo o código está em um repositório GitHub para você baixar e usar ou modificar como desejar.

O que é Spotipy e como posso usá-lo?

A biblioteca Spotipy é um wrapper da API do Spotify, permitindo que você a use sem alguns dos detalhes mais estranhos de baixo nível. Em particular, ele cuida do processo OAuth para você.

Eu recomendo usar um ambiente virtual para que você possa instalar o spotipy localmente. Depois de fazer isso, basta executar este comando:

pip install spotipy 

E como faço para acessar a API do Spotify?

Com uma conta Spotify, você pode fazer login no painel Spotify for Developers e começar criando um aplicativo.

Uma página da web do Spotify solicitando detalhes para criar um aplicativo, incluindo o nome e a descrição do aplicativo.

Selecione a opção “Web API” e escolha um URI de redirecionamento. Você pode usar um servidor local para isso, mas precisará usar o IP (por exemplo, 127.0.0.1) em vez de “localhost”, do qual o Spotify irá reclamar.

O valor do URI de redirecionamento não deve importar para esta demonstração; mesmo se você receber um erro durante o processo, o aplicativo de linha de comando ainda deverá funcionar.

Depois de criar seu aplicativo, anote o ID do cliente e o segredo do cliente, ambos mostrados na página “Informações básicas” do seu aplicativo.

Agora você deve ter tudo que precisa para usar o Spotipy em seu aplicativo. A maneira mais fácil de autenticar é definindo estas variáveis ​​de ambiente:

export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' 

Como fazer isso depende de você: em seu arquivo bashrc, em um script de shell que você executa ou até mesmo diretamente na linha de comando. Este projeto inclui um arquivo envvars.sh de amostra que você pode preencher e obter usando . envvars.sh.

Um aplicativo simples do Spotify

Com tudo configurado, podemos explorar o código e ver como ele faz uso da API.

A primeira função que defino é initque retorna uma instância da classe Spotify, passando as variáveis ​​de ambiente relevantes para autenticar o usuário. Na primeira vez que você executar o aplicativo, você passará pelo processo de autorizá-lo com sua conta do Spotify.

def init():     return spotipy.Spotify(         auth_manager=SpotifyOAuth(scope="user-library-read,user-top-read")     ) 

A próxima função—print_preamble—simplesmente imprime um título e um índice, no formato Markdown. Isso é um pouco mais fácil do que imprimir diretamente em HTML, e o Markdown pode ser um formato intermediário útil, desde que suas necessidades sejam bastante simples. Você pode usar uma ferramenta como o brilho para visualizar a saída do Markdown no terminal, lê-la em um editor de texto ou convertê-la para HTML.

O par de funções a seguir faz tudo o que precisamos para fazer interface com a própria API, e isso não é muito!

def get_artists(sp, time):     return sp.current_user_top_artists(limit=50, time_range=time) 

Cada um apenas chama um método correspondente na classe Spotify, passando o maior valor de limite que a API suporta e um intervalo de tempo personalizado. O tempo variará entre as chamadas para essas funções, para buscar diferentes conjuntos de dados.

Segue outro par de funções, desta vez para gerar saída para artistas ou faixas, dado um array. Cada função extrai URLs de imagens de dados de API, que normalmente contêm três imagens para cada item, em tamanhos decrescentes.

Cada função também vincula itens usando seu URL do Spotify: item["external_urls"]["spotify"]. Isso o levará ao aplicativo da web Spotify para explorar mais um artista ou reproduzir uma faixa. Em uma versão mais refinada, isso pode reproduzir uma faixa usando o Web Playback SDK do Spotify.

def print_artists(artists):     for idx, item in enumerate(artists["items"]):         imgurl = item["images"][0]["url"]         url = item["external_urls"]["spotify"]         print("1. ![](" + imgurl + ") [" + item["name"] + "](" + url + ")") 
Alguns exemplos de faixas, cada uma com uma imagem e um nome vinculado.

Tudo o que resta é chamar este conjunto de funções, para buscar todos os dados que necessitamos. Como estou reportando tudo, faço um total de seis chamadas de API: três para buscar tendências de artistas para curto, médio e longo prazo, e três para buscar faixas. Você pode, é claro, variar isso como desejar.

sp = init()  print_preamble() print("n## Top artists") print("n### Short term (~4 weeks)") print_artists(get_artists(sp, "short_term")) 

Para demonstrar algo um pouco mais avançado, também incluí uma seção sobre popularidade do gênero. O print_genre_stats A função simplesmente conta os gêneros dos 50 artistas mais ouvidos do usuário no ano passado, classifica-os e extrai os 10 primeiros.

def print_genre_stats(artists):     all_genres = {}      for idx, item in enumerate(artists["items"]):         for idx2, genre in enumerate(item["genres"]):             if genre in all_genres:                 all_genres[genre] += 1             else:                 all_genres[genre] = 1      all_genres = sorted(all_genres.items(), key=lambda x: x[1], reverse=True)      for i in range(10):         print("- " + all_genres[i][0] + " (" + str(all_genres[i][1]) + ")") 
Uma lista de dez gêneros com contagem total entre colchetes.

Você pode executar o programa com um simples:

python spotcon.py 

Para obter um arquivo markdown útil, basta redirecionar a saída:

python spotcon.py > spotcon.md 

Como mencionei anteriormente, há muitas coisas que você pode fazer com um arquivo markdown, mas recomendo convertê-lo para HTML usando pandoc:

pandoc -s -f markdown -t html5 -o spotcon.html spotcon.md -c style.css 

Este comando usa a folha de estilo do repositório para aproximar uma experiência do Spotify que é um pouco melhor do que HTML simples.


Há muitas próximas etapas para este projeto: melhorar o design final, integrar a reprodução na web, adicionar mais dados ou gerar gráficos para visualizar os dados. A API do Spotify restringe fortemente o que é relatado nos “itens principais”, mas você pode obter dados adicionais, como os artistas seguidos por um usuário ou seus álbuns salvos.

Este artigo foi útil?
Gostei0Não Gostei0

Deixe um comentário

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?
-
00:00
00:00
Update Required Flash plugin
-
00:00
00:00