Spotify Save New Music Friday: le novità pubblicate

| |

Da quando ho messo in piedi gli script che salvano una copia della New Music Friday Italia ogni venerdì (e nel frattempo mettono in coda le tracce nuove in una playlist che le raccoglierà tutte per il corso del 2022, e in seguito per i futuri anni), ci ho rimesso mano una sola volta per mettere a posto un potenziale problema dovuto all’orario di avvio del processo programmato su GitHub. Funziona, tutto fila liscio e io sono un bimbo contento per questa piccola stupidata.

Oggi (è domenica e il pupo sta facendo il pisolo pomeridiano) però sono tornato sull’argomento dopo aver letto l’articolo di Michele sullo Spotify Code, cosa che avevo già visto in passato ma al quale non mi ero particolarmente interessato. Si tratta di un codice che viene letto dall’applicazione di Spotify (su smartphone o tablet) e che ti porta immediatamente alla playlist affinché tu possa salvarla o ascoltarla immediatamente. C’è un sito web ufficiale che risponde all’indirizzo spotifycodes.com ma apparentemente non ci sono API che permettono la creazione automatica del codice. Ho quindi sbirciato su GitHub nel repository ufficiale (anche se archiviato) e ho trovato un metodo comunque funzionante che passa tramite URL secco (valido fino a quando non decideranno di modificarlo).

Spotify Codes: questione di URL

Tutto parte da questo intervento: github.com/spotify/web-api/issues/519#issuecomment-618114678. Si capisce chiaramente che modificando parte di quell’indirizzo si otterrà l’immagine del codice desiderata, puntata alla playlist che si vuole, nel formato desiderato (dell’immagine) e con colori modificabili. Una rapida analisi al codice della pagina conferma il tutto:

Spotify Save New Music Friday: le novità pubblicate

E allora la modifica è presto fatta anche lato codice:

def get_spoticode(nmfiplaylisttoday):
  base_url = 'https://scannables.scdn.co/uri/plain/png/bdd74/black/640/spotify:playlist:'
  spoti_url = ''.join([base_url, nmfiplaylisttoday])
  print("Spotify Code:",spoti_url)
  return spoti_url

La funzione non fa altro che ottenere l’URL completo che punta all’immagine (Spotify Code) della playlist di backup generata al venerdì. Il colore di sfondo è quello del mio logo (#bdd74) e quello del logo Spotify / codice è il nero, la grandezza dell’immagine sarà di 640px di larghezza. Inizialmente avevo pensato di includere qui nel codice il necessario per scaricare l’immagine nella cartella dello script e permettere quindi upload ovunque si voglia (github.com/gioxx/spotify-save-new-music-friday/commit/6a55d848d2d97aa2d1ebaaebc8fad0a02243fc8e), poi mi è venuta la malsana idea di associare questa cosa a Twitter e quindi:

  • prevedere che l’azione GitHub mandi sul mio account Twitter un aggiornamento di stato quando sarà disponibile la nuova copia di New Music Friday Italia.
  • Che nell’aggiornamento di stato su Twitter compaia anche la cover-art della playlist (oltre all’immagine dello Spotify Code).

E quindi, due le modifiche necessarie: una funzione per ottenere il JSON degli URL diretti alla copertina della playlist e un’altra che scarichi entrambe le immagini passandogli i parametri in maniera diretta (ID della playlist e nome del file da salvare). La prima stava facendomi diventare più scemo del dovuto perché mi stavo perdendo in un bicchiere d’acqua, ho poi corretto il tiro ed ecco servito il risultato funzionante:

def get_playlistcover(access_token, nmfiplaylisttoday):
  url = "https://api.spotify.com/v1/playlists/%s/images" % nmfiplaylisttoday
  headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer %s" % access_token
  }
  response = requests.get(url, headers=headers)
  return response.json()

La seconda invece l’avevo già messa in piedi tramite urllib.request:

def downloadart(arturl, filename):
  response = urllib.request.urlretrieve(arturl, filename)
  return response

A questo punto basterà andare ad aggiungere le chiamate a queste funzioni dopo essere riusciti a fare un corretto backup della playlist (dopo il print("Playlist backup complete") per capirci):

nmf_spoticode = get_spoticode(nmfiplaylisttoday)
nmf_cover = get_playlistcover(access_token, nmfiplaylisttoday)[0]['url']
downloadart(nmf_spoticode,"nmf_spoticode.png")
downloadart(nmf_cover,"nmf_cover.png")

Le modifiche riguardano attualmente il solo script relativo al backup della New Music Friday (quindi nmf.py) e non credo serva fare tutto questo anche per l’altro che si occupa di aggiungere in coda le tracce settimanalmente nella playlist unica annuale.

Come pubblicare su Twitter

Lo faccio tramite GitHub Actions, ho scelto il codice di SnowCait perché permette anche di aggiungere facilmente immagini oltre al testo del tweet, l’ideale per fare l’upload dello Spotify Code e della copertina della playlist. Il codice è quello che ho usato al primo commit di test (github.com/gioxx/spotify-save-new-music-friday/commit/79f9b40b5c9884d6212100189fd4c64ac85f5008) e richiede che tra i Secrets del repository tu vada ad aggiungere le chiavi necessarie per la pubblicazione su Twitter (TWITTER_CONSUMER_API_KEY, TWITTER_CONSUMER_API_SECRET_KEY, TWITTER_ACCESS_TOKEN e TWITTER_ACCESS_TOKEN_SECRET), io in seguito ho giusto ritoccato i nomi dei file da caricare e il testo del tweet per arrivare all’attuale (all’atto della pubblicazione di questo articolo):

- name: Tweet NMF
  id: tweet
  uses: snow-actions/tweet@v1.1.1
  env:
   CONSUMER_API_KEY: ${{ secrets.TWITTER_CONSUMER_API_KEY }}
   CONSUMER_API_SECRET_KEY: ${{ secrets.TWITTER_CONSUMER_API_SECRET_KEY }}
   ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
   ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
  with:
   status: |
    La #playlist New Music Friday Italia di oggi è ora disponibile! Inquadra il codice con l'applicazione #Spotify per andare ad ascoltarla :-) | #NewMusicFridayItalia #NewMusicFriday
   media_paths: |
    nmf_cover.png
    nmf_spoticode.png

Già testato, è funzionante e percorre l’intero stack: dalla creazione della playlist di backup al download del materiale grafico e pubblicazione del tweet sul mio account (anche se ora ho fatto pulizia). Potrai vederlo in azione già a partire da venerdì 18 febbraio prossimo. Io intanto ho già aggiornato il file README del progetto ma manca la parte relativa al tweet, vedrò di integrarla quanto prima.

Se hai dubbi, l’area commenti è giusto un colpo di scroll più in basso, usala :-)

#StaySafe

Gioxx's Wall

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments