Rai.tv senza silverlight: differenze tra le versioni
(→Script) |
(→Script) |
||
| Riga 16: | Riga 16: | ||
se conoscete già il nome del canale che volete cercare, eseguitelo con ./script nome_canale_cercato. |
se conoscete già il nome del canale che volete cercare, eseguitelo con ./script nome_canale_cercato. |
||
= Script = |
= Script = |
||
| − | versione: 0.2.2 |
+ | versione: 0.2.3 |
--update: |
--update: |
||
| + | * usiamo /tmp per i file temporanei, ora è possibile pacchettizzare in sicurezza |
||
* corretto controllo sul supporto per kdialog |
* corretto controllo sul supporto per kdialog |
||
* aggiunto supporto per kdialog! |
* aggiunto supporto per kdialog! |
||
| Riga 32: | Riga 33: | ||
# io non c'ero, e se c'ero dormivo, ergo: sono cavoli vostri. chiaro? |
# io non c'ero, e se c'ero dormivo, ergo: sono cavoli vostri. chiaro? |
||
| − | # versione: 0.2.2 |
+ | # versione: 0.2.3 |
## CONFIGURAZIONE UTENTE |
## CONFIGURAZIONE UTENTE |
||
| Riga 47: | Riga 48: | ||
############ PROGRAMMA REALE ################ |
############ PROGRAMMA REALE ################ |
||
############ NON MODIFICARE! ################ |
############ NON MODIFICARE! ################ |
||
| + | TDIR="`echo ${0}|rev|cut -d '/' -f 1|rev`" |
||
| + | mkdir /tmp/${TDIR} 2>/dev/null |
||
| + | chmod 777 /tmp/${TDIR} 2>/dev/null |
||
| + | RND=$RANDOM |
||
NOTFOUND="" |
NOTFOUND="" |
||
for command in wget sed grep awk tail head dialog; do |
for command in wget sed grep awk tail head dialog; do |
||
| Riga 106: | Riga 111: | ||
update () { |
update () { |
||
echo "scarico la lista dei canali...." |
echo "scarico la lista dei canali...." |
||
| − | rm ${0}.xml &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.xml &>/dev/null |
| − | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O ${0}.xml --tries=$tries www.rai.tv/dl/RaiTV/videoWall/PublishingBlock-5566288c-3d21-48dc-b3e2-af7fbe3b2af8.xml &>/dev/null |
+ | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O /tmp/${TDIR}/${RND}.xml --tries=$tries www.rai.tv/dl/RaiTV/videoWall/PublishingBlock-5566288c-3d21-48dc-b3e2-af7fbe3b2af8.xml &>/dev/null |
| − | if [ ! -s ${0}.xml ]; then |
+ | if [ ! -s /tmp/${TDIR}/${RND}.xml ]; then |
echo "Download fallito! controlla la connessione internet e rilancia il programma" |
echo "Download fallito! controlla la connessione internet e rilancia il programma" |
||
exit 1 |
exit 1 |
||
fi |
fi |
||
| − | rm ${0}.tmp &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.tmp &>/dev/null |
| − | grep -B 1 '<url>' ${0}.xml|sed /--/d | sed s/^\ *// > ${0}.tmp |
+ | grep -B 1 '<url>' /tmp/${TDIR}/${RND}.xml|sed /--/d | sed s/^\ *// > /tmp/${TDIR}/${RND}.tmp |
| − | rm ${0}.xml &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.xml &>/dev/null |
| − | sed -i s/\&apos\;/\'/g ${0}.tmp |
+ | sed -i s/\&apos\;/\'/g /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\à\;/à/g' ${0}.tmp |
+ | sed -i 's/\à\;/à/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\á\;/à/g' ${0}.tmp |
+ | sed -i 's/\á\;/à/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\è\;/è/g' ${0}.tmp |
+ | sed -i 's/\è\;/è/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\é\;/é/g' ${0}.tmp |
+ | sed -i 's/\é\;/é/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\ì\;/ì/g' ${0}.tmp |
+ | sed -i 's/\ì\;/ì/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\í\;/ì/g' ${0}.tmp |
+ | sed -i 's/\í\;/ì/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\ò\;/ò/g' ${0}.tmp |
+ | sed -i 's/\ò\;/ò/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\ò\;/ò/g' ${0}.tmp |
+ | sed -i 's/\ò\;/ò/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i 's/\ù\;/ù/g' ${0}.tmp |
+ | sed -i 's/\ù\;/ù/g' /tmp/${TDIR}/${RND}.tmp |
| − | sed -i s/\&\;/\\\&/g ${0}.tmp |
+ | sed -i s/\&\;/\\\&/g /tmp/${TDIR}/${RND}.tmp |
| − | sed -i s/\"\;/\'/g ${0}.tmp |
+ | sed -i s/\"\;/\'/g /tmp/${TDIR}/${RND}.tmp |
| − | sed -i s/\'\;/\'/g ${0}.tmp |
+ | sed -i s/\'\;/\'/g /tmp/${TDIR}/${RND}.tmp |
COUNTER=0 |
COUNTER=0 |
||
| − | rm ${0}.canali &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.canali &>/dev/null |
while read line ; do |
while read line ; do |
||
let "NUM=$COUNTER % 2" |
let "NUM=$COUNTER % 2" |
||
| Riga 140: | Riga 145: | ||
echo -n "." |
echo -n "." |
||
fi |
fi |
||
| − | echo -en $line|awk -F '"' '{print $2}' >> ${0}.canali #metti il nome dello stream in cache |
+ | echo -en $line|awk -F '"' '{print $2}' >> /tmp/${TDIR}/${RND}.canali #metti il nome dello stream in cache |
else |
else |
||
| − | echo -en $line|awk -F '<url>' '{print $2}'|awk -F '</url>' '{print $1}' >> ${0}.canali #metti l'indirizzo dello stream in cache |
+ | echo -en $line|awk -F '<url>' '{print $2}'|awk -F '</url>' '{print $1}' >> /tmp/${TDIR}/${RND}.canali #metti l'indirizzo dello stream in cache |
| − | echo "==" >> ${0}.canali #non è realmente necessario, ma se qualcuno si vuole vedere la lista selza usare lo script |
+ | echo "==" >> /tmp/${TDIR}/${RND}.canali #non è realmente necessario, ma se qualcuno si vuole vedere la lista selza usare lo script |
fi #fa comodo avere una lista leggibile |
fi #fa comodo avere una lista leggibile |
||
let COUNTER++ |
let COUNTER++ |
||
| − | done < ${0}.tmp |
+ | done < /tmp/${TDIR}/${RND}.tmp |
echo "" |
echo "" |
||
| − | rm ${0}.tmp &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.tmp &>/dev/null |
} |
} |
||
check_dwn () { |
check_dwn () { |
||
| − | if [ ! -s ${0}.tmp ]; then |
+ | if [ ! -s /tmp/${TDIR}/${RND}.tmp ]; then |
echo "Download fallito! controlla la connessione internet e rilancia il programma" |
echo "Download fallito! controlla la connessione internet e rilancia il programma" |
||
exit 1 |
exit 1 |
||
| Riga 159: | Riga 164: | ||
if [ -z "`echo $STREAM|grep 'mms://'`" ]; then |
if [ -z "`echo $STREAM|grep 'mms://'`" ]; then |
||
#uff... tiriamo fuori lo stream da incasinamenti vari.... |
#uff... tiriamo fuori lo stream da incasinamenti vari.... |
||
| − | rm ${0}.tmp &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.tmp &>/dev/null |
| − | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout --spider "$STREAM" -O /dev/null 1> /dev/null 2> ${0}.tmp #a volte il link è un file flv. |
+ | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout --spider "$STREAM" -O /dev/null 1> /dev/null 2> /tmp/${TDIR}/${RND}.tmp #a volte il link è un file flv. |
check_dwn |
check_dwn |
||
| − | TMP="`tail -n 2 ${0}.tmp|grep 'flv'`" #che sembra essere solo un video.... |
+ | TMP="`tail -n 2 /tmp/${TDIR}/${RND}.tmp|grep 'flv'`" #che sembra essere solo un video.... |
| − | rm ${0}.tmp |
+ | rm /tmp/${TDIR}/${RND}.tmp |
if [ -z "$TMP" ]; then |
if [ -z "$TMP" ]; then |
||
| − | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O ${0}.tmp "$STREAM" &>/dev/null |
+ | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O /tmp/${TDIR}/${RND}.tmp "$STREAM" &>/dev/null |
check_dwn |
check_dwn |
||
| − | if [ -z "`grep 'http://' ${0}.tmp`" ]&&[ -z "`grep 'mms://' ${0}.tmp`" ]; then |
+ | if [ -z "`grep 'http://' /tmp/${TDIR}/${RND}.tmp`" ]&&[ -z "`grep 'mms://' /tmp/${TDIR}/${RND}.tmp`" ]; then |
#mi è capitato che alcuni link portino nel vuoto |
#mi è capitato che alcuni link portino nel vuoto |
||
echo "(muove la mano)--Tu *NON* vuoi vedere questo canale" |
echo "(muove la mano)--Tu *NON* vuoi vedere questo canale" |
||
| − | rm ${0}.tmp |
+ | rm /tmp/${TDIR}/${RND}.tmp |
exit 1 |
exit 1 |
||
else |
else |
||
| − | if [ -n "`grep 'mms://' ${0}.tmp`" ]; then |
+ | if [ -n "`grep 'mms://' /tmp/${TDIR}/${RND}.tmp`" ]; then |
| − | STREAM="`grep 'mms://' ${0}.tmp|awk -F '"' '{print $4}'`" |
+ | STREAM="`grep 'mms://' /tmp/${TDIR}/${RND}.tmp|awk -F '"' '{print $4}'`" |
| − | elif [ -n "`grep wmv ${0}.tmp`" ]; then |
+ | elif [ -n "`grep wmv /tmp/${TDIR}/${RND}.tmp`" ]; then |
| − | STREAM="`grep wmv ${0}.tmp |awk -F '"' '{print $2}'`" |
+ | STREAM="`grep wmv /tmp/${TDIR}/${RND}.tmp |awk -F '"' '{print $2}'`" |
else |
else |
||
| − | STREAM="`grep 'http://' ${0}.tmp`" |
+ | STREAM="`grep 'http://' /tmp/${TDIR}/${RND}.tmp`" |
############################################################# |
############################################################# |
||
# Modifica 04/07/2009 - jigen74 |
# Modifica 04/07/2009 - jigen74 |
||
| Riga 190: | Riga 195: | ||
STREAM="`echo $STREAM|awk -F '"' '{print $2}'`" |
STREAM="`echo $STREAM|awk -F '"' '{print $2}'`" |
||
fi |
fi |
||
| − | rm ${0}.tmp |
+ | rm /tmp/${TDIR}/${RND}.tmp |
| − | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout --spider "$STREAM" -O /dev/null 1>/dev/null 2>${0}.tmp |
+ | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout --spider "$STREAM" -O /dev/null 1>/dev/null 2>${TDIR}.tmp |
check_dwn |
check_dwn |
||
| − | if [ -z "`tail -n 2 ${0}.tmp|grep 'flv'`" ]; then #se NON è un flv... |
+ | if [ -z "`tail -n 2 /tmp/${TDIR}/${RND}.tmp|grep 'flv'`" ]; then #se NON è un flv... |
| − | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O ${0}.tmp "$STREAM" &>/dev/null |
+ | wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O /tmp/${TDIR}/${RND}.tmp "$STREAM" &>/dev/null |
check_dwn |
check_dwn |
||
| − | if [ -n "`grep 'mms://' ${0}.tmp`" ]; then |
+ | if [ -n "`grep 'mms://' /tmp/${TDIR}/${RND}.tmp`" ]; then |
| − | STREAM="`grep 'mms://' ${0}.tmp |awk -F '"' '{print $2}'`" |
+ | STREAM="`grep 'mms://' /tmp/${TDIR}/${RND}.tmp |awk -F '"' '{print $2}'`" |
| − | elif [ -n "`grep '.flv' ${0}.tmp`" ]; then |
+ | elif [ -n "`grep '.flv' /tmp/${TDIR}/${RND}.tmp`" ]; then |
| − | STREAM="`cat ${0}.tmp`" |
+ | STREAM="`cat /tmp/${TDIR}/${RND}.tmp`" |
######################################################## |
######################################################## |
||
# Modifica 04/07/2009 - jigen74 |
# Modifica 04/07/2009 - jigen74 |
||
| Riga 206: | Riga 211: | ||
# se lo stream non ha estensione non va modificato |
# se lo stream non ha estensione non va modificato |
||
######################################################## |
######################################################## |
||
| − | elif [ -n "`grep '.wmv' ${0}.tmp`" ]; then |
+ | elif [ -n "`grep '.wmv' /tmp/${TDIR}/${RND}.tmp`" ]; then |
| − | STREAM="`grep '.wmv' ${0}.tmp |awk -F '"' '{print $2}'`" |
+ | STREAM="`grep '.wmv' /tmp/${TDIR}/${RND}.tmp |awk -F '"' '{print $2}'`" |
fi |
fi |
||
fi |
fi |
||
fi |
fi |
||
| − | #rm ${0}.tmp |
+ | #rm /tmp/${TDIR}/${RND}.tmp |
fi |
fi |
||
fi |
fi |
||
| Riga 248: | Riga 253: | ||
#nome1 "" help1 nome2 "" help2 ... |
#nome1 "" help1 nome2 "" help2 ... |
||
#il secondo elemento è volontariamente lasciato come lista vuota. |
#il secondo elemento è volontariamente lasciato come lista vuota. |
||
| − | rm ${0}.list &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.list &>/dev/null |
if [ "$1" == "tutti" ]||[ -z "$1" ]; then |
if [ "$1" == "tutti" ]||[ -z "$1" ]; then |
||
| − | grep -v ^==$ ${0}.canali | \ |
+ | grep -v ^==$ /tmp/${TDIR}/${RND}.canali | \ |
while read line; do |
while read line; do |
||
case "$COUNTER" in |
case "$COUNTER" in |
||
| Riga 258: | Riga 263: | ||
TMP="`echo $line|sed 's/\ /_/g; s/_-_/_/g'`" |
TMP="`echo $line|sed 's/\ /_/g; s/_-_/_/g'`" |
||
else |
else |
||
| − | echo \"$line\" >> ${0}.list #"# <--ripristino la colorazione per vim... |
+ | echo \"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim... |
fi |
fi |
||
COUNTER=2 |
COUNTER=2 |
||
| Riga 264: | Riga 269: | ||
2) |
2) |
||
if [ "$USEKDIALOG" == "true" ]; then |
if [ "$USEKDIALOG" == "true" ]; then |
||
| − | echo -e "`echo ${line}|sed s/\ /%20/g` ${TMP}" >> ${0}.list |
+ | echo -e "`echo ${line}|sed s/\ /%20/g` ${TMP}" >> /tmp/${TDIR}/${RND}.list |
else |
else |
||
| − | echo -e \"\""\n"\"$line\" >> ${0}.list #"# <--ripristino la colorazione per vim... |
+ | echo -e \"\""\n"\"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim... |
fi |
fi |
||
COUNTER=1 |
COUNTER=1 |
||
| Riga 273: | Riga 278: | ||
done |
done |
||
else |
else |
||
| − | grep -A 1 -i "$1" ${0}.canali | grep -v -- ^--$ | grep -v ^==$ |\ |
+ | grep -A 1 -i "$1" /tmp/${TDIR}/${RND}.canali | grep -v -- ^--$ | grep -v ^==$ |\ |
while read line ; do |
while read line ; do |
||
case "$COUNTER" in |
case "$COUNTER" in |
||
| Riga 284: | Riga 289: | ||
TMP="`echo $line|sed 's/\ /_/g; s/_-_/_/g'`" |
TMP="`echo $line|sed 's/\ /_/g; s/_-_/_/g'`" |
||
else |
else |
||
| − | echo \"$line\" >> ${0}.list #"# <--ripristino la colorazione per vim... |
+ | echo \"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim... |
fi |
fi |
||
COUNTER=2 |
COUNTER=2 |
||
| Riga 294: | Riga 299: | ||
2 ) |
2 ) |
||
if [ "$USEKDIALOG" == "true" ]; then |
if [ "$USEKDIALOG" == "true" ]; then |
||
| − | echo -e "`echo ${line}|sed s/\ /%20/g` ${TMP}" >> ${0}.list |
+ | echo -e "`echo ${line}|sed s/\ /%20/g` ${TMP}" >> /tmp/${TDIR}/${RND}.list |
else |
else |
||
| − | echo \"\" >> ${0}.list #"# |
+ | echo \"\" >> /tmp/${TDIR}/${RND}.list #"# |
| − | echo \"$line\" >> ${0}.list #"# <--ripristino la colorazione per vim... |
+ | echo \"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim... |
fi |
fi |
||
COUNTER=1 |
COUNTER=1 |
||
| Riga 305: | Riga 310: | ||
fi |
fi |
||
| − | if [ ! -s ${0}.list ]; then |
+ | if [ ! -s /tmp/${TDIR}/${RND}.list ]; then |
echo "Canale non trovato..." |
echo "Canale non trovato..." |
||
exit 0 |
exit 0 |
||
fi |
fi |
||
| − | rm ${0}.reply &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.reply &>/dev/null |
REPLY="" |
REPLY="" |
||
if [ "$USEKDIALOG" == "true" ]; then |
if [ "$USEKDIALOG" == "true" ]; then |
||
| − | STREAM=`kdialog --title "Rai.tv Senza Silverlight" --menu "Lista canali disponibili" $(cat ${0}.list)` |
+ | STREAM=`kdialog --title "Rai.tv Senza Silverlight" --menu "Lista canali disponibili" $(cat /tmp/${TDIR}/${RND}.list)` |
else |
else |
||
while [ -z "$REPLY" ]; do |
while [ -z "$REPLY" ]; do |
||
| − | dialog --title "Stream disponibili" --help-button --item-help --menu "scegli lo stream da aprire" 20 70 12 --file ${0}.list 2> ${0}.reply |
+ | dialog --title "Stream disponibili" --help-button --item-help --menu "scegli lo stream da aprire" 20 70 12 --file /tmp/${TDIR}/${RND}.list 2> /tmp/${TDIR}/${RND}.reply |
| − | REPLY="`tail -n 1 ${0}.reply`" |
+ | REPLY="`tail -n 1 /tmp/${TDIR}/${RND}.reply`" |
| − | rm ${0}.reply &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.reply &>/dev/null |
if [ -n "`echo $REPLY|grep '^HELP '`" ]; then |
if [ -n "`echo $REPLY|grep '^HELP '`" ]; then |
||
REPLY="`echo $REPLY|awk -F "HELP " '{print $2}'`" #"`" # <<-ripristino colorazione vim.... |
REPLY="`echo $REPLY|awk -F "HELP " '{print $2}'`" #"`" # <<-ripristino colorazione vim.... |
||
| − | NAME="`grep -B 2 "$REPLY" ${0}.list|head -n 1`" |
+ | NAME="`grep -B 2 "$REPLY" /tmp/${TDIR}/${RND}.list|head -n 1`" |
dialog --title "$NAME" --msgbox "Lo stream è all'indirizzo:\n$REPLY" 20 70 |
dialog --title "$NAME" --msgbox "Lo stream è all'indirizzo:\n$REPLY" 20 70 |
||
REPLY="" |
REPLY="" |
||
elif [ -z "$REPLY" ]; then |
elif [ -z "$REPLY" ]; then |
||
| − | rm ${0}.list &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.list &>/dev/null |
break; |
break; |
||
fi |
fi |
||
| Riga 333: | Riga 338: | ||
exit 0 |
exit 0 |
||
fi |
fi |
||
| − | STREAM="`grep -A 2 "$REPLY" ${0}.list|tail -n 1|awk -F '"' '{print $2}'`" |
+ | STREAM="`grep -A 2 "$REPLY" /tmp/${TDIR}/${RND}.list|tail -n 1|awk -F '"' '{print $2}'`" |
fi |
fi |
||
play |
play |
||
| − | rm ${0}.list &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.list &>/dev/null |
| − | rm ${0}.canali &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.canali &>/dev/null |
| − | rm ${0}.tmp &>/dev/null |
+ | rm /tmp/${TDIR}/${RND}.tmp &>/dev/null |
echo "" |
echo "" |
||
</pre> |
</pre> |
||
Versione delle 21:27, 18 ott 2009
Descrizione
Recentemente il portale rai.tv è stato riscritto in modo da usare il player microsoft silverlight per i contenuti streaming. Per GNU/Linux esiste il plugin Moonlight, sviluppato dalla Novell, ma quest'ultimo deve comunque usare codec proprietari, e sembra essere un grosso mangiarisorse (almeno allo stato attuale).
Questo script si scarica l'intera lista degli stream direttamente dal sito della rai, e vi fa scegliere da menu (stile pkgtool) il canale desiderato e infine lancia il vostro player preferito su quello stream.
Sono così visualizzabili non solo raiuno, raidue, raitre, rainews, raistoria, raiedu, ma anche spezzoni (o intere trasmissioni) di alcune trasmissioni dell'ultima settimana o giù di li.
Uso
Basta salvare questo script con il nome che preferite, renderlo eseguibile ( chmod +x nome_script ) ed eseguirlo. per cambiare il player usato basta cambiare la variabile player con player="comando_vostro_player" all'inizio dello script
se conoscete già il nome del canale che volete cercare, eseguitelo con ./script nome_canale_cercato.
Script
versione: 0.2.3
--update:
- usiamo /tmp per i file temporanei, ora è possibile pacchettizzare in sicurezza
- corretto controllo sul supporto per kdialog
- aggiunto supporto per kdialog!
- controlla meglio i caratteri e occhio agli spazi...
- corretto un errore nel cercare il canale passato da riga di comando
- possibilità di ignorare i messaggi a terminale del player.
- possibilità di mettere in background il player
- cambio useragent... se non è un browser a fare il download ti ritornano pubblicità anzichè lo stream...
- aggiunti controlli nella ricerca dello stream (grazie a jigen74 )
#!/bin/bash
# Usate, modificate, riscrivete questo script come vi pare.
# se vi succede qualcosa di brutto a causa di questo script,
# io non c'ero, e se c'ero dormivo, ergo: sono cavoli vostri. chiaro?
# versione: 0.2.3
## CONFIGURAZIONE UTENTE
tries=5 #tentativi di scaricare ogni file
timeout=10 #tempo massimo di attesa risposta per lo scaricamento (secondi)
player="vlc" #nome del player video.
output="si" #mandare a video i messaggi del player? (si/no)
background="no" #mandare il player in background, in modo da aver disponibile il terminale?
#per salvare gli stream, usate il vostro player preferito.
#per mplayer ad esempio, basta modificare la variabile "player" a:
# player="mplayer -dumpfile stream.wmv -dumpstream"
############ PROGRAMMA REALE ################
############ NON MODIFICARE! ################
TDIR="`echo ${0}|rev|cut -d '/' -f 1|rev`"
mkdir /tmp/${TDIR} 2>/dev/null
chmod 777 /tmp/${TDIR} 2>/dev/null
RND=$RANDOM
NOTFOUND=""
for command in wget sed grep awk tail head dialog; do
if [ -z "`which $command 2>/dev/null`" ]; then
NOTFOUND="`echo "$NOTFOUND $command"`"
fi
done
if [ -n "`which kdialog 2>/dev/null`" ]; then
USEKDIALOG="true"
else
USEKDIALOG="false"
fi
if [ -n "$NOTFOUND" ]; then
echo "Comandi non trovati:"
echo $NOTFOUND
exit 1
fi
USERAGENT='Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.11'
PLAYERCMD="`echo $player|awk -F " " '{print $1}'`"
if [ -z "`which $PLAYERCMD 2>/dev/null`" ]; then
echo "Player $PLAYERCMD non trovato!"
exit 1
fi
unset PLAYERCMD
case $output in
[Ss][Ii])
;;
[Nn][Oo])
;;
*)
echo "La variabile \"output\" ammette solo"
echo "I valori \"si\" e \"no\""
exit 1
;;
esac
case $background in
[Ss][Ii])
;;
[Nn][Oo])
;;
*)
echo "La variabile \"background\" ammette solo"
echo "I valori \"si\" e \"no\""
exit 1
;;
esac
help () {
echo "Script per la visualizzazione dei canali presenti su rai.tv"
echo "senza il plugin Silverlight di Microsoft o Moonlight di Novell"
echo "Creato da Luke88 -- luke88 _at_ slacky.it"
echo -e "\nUso:\t$0 chiave_ricerca\tcerca canale nella lista"
echo -e "\t$0 tutti\t\tlista completa dei canali"
echo ""
echo "per configurare player e comportamenti del player"
echo "cambiare le variabili all'inizio di questo scirpt"
echo "con il vostro editor preferito"
echo -e "\nlo script non porta con se garanzie di qualsiasi tipo"
}
update () {
echo "scarico la lista dei canali...."
rm /tmp/${TDIR}/${RND}.xml &>/dev/null
wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O /tmp/${TDIR}/${RND}.xml --tries=$tries www.rai.tv/dl/RaiTV/videoWall/PublishingBlock-5566288c-3d21-48dc-b3e2-af7fbe3b2af8.xml &>/dev/null
if [ ! -s /tmp/${TDIR}/${RND}.xml ]; then
echo "Download fallito! controlla la connessione internet e rilancia il programma"
exit 1
fi
rm /tmp/${TDIR}/${RND}.tmp &>/dev/null
grep -B 1 '<url>' /tmp/${TDIR}/${RND}.xml|sed /--/d | sed s/^\ *// > /tmp/${TDIR}/${RND}.tmp
rm /tmp/${TDIR}/${RND}.xml &>/dev/null
sed -i s/\&apos\;/\'/g /tmp/${TDIR}/${RND}.tmp
sed -i 's/\à\;/à/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\á\;/à/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\è\;/è/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\é\;/é/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\ì\;/ì/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\í\;/ì/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\ò\;/ò/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\ò\;/ò/g' /tmp/${TDIR}/${RND}.tmp
sed -i 's/\ù\;/ù/g' /tmp/${TDIR}/${RND}.tmp
sed -i s/\&\;/\\\&/g /tmp/${TDIR}/${RND}.tmp
sed -i s/\"\;/\'/g /tmp/${TDIR}/${RND}.tmp
sed -i s/\'\;/\'/g /tmp/${TDIR}/${RND}.tmp
COUNTER=0
rm /tmp/${TDIR}/${RND}.canali &>/dev/null
while read line ; do
let "NUM=$COUNTER % 2"
if [ $NUM -eq 0 ]; then
let "NUM=$COUNTER % 20" #facciamo vedere qualcosa a schermo...
if [ $NUM -eq 0 ]; then
let "NUM=$COUNTER/2" #ogni 10 stream diciamo a quanti siamo...
echo -n $NUM
else
echo -n "."
fi
echo -en $line|awk -F '"' '{print $2}' >> /tmp/${TDIR}/${RND}.canali #metti il nome dello stream in cache
else
echo -en $line|awk -F '<url>' '{print $2}'|awk -F '</url>' '{print $1}' >> /tmp/${TDIR}/${RND}.canali #metti l'indirizzo dello stream in cache
echo "==" >> /tmp/${TDIR}/${RND}.canali #non è realmente necessario, ma se qualcuno si vuole vedere la lista selza usare lo script
fi #fa comodo avere una lista leggibile
let COUNTER++
done < /tmp/${TDIR}/${RND}.tmp
echo ""
rm /tmp/${TDIR}/${RND}.tmp &>/dev/null
}
check_dwn () {
if [ ! -s /tmp/${TDIR}/${RND}.tmp ]; then
echo "Download fallito! controlla la connessione internet e rilancia il programma"
exit 1
fi
}
play () {
if [ -z "`echo $STREAM|grep 'mms://'`" ]; then
#uff... tiriamo fuori lo stream da incasinamenti vari....
rm /tmp/${TDIR}/${RND}.tmp &>/dev/null
wget -U "$USERAGENT" --tries=$tries --timeout=$timeout --spider "$STREAM" -O /dev/null 1> /dev/null 2> /tmp/${TDIR}/${RND}.tmp #a volte il link è un file flv.
check_dwn
TMP="`tail -n 2 /tmp/${TDIR}/${RND}.tmp|grep 'flv'`" #che sembra essere solo un video....
rm /tmp/${TDIR}/${RND}.tmp
if [ -z "$TMP" ]; then
wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O /tmp/${TDIR}/${RND}.tmp "$STREAM" &>/dev/null
check_dwn
if [ -z "`grep 'http://' /tmp/${TDIR}/${RND}.tmp`" ]&&[ -z "`grep 'mms://' /tmp/${TDIR}/${RND}.tmp`" ]; then
#mi è capitato che alcuni link portino nel vuoto
echo "(muove la mano)--Tu *NON* vuoi vedere questo canale"
rm /tmp/${TDIR}/${RND}.tmp
exit 1
else
if [ -n "`grep 'mms://' /tmp/${TDIR}/${RND}.tmp`" ]; then
STREAM="`grep 'mms://' /tmp/${TDIR}/${RND}.tmp|awk -F '"' '{print $4}'`"
elif [ -n "`grep wmv /tmp/${TDIR}/${RND}.tmp`" ]; then
STREAM="`grep wmv /tmp/${TDIR}/${RND}.tmp |awk -F '"' '{print $2}'`"
else
STREAM="`grep 'http://' /tmp/${TDIR}/${RND}.tmp`"
#############################################################
# Modifica 04/07/2009 - jigen74
# lo stream ha una forma del tipo:
# <ASX VERSION="3.0"><ENTRY><REF HREF="..." /></ENTRY></ASX>
# per cui per recuperare l'url corretto leggo il contenuto di HREF
#############################################################
if [ -n "`echo $STREAM|grep 'HREF'`" ]; then
STREAM="`echo $STREAM|awk -F 'HREF="' '{print $2}'|awk -F '"' '{print $1}'`"
elif [ -n "`echo $STREAM|grep '"'`" ]; then
STREAM="`echo $STREAM|awk -F '"' '{print $2}'`"
fi
rm /tmp/${TDIR}/${RND}.tmp
wget -U "$USERAGENT" --tries=$tries --timeout=$timeout --spider "$STREAM" -O /dev/null 1>/dev/null 2>${TDIR}.tmp
check_dwn
if [ -z "`tail -n 2 /tmp/${TDIR}/${RND}.tmp|grep 'flv'`" ]; then #se NON è un flv...
wget -U "$USERAGENT" --tries=$tries --timeout=$timeout -O /tmp/${TDIR}/${RND}.tmp "$STREAM" &>/dev/null
check_dwn
if [ -n "`grep 'mms://' /tmp/${TDIR}/${RND}.tmp`" ]; then
STREAM="`grep 'mms://' /tmp/${TDIR}/${RND}.tmp |awk -F '"' '{print $2}'`"
elif [ -n "`grep '.flv' /tmp/${TDIR}/${RND}.tmp`" ]; then
STREAM="`cat /tmp/${TDIR}/${RND}.tmp`"
########################################################
# Modifica 04/07/2009 - jigen74
# sostituito else con elif per il controllo
# dell'estensione .wmv
# se lo stream non ha estensione non va modificato
########################################################
elif [ -n "`grep '.wmv' /tmp/${TDIR}/${RND}.tmp`" ]; then
STREAM="`grep '.wmv' /tmp/${TDIR}/${RND}.tmp |awk -F '"' '{print $2}'`"
fi
fi
fi
#rm /tmp/${TDIR}/${RND}.tmp
fi
fi
fi
case $output in
[Nn][Oo])
case $background in
[Nn][Oo])
$player "$STREAM" &>/dev/null
;;
[Ss][Ii])
$player "$STREAM" &>/dev/null &
;;
esac
;;
[Ss][Ii])
case $background in
[Nn][Oo])
$player "$STREAM"
;;
[Ss][Ii])
$player "$STREAM" &
;;
esac
;;
esac
}
if [ "$1" == "-h" ]||[ "$1" == "--h" ]||[ "$1" == "-help" ]||[ "$1" == "--help" ]; then
help
exit 0
fi
update
COUNTER=1
#costruiamo la lista variabili per il dialog.
#è una lista di elementi, del tipo
#nome1 "" help1 nome2 "" help2 ...
#il secondo elemento è volontariamente lasciato come lista vuota.
rm /tmp/${TDIR}/${RND}.list &>/dev/null
if [ "$1" == "tutti" ]||[ -z "$1" ]; then
grep -v ^==$ /tmp/${TDIR}/${RND}.canali | \
while read line; do
case "$COUNTER" in
1)
if [ "$USEKDIALOG" == "true" ]; then
TMP="`echo $line|sed 's/\ /_/g; s/_-_/_/g'`"
else
echo \"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim...
fi
COUNTER=2
;;
2)
if [ "$USEKDIALOG" == "true" ]; then
echo -e "`echo ${line}|sed s/\ /%20/g` ${TMP}" >> /tmp/${TDIR}/${RND}.list
else
echo -e \"\""\n"\"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim...
fi
COUNTER=1
;;
esac
done
else
grep -A 1 -i "$1" /tmp/${TDIR}/${RND}.canali | grep -v -- ^--$ | grep -v ^==$ |\
while read line ; do
case "$COUNTER" in
0 )
COUNTER=1 #serve solo per 'saltare un turno'
;;
1 )
if [ -z "`echo $line|grep '://'`" ]; then # se non è un url
if [ "$USEKDIALOG" == "true" ]; then
TMP="`echo $line|sed 's/\ /_/g; s/_-_/_/g'`"
else
echo \"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim...
fi
COUNTER=2
else
#abbiamo greppato l'indirizzo... non ce ne facciamo niente...
COUNTER=0
fi
;;
2 )
if [ "$USEKDIALOG" == "true" ]; then
echo -e "`echo ${line}|sed s/\ /%20/g` ${TMP}" >> /tmp/${TDIR}/${RND}.list
else
echo \"\" >> /tmp/${TDIR}/${RND}.list #"#
echo \"$line\" >> /tmp/${TDIR}/${RND}.list #"# <--ripristino la colorazione per vim...
fi
COUNTER=1
;;
esac
done
fi
if [ ! -s /tmp/${TDIR}/${RND}.list ]; then
echo "Canale non trovato..."
exit 0
fi
rm /tmp/${TDIR}/${RND}.reply &>/dev/null
REPLY=""
if [ "$USEKDIALOG" == "true" ]; then
STREAM=`kdialog --title "Rai.tv Senza Silverlight" --menu "Lista canali disponibili" $(cat /tmp/${TDIR}/${RND}.list)`
else
while [ -z "$REPLY" ]; do
dialog --title "Stream disponibili" --help-button --item-help --menu "scegli lo stream da aprire" 20 70 12 --file /tmp/${TDIR}/${RND}.list 2> /tmp/${TDIR}/${RND}.reply
REPLY="`tail -n 1 /tmp/${TDIR}/${RND}.reply`"
rm /tmp/${TDIR}/${RND}.reply &>/dev/null
if [ -n "`echo $REPLY|grep '^HELP '`" ]; then
REPLY="`echo $REPLY|awk -F "HELP " '{print $2}'`" #"`" # <<-ripristino colorazione vim....
NAME="`grep -B 2 "$REPLY" /tmp/${TDIR}/${RND}.list|head -n 1`"
dialog --title "$NAME" --msgbox "Lo stream è all'indirizzo:\n$REPLY" 20 70
REPLY=""
elif [ -z "$REPLY" ]; then
rm /tmp/${TDIR}/${RND}.list &>/dev/null
break;
fi
done
clear
if [ "$REPLY" == "" ]; then
echo "Nessuno stream trovato per questa ricerca"
exit 0
fi
STREAM="`grep -A 2 "$REPLY" /tmp/${TDIR}/${RND}.list|tail -n 1|awk -F '"' '{print $2}'`"
fi
play
rm /tmp/${TDIR}/${RND}.list &>/dev/null
rm /tmp/${TDIR}/${RND}.canali &>/dev/null
rm /tmp/${TDIR}/${RND}.tmp &>/dev/null
echo ""
Autore: Luke88