Portale web per visualizzare playlist musicali mensili con link a Apple Music, Spotify e YouTube.
- 🎵 Playlist mensili dal 2020 (formato YYYY.MM)
- 🔗 Link automatici per Apple Music, Spotify e YouTube
- 🎨 Design minimal ASCII/cyberpunk
- 📊 Ricerca intelligente via ISRC con fallback
- Node.js 18+
- Account Apple Music attivo
- Cookie Apple Music esportati (formato Netscape)
npm install- Vai su https://developer.spotify.com/dashboard
- Crea una nuova app
- Copia Client ID e Client Secret
- Vai su https://console.cloud.google.com/
- Crea un nuovo progetto
- Abilita YouTube Data API v3
- Crea credenziali > API Key
- Copia l'API Key
Crea file .env copiando .env.example:
cp .env.example .envModifica .env con le tue credenziali:
SPOTIFY_CLIENT_ID=tuo_client_id
SPOTIFY_CLIENT_SECRET=tuo_client_secret
YOUTUBE_API_KEY=tua_api_key
APPLE_MUSIC_COOKIES_PATH=./cookies.txt
Esporta i cookie dal browser usando una di queste estensioni:
- Firefox: Export Cookies
- Chrome: Get cookies.txt LOCALLY
Salva il file come cookies.txt nella root del progetto.
npm run fetchQuesto script:
- Recupera tutte le playlist con naming YYYY.MM dal tuo account Apple Music
- Per ogni traccia, cerca i link su Spotify e YouTube via ISRC
- Salva tutto in
data/playlists.json
npm run devApri http://localhost:8000 nel browser.
music-portal/
├── scripts/ # Script Node.js
│ ├── lib/ # Librerie per API
│ │ ├── apple-music.js
│ │ ├── spotify.js
│ │ └── youtube.js
│ ├── config.js
│ └── fetch-playlists.js
├── data/ # JSON generati
│ └── playlists.json
├── public/ # Frontend statico
│ ├── index.html
│ ├── playlist.html
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── app.js
├── cookies.txt # Cookie Apple Music
├── .env # Variabili ambiente
└── package.json
Il frontend è completamente statico e può essere deployato su:
- GitHub Pages
- Netlify
- Vercel
- DigitalOcean App Platform
- Qualsiasi hosting statico
Basta caricare la cartella public/ e il file data/playlists.json.
MIT
Il sistema supporta aggiornamenti incrementali per ottimizzare le prestazioni e ridurre il consumo di API quota.
npm run fetch- ✅ Processa solo playlist nuove
- ✅ Marca playlist rimosse con flag
removed: true - ✅ Retry automatico link mancanti (Spotify/YouTube)
- ✅ Mantiene storico playlist rimosse
npm run fetch -- --force-refresh- Ignora JSON esistente
- Riprocessa tutte le playlist da zero
- Utile quando cambia la struttura dati
npm run fetch -- --cleanup-removed- Rimuove fisicamente le playlist con
removed: true - Usa con cautela, elimina lo storico
npm run fetch -- --apple-jwt="nuovo_token_jwt"- Aggiorna automaticamente il file
.env - Usa il nuovo token per questa e le prossime esecuzioni
Tutti i cambiamenti vengono tracciati in data/changes.log:
{
"lastRun": "2025-12-11T10:30:00Z",
"changes": [
{
"timestamp": "2025-12-11T10:30:00Z",
"type": "playlist_added",
"playlistId": "pl.u-xxx",
"playlistName": "2025.01",
"tracksCount": 50
},
{
"timestamp": "2025-12-11T10:30:00Z",
"type": "playlist_removed",
"playlistId": "pl.u-yyy",
"playlistName": "2020.01"
}
]
}Ogni playlist ha ora campi aggiuntivi:
{
"id": "pl.u-xxx",
"name": "2024.11",
"year": 2024,
"month": 11,
"removed": false,
"lastUpdated": "2025-12-11T10:30:00Z",
"removedAt": null,
"tracks": [...]
}| Modalità | Tempo Stimato | API Calls |
|---|---|---|
| Incremental (1-2 nuove playlist) | ~30s - 2min | Minime |
| Incremental (retry links solo) | ~1-5min | Moderate |
| Full Refresh (68 playlist) | ~10-15min | Massime |
- Prima esecuzione: Lo script farà automaticamente full refresh
- Esecuzioni successive: Usa modalità incrementale (default)
- Dopo modifiche struttura: Usa
--force-refresh - Pulizia periodica: Usa
--cleanup-removedogni 6-12 mesi - JWT scaduto: Copia nuovo token da DevTools e usa
--apple-jwt