Utente mascherato segnala "recentemente rai.tv è passata a silverlight. esiste il plugin moonlight della novell per questo, ma è un mangiarisorse, e necessita di altri codec proprietari. ecco uno script per vedere gli stream rai con il vostro player video preferito.
Recentemente la rai ha rifatto il suo sito in modo da usare il player Microsoft Silverlight per la visualizzazione dei filmati.
Per vedere i filmati gli utenti linux devono quindi installare il plugin Moonlight, sviluppato da Novell, e sucessivamente installare i codec necessari
Tutto questo è semplice e guidato, ma Moonlight sembra essere un mangiarisorse non da poco, inoltre non tutti vogliono installare i codec proprietari necessari al funzionamento di Moonlight.
Come fare senza moonlight allora?
In realtà Moonlight è solo un interfaccia, gli stream audio/video restano nel 'classico' formato mms:// , flv o wmv.
ecco quindi un semplice script che si scarica la lista degli stream disponibili direttamente da rai.tv, permette di cercare il canale desiderato, e apre il vostro player preferito su quel canale.
Il suo uso è molto semplice:
copiate su un file qualsiasi il codice riportato qui sotto, salvatelo con il nome che più vi piace, aprite un terminale e:
cd /dove/avete/salvato/lo/script
chmod 644 nome_del_vostro_script
ora per cercare qualche canale vi basta dare, sempre da terminale
./script nome_canale_o_show_cercato
se invece volete la lista di tutti i canali disponibili, date:
./script tutti
vi verrà mostrato un semplice menu, da cui basta selezionare il vostro programma.
Se volete cambiare il player video usato, basta che apriate lo script con un qualsiasi editor di testo, e modifichiate la linea:
player="mplayer" #nome del player video.
sostituendo a "mplayer" il nome del vostro player preferito.
ecco il codice:
#!/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?
## CONFIGURAZIONE UTENTE
tries=5 #tentativi di scaricare ogni file
timeout=10 #tempo massimo di attesa risposta per lo scaricamento (secondi)
player="mplayer" #nome del player video.
############ PROGRAMMA REALE ################
############ NON MODIFICARE! ################
if [ -z "`which wget 2>/dev/null`" ]; then
echo "wget non trovato!"
exit 1
elif [ -z "`which sed 2>/dev/null`" ]; then
echo "sed non trovato!"
exit 1
elif [ -z "`which grep 2>/dev/null`" ]; then
echo "grep non trovato!"
exit 1
elif [ -z "`which awk`" ]; then
echo "awk non trovato!"
exit 1
elif [ -z "`which tail`" ]; then
echo "tail non trovato!"
exit 1
elif [ -z "`which dialog`" ]; then
echo "dialog non trovato!"
exit 1
elif [ -z "`which $player`" ]; then
echo ""$player" non trovato!"
exit 1
fi
help () {
echo "Script per la visualizzazione dei canali presenti su rai.tv"
echo "senza il plugin Silverlight di Microsoft"
echo "Scrivetemi pure per dettagli"
echo -e "nUso:t$0 chiave_ricercatcerca canale nella lista"
echo -e "t$0 tuttittlista completa dei canali"
echo -e "nlo script non porta con se garanzie di qualsiasi tipo"
echo "quindi se diventa senziente e tiene in ostaggio la vostra famiglia,"
echo "o vi da qualsiasi altro problema, non sono problemi miei."
}
update () {
echo "scarico la lista dei canali...."
rm ${0}.xml &>/dev/null
wget -O ${0}.xml --tries=$tries www.rai.tv/dl/RaiTV/videoWall/PublishingBlock-5566288c-3d21-48dc-b3e2-af7fbe3b2af8.xml &>/dev/null
if [ ! -s ${0}.xml ]; then
echo "Download fallito! controlla la connessione internet e rilancia il programma"
exit 1
fi
grep -B 1 '' ${0}.xml|sed /--/d | sed s/^ *// > ${0}.canali
rm ${0}.xml
sed -i s/';/'/ ${0}.canali
sed -i 's/ù;/ù/' ${0}.canali
sed -i 's/è;/è/' ${0}.canali
sed -i 's/é;/é/' ${0}.canali
COUNTER=0
while read line ; do
array[${COUNTER}]=$line
let COUNTER++
done < ${0}.canali
rm ${0}.canali
COUNTER2=0
let "NUM=$COUNTER/2"
echo -e "Parsing della lista ($NUM stream)..."
while [ $COUNTER2 -le $COUNTER ]; do
let "NUM= $COUNTER2 % 20" #facciamo vedere qualcosa a schermo...
if [ $NUM -eq 0 ]; then
let "NUM=$COUNTER2/2" #ogni 10 stream diciamo a quanti siamo...
echo -n $NUM
else
let "NUM= $COUNTER2 % 2" #facciamo vedere qualcosa a schermo...
if [ $NUM -eq 0 ]; then
echo -n "."
fi
fi
line=${array[${COUNTER2}]}
let COUNTER2++
if [ -z "`echo $line|grep ''`" ]; then
echo -en $line|awk -F '"' '{print $2}' >> ${0}.canali #metti il nome dello stream in cache
else
echo -en $line|awk -F '' '{print $2}'|awk -F '' '{print $1}' >> ${0}.canali #metti l'indirizzo dello stream in cache
echo "==" >> ${0}.canali
fi #può anche essere un link all'indirizzo
done
unset array
echo ""
}
play () {
if [ -n "`echo $STREAM|grep 'mms://'`" ]; then
#ok, siamo stati fortunati....
$player "$STREAM"
else
#uff... tiriamo fuori lo stream da incasinamenti vari....
rm ${0}.tmp &>/dev/null
wget --spider --tries=$tries --timeout=$timeout "$STREAM" 1> /dev/null 2> ${0}.tmp #a volte il link è un file flv.
if [ -n "`tail -n 2 ${0}.tmp|grep 'flv'`" ]; then #che sembra essere solo un video.
rm ${0}.tmp
$player "$STREAM" #che mplayer riproduce tranquillamente.
else
wget -O ${0}.tmp --tries=$tries --timeout=$timeout "$STREAM" &>/dev/null
if [ -z "`grep HREF ${0}.tmp`" ]&&[ -z "`grep 'http://' ${0}.tmp`" ]&&[ -z "`grep 'mms://' ${0}.tmp`" ]; then
#mi è capitato che alcuni link portino nel vuoto
echo "(muove la mano)--Tu *NON* vuoi vedere questo canale"
else
if [ -n "`grep 'mms://' ${0}.tmp`" ]; then
STREAM="`grep 'mms://' ${0}.tmp|awk -F '"' '{print $4}'`"
elif [ -n "`grep wmv ${0}.tmp`" ]; then
STREAM="`grep wmv ${0}.tmp |awk -F '"' '{print $2}'`"
else
STREAM="`grep 'http://' ${0}.tmp`"
if [ -n "`echo $STREAM|grep '"'`" ]; then
STREAM="`echo $STREAM|awk -F '"' '{print $2}'`"
fi
rm ${0}.tmp &>/dev/null
wget --spider --tries=$tries --timeout=$timeout "$STREAM" 1>/dev/null 2>${0}.tmp
if [ -z "`tail -n 2 ${0}.tmp|grep 'flv'`" ]; then #se NON è un flv...
wget -O ${0}.tmp --tries=$tries --timeout=$timeout "$STREAM" &>/dev/null
if [ -n "`grep 'mms://' ${0}.tmp`" ]; then
STREAM="`grep 'mms://' ${0}.tmp |awk -F '"' '{print $2}'`"
elif [ -n "`grep '.flv' ${0}.tmp`" ]; then
STREAM="`cat ${0}.tmp`"
else
STREAM="`grep '.wmv' ${0}.tmp |awk -F '"' '{print $2}'`"
fi
fi
fi
rm ${0}.tmp
$player "$STREAM"
fi
fi
fi
}
if [ -z "$1" ]||[ "$1" == "-h" ]||[ "$1" == "--h" ]||[ "$1" == "-help" ]||[ "$1" == "--help" ]; then
help
exit 0
fi
update
COUNTER=1
#costruiamo la lista delle variabili per il dialog.
#è una lista di elementi, del tipo
#nome1 desciz1 nome2 desc2 ......
rm ${0}.list &>/dev/null
if [ "$1" == "tutti" ]; then
grep -v '==' ${0}.canali|sed s/^/"/|sed s/$/"/ > ${0}.list
else
grep -A 1 -i "$1" ${0}.canali | 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
echo "$line" >> ${0}.list #"# <--ripristino la colorazione per vim...
COUNTER=2
else
#abbiamo greppato l'indirizzo... non ce ne facciamo niente...
COUNTER=0
fi
;;
2 )
echo "$line" >> ${0}.list #"# <--ripristino la colorazione per vim...
COUNTER=1
;;
esac
done
fi
rm ${0}.reply &>/dev/null
dialog --title "Stream disponibili" --menu "scegli lo stream da aprire" 20 70 12 --file ${0}.list 2> ${0}.reply
REPLY="`cat ${0}.reply`"
rm ${0}.reply
clear
if [ "$REPLY" == "" ]; then
echo "Nessuno stream trovato per questa ricerca"
exit 0
fi
STREAM="`grep -A 1 "$REPLY" ${0}.list|tail -n 1|awk -F '"' '{print $2}'`"
rm ${0}.list
play
#################FINE CODICE##########################
"