Reload Radio Deejay in bash
(pubblicato il 22 marzo 2021) Photo by Nothing Ahead on Pexels.com
Questo script permette di scaricare le puntate intere di Ciao Belli o DeeJay Time da Deejay Reload perché le ascolto offline praticamente da sempre. In alternativa, è possibile ascoltare direttamente il live streaming delle trasmissioni.
I pattern che uso per lo scraping sono molto elementari e sono ovviamente sensibili ai minimi cambiamenti che avvengono sulle pagine di Radio Deejay.
La versione attuale è attiva da un paio di mesi a questa parte perché il pattern prima era leggermente diverso. E più si va indietro, più le differenze aumentano. Per dirne una, lo streaming hls è molto recente, Prima di esso, il reload era disponibile solo in mp3. Questa sarà la 15a versione dello script 🙂
Il download restituisce un file in mp3 o aac. Quest'ultimo ottenuto in maniera rudimentale estrando i singoli segmenti aac ottenuti dall'analisi della playlist hls e ricombinati attraverso ffmpeg.
In linea di principio sarebbe possibile estendere lo script aumentando la scelta delle trasmissioni disponibili e, volendo migliorare l'interazione con l'utente sacrificando l'automatismo e la “scriptabilità”, dotandolo di un menù.
help() {
echo "$1"
echo
echo "Usa come: wget_deejay.sh <YYYYMMDD> <prg> <format>"
echo "Es. wget_deejay.sh 2019062 cb mp3 [Scarica Ciao Belli in mp3]"
echo " wget_deejay.sh 2019062 djt aac [Scarica Deejay Time in aac]"
echo " wget_deejay.sh live [Deejay Live]"
}
download() {
if [[ ${FMT} == "mp3" || -z ${FMT} ]]; then
if ! check_and_download_mp3; then
return 1
fi
elif [[ ${FMT} == "aac" ]]; then
if ! check_aac; then
return 1
else
download_aac
fi
else
help "Formato non corretto."
return 1
fi
}
check_and_download_mp3() {
#if ! wget -q https://${HOST}/${DATA_URL}/episodes/${TITLE}/${DATA}.mp3 -O "${PRG}_${DATA}.mp3"; then
echo https://${HOST}/${DATA_URL}/episodes/${TITLE}/${TITLE}-${DATA}.mp3
if ! wget https://${HOST}/${DATA_URL}/episodes/${TITLE}/${TITLE}-${DATA}.mp3 -O "${PRG}_${DATA}.mp3"; then
help "Puntata di ${TITLE} del ${ERR_DATA}, non trovata."
return 1
fi
}
check_aac() {
#if ! wget -qO- https://${HOST}/"${DATA_URL}"/episodes/${TITLE}/hls-010000/hls-010000.m3u8 1>/dev/null; then
echo https://${HOST}/"${DATA_URL}"/episodes/${TITLE}/hls-"${TITLE}"-"${DATA}"/hls-"${TITLE}"-"${DATA}".m3u8
if ! wget -qO- https://${HOST}/"${DATA_URL}"/episodes/${TITLE}/hls-"${TITLE}"-"${DATA}"/hls-"${TITLE}"-"${DATA}".m3u8 1>/dev/null; then
help "Puntata di ${TITLE} del ${ERR_DATA}, non trovata."
return 1
else
return 0
fi
}
download_aac() {
echo -n "Scarico la traccia............. "
ffmpeg -i https://${HOST}/"${DATA_URL}"/episodes/${TITLE}/hls-"${TITLE}"-"${DATA}"/hls-"${TITLE}"-"${DATA}".m3u8 -c copy $HOME/deejay/"${PRG}_${DATA}".aac 2>/dev/null
echo "Fatto."
}
DATA=$1
PRG=$2
FMT=$3
if [[ $1 == "live" ]]; then
mpv http://radiodeejay-lh.akamaihd.net/i/RadioDeejay_Live_1@189857/master.m3u8
else
case "${PRG}" in
"cb")
HOST="media.deejay.it"
TITLE="ciao_belli"
;;
"djt")
HOST="media.deejay.it"
TITLE="deejay_time"
;;
"live")
TITLE="live"
;;
*)
help "Programma Deejay mancante o non esistente."
exit 1
esac
DATA_URL="${DATA:0:4}/${DATA:4:2}/${DATA:6:2}"
ERR_DATA="${DATA:6:2}-${DATA:4:2}-${DATA:0:4}"
if [[ -z ${DATA:0:4} ]]; then help "Manca l'anno."; exit 1
elif [[ -z ${DATA:4:2} ]]; then help "Manca il mese."; exit 1
elif [[ -z ${DATA:6:2} ]]; then help "Manca il giorno."; exit 1
elif ! download; then exit 1
fi
fi