Reload Radio Deejay in bash

(pubblicato il 22 marzo 2021) vecchia radio 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

#bash #shell #scripting