Discussione: registrare in mp3?
View Single Post
Old 18-10-2009, 21:38   #10
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
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...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso