Ora crea indici html per ogni pagina, scarica l'immagine collegata, scarica eventuali contenuti aggiuntivi e riscrive i collegamenti negli html per farli puntare ai file locali.
Codice:
#!/bin/bash
#Script per il recupero dei file *.ra della trasmissione radiofonica "Alle otto della sera"
#Organizzazione dati sui server:
# - Indici generali: ogni pagina contiene max 10 link ad altrettante serie di puntate
# - Indici serie: ogni indice di serie contiene link a file *.ram, uno per puntata
# - File *.ram: contengono praticamente solo del testo, cioè il link allo stream .*ra
#
# Versione 1.1 (18/10/2009) Alcuni stream sono di tipo pnm, mplayer non li può usare
# Basta riscrivere l'indirizzo in rstp://...
# Versione 2 (18/10/2009) Recupero contenuti accessori: html, immagine, altri file...
#cartella di lavoro
mkdir -p alle8dellasera
cd alle8dellasera
#Viene creata una paginetta html con la descrizione di ogni serie
#testata html
HEAD="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
HEAD="$HEAD\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
HEAD="$HEAD<html>\n<head>\n"
HEAD="$HEAD<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8\"/>\n"
HEAD="$HEAD<title>RADIO DUE</title>\n"
HEAD="$HEAD<style TYPE=\"text/css\">\n<!--\n\n"
#qui in mezzo includo le stile da css
#fine testata
HEAD_CLOSE="\n\n"
HEAD_CLOSE="$HEAD_CLOSE-->\n"
HEAD_CLOSE="$HEAD_CLOSE</style>\n</head>\n<body>\n"
#coda html
TAIL="</body>\n</html>"
if [[ ! -f "style.css" ]]; then
wget -O - "http://www.radio.rai.it/radio2/schede_interne_a4.css" > style.css
fi
COUNTER=1
while [ $COUNTER -lt 14 ]; do
INDEX_ALLEOTTO="alleottodellasera$COUNTER.cfm"
#recupero indici generali
if [[ ! -f "$INDEX_ALLEOTTO" ]]; then
wget -O - "http://www.radio.rai.it/radio2/alleottodellasera.cfm?PageNum_Get_tipologie=$COUNTER" > $INDEX_ALLEOTTO
fi
#estraggo i link alle serie di puntate
SERIES=`cat $INDEX_ALLEOTTO | sed -e '/href=\"http:\/\/www.radio.rai.it\/radio2\/alleotto\//!d' -e 's/.*href=[^h]*//' -e 's/".*$//' | uniq | sort`
#creo cartelle di lavoro numerate, una per serie
if [[ ! -d "serie$COUNTER" ]]; then
mkdir "serie$COUNTER"
fi
NR_INDEX=1
for serie in $SERIES; do
echo $serie
#recupero indici serie
if [[ ! -f "serie$COUNTER/index$NR_INDEX.htm" ]]; then
wget -q -O - $serie > "serie$COUNTER/index$NR_INDEX.htm"
fi
if [[ ! -f "serie$COUNTER/index$NR_INDEX.htm" ]]; then
exit 0 ;
fi
#estraggo i link ai file *.ram
RAMS=`cat "serie$COUNTER/index$NR_INDEX.htm" | sed -e '/Q_CANALE=http:\/\/www.radio.rai.it\/\/radio2\/alleotto\//!d' -e 's/.*Q_CANALE=[^h]*//' -e 's/.ram.,.*$/.ram/' | uniq | sort`
for ram in $RAMS; do
#recupero l'indirizzo dello stream *.ra
STREAM=`wget -q -O - $ram`
#pulizia necessaria...
STREAM=`echo $STREAM | sed -e 's/.*rtsp:\/\/*/rtsp:\/\//' -e 's/.ra[^[:print:]]*$/.ra/'`
#alcuni sono rappresentati come stream pnm -> li forzo ad rtsp
STREAM=`echo $STREAM | sed -e 's/.*pnm:\/\/*/rtsp:\/\//'`
#suddivido i file per serie: estraggo i nomi necessari
FILENAME=`echo $STREAM | sed -e 's/.*\///'`
SERIE_NAME=`echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///'`
#creazione cartelle serie
if [[ ! -d "../$SERIE_NAME" ]]; then
mkdir "../$SERIE_NAME"
fi
#creazione indice html
if [[ ! -f "../$SERIE_NAME/$SERIE_NAME.html" ]]; then
echo -e "\nCreazione indice html: $SERIE_NAME/$SERIE_NAME.html"
echo -e $HEAD > "../$SERIE_NAME/$SERIE_NAME.html"
cat style.css >> "../$SERIE_NAME/$SERIE_NAME.html"
echo -e $HEAD_CLOSE >> "../$SERIE_NAME/$SERIE_NAME.html"
cat "serie$COUNTER/index$NR_INDEX.htm" \
| sed -n -e '/<span class=\"solotesto\"> Alle otto della sera <\/span><\/div>/,/<div class=\"schede_interne_\(contenuti\|riascolta_a4\)\">/p' \
| sed -e '/<div class=\"schede_interne_\(contenuti\|riascolta_a4\)\">/d' \
>> "../$SERIE_NAME/$SERIE_NAME.html"
echo -e $TAIL >> "../$SERIE_NAME/$SERIE_NAME.html"
#recupero eventuale immagine
IMAGE=`cat "../$SERIE_NAME/$SERIE_NAME.html" | sed -e '/<img src=\"/!d' -e 's/.*<img src=\"//' -e 's/\" width=\".*$//'`
if [[ ! -z $IMAGE ]]; then
IMAGE_NAME=`echo $IMAGE | sed -e 's/.*\///'`
echo "L'indice contiene un'immagine -> $SERIE_NAME/contenuti/$IMAGE_NAME"
if [[ ! -d "../$SERIE_NAME/contenuti" ]]; then
mkdir "../$SERIE_NAME/contenuti"
fi
if [[ ! -f "../$SERIE_NAME/contenuti/$IMAGE_NAME" ]]; then
wget -q -O - "http://www.radio.rai.it$IMAGE" > "../$SERIE_NAME/contenuti/$IMAGE_NAME"
fi
#riscritture indirizzo immagine: da remota a locale
LOCAL_NAME="contenuti/$IMAGE_NAME"
sed -i 's:'$IMAGE':'$LOCAL_NAME':g' "../$SERIE_NAME/$SERIE_NAME.html"
fi
#alcune serie hanno anche dei contenuti aggiuntivi: li recupero
LINKS=`sed -e '/<a href=\"/!d' -e 's/<a href=\"/\n/g' ../$SERIE_NAME/$SERIE_NAME.html | sed -e '/http:/!d' -e 's/\">.*$//'`
if [[ ! -z $LINKS ]]; then
if [[ ! -d "../$SERIE_NAME/contenuti" ]]; then
mkdir "../$SERIE_NAME/contenuti"
fi
for link in $LINKS; do
FILE_NAME=`echo $link | sed -e 's/.*\///'`
if [[ ! -f "../$SERIE_NAME/contenuti/$FILE_NAME" ]]; then
echo "Contenuto aggiuntivo -> $SERIE_NAME/contenuti/$FILE_NAME"
wget -q -O - "$link" > "../$SERIE_NAME/contenuti/$FILE_NAME"
fi
#riscrittura indirizzo contenuto
LOCAL_NAME="contenuti/$FILE_NAME"
sed -i 's*'$link'*'$LOCAL_NAME'*g' "../$SERIE_NAME/$SERIE_NAME.html"
done
fi
fi
if [[ ! -f "../$SERIE_NAME/$FILENAME" ]]; then
#se il file non esiste procedo con il download
echo -e "\nIn download: $SERIE_NAME/$FILENAME = $STREAM"
if ! mplayer -prefer-ipv4 -noframedrop -dumpfile ../$SERIE_NAME/$FILENAME -dumpstream $STREAM ; then
echo -e "\n\nERROR! $STREAM -> $SERIE_NAME/$FILENAME\n\n"
exit 1
fi
else
#il file esiste già.
#Due casi possibili:
# - è già stato scaricato in un'esecuzione precedente
# - è stato solamente iniziato ed è incompleto...
# QUESTO SCRIPT NON SI ACCORGE DI AVENTUALI FILE INCOMPLETI E NON LI SCARICA PIU'
echo -e "\nGià scaricato o interrotto: $SERIE_NAME/$FILENAME = $STREAM\n"
fi
done
let NR_INDEX=NR_INDEX+1
done
let COUNTER=COUNTER+1
done
#gimli