Spotify Web Api: controllare la riproduzione musicale con semplici script



Come vi avevo promesso alla fine della guida su LIRC e i telecomandi, eccomi qui per spiegarvi come creare dei semplici script che permettano il controllo della riproduzione di Spotify.

Per mezzo delle Web API infatti è semplice inviare comandi a qualsiasi dispositivo che stia riproducendo della musica dal celebre servizio, incluso il nostro Raspberry con Raspotify.

La documentazione ufficiale di Spotify è veramente esaustiva e molto ben fatta, con tanto di tool che guida nella creazione dei comandi che ci servono.

Attenzione: è necessario essere utenti Spotify Premium per poter seguire questa guida.

Per prima cosa bisogna registrare in Spotify for Developers una nuova app. La procedura si avvia qui:
https://developer.spotify.com/dashboard/applications
Il nome per l'applicazione può essere scelto a piacere, così come le altre richieste.

La prima cosa da fare in questa pagina è cliccare su Edit settings e aggiungere nel campo Redirect URIs un indirizzo come https://localhost

Nella pagina della nostra nuova applicazione sono riportati il Client ID e il Client Secret.
Avremo bisogno di codificarli in Base64: andiamo su base64encode.org e inseriamo i due codici in questo modo:
 
clientID:clientSecret

Clicchiamo su Encode e otteniamo un codice che termina con un segno =
Prendiamo nota di questo codice: sarà uno dei parametri richiesti per effettuare il login su Spotify.

Ora siamo pronti ad autorizzare la nostra applicazione. Prepariamo un URL che poi andremo ad incollare nella barra degli indirizzi del browser. Questo URL sarà così composto:

https://accounts.spotify.com/authorize?client_id=aa****aa&response_type=code&redirect_uri=https://localhost&scope=user-read-playback-state%20user-modify-playback-state

Dove al posto di aa****aa inseriamo il Client ID.

Incolliamo il link così preparato nel browser: comparirà una maschera con la richiesta di autorizzazione della nostra app per il nostro utente. Accettiamo.
Il browser cercherà di caricare una pagina con un indirizzo del genere:

https://localhost/?code=ABAB*****ABAB

Prendiamo nota di questo codice ABAB*****ABAB: ci servirà per ottenere il Refresh token e l'Access token.

Ora abbiamo bisogno di cURL, uno strumento open source che sta alla base di una infinità di prodotti e servizi. È un tool preinstallato su Raspbian, quindi potrebbe essere comodo lavorare già sul Raspberry che usiamo per la musica.

Inseriamo il seguente comando:

curl -H "Authorization: Basic ee****ee" -d grant_type=authorization_code -d code=ABAB************ABAB -d redirect_uri=https%3A%2F%2Flocalhost https://accounts.spotify.com/api/token

Al posto di ee****ee inseriamo il codice in Base64 generato precedentemente, mentre al posto di ABAB*****ABAB il codice ottenuto nel browser.

Spotify ci risponderà con una serie di parametri in un messaggio di questo tipo:

{"access_token":"oi****oi","token_type":"Bearer","expires_in":3600,"refresh_token":"re****rere","scope":"user-modify-playback-state user-read-playback-state"}

In Access token troviamo un token di accesso valido per un'ora, mentre in Refresh token abbiamo la chiave che ci permetterà, insieme al codice Base64, di richiedere all'occorrenza token sempre nuovi, in modo totalmente automatizzato e senza alcun intervento da parte dell'utente.

Ora creiamo due file basecode.tk e refresh.tk per salvare il codice Base64 e il Refresh Token.
Sarà sufficiente incollare i codici, seguiti da > nomefile

codiceBase64 > basecode.tk
refreshtoken > refresh.sh


Ora siamo pronti a scrivere i nostri script!

Prendiamo ad esempio uno script che ci permetta di saltare alla canzone successiva.

La pagina di aiuto ci guida nella procedura: https://developer.spotify.com/console/post-next/

Quello che ci manca però è un token sempre valido per far sì che questo script possa funzionare ora come tra una settimana.

Quello che ci serve è quindi una prima chiamata che aggiorni il nostro token per la successiva chiamata che effettivamente ci porterà alla canzone successiva.

Il nostro script avrà quindi una struttura simile:

#!/bin/sh

basecode=$(cat /home/pi/apiremote/basecode.tk)
refresh=$(cat /home/pi/apiremote/refresh.tk)

mytoken=$(curl -s -H "Authorization: Basic $basecode" -d grant_type=refresh_token -d refresh_token=$refresh https://accounts.spotify.com/api/token | jq -r '.access_token')

curl -X "POST" "https://api.spotify.com/v1/me/player/next" -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $mytoken"

echo "Spotify Next"


Occhio a inserire i codici corretti nei relativi spazi.

Salviamo questo script con un nome come next.sh
Concediamo il permesso di esecuzione allo script con

sudo chmod +x next.sh

Ed eseguiamo il comando con

./next.sh

Se non dovesse funzionare installiamo il tool jq con il comando

sudo apt-get install jq

Ora, su qualsiasi dispositivo fosse in riproduzione la musica, saremo saltati alla traccia successiva.

Possiamo fare lo stesso per tanti altri comandi, lascio qui il link a un piccolo repository su GitHub in cui carico gli script più utili che realizzo.

Ora, se sei arrivato qui dalla mia precedente guida su LIRC,  puoi inserire nel file .lircr nella sezione config il comando per eseguire lo script:

begin
 remote = nome-telecomando
 prog = irexec
 button = KEY_NEXTSONG
 config = /percorso/allo/script/next.sh
 repeat = 0
end



Commenti

Post popolari in questo blog

Chi sono

LIRC: controlla il tuo Raspberry con un telecomando