Repository 32bit  Forum
Repository 64bit  Wiki

Rai.tv senza silverlight: differenze tra le versioni

Da Slacky.eu.
(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.1
+
versione: 0.1.1
<pre>
<pre>
#!/bin/bash
#!/bin/bash
Riga 68: Riga 68:
exit 1
exit 1
fi
fi
grep -B 1 '<url>' ${0}.xml|sed /--/d | sed s/^\ *// > ${0}.canali
+
rm ${0}.tmp &>/dev/null
rm ${0}.xml
+
grep -B 1 '<url>' ${0}.xml|sed /--/d | sed s/^\ *// > ${0}.tmp
sed -i s/\&apos\;/\'/g ${0}.canali
+
rm ${0}.xml &>/dev/null
sed -i 's/\&#224\;/à/g' ${0}.canali
+
sed -i s/\&apos\;/\'/g ${0}.tmp
sed -i 's/\&#225\;/à/g' ${0}.canali
+
sed -i 's/\&#224\;/à/g' ${0}.tmp
sed -i 's/\&#232\;/è/g' ${0}.canali
+
sed -i 's/\&#225\;/à/g' ${0}.tmp
sed -i 's/\&#233\;/é/g' ${0}.canali
+
sed -i 's/\&#232\;/è/g' ${0}.tmp
sed -i 's/\&#236\;/ì/g' ${0}.canali
+
sed -i 's/\&#233\;/é/g' ${0}.tmp
sed -i 's/\&#237\;/ì/g' ${0}.canali
+
sed -i 's/\&#236\;/ì/g' ${0}.tmp
sed -i 's/\&#242\;/ò/g' ${0}.canali
+
sed -i 's/\&#237\;/ì/g' ${0}.tmp
sed -i 's/\&#242\;/ò/g' ${0}.canali
+
sed -i 's/\&#242\;/ò/g' ${0}.tmp
sed -i 's/\&#249\;/ù/g' ${0}.canali
+
sed -i 's/\&#242\;/ò/g' ${0}.tmp
sed -i s/\&amp\;/\\\&/g ${0}.canali
+
sed -i 's/\&#249\;/ù/g' ${0}.tmp
+
sed -i s/\&amp\;/\\\&/g ${0}.tmp
COUNTER=0
COUNTER=0
  +
rm ${0}.canali &>/dev/null
while read line ; do
while read line ; do
array[${COUNTER}]=$line
+
let "NUM=$COUNTER % 2"
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
if [ $NUM -eq 0 ]; then
let "NUM=$COUNTER2/2" #ogni 10 stream diciamo a quanti siamo...
+
let "NUM=$COUNTER % 20" #facciamo vedere qualcosa a schermo...
echo -n $NUM
 
else
 
let "NUM= $COUNTER2 % 2" #facciamo vedere qualcosa a schermo...
 
if [ $NUM -eq 0 ]; then
if [ $NUM -eq 0 ]; then
  +
let "NUM=$COUNTER/2" #ogni 10 stream diciamo a quanti siamo...
  +
echo -n $NUM
  +
else
echo -n "."
echo -n "."
fi
fi
fi
 
line=${array[${COUNTER2}]}
 
let COUNTER2++
 
if [ -z "`echo $line|grep '<url>'`" ]; then
 
echo -en $line|awk -F '"' '{print $2}' >> ${0}.canali #metti il nome dello stream in cache
echo -en $line|awk -F '"' '{print $2}' >> ${0}.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}' >> ${0}.canali #metti l'indirizzo dello stream in cache
echo "==" >> ${0}.canali
echo "==" >> ${0}.canali
fi #può anche essere un link all'indirizzo
+
fi
done
+
let COUNTER++
unset array
+
done < ${0}.tmp
echo ""
echo ""
  +
rm ${0}.tmp &>/dev/null
}
}
play () {
play () {

Versione delle 12:33, 18 feb 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.1.1

#!/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="gmplayer"	#nome del player video.

############ PROGRAMMA REALE ################
############ NON MODIFICARE! ################
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 "$NOTFOUND" ]; then
	echo "Comandi non trovati:"
	echo $NOTFOUND
	exit 1
fi
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
help () {
	echo "Script per la visualizzazione dei canali presenti su rai.tv"
	echo "senza il plugin Silverlight di Microsoft"
	echo "Creato da Luke88 -- luke88 _at_ slacky.it"
	echo "Scrivetemi pure per dettagli"
	echo -e "\nUso:\t$0 chiave_ricerca\tcerca canale nella lista"
	echo -e "\t$0 tutti\t\tlista completa dei canali"
	echo "Per cambiare il player video basta cambiare la variabile \"player\""
	echo "in questo script."
	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
	rm ${0}.tmp &>/dev/null
	grep -B 1 '<url>' ${0}.xml|sed /--/d | sed s/^\ *// > ${0}.tmp
	rm ${0}.xml &>/dev/null
	sed -i s/\&apos\;/\'/g ${0}.tmp
	sed -i 's/\&#224\;/à/g' ${0}.tmp
	sed -i 's/\&#225\;/à/g' ${0}.tmp
	sed -i 's/\&#232\;/è/g' ${0}.tmp
	sed -i 's/\&#233\;/é/g' ${0}.tmp
	sed -i 's/\&#236\;/ì/g' ${0}.tmp
	sed -i 's/\&#237\;/ì/g' ${0}.tmp
	sed -i 's/\&#242\;/ò/g' ${0}.tmp
	sed -i 's/\&#242\;/ò/g' ${0}.tmp
	sed -i 's/\&#249\;/ù/g' ${0}.tmp
	sed -i s/\&amp\;/\\\&/g ${0}.tmp
	COUNTER=0
	rm ${0}.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}' >> ${0}.canali					#metti il nome dello stream in cache
		else
			echo -en $line|awk -F '<url>' '{print $2}'|awk -F '</url>' '{print $1}' >> ${0}.canali	#metti l'indirizzo dello stream in cache
			echo "==" >> ${0}.canali
		fi
		let COUNTER++
	done < ${0}.tmp
	echo ""
	rm ${0}.tmp &>/dev/null
}
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"
		else
			rm ${0}.tmp
			wget -O ${0}.tmp --tries=$tries --timeout=$timeout "$STREAM" &>/dev/null
			if [ -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 [ "$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 ${0}.list &>/dev/null
if [ "$1" == "tutti" ]||[ -z "$1" ]; then
	grep -v '==' ${0}.canali | \
	while read line; do
		case "$COUNTER" in
			1 )
				echo \"$line\" >> ${0}.list		#"# <--ripristino la colorazione per vim...
				COUNTER=2
				;;
			2)
				echo -e \"\""\n"\"$line\" >> ${0}.list	#"# <--ripristino la colorazione per vim...
				COUNTER=1
				;;
		esac
	done
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 \"\" >> ${0}.list				#"#
				echo \"$line\" >> ${0}.list			#"# <--ripristino la colorazione per vim...
				COUNTER=1
				;;
		esac
	done
fi
if [ ! -s ${0}.list ]; then
	echo "Canale non trovato..."
	exit 0
fi
rm ${0}.reply &>/dev/null
REPLY=""
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
	REPLY="`tail -n 1 ${0}.reply`"
	rm ${0}.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" ${0}.list|head -n 1`"
		dialog --title "$NAME" --msgbox "Lo stream è all'indirizzo:\n$REPLY" 20 70
		REPLY=""
	elif [ -z "$REPLY" ]; then
		rm ${0}.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" ${0}.list|tail -n 1|awk -F '"' '{print $2}'`"
rm ${0}.list &>/dev/null
play
Strumenti personali
Namespace

Varianti