Automated Archival of Zoo di 105 Episodes
Configurazione e Manutenzione di zoo.ovh: Archiviazione Automatizzata de Lo Zoo di 105
Dal 2015, gestisco e mantengo zoo.ovh, un archivio automatizzato di tutti gli episodi de Lo Zoo di 105, un popolare programma radiofonico italiano. Il sistema scarica quotidianamente i nuovi episodi, li converte a un bitrate inferiore per risparmiare spazio di archiviazione e li carica su account MEGA a rotazione. Ogni episodio viene automaticamente pubblicato sul sito web zoo.ovh.
In questo post vedremo la configurazione e gli script che hanno funzionato negli ultimi 8 anni con una manutenzione minima.
Panoramica dell’Architettura
Il sistema è progettato per:
- Scaricare l’episodio giornaliero dal sito web della radio alle 19:00 ogni giorno.
- Convertire l’audio usando
lameper ridurre il bitrate a 128kbps. - Caricare l’episodio su una lista rotante di account MEGA per garantire spazio di archiviazione sufficiente.
- Generare e pubblicare un post su zoo.ovh con il link per il download.
Script di Download Giornaliero
Questo script viene eseguito via cron ogni giorno alle 19:00.
Configurazione cron:
0 19 * * * /path/to/download_new_episode.shScript: download_new_episode.sh
#!/bin/bashPUNTATA=`date +"%d%m%Y"`DATA=`date +"%a"`
echo "Avvio download..."wget -O /root/Zoo/${DATA}_${PUNTATA}.mp3 http://www.105.net/upload/uploadedContent/repliche/zoo/${DATA}_${PUNTATA}_zoo.mp3wgetreturn=$?
if [[ $wgetreturn -ne 0 ]]; then TODAY=$(date +'%Y/%-m/%-d') wget -O /root/Zoo/${DATA}_${PUNTATA}.mp3 http://podcast.mediaset.net/repliche/${TODAY}/${DATA}_${PUNTATA}_zoo.mp3fi
wgetreturn=$?if [[ $wgetreturn -ne 0 ]]; then cd /var/www/ ./avvisamdrzn.sh echo "no" > statodownloadProva a scaricare l’episodio dall’URL principale. Se fallisce, tenta un URL alternativo.
Se entrambi falliscono, invia una notifica su Telegram.
else echo "Download completato!" echo "ok" > statodownload
echo "Conversione a 128kbps" cd /root/Zoo lame -b 128 *
echo "Lame eseguito. Rinomino mp3" rename -f 's/.mp3//' *.mp3.mp3
echo "Login..." mega-login $MEGAACCOUNT
echo "Avvio upload.." mega-cd Zoo mega-put . /root/Zoo/*
echo "Upload completato.." rm -rf /root/Zoo/* echo "File eliminati.."
cd /var/www/ ./lista.sh ${DATA}_${PUNTATA}fiSpiegazione:
- Tentativi
wget: Lo script prova prima a scaricare l’episodio dall’URL principale. Se fallisce, tenta un URL alternativo. - Conversione bitrate: Converte l’episodio scaricato a 128kbps usando
lame. - Upload su MEGA: Lo script effettua il login su un account MEGA specifico e carica il file convertito.
Gli account gratuiti di MEGA hanno una capacità di archiviazione limitata (15-20GB ciascuno), il che rende necessario l’uso di più account e la rotazione tra di essi. Anche se potrei usare un singolo account a pagamento con 1TB di spazio, questo creerebbe un singolo punto di fallimento - una richiesta DMCA potrebbe disabilitare l’intero archivio. Nonostante io abbia un permesso informale dalla radio per mantenere questo archivio, distribuire il contenuto su più account fornisce una migliore resilienza contro potenziali problemi.
Script di Creazione Post Blog
Il seguente script genera e pubblica un post su zoo.ovh con il link per il download.
Script: lista.sh $nome_episodio
#!/bin/bash
PUNTATA=${1}
echo "Esportazione..."mega-export -a ${PUNTATA}.mp3mega-export -f ${PUNTATA}.mp3 > megalista.txtawk '{print $10}' megalista.txt > linkmega.txtawk '{print $1}' megalista.txt > nomepuntata.txtpeso=`mega-ls -lh | grep ${PUNTATA} | awk '{print $3}'`dim=`mega-ls -lh | grep ${PUNTATA} | awk '{print $4}'`value=`cat linkmega.txt | head -n1`nomepuntata=`cat nomepuntata.txt | head -n1`nomeok=${nomepuntata::-4}
# Estrazione componenti datadata=${nomeok:4}giorno="${data:0:2}"mese="${data:2:2}"anno="${data:4:4}"Questo script estrae i metadati (data, titolo, giorno della settimana) dal nome del file usando manipolazione di stringhe base in bash. Anche se non è la soluzione più elegante, è efficace per file che seguono il pattern di denominazione “lun_ddmmyy_zoo.mp3”.
Ho scritto questo nel 2015-2016 quando stavo imparando lo scripting bash. Anche se strumenti come Python con regex o LLM moderni gestirebbero questo in modo più pulito, apprezzo ancora bash per compiti di elaborazione testo veloci come questo. Lo script si è dimostrato affidabile negli anni nonostante (o forse grazie a) la sua semplicità.
# Creazione del post blogcat << EOF > post.txtLink al download:<br><a href=${value}><img src='http://zoo.ovh/wp-content/uploads/2019/01/download.png' alt='Clicca per scaricare la puntata' title='Replica di ${data}'></img></a>EOF
/usr/local/bin/wp post create ./post.txt \ --post_title="Puntata ${nomeok}" \ --post_date=${anno}-${mese}-${giorno} \ --post_status=publish --allow-root
# Invio notificaLINK=$(/usr/local/bin/wp post list --allow-root --field=url | grep ${PUNTATA})./inviachannel.sh "Ecco la replica della puntata: ${LINK}, peso puntata: ${peso} ${dim}"Spiegazione:
- Export MEGA: Recupera un link di download pubblico per l’episodio.
- Generazione contenuto post: Usa il link MEGA per creare un post WordPress.
- Notifica: Invia un messaggio a un canale con i dettagli dell’episodio.
Gestione dello Storage
L’infrastruttura di storage si è evoluta organicamente nel tempo per adattarsi all’archivio in crescita.
Inizialmente, ho creato un singolo account MEGA che forniva 50GB di spazio gratuito durante i primi giorni di MEGA. Una volta che quell’account ha raggiunto la sua capacità intorno ai 45GB, ho creato un secondo account per continuare a memorizzare nuovi episodi.
Questo pattern di creazione di nuovi account secondo necessità è continuato, portando all’attuale setup di 19 diversi account MEGA. Ecco uno snapshot dell’utilizzo dello storage su alcuni degli account:
- Zoo01 Usato: 45.12 GB (quando Mega.co.nz dava 50GB di spazio gratuito)
- Zoo02 Usato: 14.59 GB (Circa 6 anni fa Mega.co.nz ha ridotto lo spazio gratuito a 15GB)
- Zoo16 Usato: 19.91 GB (Circa 3 anni fa Mega.nz ha aumentato lo spazio gratuito a 20GB)
- Zoo19 Usato: 15.50 GB (Quello attualmente in uso)
Manutenzione
Nel corso degli anni, la manutenzione è stata minima, tipicamente coinvolgendo:
- Aggiornamento di MEGA-CLI quando necessario.
- Gestione degli aggiornamenti WordPress.
- Aggiustamenti occasionali agli URL di download se la radio cambia il suo setup di hosting.
Nonostante questi compiti minori, il sistema è stato incredibilmente affidabile.
Considerazioni Finali
Il sistema di archiviazione automatizzata per Lo Zoo di 105 dimostra la potenza di combinare script shell semplici, strumenti affidabili come wget e lame, e automazione via cron jobs. Con un intervento minimo, questo setup ha preservato anni di contenuti radio in modo efficiente.
Se sei interessato a implementare un sistema simile o hai domande sulla configurazione, non esitare a contattarmi!
← Torna al blog