|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2007
Messaggi: 165
|
registrare in mp3?
vorrei poter scaricare i files "podcast" di radio2 "alle 8 della sera". Si tratta di un grande numero di trasmissioni di RAI2 di argomento storico culturale ecc. Si possono ascoltare in podcast con real player, ma io vorrei averli come files mp3 da ascoltare in altro momento.
Come si può fare? C'è qualche software che scarica ed "ascolta" trasformando in mp3? Grazie per un consiglio |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Script per scaricare tutto:
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 #cartella di lavoro mkdir -p alle8dellasera cd alle8dellasera COUNTER=1 while [ $COUNTER -lt 14 ]; do INDEX_ALLEOTTO="alleottodellasera$COUNTER.cfm" #recupero indici generali wget -O - "http://www.radio.rai.it/radio2/alleottodellasera.cfm?PageNum_Get_tipologie=$COUNTER" > $INDEX_ALLEOTTO #estraggo i link alle serie di puntate LINKS=`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 $LINKS; do echo $serie #recupero indici serie wget -q -O - $serie > "serie$COUNTER/index$NR_INDEX.htm" #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/.*\///'` SERIENAME=`echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///'` #creazione cartelle serie if [[ ! -d "../$SERIENAME" ]]; then mkdir "../$SERIENAME" fi if [[ ! -f "../$SERIENAME/$FILENAME" ]]; then #se il file non esiste procedo con il download echo -e "\nIn download: $SERIENAME/$FILENAME = $STREAM" if ! mplayer -prefer-ipv4 -noframedrop -dumpfile ../$SERIENAME/$FILENAME -dumpstream $STREAM ; then echo -e "\n\nERROR! $STREAM -> $SERIENAME/$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: $SERIENAME/$FILENAME = $STREAM\n" fi done let NR_INDEX=NR_INDEX+1 done let COUNTER=COUNTER+1 done #Gimli Non ho idea di quanti file/dati e quanto tempo possa occorrere per un dump completo... (probabilmente proverò ad eseguirlo nel week-end). Ho letto che stanno per chiuderla questa trasmissione? Un paio d'anni fa avevo orari che mi permettevano di seguirla ed era molto interessante.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) Ultima modifica di Gimli[2BV!2B] : 18-10-2009 alle 02:22. Motivo: pnm -> rstp |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2007
Messaggi: 165
|
Ti ringrazio per la risposta, ma poichè la mia ignoranza è abissale, sono costretto a chiederti maggiori lumi; cosa devo fare con lo script? Da dove e come azionarlo?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Devi salvarlo in un file di testo (tipo download_alle8dellasera.sh)
Dopodiché apri un terminale (Terminal in Gnome oppure Konsole in Kde) Quindi ti sposti nella cartella dove hai salvato il file (se lo metti sul Desktop: cd Desktop) Per finire lo lanci: bash download_alle8dellasera.sh Verrà creata una cartella alle8dellasera nella stessa cartella che contiene lo script, ed al suo interno inizierà il download dei file. Dipendenze che potrebbero mancarti per l'esecuzione: mplayer
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Feb 2007
Messaggi: 165
|
ecco cosa succede:
bash download_alle8dellasera.sh --2009-10-16 14:39:33-- http://www.radio.rai.it/radio2/alleo...et_tipologie=1 Risoluzione di www.radio.rai.it... 212.162.68.25 Connessione a www.radio.rai.it|212.162.68.25|:80... connesso. HTTP richiesta inviata, in attesa di risposta... 200 OK Lunghezza: non specificato [text/html] Salvataggio in: "STDOUT" [ <=> ] 22.705 125K/s in 0,2s 2009-10-16 14:39:33 (125 KB/s) - "-" salvato [22705] http://www.radio.rai.it/radio2/alleotto/1914/index.cfm In download: 1914/1914guerra2004_01_19.ra = rtsp://mm3.rai.it/radio/radio2/torino/alle8/1914/1914guerra2004_01_19.ra download_alle8dellasera.sh: line 54: mplayer: command not found ERROR! rtsp://mm3.rai.it/radio/radio2/torino/alle8/1914/1914guerra2004_01_19.ra -> 1914/1914guerra2004_01_19.ra [roberto@localhost 8sera]$ bash download_alle8dellasera.sh --2009-10-16 14:40:56-- http://www.radio.rai.it/radio2/alleo...et_tipologie=1 Risoluzione di www.radio.rai.it... 212.162.68.25 Connessione a www.radio.rai.it|212.162.68.25|:80... connesso. HTTP richiesta inviata, in attesa di risposta... 200 OK Lunghezza: non specificato [text/html] Salvataggio in: "STDOUT" [ <=> ] 16.171 --.-K/s in 0,1s 2009-10-16 14:40:57 (128 KB/s) - "-" salvato [16171] http://www.radio.rai.it/radio2/alleotto/1914/index.cfm In download: 1914/1914guerra2004_01_19.ra = rtsp://mm3.rai.it/radio/radio2/torino/alle8/1914/1914guerra2004_01_19.ra download_alle8dellasera.sh: line 54: mplayer: command not found ERROR! rtsp://mm3.rai.it/radio/radio2/torino/alle8/1914/1914guerra2004_01_19.ra -> 1914/1914guerra2004_01_19 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2007
Città: DiSaronno Originale
Messaggi: 2374
|
Come ti aveva precedentemente detto il grande Gimli non hai installato mplayer
per farlo, se sei su ubuntu, basta aprire il terminale e dare: sudo apt-get install mplayer
__________________
Dell XPS 9570 Powered by Arch Linux || Motorola One Vision Ho concluso con raffaelev, Iceworld, stebru, Dichy, AXIP, Quakeman e Swampo |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Sep 2008
Città: Roma
Messaggi: 1382
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Feb 2007
Messaggi: 165
|
Ehi! Sta funzionando!! (Ho installato Mplayer). E' grandioso!. Non avevo mai visto una roba simile.
Quindi basta che io cambi l' indirizzo URL all' interno dello script per scaricare anche altre fonti... Bellissimo. Grazie! |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Anch'io l'ho avviato da qualche minuto in una sessione screen in un pc che posso lasciare acceso a lungo. Vediamo come va a finire...
Riguardo alla riutilizzabilità, beh, sì, forse la struttura delle pagine di alcune trasmissioni sarà simile, ma non ne sono certo... mi perdo un po' nel sito Rai, tra schianti assortiti e mille doppioni... Prego!
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Versione 2
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
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Codice:
#!/bin/bash #Script per il recupero dei file *.ra della trasmissione radiofonica "Alle otto della sera" #Organizzazione dati sui server: # - Indice generale # - 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... # Versione 2.1 (20/10/2009) Meno file *ram da scaricare in caso di download terminato # File html migliorati # Versione 3 (15/05/2010) Nuovo sito RAI; le nuove pagine dovrebbero rimanere stabili # per qualche tempo dopo la grande migrazione a SilverLight... # Versione 3.1 (09/06/2010) RealMedia Analyzer # Nome stream o nome file? # Riscrittura dei messaggi di output durante l'esecuzione # Trap Ctrl C per pulire in uscita # MPlayer non da errore in caso di Ctrl C, test output # trap keyboard interrupt (control-c) trap control_c SIGINT # trap standart sigterm trap control_c SIGTERM EXIT_AS_SOON_AS_POSS=0 control_c() { printf "\n\n%s\n\n" "*** Richiesta uscita script: attendere, prego... ***" EXIT_AS_SOON_AS_POSS=1 } #cartella di lavoro TEMP_FOLDER="alle8dellasera_TMP" if [[ ! -d "$TEMP_FOLDER" ]]; then printf "%s\n%s\n\n%s\n%s\n\n" \ "Benvenuto in \"Alle otto della sera\" downloader." \ "Prima esecuzione dello script: creo la certella temporanea \"$TEMP_FOLDER\"" \ " *** Potrai eliminare questa cartella al termine ***" \ " *** del download di tutte le serie che ti interessano ***" fi mkdir -p "$TEMP_FOLDER" cd "$TEMP_FOLDER" #RealMedia analyzer RMA="./rma" if [[ "$1" != "-no-rma" ]] && [[ ! -f "$RMA" ]]; then RMA_FULL_NAME="rma-0.30.00-linux-i386" printf "\n%s\n%s\n" "Sto scaricando una utilità per riparare gli stream: RealMedia Analyzer ($RMA_FULL_NAME)" \ "Eseguire lo script con argomento -no-rma per saltare questo passaggio." if [[ ! -f "$RMA_FULL_NAME.gz" ]]; then wget -q "http://users.i.com.ua/~alexeysp/rma/$RMA_FULL_NAME.gz" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget RMA failed!\n"; rm "$RMA_FULL_NAME.gz" ; fi fi gzip -qdc "$RMA_FULL_NAME.gz" > "$RMA" chmod +x "$RMA" fi #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 -q -O - "http://www.rai.tv/dl/Radio2/css/Radio2.css" > style.css if [[ "$?" -ne 0 ]]; then echo -ne "\nwget css failed!\n"; rm style.css ; exit 1; fi fi INDEX_ALLEOTTO="alleottodellasera.html" #recupero indice generale if [[ ! -f "$INDEX_ALLEOTTO" ]]; then wget -q -O - "http://www.rai.it/dl/Radio2/alleottodellasera.html" > $INDEX_ALLEOTTO if [[ "$?" -ne 0 ]]; then echo -ne "\nwget global index failed!\n"; rm $INDEX_ALLEOTTO; exit 1; fi fi #estraggo i link alle serie di puntate SERIES=`cat $INDEX_ALLEOTTO | sed \ -e '/<a href="\/dl\/Radio2\/sito\/item\/ContentItem-[A-Za-z0-9-]\{36\}.html">segue...<\/a>/!d' \ -e 's;^<a href=";;' -e 's;".*$;;'` NR_INDEX=1 for serie in $SERIES; do #recupero indici serie #creo cartelle di lavoro numerate, una per serie if [[ ! -d "serie$NR_INDEX" ]]; then mkdir "serie$NR_INDEX" fi if [[ ! -f "serie$NR_INDEX/index.htm" ]]; then REDIRECT="$(wget -q -O - "http://www.rai.it/$serie")" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget redirect failed!\n"; exit 1; fi LINK=`echo $REDIRECT | sed \ -e "s;.*document.location[[:space:]]*=[[:space:]]*';;" \ -e "s/'[[:space:]]*;.*//"` wget -q -O - "http://www.rai.it/$LINK" > "serie$NR_INDEX/index.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget index failed!\n"; rm "serie$NR_INDEX/index.htm"; exit 1; fi fi if [[ ! -f "serie$NR_INDEX/index.htm" ]]; then exit 0 ; fi EPISODES=`cat "serie$NR_INDEX/index.htm" | sed \ -e '/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="/!d' \ -e 's/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="//' \ -e 's/.html">[^\n^$]*<\/a>/.html/'` NR_EPISODE=1 for episode in $EPISODES; do if [[ ! -f "serie$NR_INDEX/$NR_EPISODE.htm" ]]; then wget -q -O - "$episode" > "serie$NR_INDEX/$NR_EPISODE.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget episode failed!\n"; rm "serie$NR_INDEX/$NR_EPISODE.htm"; exit 1; fi fi #estraggo il link al file *.ram RAM=`cat "serie$NR_INDEX/$NR_EPISODE.htm" | sed \ -e '/<embed CONSOLE="[[:alpha:]]*" NOLOGO="[[:alpha:]]*" autostart="[[:alpha:]]*" center="[[:alpha:]]*" CONTROLS="[[:alpha:]]*" src="http:\/\/www.rai.it\/dl\/audio\/[^\n^$]*.ram"/!d' \ -e 's/<embed CONSOLE="[[:alpha:]]*" NOLOGO="[[:alpha:]]*" autostart="[[:alpha:]]*" center="[[:alpha:]]*" CONTROLS="[[:alpha:]]*" src="//' \ -e 's/.ram".*$/.ram/'` #recupero l'indirizzo dello stream *.ra STREAM=`wget -q -O - $RAM` if [[ "$?" -ne 0 ]]; then echo -ne "\nwget ram failed!\n"; exit 1; fi #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 FILE_NAME=`echo $RAM | sed 's/.*\///' | sed 's/m$//'` STREAM_NAME=`echo $STREAM | sed -e 's/.*\///'` if [[ ${#FILE_NAME} -le ${#STREAM_NAME} ]]; then FILE_NAME="$STREAM_NAME" fi SERIE_NAME_PREV="$SERIE_NAME" SERIE_NAME=`echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///'` #creazione cartelle serie if [[ ! -d "../$SERIE_NAME" ]]; then mkdir "../$SERIE_NAME" printf "\n\n%s" "Inizio download serie \"$SERIE_NAME\"" ; elif [[ -z $SERIE_NAME_PREV ]] || [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then printf "\n\n%s" "Proseguo download serie \"$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$NR_INDEX/index.htm" \ | sed -n -e '/ id=\"SitoBody\">/,/<div class=\"Bot\"><\/div>/p' -e 's/<div class=\"Bot\"><\/div>/<div class=\"Bot\"><\/div><\/div>/' \ >> "../$SERIE_NAME/$SERIE_NAME.html" echo -e $TAIL >> "../$SERIE_NAME/$SERIE_NAME.html" #recupero eventuale immagine IMAGE=`sed -e '/<img src=\"/!d' -e 's/.*<img src=\"//' -e 's/\"[[:space:]]*[[:alpha:]]*=\".*$//' "../$SERIE_NAME/$SERIE_NAME.html"` 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 - "$IMAGE" > "../$SERIE_NAME/contenuti/$IMAGE_NAME" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget image failed!\n"; rm "../$SERIE_NAME/contenuti/$IMAGE_NAME"; fi 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" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget file failed!\n"; rm "../$SERIE_NAME/contenuti/$FILE_NAME"; fi 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 [[ -n $STREAM_NAME ]] && [[ -f "../$SERIE_NAME/$STREAM_NAME" ]] && [[ "${STREAM_NAME}" != "${FILE_NAME}" ]]; then mv "../$SERIE_NAME/$STREAM_NAME" "../$SERIE_NAME/$FILE_NAME" fi if [[ ! -f "../$SERIE_NAME/$FILE_NAME" ]]; then #se il file non esiste procedo con il download printf "\n%s" "In download: $FILE_NAME = $STREAM" OUTPUT=$(mplayer -noconsolecontrols -nojoystick -nolirc -quiet -prefer-ipv4 -noframedrop -dumpfile \ ../$SERIE_NAME/$FILE_NAME -dumpstream $STREAM 2>&1) if [[ "$?" -ne 0 ]] || [[ ! -z $(echo $OUTPUT | grep "Core dumped") ]]; then echo -ne "\nMPlayer failed!\n" rm "../$SERIE_NAME/$FILE_NAME" fi else #il file esiste già. printf "\n%s" "Già scaricato o interrotto: $SERIE_NAME/$FILE_NAME = $STREAM" fi if [[ "$1" != "-no-rma" ]] && [[ ! "$RMA" ]]; then PROCESSED=`$RMA -d "../$SERIE_NAME/$FILE_NAME" | grep "This file has been processed by RealMedia Analyzer"` if [[ -f "../$SERIE_NAME/$FILE_NAME" ]] && [[ -z $PROCESSED ]]; then if $RMA -ft "../$SERIE_NAME/$FILE_NAME" >/dev/null 2>&1 ; then echo -n "." else echo -ne "\n*rma -ft warning*" touch "../$SERIE_NAME/$FILE_NAME-rma_ft_WARNING" fi if $RMA -i "../$SERIE_NAME/$FILE_NAME" >/dev/null 2>&1 ; then echo -n "." else echo -ne "\n*rma -i warning*" touch "../$SERIE_NAME/$FILE_NAME-rma_i_WARNING" fi fi fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then exit 0 ; fi ((NR_EPISODE++)) done ((NR_INDEX++)) done #gimli
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Codice:
#!/bin/bash #Script per il recupero dei file *.ra della trasmissione radiofonica "Alle otto della sera" #Organizzazione dati sui server: # - Indice generale # - 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... # Versione 2.1 (20/10/2009) Meno file *ram da scaricare in caso di download terminato # File html migliorati # Versione 3 (15/05/2010) Nuovo sito RAI; le nuove pagine dovrebbero rimanere stabili # per qualche tempo dopo la grande migrazione a SilverLight... # Versione 3.1 (09/06/2010) RealMedia Analyzer # Nome stream o nome file? # Riscrittura dei messaggi di output durante l'esecuzione # Trap Ctrl C per pulire in uscita # MPlayer non da errore in caso di Ctrl C, test output # Versione 3.2 (21/08/2011) Maggiore efficienza riavviando lo script # Vari controlli errori # trap keyboard interrupt (control-c) trap control_c SIGINT # trap standart sigterm trap control_c SIGTERM EXIT_AS_SOON_AS_POSS=0 # file that flags a folder as completely downloaded FILE_FLAG_DONE=".done" control_c() { printf "\n\n%s\n\n" "*** Richiesta uscita script: attendere, prego... ***" EXIT_AS_SOON_AS_POSS=1 } #cartella di lavoro TEMP_FOLDER="alle8dellasera_TMP" if [[ ! -d "$TEMP_FOLDER" ]]; then printf "%s\n%s\n\n%s\n%s\n\n" \ "Benvenuto in \"Alle otto della sera\" downloader." \ "Prima esecuzione dello script: creo la certella temporanea \"$TEMP_FOLDER\"" \ " *** Potrai eliminare questa cartella al termine ***" \ " *** del download di tutte le serie che ti interessano ***" fi mkdir -p "$TEMP_FOLDER" cd "$TEMP_FOLDER" #RealMedia analyzer RMA="./rma" if [[ "$1" != "-no-rma" ]] && [[ ! -f "$RMA" ]]; then RMA_FULL_NAME="rma-0.30.00-linux-i386" printf "\n%s\n%s\n" "Sto scaricando una utilità per riparare gli stream: RealMedia Analyzer ($RMA_FULL_NAME)" \ "Eseguire lo script con argomento -no-rma per saltare questo passaggio." if [[ ! -f "$RMA_FULL_NAME.gz" ]]; then wget -q "http://users.i.com.ua/~alexeysp/rma/$RMA_FULL_NAME.gz" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget RMA failed!\n"; rm "$RMA_FULL_NAME.gz" ; fi fi gzip -qdc "$RMA_FULL_NAME.gz" > "$RMA" chmod +x "$RMA" fi #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 -q -O - "http://www.rai.tv/dl/Radio2/css/Radio2.css" > style.css if [[ "$?" -ne 0 ]]; then echo -ne "\nwget css failed!\n"; rm style.css ; exit 1; fi fi INDEX_ALLEOTTO="alleottodellasera.html" #recupero indice generale if [[ ! -f "$INDEX_ALLEOTTO" ]]; then wget -q -O - "http://www.rai.it/dl/Radio2/alleottodellasera.html" > $INDEX_ALLEOTTO if [[ "$?" -ne 0 ]]; then echo -ne "\nwget global index failed!\n"; rm $INDEX_ALLEOTTO; exit 1; fi fi #estraggo i link alle serie di puntate SERIES=`cat $INDEX_ALLEOTTO | sed \ -e '/<a href="\/dl\/Radio2\/sito\/item\/ContentItem-[A-Za-z0-9-]\{36\}.html">segue...<\/a>/!d' \ -e 's;^<a href=";;' -e 's;".*$;;'` SERIE_DONE=0 NR_INDEX=1 for serie in $SERIES; do #recupero indici serie #creo cartelle di lavoro numerate, una per serie if [[ ! -d "serie$NR_INDEX" ]]; then mkdir "serie$NR_INDEX" fi if [[ ! -f "serie$NR_INDEX/index.htm" ]]; then REDIRECT="$(wget -q -O - "http://www.rai.it/$serie")" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget redirect failed!\n"; exit 1; fi LINK=`echo $REDIRECT | sed \ -e "s;.*document.location[[:space:]]*=[[:space:]]*';;" \ -e "s/'[[:space:]]*;.*//"` wget -q -O - "http://www.rai.it/$LINK" > "serie$NR_INDEX/index.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget index failed!\n"; rm "serie$NR_INDEX/index.htm"; exit 1; fi fi if [[ ! -f "serie$NR_INDEX/index.htm" ]]; then exit 0 ; fi EPISODES=`cat "serie$NR_INDEX/index.htm" | sed \ -e '/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="/!d' \ -e 's/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="//' \ -e 's/.html">[^\n^$]*<\/a>/.html/'` if [[ -z $EPISODES ]]; then export TITLE=$(cat "serie$NR_INDEX/index.htm" | sed \ -e '/<div class="Titolo">/!d' \ -e 's/^[[:space:]]*<div class="Titolo">//' \ -e 's\</div>[[:space:]]*\\') TITLE=$(perl -MHTML::Entities -e 'print decode_entities($ENV{'TITLE'});') echo -ne "\n\nLa serie \"$TITLE\" non contiene nessuna puntata?!" ; unset -v TITLE echo -ne "\nURL: http://www.rai.it/$serie\n" ; ((NR_INDEX++)) continue ; fi NR_EPISODE=1 #questa flag viene portata a zero se un download di mplayer fallisce #in questo caso non viene creato il file FILE_FLAG_DONE, che marca una cartella come terminata SERIE_DONE=1 for episode in $EPISODES; do if [[ ! -f "serie$NR_INDEX/$NR_EPISODE.htm" ]]; then wget -q -O - "$episode" > "serie$NR_INDEX/$NR_EPISODE.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget episode failed!\n"; rm "serie$NR_INDEX/$NR_EPISODE.htm"; exit 1; fi fi #estraggo il link al file *.ram RAM=`cat "serie$NR_INDEX/$NR_EPISODE.htm" | sed \ -e '/<embed CONSOLE="[[:alpha:]]*" NOLOGO="[[:alpha:]]*" autostart="[[:alpha:]]*" center="[[:alpha:]]*" CONTROLS="[[:alpha:]]*" src="http:\/\/www.rai.it\/dl\/audio\/[^\n^$]*.ram"/!d' \ -e 's/<embed CONSOLE="[[:alpha:]]*" NOLOGO="[[:alpha:]]*" autostart="[[:alpha:]]*" center="[[:alpha:]]*" CONTROLS="[[:alpha:]]*" src="//' \ -e 's/.ram".*$/.ram/'` #recupero l'indirizzo dello stream *.ra STREAM=`wget -q -O - $RAM` if [[ "$?" -ne 0 ]]; then echo -ne "\nwget ram failed!\n"; exit 1; fi #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 FILE_NAME=`echo $RAM | sed 's/.*\///' | sed 's/m$//'` STREAM_NAME=`echo $STREAM | sed -e 's/.*\///'` if [[ ${#FILE_NAME} -le ${#STREAM_NAME} ]]; then FILE_NAME="$STREAM_NAME" fi SERIE_NAME_PREV="$SERIE_NAME" SERIE_NAME=`echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///'` if [[ ! -z $SERIE_NAME_PREV ]] && [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ "$SERIE_NAME" =~ "$SERIE_NAME_PREV" ]] || [[ "$SERIE_NAME_PREV" =~ "$SERIE_NAME" ]]; then echo -ne "\nDiscrepanze nel nome della serie? Prima: \"$SERIE_NAME_PREV\", ora: \"$SERIE_NAME\"" ; echo -ne "\nMantengo nome serie \"$SERIE_NAME_PREV\"" ; SERIE_NAME="$SERIE_NAME_PREV"; fi fi if [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then continue ; fi if [[ -z $SERIE_NAME_PREV ]] || [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then #creazione cartelle serie if [[ ! -d "../$SERIE_NAME" ]]; then mkdir "../$SERIE_NAME" printf "\n\n%s" "Inizio download serie \"$SERIE_NAME\"" ; else printf "\n\n%s" "Proseguo download serie \"$SERIE_NAME\"" ; fi 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$NR_INDEX/index.htm" \ | sed -n -e '/ id=\"SitoBody\">/,/<div class=\"Bot\"><\/div>/p' -e 's/<div class=\"Bot\"><\/div>/<div class=\"Bot\"><\/div><\/div>/' \ >> "../$SERIE_NAME/$SERIE_NAME.html" echo -e $TAIL >> "../$SERIE_NAME/$SERIE_NAME.html" #recupero eventuale immagine IMAGE=`sed -e '/<img src=\"/!d' -e 's/.*<img src=\"//' -e 's/\"[[:space:]]*[[:alpha:]]*=\".*$//' "../$SERIE_NAME/$SERIE_NAME.html"` 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 - "$IMAGE" > "../$SERIE_NAME/contenuti/$IMAGE_NAME" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget image failed!\n"; rm "../$SERIE_NAME/contenuti/$IMAGE_NAME"; fi 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" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget file failed!\n"; rm "../$SERIE_NAME/contenuti/$FILE_NAME"; fi 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 [[ -n $STREAM_NAME ]] && [[ -f "../$SERIE_NAME/$STREAM_NAME" ]] && [[ "${STREAM_NAME}" != "${FILE_NAME}" ]]; then mv "../$SERIE_NAME/$STREAM_NAME" "../$SERIE_NAME/$FILE_NAME" fi if [[ ! -f "../$SERIE_NAME/$FILE_NAME" ]]; then #se il file non esiste procedo con il download printf "\n%s" "In download: $FILE_NAME = $STREAM" OUTPUT=$(mplayer -noconsolecontrols -nojoystick -nolirc -quiet -prefer-ipv4 -noframedrop -dumpfile \ ../$SERIE_NAME/$FILE_NAME -dumpstream $STREAM 2>&1) if [[ "$?" -ne 0 ]] || [[ -z $(echo $OUTPUT | grep "Stream EOF detected") ]]; then echo -ne "\nMPlayer failed!\n" SERIE_DONE=0 rm "../$SERIE_NAME/$FILE_NAME" fi else #il file esiste già. #Due casi possibili: # - è già stato scaricato in un'esecuzione precedente # - è stato solamente iniziato, è sfuggito alle trap ed è incompleto... # QUESTO SCRIPT NON SI ACCORGE DI EVENTUALI FILE INCOMPLETI E NON LI SCARICA PIU' # Tenta di intercettare il termine dell'esecuzione dello script rimuovendo eventuali # file incompleti (ma se, per esempio, manca la corrente...) printf "\n%s" "Già scaricato: $SERIE_NAME/$FILE_NAME = $STREAM" fi if [[ "$1" != "-no-rma" ]] && [[ ! "$RMA" ]]; then PROCESSED=`$RMA -d "../$SERIE_NAME/$FILE_NAME" | grep "This file has been processed by RealMedia Analyzer"` if [[ -f "../$SERIE_NAME/$FILE_NAME" ]] && [[ -z $PROCESSED ]]; then if $RMA -ft "../$SERIE_NAME/$FILE_NAME" >/dev/null 2>&1 ; then echo -n "." else echo -ne "\n*rma -ft warning*" touch "../$SERIE_NAME/$FILE_NAME-rma_ft_WARNING" fi if $RMA -i "../$SERIE_NAME/$FILE_NAME" >/dev/null 2>&1 ; then echo -n "." else echo -ne "\n*rma -i warning*" touch "../$SERIE_NAME/$FILE_NAME-rma_i_WARNING" fi fi fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then exit 0 ; fi ((NR_EPISODE++)) done ((NR_INDEX++)) if [[ SERIE_DONE -eq 1 ]] && [[ ! -z $SERIE_NAME ]] && [[ ! -z $FILE_FLAG_DONE ]] && [[ ! -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" terminata!" touch "../$SERIE_NAME/$FILE_FLAG_DONE" elif [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" marcata come terminata (file \"$SERIE_NAME/$FILE_FLAG_DONE\")." fi done #gimli
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
![]() |
![]() |
![]() |
#13 |
Junior Member
Iscritto dal: Jan 2006
Messaggi: 2
|
Ciao Gimli,
il tuo script e' spettacolare! E anche ben scritto! Hai mai pensato di modificarlo per far scegliere all'utente quali serie scaricare piuttosto che tirar giu' tutto il mondo? Io sto cercando di capire se c'e' un modo semplice di farlo, se hai suggerimenti fammi sapere (anche via email a <il mo username> chiocciola gmail punto com). |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Mi hai convinto, ora occorre specificare un'azione da svolgere:
Grazie alla funzione list mi sono accorto della presenza di una serie con indice inaccessibile e che ce ne saranno almeno quattro o cinque che non contengono link alle puntate (non vengono elencate nel list mentre gli errori vengono mostrati solo durante i comandi di download). Codice:
#!/bin/bash #Script per il recupero dei file *.ra della trasmissione radiofonica "Alle otto della sera" #Organizzazione dati sui server: # - Indice generale # - 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... # Versione 2.1 (20/10/2009) Meno file *ram da scaricare in caso di download terminato # File html migliorati # Versione 3 (15/05/2010) Nuovo sito RAI; le nuove pagine dovrebbero rimanere stabili # per qualche tempo dopo la grande migrazione a SilverLight... # Versione 3.1 (09/06/2010) RealMedia Analyzer # Nome stream o nome file? # Riscrittura dei messaggi di output durante l'esecuzione # Trap Ctrl C per pulire in uscita # MPlayer non da errore in caso di Ctrl C, test output # Versione 3.2 (21/08/2011) Maggiore efficienza riavviando lo script # Vari controlli errori # Versione 3.3 (19/11/2011) Argomento obbligatorio: all, list oppure lista codici serie # Vari controlli errori if [ $# -eq "0" ] # Nessun argomento? then echo "Utilizzo:" echo " `basename $0` all -> Scarica tutte le serie" echo " `basename $0` list -> Elenca le serie disponibili ed esce" echo " `basename $0` [codice_serie] [codice_serie] -> Scarica la/le serie selezionata/e" exit 1 fi ALL=1 LIST=0 declare -a SERIES_SELECTED NO_RMA=0 DELIM="" for option in "$@"; do case "$option" in all) ALL=1;; list) LIST=1; ALL=0;; --no-rma) NO_RMA=1;; *) ALL=0; SERIES_SELECTED+=("$option");; esac done function IsSerieSelected() { if [ -z "$1" ]; then return 1 fi if [[ $ALL -eq 1 ]] && [[ ${#SERIES_SELECTED[@]} -eq 0 ]]; then return 0 fi for serie in ${SERIES_SELECTED[@]}; do if [ "$serie" == "$1" ]; then return 0 fi done return 1 } function RemoveSelected() { IDX=0 for serie in ${SERIES_SELECTED[@]}; do if [ "$serie" == "$1" ]; then unset SERIES_SELECTED[IDX] fi ((IDX++)) done } function CheckRemainingSelected() { if [[ $ALL -eq 0 ]] && [[ ${#SERIES_SELECTED[@]} -eq 0 ]]; then return 1 fi return 0 } # trap keyboard interrupt (control-c) trap control_c SIGINT # trap standart sigterm trap control_c SIGTERM EXIT_AS_SOON_AS_POSS=0 # file that flags a folder as completely downloaded FILE_FLAG_DONE=".done" control_c() { printf "\n\n%s\n\n" "*** Richiesta uscita script: attendere, prego... ***" EXIT_AS_SOON_AS_POSS=1 } #cartella di lavoro TEMP_FOLDER="alle8dellasera_TMP" if [[ ! -d "$TEMP_FOLDER" ]]; then printf "%s\n%s\n\n%s\n%s\n\n" \ "Benvenuto in \"Alle otto della sera\" downloader." \ "Prima esecuzione dello script: creo la certella temporanea \"$TEMP_FOLDER\"" \ " *** Potrai eliminare questa cartella al termine ***" \ " *** del download di tutte le serie che ti interessano ***" fi mkdir -p "$TEMP_FOLDER" cd "$TEMP_FOLDER" #RealMedia analyzer RMA="./rma" if [[ $LIST -eq 0 ]] && [[ $NO_RMA -eq 0 ]] && [[ ! -f "$RMA" ]]; then RMA_FULL_NAME="rma-0.30.00-linux-i386" printf "\n%s\n%s\n" "Sto scaricando una utilità per riparare gli stream: RealMedia Analyzer ($RMA_FULL_NAME)" \ "Eseguire lo script con argomento --no-rma per saltare questo passaggio." if [[ ! -f "$RMA_FULL_NAME.gz" ]]; then wget -q "http://users.i.com.ua/~alexeysp/rma/$RMA_FULL_NAME.gz" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget RMA failed!\n"; rm "$RMA_FULL_NAME.gz" ; fi fi gzip -qdc "$RMA_FULL_NAME.gz" > "$RMA" chmod +x "$RMA" fi #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 -q -O - "http://www.rai.tv/dl/Radio2/css/Radio2.css" > style.css if [[ "$?" -ne 0 ]]; then echo -ne "\nwget css failed!\n"; rm style.css ; exit 1; fi fi INDEX_ALLEOTTO="alleottodellasera.html" #recupero indice generale if [[ ! -f "$INDEX_ALLEOTTO" ]]; then wget -q -O - "http://www.rai.it/dl/Radio2/alleottodellasera.html" > $INDEX_ALLEOTTO if [[ "$?" -ne 0 ]]; then echo -ne "\nwget global index failed!\n"; rm $INDEX_ALLEOTTO; exit 1; fi fi #estraggo i link alle serie di puntate SERIES=`cat $INDEX_ALLEOTTO | sed \ -e '/<a href="\/dl\/Radio2\/sito\/item\/ContentItem-[A-Za-z0-9-]\{36\}.html">segue...<\/a>/!d' \ -e 's;^<a href=";;' -e 's;".*$;;'` SERIE_DONE=0 NR_INDEX=1 for serie in $SERIES; do #recupero indici serie #creo cartelle di lavoro numerate, una per serie if [[ ! -d "serie$NR_INDEX" ]]; then mkdir "serie$NR_INDEX" fi if [[ ! -f "serie$NR_INDEX/index.htm" ]]; then REDIRECT="$(wget -q -O - "http://www.rai.it/$serie")" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget redirect failed!\n"; exit 1; fi LINK=`echo $REDIRECT | sed \ -e "s;.*document.location[[:space:]]*=[[:space:]]*';;" \ -e "s/'[[:space:]]*;.*//"` wget -q -O - "http://www.rai.it/$LINK" > "serie$NR_INDEX/index.htm" if [[ "$?" -ne 0 ]]; then if [[ $LIST -eq 0 ]]; then echo -ne "\nwget index failed!\n"; fi rm "serie$NR_INDEX/index.htm"; ((NR_INDEX++)) continue fi fi if [[ ! -f "serie$NR_INDEX/index.htm" ]]; then exit 0 ; fi EPISODES=`cat "serie$NR_INDEX/index.htm" | sed \ -e '/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="/!d' \ -e 's/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="//' \ -e 's/.html">[^\n^$]*<\/a>/.html/'` export TITLE_HTML=$(cat "serie$NR_INDEX/index.htm" | sed \ -e '/<div class="Titolo">/!d' \ -e 's/^[[:space:]]*<div class="Titolo">//' \ -e 's\</div>[[:space:]]*\\') TITLE=$(perl -MHTML::Entities -e 'print decode_entities($ENV{'TITLE_HTML'});') unset -v TITLE_HTML if [[ -z $EPISODES ]]; then if [[ $LIST -eq 0 ]]; then echo -ne "\n\nLa serie \"$TITLE\" non contiene nessuna puntata?!" ; echo -ne "\nURL: http://www.rai.it/$serie\n" ; fi ((NR_INDEX++)) continue ; fi NR_EPISODE=1 #questa flag viene portata a zero se un download di mplayer fallisce #in questo caso non viene creato il file FILE_FLAG_DONE, che marca una cartella come terminata SERIE_DONE=1 for episode in $EPISODES; do if [[ ! -f "serie$NR_INDEX/$NR_EPISODE.htm" ]]; then wget -q -O - "$episode" > "serie$NR_INDEX/$NR_EPISODE.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget episode failed!\n"; rm "serie$NR_INDEX/$NR_EPISODE.htm"; exit 1; fi fi #estraggo il link al file *.ram RAM=`cat "serie$NR_INDEX/$NR_EPISODE.htm" | sed \ -e '/<embed [Cc][Oo][Nn][Ss][Oo][Ll][Ee]="[[:alpha:]]*" [Nn][Oo][Ll][Oo][Gg][Oo]="[[:alpha:]]*" [Aa][Uu][Tt][Oo][Ss][Tt][Aa][Rr][Tt]="[[:alpha:]]*" [Cc][Ee][Nn][Tt][Ee][Rr]="[[:alpha:]]*" [Cc][Oo][Nn][Tt][Rr][Oo][Ll][Ss]="[[:alpha:]]*" src="http:\/\/www.rai.it\/dl\/audio\/[^\n^$]*.ram"/!d' \ -e 's/<embed [Cc][Oo][Nn][Ss][Oo][Ll][Ee]="[[:alpha:]]*" [Nn][Oo][Ll][Oo][Gg][Oo]="[[:alpha:]]*" [Aa][Uu][Tt][Oo][Ss][Tt][Aa][Rr][Tt]="[[:alpha:]]*" [Cc][Ee][Nn][Tt][Ee][Rr]="[[:alpha:]]*" [Cc][Oo][Nn][Tt][Rr][Oo][Ll][Ss]="[[:alpha:]]*" src="//' \ -e 's/.ram".*$/.ram/'` if [[ -z $RAM ]]; then if [[ $LIST -eq 0 ]]; then echo -ne "\n\"$TEMP_FOLDER/serie$NR_INDEX/$NR_EPISODE.htm\"" echo -ne "\nNon esiste un riferimento corretto al file audio\n" ; echo -ne "Potrebbe trattarsi di un'errore nella pagina HTML o un tag <embed> dalla sintassi inaspettata\n" ; fi ((NR_EPISODE++)) continue fi #recupero l'indirizzo dello stream *.ra STREAM=`wget -q -O - $RAM` if [[ "$?" -ne 0 ]]; then echo -ne "\nwget ram failed!\n"; exit 1; fi #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 FILE_NAME=`echo $RAM | sed 's/.*\///' | sed 's/m$//'` STREAM_NAME=`echo $STREAM | sed -e 's/.*\///'` if [[ ${#FILE_NAME} -le ${#STREAM_NAME} ]]; then FILE_NAME="$STREAM_NAME" fi SERIE_NAME_PREV="$SERIE_NAME" SERIE_NAME=`echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///'` if [[ ! -z $SERIE_NAME_PREV ]] && [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ "$SERIE_NAME" =~ "$SERIE_NAME_PREV" ]] || [[ "$SERIE_NAME_PREV" =~ "$SERIE_NAME" ]]; then if [[ $LIST -eq 0 ]]; then echo -ne "\nDiscrepanze nel nome della serie? Prima: \"$SERIE_NAME_PREV\", ora: \"$SERIE_NAME\"" ; echo -ne "\nMantengo nome serie \"$SERIE_NAME_PREV\"" ; fi SERIE_NAME="$SERIE_NAME_PREV"; fi fi if [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then continue ; fi if [[ -z $SERIE_NAME_PREV ]] || [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ $LIST -eq 1 ]]; then echo "Codice: $SERIE_NAME" ; echo "Titolo: \"$TITLE\"" ; echo -ne "URL: http://www.rai.it/$serie\n\n" ; break fi if ( ! IsSerieSelected "$SERIE_NAME" ); then break fi #creazione cartelle serie if [[ ! -d "../$SERIE_NAME" ]]; then mkdir "../$SERIE_NAME" printf "\n\n%s" "Inizio download serie \"$SERIE_NAME\"" ; else printf "\n\n%s" "Proseguo download serie \"$SERIE_NAME\"" ; fi fi if ( ! IsSerieSelected "$SERIE_NAME" ); then break fi if [[ $LIST -eq 1 ]]; then break 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$NR_INDEX/index.htm" \ | sed -n -e '/ id=\"SitoBody\">/,/<div class=\"Bot\"><\/div>/p' -e 's/<div class=\"Bot\"><\/div>/<div class=\"Bot\"><\/div><\/div>/' \ >> "../$SERIE_NAME/$SERIE_NAME.html" echo -e $TAIL >> "../$SERIE_NAME/$SERIE_NAME.html" #recupero eventuale immagine IMAGE=`sed -e '/<img src=\"/!d' -e 's/.*<img src=\"//' -e 's/\"[[:space:]]*[[:alpha:]]*=\".*$//' "../$SERIE_NAME/$SERIE_NAME.html"` 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 - "$IMAGE" > "../$SERIE_NAME/contenuti/$IMAGE_NAME" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget image failed!\n"; rm "../$SERIE_NAME/contenuti/$IMAGE_NAME"; fi 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" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget file failed!\n"; rm "../$SERIE_NAME/contenuti/$FILE_NAME"; fi 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 [[ -n $STREAM_NAME ]] && [[ -f "../$SERIE_NAME/$STREAM_NAME" ]] && [[ "${STREAM_NAME}" != "${FILE_NAME}" ]]; then mv "../$SERIE_NAME/$STREAM_NAME" "../$SERIE_NAME/$FILE_NAME" fi if [[ ! -f "../$SERIE_NAME/$FILE_NAME" ]]; then #se il file non esiste procedo con il download printf "\n%s" "In download: $FILE_NAME = $STREAM" OUTPUT=$(mplayer -noconsolecontrols -nojoystick -nolirc -quiet -prefer-ipv4 -noframedrop -dumpfile \ ../$SERIE_NAME/$FILE_NAME -dumpstream $STREAM 2>&1) if [[ "$?" -ne 0 ]] || [[ -z $(echo $OUTPUT | grep "Stream EOF detected") ]]; then echo -ne "\nMPlayer failed!\n" SERIE_DONE=0 rm "../$SERIE_NAME/$FILE_NAME" fi else #il file esiste già. #Due casi possibili: # - è già stato scaricato in un'esecuzione precedente # - è stato solamente iniziato, è sfuggito alle trap ed è incompleto... # QUESTO SCRIPT NON SI ACCORGE DI EVENTUALI FILE INCOMPLETI E NON LI SCARICA PIU' # Tenta di intercettare il termine dell'esecuzione dello script rimuovendo eventuali # file incompleti (ma se, per esempio, manca la corrente...) printf "\n%s" "Già scaricato: $SERIE_NAME/$FILE_NAME = $STREAM" fi if [[ "$1" != "-no-rma" ]] && [[ ! "$RMA" ]]; then PROCESSED=`$RMA -d "../$SERIE_NAME/$FILE_NAME" | grep "This file has been processed by RealMedia Analyzer"` if [[ -f "../$SERIE_NAME/$FILE_NAME" ]] && [[ -z $PROCESSED ]]; then if $RMA -ft "../$SERIE_NAME/$FILE_NAME" >/dev/null 2>&1 ; then echo -n "." else echo -ne "\n*rma -ft warning*" touch "../$SERIE_NAME/$FILE_NAME-rma_ft_WARNING" fi if $RMA -i "../$SERIE_NAME/$FILE_NAME" >/dev/null 2>&1 ; then echo -n "." else echo -ne "\n*rma -i warning*" touch "../$SERIE_NAME/$FILE_NAME-rma_i_WARNING" fi fi fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then exit 0 ; fi ((NR_EPISODE++)) done ((NR_INDEX++)) if ( ! IsSerieSelected "$SERIE_NAME" ); then continue fi RemoveSelected "$SERIE_NAME" if [[ $LIST -eq 1 ]]; then continue fi if [[ SERIE_DONE -eq 1 ]] && [[ ! -z $SERIE_NAME ]] && [[ ! -z $FILE_FLAG_DONE ]] && [[ ! -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" terminata!" touch "../$SERIE_NAME/$FILE_FLAG_DONE" elif [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" marcata come terminata (file \"$SERIE_NAME/$FILE_FLAG_DONE\")." fi if ( ! CheckRemainingSelected ); then echo exit 0 fi done #gimli
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) Ultima modifica di Gimli[2BV!2B] : 19-11-2011 alle 00:47. Motivo: Baco nel list |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Codice:
#!/bin/bash #Script per il recupero dei file *.ra della trasmissione radiofonica "Alle otto della sera" #Organizzazione dati sui server: # - Indice generale # - 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... # Versione 2.1 (20/10/2009) Meno file *ram da scaricare in caso di download terminato # File html migliorati # Versione 3 (15/05/2010) Nuovo sito RAI; le nuove pagine dovrebbero rimanere stabili # per qualche tempo dopo la grande migrazione a SilverLight... # Versione 3.1 (09/06/2010) RealMedia Analyzer # Nome stream o nome file? # Riscrittura dei messaggi di output durante l'esecuzione # Trap Ctrl C per pulire in uscita # MPlayer non da errore in caso di Ctrl C, test output # Versione 3.2 (21/08/2011) Maggiore efficienza riavviando lo script # Vari controlli errori # Versione 3.3 (19/11/2011) Argomento obbligatorio: all, list oppure lista codici serie # Vari controlli errori # Versione 4.0 (20/11/2011) Recupero di alcune serie legacy inaccessibili # Riscrittura spezzando la procedura in funzioni più leggibili if [ $# -eq "0" ] # Nessun argomento? then echo "Utilizzo:" echo " `basename $0` all -> Scarica tutte le serie" echo " `basename $0` list -> Elenca le serie disponibili ed esce" echo " `basename $0` [codice_serie] [codice_serie] -> Scarica la/le serie selezionata/e" exit 0 fi export ALL=1 export LIST=0 declare -a SERIES_SELECTED declare -a SERIES_LEGACY_TITLE declare -a SERIES_LEGACY_CODE #Puntate non elencate nel nuovo sito RAI SERIES_LEGACY_TITLE+=("Chung Kuo-Cina, l'Impero di Mezzo") SERIES_LEGACY_CODE+=("chungkuo") SERIES_LEGACY_TITLE+=("Il Globo, la mappa, il Mondo") SERIES_LEGACY_CODE+=("globo") SERIES_LEGACY_TITLE+=("Il mestiere dell'artista. L'Ottocento") SERIES_LEGACY_CODE+=("ilmestieredellartista800") SERIES_LEGACY_TITLE+=("Sex and the Polis") SERIES_LEGACY_CODE+=("sexandthepolis") #Completamente inaccessibile nel nuovo sito RAI SERIES_LEGACY_TITLE+=("Le porte dei sogni") SERIES_LEGACY_CODE+=("portedeisogni") #Non so dove sia, i link sono rotti e non esite una pagina legacy #SERIES_LEGACY_TITLE+=("Il divano di Istanbul") #SERIES_LEGACY_CODE+=("ildivanodiistanbul")" NO_RMA=0 DELIM="" for option in "$@"; do case "$option" in all) ALL=1;; list) export LIST=1; export ALL=0;; --no-rma) export NO_RMA=1;; *) export ALL=0; SERIES_SELECTED+=("$option");; esac done function IsSerieSelected() { if [ -z "$1" ]; then return 1 fi if [[ $LIST -eq 1 ]]; then return 0 fi if [[ $ALL -eq 1 ]] && [[ ${#SERIES_SELECTED[@]} -eq 0 ]]; then return 0 fi for serie in ${SERIES_SELECTED[@]}; do if [ "$serie" == "$1" ]; then return 0 fi done return 1 } function RemoveSelected() { IDX=0 for serie in ${SERIES_SELECTED[@]}; do if [ "$serie" == "$1" ]; then unset SERIES_SELECTED[IDX] fi ((IDX++)) done } function CheckRemainingSelected() { if [[ $ALL -eq 0 ]] && [[ ${#SERIES_SELECTED[@]} -eq 0 ]]; then return 1 fi return 0 } function GetCodeFromTitle() { if [ -z "$1" ]; then return 1 fi for (( i = 0 ; i < ${#SERIES_LEGACY_TITLE[*]} ; i++ )); do if [[ "${SERIES_LEGACY_TITLE[$i]}" =~ "$1" ]] || [[ "$1" =~ "${SERIES_LEGACY_TITLE[$i]}" ]]; then echo ${SERIES_LEGACY_CODE[$i]} return 0 fi done return 1 } function GetDirectLink() { REDIRECT=$(wget -q -O - "http://www.rai.it/$1") ; if [[ "$?" -ne 0 ]]; then echo -ne "\nwget redirect failed!\n"; exit 1; fi echo -ne "http://www.rai.it/" ; echo $(echo $REDIRECT | sed \ -e "s;.*document.location[[:space:]]*=[[:space:]]*';;" \ -e "s/'[[:space:]]*;.*//") ; unset REDIRECT ; } function DownloadIndexSerie() { #creo cartelle di lavoro numerate, una per serie if [[ ! -d "serie$1" ]]; then mkdir "serie$1" ; fi SUFFIX="" ; if [[ $3 -eq 0 ]]; then LINK_DIRECT=$(GetDirectLink "$2") ; else LINK_DIRECT="$2" ; SUFFIX="_legacy" ; fi if [[ ! -f "serie$1/index$SUFFIX.htm" ]]; then wget -q -O - "$LINK_DIRECT" > "serie$1/index$SUFFIX.htm" if [[ "$?" -ne 0 ]]; then rm "serie$1/index$SUFFIX.htm" ; unset LINK_DIRECT ; return 1 ; fi unset LINK_DIRECT ; fi return 0 ; } function GetHTMLtitle() { export TITLE_HTML=$(sed \ -e '/<div class="Titolo">/!d' \ -e 's/^[[:space:]]*<div class="Titolo">//' \ -e 's\</div>[[:space:]]*\\' "$1") ; TITLE=$(perl -MHTML::Entities -e 'print decode_entities($ENV{'TITLE_HTML'});') ; unset -v TITLE_HTML ; echo "$TITLE" ; } function GetSeries() { echo $(sed \ -e '/<a href="\/dl\/Radio2\/sito\/item\/ContentItem-[A-Za-z0-9-]\{36\}.html">segue...<\/a>/!d' \ -e 's;^<a href=";;' -e 's;".*$;;' "$1") ; } function GetEpisodes() { echo $(sed \ -e '/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="/!d' \ -e 's/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="//' \ -e 's/.html">[^\n^$]*<\/a>/.html/' "$1") ; } function GetRAM() { echo $(sed \ -e '/<embed [Cc][Oo][Nn][Ss][Oo][Ll][Ee]="[[:alpha:]]*" [Nn][Oo][Ll][Oo][Gg][Oo]="[[:alpha:]]*" [Aa][Uu][Tt][Oo][Ss][Tt][Aa][Rr][Tt]="[[:alpha:]]*" [Cc][Ee][Nn][Tt][Ee][Rr]="[[:alpha:]]*" [Cc][Oo][Nn][Tt][Rr][Oo][Ll][Ss]="[[:alpha:]]*" src="http:\/\/www.rai.it\/dl\/audio\/[^\n^$]*.ram"/!d' \ -e 's/<embed [Cc][Oo][Nn][Ss][Oo][Ll][Ee]="[[:alpha:]]*" [Nn][Oo][Ll][Oo][Gg][Oo]="[[:alpha:]]*" [Aa][Uu][Tt][Oo][Ss][Tt][Aa][Rr][Tt]="[[:alpha:]]*" [Cc][Ee][Nn][Tt][Ee][Rr]="[[:alpha:]]*" [Cc][Oo][Nn][Tt][Rr][Oo][Ll][Ss]="[[:alpha:]]*" src="//' \ -e 's/.ram".*$/.ram/' "$1") ; } function GetStream() { STREAM=$(wget -q -O - "$1") ; if [[ "$?" -ne 0 ]]; then return 1 ; fi #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 echo $(echo $STREAM | sed -e 's/.*pnm:\/\/*/rtsp:\/\//') ; unset STREAM ; } function DownloadStream() { if [[ ! -f "../$1/$2" ]]; then #se il file non esiste procedo con il download printf "\n%s" "In download: $2 = $3" ; OUTPUT=$(mplayer -noconsolecontrols -nojoystick -nolirc -quiet -prefer-ipv4 -noframedrop -dumpfile \ ../$1/$2 -dumpstream $3 2>&1) ; if [[ "$?" -ne 0 ]] || [[ -z $(echo $OUTPUT | grep "Stream EOF detected") ]]; then echo -ne "\nMPlayer failed!\n" ; rm "../$1/$2" ; return 1 ; fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then return 3 ; fi else #il file esiste già. #Due casi possibili: # - è già stato scaricato in un'esecuzione precedente # - è stato solamente iniziato, è sfuggito alle trap ed è incompleto... # QUESTO SCRIPT NON SI ACCORGE DI EVENTUALI FILE INCOMPLETI E NON LI SCARICA PIU' # Tenta di intercettare il termine dell'esecuzione dello script rimuovendo eventuali # file incompleti (ma se, per esempio, manca la corrente...) printf "\n%s" "Già scaricato: $1/$2 = $3" ; fi return 0 ; } function ProcessStandard() { NR_EPISODE=1 ; for episode in $1; do if [[ ! -f "serie$2/$NR_EPISODE.htm" ]]; then wget -q -O - "$episode" > "serie$2/$NR_EPISODE.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget episode failed!\n" ; rm "serie$2/$NR_EPISODE.htm" ; return 1 ; fi fi #estraggo il link al file *.ram RAM=$(GetRAM "serie$2/$NR_EPISODE.htm") if [[ -z $RAM ]]; then if [[ $LIST -eq 0 ]]; then echo -ne "\n\"$TEMP_FOLDER/serie$2/$NR_EPISODE.htm -> Non esiste un riferimento corretto al file audio\n" ; echo -ne "Potrebbe trattarsi di un'errore nella pagina HTML o un tag <embed> dalla sintassi inaspettata\n" ; fi ((NR_EPISODE++)) ; continue ; fi ProcessStream "$RAM" "$2" 0 ; case $? in 1) return 1 ;; 2) return 2 ;; 3) return 3 ;; *) ;; esac ((NR_EPISODE++)) ; done return 0 ; } function ProcessLegacy() { #recupero indici serie SUFFIX="_legacy" ; if ( ! DownloadIndexSerie "$NR_INDEX" "$1" 1 ); then if [[ $LIST -eq 0 ]]; then echo -ne "\nwget index $NR_INDEX failed!\n"; fi return 1 ; fi if [[ ! -f "serie$2/index$SUFFIX.htm" ]]; then return 1 ; fi RAMS=$(sed \ -e '/Q_CANALE=http:\/\/www.radio.rai.it\/\/radio2\/alleotto\//!d'\ -e 's/.*Q_CANALE=[^h]*//'\ -e 's/.ram.,.*$/.ram/' "serie$2/index$SUFFIX.htm" | uniq | sort) ; for ram in $RAMS; do ProcessStream "$ram" "$2" 1 ; case $? in 1) return 1 ;; 2) return 2 ;; 3) return 3 ;; *) ;; esac done return 0 ; } function ProcessStream() { #recupero l'indirizzo dello stream *.ra STREAM=$(GetStream "$1") ; #suddivido i file per serie: estraggo i nomi necessari FILE_NAME=$(echo $1 | sed 's/.*\///' | sed 's/m$//') ; STREAM_NAME=$(echo $STREAM | sed -e 's/.*\///') ; if [[ ${#FILE_NAME} -le ${#STREAM_NAME} ]]; then FILE_NAME="$STREAM_NAME" ; fi SERIE_NAME_PREV="$SERIE_NAME" ; export SERIE_NAME=$(echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///') ; if [[ ! -z $SERIE_NAME_PREV ]] && [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ "$SERIE_NAME" =~ "$SERIE_NAME_PREV" ]] || [[ "$SERIE_NAME_PREV" =~ "$SERIE_NAME" ]]; then export SERIE_NAME="$SERIE_NAME_PREV"; fi fi if [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then return 1 fi if ( ! IsSerieSelected "$SERIE_NAME" ); then return 1 fi if [[ -z $SERIE_NAME_PREV ]] || [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ $LIST -eq 1 ]]; then echo "Codice: $SERIE_NAME" ; echo "Titolo: \"$TITLE\"" ; echo -ne "URL: http://www.rai.it/$serie\n\n" ; return 2 fi #creazione cartelle serie if [[ ! -d "../$SERIE_NAME" ]]; then mkdir "../$SERIE_NAME" printf "\n\n%s" "Inizio download serie \"$SERIE_NAME\"" ; else printf "\n\n%s" "Proseguo download serie \"$SERIE_NAME\"" ; fi fi if [[ $LIST -eq 1 ]]; then return 2 fi #creazione indice html CreateHTMLindex "$SERIE_NAME" "$2" "$3" ; if [[ -n $STREAM_NAME ]] && [[ -f "../$SERIE_NAME/$STREAM_NAME" ]] && [[ "${STREAM_NAME}" != "${FILE_NAME}" ]]; then mv "../$SERIE_NAME/$STREAM_NAME" "../$SERIE_NAME/$FILE_NAME" fi if ( ! DownloadStream "$SERIE_NAME" "$FILE_NAME" "$STREAM" ); then export SERIE_DONE=0; else if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then if [[ -f "../$SERIE_NAME/$FILE_NAME" ]]; then rm "../$SERIE_NAME/$FILE_NAME" ; fi return 3 ; fi ProcessRMA "$SERIE_NAME/$FILE_NAME" ; fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then return 3 ; fi return 0 ; } #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>" function GetHTMLcontent() { echo $(sed \ -n -e '/ id=\"SitoBody\">/,/<div class=\"Bot\"><\/div>/p'\ -e 's/<div class=\"Bot\"><\/div>/<div class=\"Bot\"><\/div><\/div>/' "$1") ; } function GetHTMLcontentLegacy() { echo $(sed \ -n -e '/<span class=\"solotesto\"> Alle otto della sera <\/span><\/div>/,/<div class=\"schede_interne_\(contenuti\|riascolta_a4\)\">/p' \ -e '/<div class=\"schede_interne_\(contenuti\|riascolta_a4\)\">/d' "$1") ; } function CreateHTMLindex() { if [[ -f "../$1/$1.html" ]]; then return 0 fi LEGACY=$3 ; if [ "$1" != "portedeisogni" ]; then LEGACY=0 ; fi echo -e "\nCreazione indice html: $1/$1.html" ; echo -e $HEAD > "../$1/$1.html" ; cat style.css >> "../$1/$1.html" ; echo -e $HEAD_CLOSE >> "../$1/$1.html" ; SUFFIX="" ; if [[ $LEGACY -eq 0 ]]; then GetHTMLcontent "serie$2/index.htm" >> "../$1/$1.html" else SUFFIX="_legacy" ; GetHTMLcontentLegacy "serie$2/index$SUFFIX.htm" >> "../$1/$1.html" fi echo -e $TAIL >> "../$1/$1.html" ; #recupero eventuale immagine IMAGE=$(sed -e '/<img src=\"/!d' -e 's/.*<img src=\"//' -e 's/\"[[:space:]]*[[:alpha:]]*=\".*$//' "../$1/$1.html") ; if [[ ! -z $IMAGE ]]; then IMAGE_NAME=`echo $IMAGE | sed -e 's/.*\///'` echo "L'indice contiene un'immagine -> $1/contenuti/$IMAGE_NAME" if [[ ! -d "../$1/contenuti" ]]; then mkdir "../$1/contenuti" fi if [[ ! -f "../$1/contenuti/$IMAGE_NAME" ]]; then if [[ $LEGACY -eq 0 ]]; then wget -q -O - "$IMAGE" > "../$1/contenuti/$IMAGE_NAME" ; else wget -q -O - "http://www.radio.rai.it$IMAGE" > "../$1/contenuti/$IMAGE_NAME" ; fi if [[ "$?" -ne 0 ]]; then echo -ne "\nwget image failed!\n"; rm "../$1/contenuti/$IMAGE_NAME"; fi fi #riscritture indirizzo immagine: da remota a locale LOCAL_NAME="contenuti/$IMAGE_NAME" sed -i 's;'$IMAGE';'$LOCAL_NAME';g' "../$1/$1.html" fi #alcune serie hanno anche dei contenuti aggiuntivi: li recupero LINKS=$(sed -e '/<a href=\"/!d' -e 's/<a href=\"/\n/g' ../$1/$1.html | sed -e '/http:/!d' -e 's/\">.*$//') ; if [[ ! -z $LINKS ]]; then if [[ ! -d "../$1/contenuti" ]]; then mkdir "../$1/contenuti" ; fi for link in $LINKS; do FILE_NAME=`echo $link | sed -e 's/.*\///'` if [[ ! -f "../$1/contenuti/$FILE_NAME" ]]; then echo "Contenuto aggiuntivo -> $1/contenuti/$FILE_NAME" ; wget -q -O - "$link" > "../$1/contenuti/$FILE_NAME" ; if [[ "$?" -ne 0 ]]; then echo -ne "\nwget file failed!\n"; rm "../$1/contenuti/$FILE_NAME"; fi fi #riscrittura indirizzo contenuto LOCAL_NAME="contenuti/$FILE_NAME" ; sed -i 's*'$link'*'$LOCAL_NAME'*g' "../$1/$1.html" ; done fi } function ProcessRMA() { if [[ $NO_RMA -eq 0 ]] && [[ ! "$RMA" ]]; then return 0 ; fi PROCESSED=`$RMA -d "../$1" | grep "This file has been processed by RealMedia Analyzer"` if [[ -f "../$1" ]] && [[ -z $PROCESSED ]]; then if $RMA -ft "../$1" >/dev/null 2>&1 ; then echo -n "." ; else echo -ne "\n*rma -ft warning*" ; touch "../$1-rma_ft_WARNING" ; fi if $RMA -i "../$1" >/dev/null 2>&1 ; then echo -n "." ; else echo -ne "\n*rma -i warning*" ; touch "../$1-rma_i_WARNING" ; fi fi unset PROCESSED ; } # trap keyboard interrupt (control-c) trap control_c SIGINT # trap standart sigterm trap control_c SIGTERM EXIT_AS_SOON_AS_POSS=0 # file that flags a folder as completely downloaded FILE_FLAG_DONE=".done" control_c() { printf "\n\n%s\n\n" "*** Richiesta uscita script: attendere, prego... ***" EXIT_AS_SOON_AS_POSS=1 } #cartella di lavoro TEMP_FOLDER="alle8dellasera_TMP" if [[ ! -d "$TEMP_FOLDER" ]]; then printf "%s\n%s\n\n%s\n%s\n\n" \ "Benvenuto in \"Alle otto della sera\" downloader." \ "Prima esecuzione dello script: creo la certella temporanea \"$TEMP_FOLDER\"" \ " *** Potrai eliminare questa cartella al termine ***" \ " *** del download di tutte le serie che ti interessano ***" fi mkdir -p "$TEMP_FOLDER" cd "$TEMP_FOLDER" #RealMedia analyzer RMA="./rma" if [[ $LIST -eq 0 ]] && [[ $NO_RMA -eq 0 ]] && [[ ! -f "$RMA" ]]; then RMA_FULL_NAME="rma-0.30.00-linux-i386" printf "\n%s\n%s\n" "Sto scaricando una utilità per riparare gli stream: RealMedia Analyzer ($RMA_FULL_NAME)" \ "Eseguire lo script con argomento --no-rma per saltare questo passaggio." if [[ ! -f "$RMA_FULL_NAME.gz" ]]; then wget -q "http://users.i.com.ua/~alexeysp/rma/$RMA_FULL_NAME.gz" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget RMA failed!\n"; rm "$RMA_FULL_NAME.gz" ; fi fi gzip -qdc "$RMA_FULL_NAME.gz" > "$RMA" chmod +x "$RMA" fi if [[ ! -f "style.css" ]]; then wget -q -O - "http://www.rai.tv/dl/Radio2/css/Radio2.css" > style.css if [[ "$?" -ne 0 ]]; then echo -ne "\nwget css failed!\n"; rm style.css ; exit 1; fi fi INDEX_ALLEOTTO="alleottodellasera.html" #recupero indice generale if [[ ! -f "$INDEX_ALLEOTTO" ]]; then wget -q -O - "http://www.rai.it/dl/Radio2/alleottodellasera.html" > $INDEX_ALLEOTTO if [[ "$?" -ne 0 ]]; then echo -ne "\nwget global index failed!\n"; rm $INDEX_ALLEOTTO; exit 1; fi fi #estraggo i link alle serie di puntate SERIES=$(GetSeries "$INDEX_ALLEOTTO") ; SERIE_DONE=0 NR_INDEX=1 LEPORTEDEISOGNI=0 for serie in $SERIES; do if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then exit 0 ; fi #recupero indici serie if ( ! DownloadIndexSerie "$NR_INDEX" "$serie" 0 ); then if [[ $LIST -eq 0 ]]; then echo -ne "\nwget index $NR_INDEX failed!\n" ; fi if [[ $NR_INDEX -ne 74 ]]; then ((NR_INDEX++)) continue else touch "serie$NR_INDEX/index.htm" ; LEPORTEDEISOGNI=1 fi fi if [[ ! -f "serie$NR_INDEX/index.htm" ]] && [[ $NR_INDEX -ne 74 ]]; then exit 0 ; fi EPISODES=$(GetEpisodes "serie$NR_INDEX/index.htm") ; TITLE=$(GetHTMLtitle "serie$NR_INDEX/index.htm") ; LEGACY=0 ; #flag modalità legacy LEGACY_URL="" ; if [[ $LEPORTEDEISOGNI -eq 1 ]]; then TITLE="Le porte dei sogni" ; LEGACY=1 ; fi if [[ -z $EPISODES ]]; then #Alcune serie non sono state migrate completamente al nuovo sito RAI, gli unici link #alle puntate sono ancora presenti nelle vecchie pagine che potrebbero finire offline #in qualsiasi momento... CODE=$(GetCodeFromTitle "$TITLE") ; if [[ ! -z $CODE ]]; then LEGACY_URL="http://www.radio.rai.it/radio2/alleotto/$CODE/" ; fi if [[ ! -z $LEGACY_URL ]]; then LEGACY=1 ; fi if [[ $LEGACY -eq 0 ]]; then ((NR_INDEX++)) continue ; fi fi #questa flag viene portata a zero se un download di mplayer fallisce #in questo caso non viene creato il file FILE_FLAG_DONE, che marca una cartella come terminata export SERIE_DONE=1 export SERIE_NAME="" ; if [[ $LEGACY -eq 0 ]]; then ProcessStandard "$EPISODES" "$NR_INDEX" ; else ProcessLegacy "$LEGACY_URL" "$NR_INDEX" ; fi if [[ $? -eq 3 ]]; then exit 0 ; fi ((NR_INDEX++)) if ( ! IsSerieSelected "$SERIE_NAME" ); then continue fi RemoveSelected "$SERIE_NAME" if [[ $LIST -eq 1 ]]; then continue fi if [[ SERIE_DONE -eq 1 ]] && [[ ! -z $SERIE_NAME ]] && [[ ! -z $FILE_FLAG_DONE ]] && [[ ! -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" terminata!\n" touch "../$SERIE_NAME/$FILE_FLAG_DONE" elif [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" marcata come terminata (file \"$SERIE_NAME/$FILE_FLAG_DONE\")." fi if ( ! CheckRemainingSelected ); then exit 0 fi done #gimli
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
|
Codice:
#!/bin/bash #Script per il recupero dei file *.ra della trasmissione radiofonica "Alle otto della sera" #Organizzazione dati sui server: # - Indice generale # - 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... # Versione 2.1 (20/10/2009) Meno file *ram da scaricare in caso di download terminato # File html migliorati # Versione 3 (15/05/2010) Nuovo sito RAI; le nuove pagine dovrebbero rimanere stabili # per qualche tempo dopo la grande migrazione a SilverLight... # Versione 3.1 (09/06/2010) RealMedia Analyzer # Nome stream o nome file? # Riscrittura dei messaggi di output durante l'esecuzione # Trap Ctrl C per pulire in uscita # MPlayer non da errore in caso di Ctrl C, test output # Versione 3.2 (21/08/2011) Maggiore efficienza riavviando lo script # Vari controlli errori # Versione 3.3 (19/11/2011) Argomento obbligatorio: all, list oppure lista codici serie # Vari controlli errori # Versione 4.0 (20/11/2011) Recupero di alcune serie legacy inaccessibili # Riscrittura spezzando la procedura in funzioni più leggibili # Versione 4.1 (20/11/2011) Gestione corretta delle 3 serie con codice "mestiere_artista" if [ $# -eq "0" ] # Nessun argomento? then echo "Utilizzo:" echo " `basename $0` all -> Scarica tutte le serie" echo " `basename $0` list -> Elenca le serie disponibili ed esce" echo " `basename $0` [codice_serie] [codice_serie] -> Scarica la/le serie selezionata/e" exit 0 fi export ALL=1 export LIST=0 declare -a SERIES_SELECTED declare -a SERIES_LEGACY_TITLE declare -a SERIES_LEGACY_CODE #Puntate non elencate nel nuovo sito RAI SERIES_LEGACY_TITLE+=("Chung Kuo-Cina, l'Impero di Mezzo") SERIES_LEGACY_CODE+=("chungkuo") SERIES_LEGACY_TITLE+=("Il Globo, la mappa, il Mondo") SERIES_LEGACY_CODE+=("globo") SERIES_LEGACY_TITLE+=("Il mestiere dell'artista. L'Ottocento") SERIES_LEGACY_CODE+=("ilmestieredellartista800") SERIES_LEGACY_TITLE+=("Sex and the Polis") SERIES_LEGACY_CODE+=("sexandthepolis") #Completamente inaccessibile nel nuovo sito RAI SERIES_LEGACY_TITLE+=("Le porte dei sogni") SERIES_LEGACY_CODE+=("portedeisogni") #Il codice utilizzato non è univoco. ARTISTI_CODE+=("mestiere_artista1") ARTISTI_TEXT+=("Strinati preferisce raccontare quelle vicende attraverso le testimonianze dei contemporanei") ARTISTI_CODE+=("mestiere_artista2") ARTISTI_TEXT+=("vivo per secoli e ancora adesso influenza il nostro modo di porci di fronte") #Non so dove sia, i link sono rotti e non esite una pagina legacy #SERIES_LEGACY_TITLE+=("Il divano di Istanbul") #SERIES_LEGACY_CODE+=("ildivanodiistanbul")" NO_RMA=0 DELIM="" for option in "$@"; do case "$option" in all) ALL=1;; list) export LIST=1; export ALL=0;; --no-rma) export NO_RMA=1;; *) export ALL=0; SERIES_SELECTED+=("$option");; esac done function IsSerieSelected() { if [ -z "$1" ]; then return 1 fi if [[ $LIST -eq 1 ]]; then return 0 fi if [[ $ALL -eq 1 ]] && [[ ${#SERIES_SELECTED[@]} -eq 0 ]]; then return 0 fi for serie in ${SERIES_SELECTED[@]}; do if [ "$serie" == "$1" ]; then return 0 fi done return 1 } function RemoveSelected() { IDX=0 for serie in ${SERIES_SELECTED[@]}; do if [[ "$serie" == "$1" ]]; then unset SERIES_SELECTED[IDX] fi ((IDX++)) done } function CheckRemainingSelected() { if [[ $ALL -eq 0 ]] && [[ ${#SERIES_SELECTED[@]} -eq 0 ]]; then return 1 fi return 0 } function GetCodeFromTitle() { if [[ -z "$1" ]]; then return 1 fi for (( i = 0 ; i < ${#SERIES_LEGACY_TITLE[*]} ; i++ )); do if [[ "${SERIES_LEGACY_TITLE[$i]}" =~ "$1" ]] || [[ "$1" =~ "${SERIES_LEGACY_TITLE[$i]}" ]]; then echo ${SERIES_LEGACY_CODE[$i]} return 0 fi done return 1 } function GetCodeFromText() { if [[ ! -z "$1" ]] && [[ -f "$1" ]]; then for (( i = 0 ; i < ${#ARTISTI_TEXT[*]} ; i++ )); do RESULT_GREP=$(grep -c "${ARTISTI_TEXT[$i]}" "$1"); if [[ $RESULT_GREP -gt 0 ]]; then echo "${ARTISTI_CODE[$i]}" break ; fi done fi } function GetDirectLink() { REDIRECT=$(wget -q -O - "http://www.rai.it/$1") ; if [[ "$?" -ne 0 ]]; then echo -ne "\nwget redirect failed!\n"; exit 1; fi echo -ne "http://www.rai.it/" ; echo $REDIRECT | sed \ -e "s;.*document.location[[:space:]]*=[[:space:]]*';;" \ -e "s/'[[:space:]]*;.*//" ; unset REDIRECT ; } function DownloadIndexSerie() { #creo cartelle di lavoro numerate, una per serie if [[ ! -d "serie$1" ]]; then mkdir "serie$1" ; fi SUFFIX="" ; if [[ $3 -eq 0 ]]; then LINK_DIRECT=$(GetDirectLink "$2") ; else LINK_DIRECT="$2" ; SUFFIX="_legacy" ; fi if [[ ! -f "serie$1/index$SUFFIX.htm" ]]; then wget -q -O - "$LINK_DIRECT" > "serie$1/index$SUFFIX.htm" if [[ "$?" -ne 0 ]]; then rm "serie$1/index$SUFFIX.htm" ; unset LINK_DIRECT ; return 1 ; fi unset LINK_DIRECT ; fi return 0 ; } function GetHTMLtitle() { export TITLE_HTML=$(sed \ -e '/<div class="Titolo">/!d' \ -e 's/^[[:space:]]*<div class="Titolo">//' \ -e 's\</div>[[:space:]]*\\' "$1") ; TITLE=$(perl -MHTML::Entities -e 'print decode_entities($ENV{'TITLE_HTML'});') ; unset -v TITLE_HTML ; echo "$TITLE" ; } function GetSeries() { sed \ -e '/<a href="\/dl\/Radio2\/sito\/item\/ContentItem-[A-Za-z0-9-]\{36\}.html">segue...<\/a>/!d' \ -e 's;^<a href=";;' -e 's;".*$;;' "$1" ; } function GetEpisodes() { sed \ -e '/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="/!d' \ -e 's/^<a onclick="return[[:space:]]*openAudioPopup(.ContentItem-[A-Za-z0-9-]\{36\}.)[[:space:]]*;"[[:space:]]*href="//' \ -e 's/.html">[^\n^$]*<\/a>/.html/' "$1" ; } function GetRAM() { sed \ -e '/<embed [Cc][Oo][Nn][Ss][Oo][Ll][Ee]="[[:alpha:]]*" [Nn][Oo][Ll][Oo][Gg][Oo]="[[:alpha:]]*" [Aa][Uu][Tt][Oo][Ss][Tt][Aa][Rr][Tt]="[[:alpha:]]*" [Cc][Ee][Nn][Tt][Ee][Rr]="[[:alpha:]]*" [Cc][Oo][Nn][Tt][Rr][Oo][Ll][Ss]="[[:alpha:]]*" src="http:\/\/www.rai.it\/dl\/audio\/[^\n^$]*.ram"/!d' \ -e 's/<embed [Cc][Oo][Nn][Ss][Oo][Ll][Ee]="[[:alpha:]]*" [Nn][Oo][Ll][Oo][Gg][Oo]="[[:alpha:]]*" [Aa][Uu][Tt][Oo][Ss][Tt][Aa][Rr][Tt]="[[:alpha:]]*" [Cc][Ee][Nn][Tt][Ee][Rr]="[[:alpha:]]*" [Cc][Oo][Nn][Tt][Rr][Oo][Ll][Ss]="[[:alpha:]]*" src="//' \ -e 's/.ram".*$/.ram/' "$1" ; } function GetStream() { STREAM=$(wget -q -O - "$1") ; if [[ "$?" -ne 0 ]]; then return 1 ; fi #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 echo $(echo $STREAM | sed -e 's/.*pnm:\/\/*/rtsp:\/\//') ; unset STREAM ; } function DownloadStream() { if [[ ! -f "../$1/$2" ]]; then #se il file non esiste procedo con il download printf "\n%s" "In download: $2 = $3" ; OUTPUT=$(mplayer -noconsolecontrols -nojoystick -nolirc -quiet -prefer-ipv4 -noframedrop -dumpfile \ ../$1/$2 -dumpstream $3 2>&1) ; if [[ "$?" -ne 0 ]] || [[ -z $(echo $OUTPUT | grep "Stream EOF detected") ]]; then echo -ne "\nMPlayer failed!\n" ; rm "../$1/$2" ; return 1 ; fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then return 3 ; fi else #il file esiste già. #Due casi possibili: # - è già stato scaricato in un'esecuzione precedente # - è stato solamente iniziato, è sfuggito alle trap ed è incompleto... # QUESTO SCRIPT NON SI ACCORGE DI EVENTUALI FILE INCOMPLETI E NON LI SCARICA PIU' # Tenta di intercettare il termine dell'esecuzione dello script rimuovendo eventuali # file incompleti (ma se, per esempio, manca la corrente...) printf "\n%s" "Già scaricato: $1/$2 = $3" ; fi return 0 ; } function ProcessStandard() { # 1 -> $EPISODES # 2 -> $NR_INDEX NR_EPISODE=1 ; for episode in $1; do if [[ ! -f "serie$2/$NR_EPISODE.htm" ]]; then wget -q -O - "$episode" > "serie$2/$NR_EPISODE.htm" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget episode failed!\n" ; rm "serie$2/$NR_EPISODE.htm" ; return 1 ; fi fi #estraggo il link al file *.ram RAM=$(GetRAM "serie$2/$NR_EPISODE.htm") if [[ -z $RAM ]]; then if [[ $LIST -eq 0 ]]; then echo -ne "\n\"$TEMP_FOLDER/serie$2/$NR_EPISODE.htm -> Non esiste un riferimento corretto al file audio\n" ; echo -ne "Potrebbe trattarsi di un'errore nella pagina HTML o un tag <embed> dalla sintassi inaspettata\n" ; fi ((NR_EPISODE++)) ; continue ; fi ProcessStream "$RAM" "$2" 0 ; case $? in 1) return 1 ;; 2) return 2 ;; 3) return 3 ;; *) ;; esac ((NR_EPISODE++)) ; done return 0 ; } function ProcessLegacy() { #recupero indici serie SUFFIX="_legacy" ; if ( ! DownloadIndexSerie "$NR_INDEX" "$1" 1 ); then if [[ $LIST -eq 0 ]]; then echo -ne "\nwget index $NR_INDEX failed!\n"; fi return 1 ; fi if [[ ! -f "serie$2/index$SUFFIX.htm" ]]; then return 1 ; fi RAMS=$(sed \ -e '/Q_CANALE=http:\/\/www.radio.rai.it\/\/radio2\/alleotto\//!d'\ -e 's/.*Q_CANALE=[^h]*//'\ -e 's/.ram.,.*$/.ram/' "serie$2/index$SUFFIX.htm" | uniq | sort) ; for ram in $RAMS; do ProcessStream "$ram" "$2" 1 ; case $? in 1) return 1 ;; 2) return 2 ;; 3) return 3 ;; *) ;; esac done return 0 ; } function ProcessStream() { # 1 -> $ram # 2 -> $NR_INDEX # 3 -> $FLAG_LEGACY #recupero l'indirizzo dello stream *.ra STREAM=$(GetStream "$1") ; #suddivido i file per serie: estraggo i nomi necessari FILE_NAME=$(echo $1 | sed 's/.*\///' | sed 's/m$//') ; STREAM_NAME=$(echo $STREAM | sed -e 's/.*\///') ; if [[ ${#FILE_NAME} -le ${#STREAM_NAME} ]]; then FILE_NAME="$STREAM_NAME" ; fi SERIE_NAME_PREV="$SERIE_NAME" ; export SERIE_NAME=$(echo $STREAM | sed -e 's/\/[^\/]*$//' -e 's/.*\///') ; if [[ "$SERIE_NAME" == "mestiere_artista" ]]; then SERIE_NAME_TMP=$(GetCodeFromText "serie$2/index.htm") ; if [[ ! -z "$SERIE_NAME_TMP" ]]; then SERIE_NAME="$SERIE_NAME_TMP" ; fi fi if [[ ! -z $SERIE_NAME_PREV ]] && [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ "$SERIE_NAME" =~ "$SERIE_NAME_PREV" ]] || [[ "$SERIE_NAME_PREV" =~ "$SERIE_NAME" ]]; then export SERIE_NAME="$SERIE_NAME_PREV"; fi fi if [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then return 1 fi if ( ! IsSerieSelected "$SERIE_NAME" ); then return 1 fi if [[ -z $SERIE_NAME_PREV ]] || [[ "$SERIE_NAME_PREV" != "$SERIE_NAME" ]]; then if [[ $LIST -eq 1 ]]; then # echo "[*][b]Codice[/b]: $SERIE_NAME" ; # echo "[b]Titolo[/b]: [url=http://www.rai.it/$serie]\"$TITLE\"[/url]" ; echo "Codice: $SERIE_NAME" ; echo "Titolo: \"$TITLE\"" ; echo -ne "URL: http://www.rai.it/$serie\n\n" ; return 2 fi #creazione cartelle serie if [[ ! -d "../$SERIE_NAME" ]]; then mkdir "../$SERIE_NAME" printf "\n\n%s" "Inizio download serie \"$SERIE_NAME\"" ; else printf "\n\n%s" "Proseguo download serie \"$SERIE_NAME\"" ; fi fi if [[ $LIST -eq 1 ]]; then return 2 fi #creazione indice html CreateHTMLindex "$SERIE_NAME" "$2" "$3" ; if [[ -n $STREAM_NAME ]] && [[ -f "../$SERIE_NAME/$STREAM_NAME" ]] && [[ "${STREAM_NAME}" != "${FILE_NAME}" ]]; then mv "../$SERIE_NAME/$STREAM_NAME" "../$SERIE_NAME/$FILE_NAME" fi if ( ! DownloadStream "$SERIE_NAME" "$FILE_NAME" "$STREAM" ); then export SERIE_DONE=0; else if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then if [[ -f "../$SERIE_NAME/$FILE_NAME" ]]; then rm "../$SERIE_NAME/$FILE_NAME" ; fi return 3 ; fi ProcessRMA "$SERIE_NAME/$FILE_NAME" ; fi if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then return 3 ; fi return 0 ; } #Viene creata una paginetta html con la descrizione di ogni serie #testata html function GetHead() { echo -ne "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n" ; echo -ne "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" ; echo -ne "<html>\n<head>\n" ; echo -ne "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8\"/>\n" ; echo -ne "<title>RADIO DUE - Alle 8 della sera - $1</title>\n" ; echo -ne "<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>" function GetHTMLcontent() { sed \ -n -e '/ id=\"SitoBody\">/,/<div class=\"Bot\"><\/div>/p'\ -e 's/<div class=\"Bot\"><\/div>/<div class=\"Bot\"><\/div><\/div>/' "$1" ; } function GetHTMLcontentLegacy() { sed \ -n -e '/<span class=\"solotesto\"> Alle otto della sera <\/span><\/div>/,/<div class=\"schede_interne_\(contenuti\|riascolta_a4\)\">/p' \ -e '/<div class=\"schede_interne_\(contenuti\|riascolta_a4\)\">/d' "$1" ; } function CreateHTMLindex() { if [[ -f "../$1/$1.html" ]]; then return 0 fi LEGACY=$3 ; if [ "$1" != "portedeisogni" ]; then LEGACY=0 ; fi echo -e "\nCreazione indice html: $1/$1.html" ; GetHead "$TITLE" > "../$1/$1.html" ; cat style.css >> "../$1/$1.html" ; echo -e $HEAD_CLOSE >> "../$1/$1.html" ; SUFFIX="" ; if [[ $LEGACY -eq 0 ]]; then GetHTMLcontent "serie$2/index.htm" >> "../$1/$1.html" else SUFFIX="_legacy" ; GetHTMLcontentLegacy "serie$2/index$SUFFIX.htm" >> "../$1/$1.html" fi echo -e $TAIL >> "../$1/$1.html" ; #recupero eventuale immagine IMAGE=$(sed -e '/<img src=\"/!d' -e 's/.*<img src=\"//' -e 's/\"[[:space:]]*[[:alpha:]]*=\".*$//' "../$1/$1.html") ; if [[ ! -z $IMAGE ]]; then IMAGE_NAME=`echo $IMAGE | sed -e 's/.*\///'` echo "L'indice contiene un'immagine -> $1/contenuti/$IMAGE_NAME" if [[ ! -d "../$1/contenuti" ]]; then mkdir "../$1/contenuti" fi if [[ ! -f "../$1/contenuti/$IMAGE_NAME" ]]; then if [[ $LEGACY -eq 0 ]]; then wget -q -O - "$IMAGE" > "../$1/contenuti/$IMAGE_NAME" ; else wget -q -O - "http://www.radio.rai.it$IMAGE" > "../$1/contenuti/$IMAGE_NAME" ; fi if [[ "$?" -ne 0 ]]; then echo -ne "\nwget image failed!\n"; rm "../$1/contenuti/$IMAGE_NAME"; fi fi #riscritture indirizzo immagine: da remota a locale LOCAL_NAME="contenuti/$IMAGE_NAME" sed -i 's;'$IMAGE';'$LOCAL_NAME';g' "../$1/$1.html" fi #alcune serie hanno anche dei contenuti aggiuntivi: li recupero LINKS=$(sed -e '/<a href=\"/!d' -e 's/<a href=\"/\n/g' ../$1/$1.html | sed -e '/http:/!d' -e 's/\">.*$//') ; if [[ ! -z $LINKS ]]; then if [[ ! -d "../$1/contenuti" ]]; then mkdir "../$1/contenuti" ; fi for link in $LINKS; do FILE_NAME=`echo $link | sed -e 's/.*\///'` if [[ ! -f "../$1/contenuti/$FILE_NAME" ]]; then echo "Contenuto aggiuntivo -> $1/contenuti/$FILE_NAME" ; wget -q -O - "$link" > "../$1/contenuti/$FILE_NAME" ; if [[ "$?" -ne 0 ]]; then echo -ne "\nwget file failed!\n"; rm "../$1/contenuti/$FILE_NAME"; fi fi #riscrittura indirizzo contenuto LOCAL_NAME="contenuti/$FILE_NAME" ; sed -i 's*'$link'*'$LOCAL_NAME'*g' "../$1/$1.html" ; done fi } function ProcessRMA() { if [[ $NO_RMA -eq 0 ]] && [[ ! "$RMA" ]]; then return 0 ; fi PROCESSED=`$RMA -d "../$1" | grep "This file has been processed by RealMedia Analyzer"` if [[ -f "../$1" ]] && [[ -z $PROCESSED ]]; then if $RMA -ft "../$1" >/dev/null 2>&1 ; then echo -n "." ; else echo -ne "\n*rma -ft warning*" ; touch "../$1-rma_ft_WARNING" ; fi if $RMA -i "../$1" >/dev/null 2>&1 ; then echo -n "." ; else echo -ne "\n*rma -i warning*" ; touch "../$1-rma_i_WARNING" ; fi fi unset PROCESSED ; } # trap keyboard interrupt (control-c) trap control_c SIGINT # trap standart sigterm trap control_c SIGTERM EXIT_AS_SOON_AS_POSS=0 # file that flags a folder as completely downloaded FILE_FLAG_DONE=".done" control_c() { printf "\n\n%s\n\n" "*** Richiesta uscita script: attendere, prego... ***" EXIT_AS_SOON_AS_POSS=1 } #cartella di lavoro TEMP_FOLDER="alle8dellasera_TMP" if [[ ! -d "$TEMP_FOLDER" ]]; then printf "%s\n%s\n\n%s\n%s\n\n" \ "Benvenuto in \"Alle otto della sera\" downloader." \ "Prima esecuzione dello script: creo la certella temporanea \"$TEMP_FOLDER\"" \ " *** Potrai eliminare questa cartella al termine ***" \ " *** del download di tutte le serie che ti interessano ***" fi mkdir -p "$TEMP_FOLDER" cd "$TEMP_FOLDER" #RealMedia analyzer RMA="./rma" if [[ $LIST -eq 0 ]] && [[ $NO_RMA -eq 0 ]] && [[ ! -f "$RMA" ]]; then RMA_FULL_NAME="rma-0.30.00-linux-i386" printf "\n%s\n%s\n" "Sto scaricando una utilità per riparare gli stream: RealMedia Analyzer ($RMA_FULL_NAME)" \ "Eseguire lo script con argomento --no-rma per saltare questo passaggio." if [[ ! -f "$RMA_FULL_NAME.gz" ]]; then wget -q "http://users.i.com.ua/~alexeysp/rma/$RMA_FULL_NAME.gz" if [[ "$?" -ne 0 ]]; then echo -ne "\nwget RMA failed!\n"; rm "$RMA_FULL_NAME.gz" ; fi fi gzip -qdc "$RMA_FULL_NAME.gz" > "$RMA" chmod +x "$RMA" fi if [[ ! -f "style.css" ]]; then wget -q -O - "http://www.rai.tv/dl/Radio2/css/Radio2.css" > style.css if [[ "$?" -ne 0 ]]; then echo -ne "\nwget css failed!\n"; rm style.css ; exit 1; fi fi INDEX_ALLEOTTO="alleottodellasera.html" #recupero indice generale if [[ ! -f "$INDEX_ALLEOTTO" ]]; then wget -q -O - "http://www.rai.it/dl/Radio2/alleottodellasera.html" > $INDEX_ALLEOTTO if [[ "$?" -ne 0 ]]; then echo -ne "\nwget global index failed!\n"; rm $INDEX_ALLEOTTO; exit 1; fi fi #estraggo i link alle serie di puntate SERIES=$(GetSeries "$INDEX_ALLEOTTO") ; SERIE_DONE=0 NR_INDEX=1 LEPORTEDEISOGNI=0 for serie in $SERIES; do if [[ EXIT_AS_SOON_AS_POSS -eq 1 ]]; then exit 0 ; fi #recupero indici serie if ( ! DownloadIndexSerie "$NR_INDEX" "$serie" 0 ); then if [[ $LIST -eq 0 ]]; then echo -ne "\nwget index $NR_INDEX failed!\n" ; fi if [[ $NR_INDEX -ne 74 ]]; then ((NR_INDEX++)) continue else touch "serie$NR_INDEX/index.htm" ; LEPORTEDEISOGNI=1 fi fi if [[ ! -f "serie$NR_INDEX/index.htm" ]] && [[ $NR_INDEX -ne 74 ]]; then exit 0 ; fi EPISODES=$(GetEpisodes "serie$NR_INDEX/index.htm") ; TITLE=$(GetHTMLtitle "serie$NR_INDEX/index.htm") ; LEGACY=0 ; #flag modalità legacy LEGACY_URL="" ; if [[ $LEPORTEDEISOGNI -eq 1 ]]; then TITLE="Le porte dei sogni" ; LEGACY=1 ; fi if [[ -z $EPISODES ]]; then #Alcune serie non sono state migrate completamente al nuovo sito RAI, gli unici link #alle puntate sono ancora presenti nelle vecchie pagine che potrebbero finire offline #in qualsiasi momento... CODE=$(GetCodeFromTitle "$TITLE") ; if [[ ! -z $CODE ]]; then LEGACY_URL="http://www.radio.rai.it/radio2/alleotto/$CODE/" ; fi if [[ ! -z $LEGACY_URL ]]; then LEGACY=1 ; fi if [[ $LEGACY -eq 0 ]]; then ((NR_INDEX++)) continue ; fi fi #questa flag viene portata a zero se un download di mplayer fallisce #in questo caso non viene creato il file FILE_FLAG_DONE, che marca una cartella come terminata export SERIE_DONE=1 export SERIE_NAME="" ; if [[ $LEGACY -eq 0 ]]; then ProcessStandard "$EPISODES" "$NR_INDEX" ; else ProcessLegacy "$LEGACY_URL" "$NR_INDEX" ; fi if [[ $? -eq 3 ]]; then exit 0 ; fi ((NR_INDEX++)) if ( ! IsSerieSelected "$SERIE_NAME" ); then continue fi RemoveSelected "$SERIE_NAME" if [[ $LIST -eq 1 ]]; then continue fi if [[ SERIE_DONE -eq 1 ]] && [[ ! -z $SERIE_NAME ]] && [[ ! -z $FILE_FLAG_DONE ]] && [[ ! -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" terminata!\n" touch "../$SERIE_NAME/$FILE_FLAG_DONE" elif [[ -f "../$SERIE_NAME/$FILE_FLAG_DONE" ]]; then echo -ne "\n\"$SERIE_NAME\" marcata come terminata (file \"$SERIE_NAME/$FILE_FLAG_DONE\")." fi if ( ! CheckRemainingSelected ); then exit 0 fi done #gimli
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) Ultima modifica di Gimli[2BV!2B] : 20-11-2011 alle 15:45. Motivo: noparse bbcode e piccoli dettagli stilistici |
![]() |
![]() |
![]() |
#17 | |
Junior Member
Iscritto dal: Jan 2006
Messaggi: 2
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:10.