Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#401 Le 15/06/2008, à 10:31

redisded

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Ras' a écrit :

EDIT : ahhhh
J'ai peut être trouvé pourquoi

je verrais ça plus tard wink

Lol bah dis nous au moins tu va pas me laisser dans mon ignorance wink

Hors ligne

#402 Le 15/06/2008, à 10:41

Ras'

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

en fait j'ai eu un problème à un moment avec la suppression de fichier.

En gros dans la fonction convert j'avais mis ça :
echo $! > "PID/`basename "$VIDEO"`.pid"
echo "$REP/Canal+/$source" >> "PID/`basename "$VIDEO"`.pid"

et à la fin de la fonction émissions j'avais mis :
    proc=$( ls -rt | grep ".pid" | head -1 )
    video_source=$( cat $proc | tail -1 )
    rm -f $video_source
    rm -f $proc

$proc était supprimé mais pas $video_source
J'ai compris la différence entre les deux mais comme je suis une quiche en explication je suis pas sur d'arriver à l'expliquer... en gros $proc c'est vraiment le fichier qu'il est allé chercher dans ls alors que $video_source c'est le nom de la vidéo, il à juste remplacé $video_source par sa valeur (/home/ras/video/prout/bla.flv)

Du coup il l'associe pas à un fichier, alors que si je fais :
find "$video_source" -exec rm -f '{}' \;
Ca marche, parce que le résultat de find c'est LE FICHIER qui à pour nom la chaine de caractère $video_source

(j'espère que c'est clair et surtout que je fais pas d'erreur)



Et à mon avis c'est un peu pareil pour le pid.
Dans ma méthode je stock le nom du pid dans un fichier texte, donc si je fais wait $( cat $proc ) c'est pas pareil que si je faisais wait $( ps -A | grep `cat $proc` )

Enfin, a mon humble avis, j'ai pas encore testé...


Je te confirme ça tout à l'heure smile


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#403 Le 15/06/2008, à 10:46

redisded

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

oki merci de prendre le temp d'expliquer, c'est cool wink
(Et c'est clair je pense avoir compris et ca me semble plausible wink )

Hors ligne

#404 Le 15/06/2008, à 12:23

Ras'

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Bon ce post servira à updater les mises à jour de la version beta, vu que certains regardent le script avec attention, ça leur permettra de suivre et éventuellement de m'aider wink
Comme ça j'édite ce post sans reposter à chaque fois pour 3 broutilles
Je teste pas les betas avant la RC vu que normalement je fais pas de grosse grosse modif wink

beta 1 :
_Je n'ai que remis dans un ordre logique le script, j'ai mis les fonctions au début, le reste à la fin.
_J'ai mis à jour la fonction cron par la même occasion ( et changé sa disposition à ma manière, dis moi si ça ne te convient pas beudbeud (j'ai corrigé une ou deux fautes aussi ^^))
_J'ai remis tout le script en mode à peu près lisible, avec explication de chaque fonction, séparation des fonctions par des ### et tabulation pour les if while and co
_J'ai mis la conversion à la fin


#!/bin/bash                                                                                                                                                   
#                                                                                                                                                             
# But: Telecharger des videos de canalplus.fr et les mettre dans une playlist                                                                                         
# Auteur : Ras' 
# Dépendances : Zenity, wget
# Licence : Ce script est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier 
# selon les termes de la Licence Publique Générale GNU ( GNU GPL ) publiée par la Free Software 
# Foundation.
#
# Merci à beudbeud pour l'implémentation de la fonction d'automatisation via cron
#

version=v1.304
todo="
Ajouter une icône (voir une barre de progression) dans la zone de notification


N'hésitez pas à proposer les votres sur le forum :
http://forum.ubuntu-fr.org/viewtopic.php?id=200149
"




############################################## Function Display ##############################################
# Fonction qui permet l'affichage via zenity ou bien dans le terminal avec utilisation de couleurs et styles
color()
{
printf '\033[%sm%s\033[m\n' "$@"
}

function display
{
titre="$1"
texte="$2"
type="$3"
if ( grep -q GTK "$parent_dir"/.canal_config )
then
	if [[ "$type" == "--progression" ]]
	then echo "$titre $texte"
	else zenity $type --title="$titre" --text="$texte" 
	fi
else
	echo `color 1 "$titre"`
	echo `color 34 "$texte"`
fi
}
##############################################################################################################




############################################### Dossier source ###############################################
# Définition de $parent_dir, dossier ou le script et le fichier .canal_config sont enregistrés
parent_dir=$( dirname "$0" )
if [[ "$parent_dir" == "." ]]
then
parent_dir=$( pwd )
fi
##############################################################################################################




########################################## Function Mise à jour auto ##########################################
# Mise à jour automatique du script si la version présente sur le net n'est pas la même que celle ci
# Vérification de la connection internet par la même occasion
function maj_auto
{
cd /tmp
rm -f canal*
wget "http://ibidems.free.fr/ras/script/canal" &>/dev/null
if ! [[ -f canal ]]
then 
	display "Fin du script" "Veuillez vérifier votre connection internet et relancer le script." "--warning"
	exit 0
fi

new=$( cat canal | grep "version=[v]" | cut -f2 -d "=" )
wget "http://ibidems.free.fr/ras/script/$new.txt" &>/dev/null

if ! [[ "$new" = "$version" ]]
then
	text="La version $new est disponible, voici la liste des nouveautées :
$(cat $new.txt)

Voulez vous installer cette version ?"
	if ( grep -q GTK "$parent_dir"/.canal_config )
	then 
		display "Mise à jour" "$text" "--info"
		if [[ $? == "0" ]]
		then maj="1"
		fi

		if [[ $? == "1" ]]
		then
			zenity --warning --title="Fin du script" --text="Le script à été arreté"
			exit 0
		fi
	else
		echo "$text"
		read -p "(Tapez 1 pour valider)" maj
	fi

	if [[ $maj == "1" ]]
	then
		echo "Mise à jour du script en cours..."
		set --
		rm -f "$parent_dir"/canal
		cp canal "$parent_dir"/
		chmod +x "$parent_dir"/canal
		rm -f canal*
		text="Une mise à jour a été effectuée vers la version $new
Merci de bien vouloir relancer le script."
		display "Mise à jour" "$text" "--info"
		exit 0
	fi
fi
cd "$parent_dir"/
}
###############################################################################################################





####################################################### Help ##################################################
# Fonction --help
function _help
{
help="Télécharger les quotidiennes (ou pas) de Canal+
Créé par Ras'

Usage : ./canal [ARGUMENT]

Arguments disponibles :
-m, --menu     Ouvre un menu permettant de choisir 
               parmis les options suivantes

-c, --config   Configurer le script
               Lors de la première exécution, le script
               se lance automatiquement en configuration

-d, --date     Ouvre un calendrier Zenity
               Permet l'utilisation du script graphiquement

-a, --alacarte Permet exeptionnellement de télécharger
               des émissions différentes des habituelles
               (sans changer la configuration)

-l, --lanceur  Permet de rajouter une icône de lancement 
               dans le menu \"Applications > Son et Video\"

-cr, --cron    Permet l'ajout du tâche planifié

-b, --bug      Ouvre Firefox à l'adresse : 
               http://forum.ubuntu-fr.org/viewtopic.php?id=200149
               Topic du forum ubuntu-fr.org permettant de 
               rapporter un bug

-h, --help     Affiche cette aide et quitte

-?, --about    Affiche les informations sur le script

"
display "Menu Help" "$help" "--info"
exit 0
}
###############################################################################################################




################################################# Menu Son et Vidéo ############################################
# Ajout d'une entrée dans le menu Applications > Son et vidéo
function _lanceur
{
if ! [[ -f logo64x64.svg ]]
then wget -q http://ibidems.free.fr/ras/script/logo64x64.svg
fi
echo "[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Canal
GenericName=Canal
Comment=Script permettant de télécharger les quotidiennes du site de Canal+ 
Icon=$parent_dir/logo64x64.svg
Exec=$parent_dir/canal --menu
Terminal=false
StartupNotify=false
Categories=Application;AudioVideo" > canal.desktop

text="Le Script à besoin de votre mot de passe utilisateur pour créer l'entrée du menu 'Applications > Son et videos'.
Ce mot de passe ne sera évidemment pas sauvegardé ni utilisé ultérieurement par le script."
display "Droits root nécessaire" "$text" "--warning"

if ( grep -q GTK "$parent_dir"/.canal_config )
then gksudo 'mv -f canal.desktop /usr/share/applications/'
else sudo 'mv -f canal.desktop /usr/share/applications/'
fi

text="Une entrée 'Canal' à été ajouté au menu 'Applications > Son et videos'.

Merci de bien vouloir relancer le script."
display "Menu ajouté" "$text" "--info"

sudo -k
exit 0
}
################################################################################################################



################################################### Configuration ##############################################
##############################################
# Externalisation des fonctions "choix des émissions" et "true/false" de la configuration pour pouvoir fonctionner avec l'option "alacarte"
# true_false : Fonction permettant d'afficher par défaut les options de l'ancien fichier de config
function true_false
{
	if ( grep -q $1 .canal_config.bak &>/dev/null )
	then echo "TRUE"
	else echo "FALSE"
	fi
}


# choix_emissions : fonction écrivant une abreviation du nom des émissions choisies dans le fichier .canal_config
function choix_emissions
{
zenity --list --checklist --height=580 --width=400\
    --title="Configuration en cours... 4/7" \
    --text="Choix des émissions à télécharger"\
    --column="" --column="" --column="Emissions" \
    --hide-column=2 \
    --separator=" " \
    `true_false ZAP` ZAP "Le zapping"\
    `true_false PJA` PJA "Le petit journal actu de Yann Barthès"\
    `true_false GUI` GUI "Les guignols de l'info"\
    `true_false MET` MET "La météo de Louise Bourguoin"\
    `true_false PJP` PJP "Le petit journal people de Yann Barthès"\
    `true_false TOP` TOP "Le Top 5 de Thomas Nguijol"\
    `true_false SAV` SAV "Le service après vente d'Omar et Fred"\
    `true_false BAQ` BAQ "La boite à questions"\
    `true_false RDP` RDP "La revue de presse de Chris Esquerre"\
    `true_false STO` STO "La chronique de Sebastien Tohen"\
    `true_false ADM` ADM "L'avis de Mouloud"\
    `true_false DSH` DSH "Le daily show"\
    `true_false SGU` SGU "La chronique de Stephane Guillon"\
    `true_false IDB` IDB "Les infos de Blakowski" \
    `true_false CDA` CDA "Le champion de l'actu"\
    `true_false GRO` GRO "Le Groland"\
    `true_false TAC` TAC "Les têtes à claques"\
    `true_false PEP` PEP "Les Pépites du net" \
    `true_false MDH` MDH "Le meilleur du hier (semaine courante)" >> $1
}
##############################################




##############################################
# Début de la configuration, le script est arrêté à la fin de la création du fichier .canal_config
function _config
{
cp .canal_config .canal_config.bak &>/dev/null
rm -f .canal_config
echo "Configuration en cours..."


##############################################
# Vérification de la présence de zenity, installation si nécessaire
if [ !  `which zenity` ]
then echo "Zenity n'est pas installé, merci de l'installer pour assurer le bon fonctionnement du script :

Ouvrez un terminal et tapez : sudo apt-get install zenity
Puis relancez le script.
Merci."
exit 0
fi


##############################################
# Choix du répertoire de téléchargement parent, un sous répertoire Canal+ est ensuite créé
zenity --info --title="Configuration en cours... 1/7" --text="Choisir un répertoire pour le téléchargement des émissions
( un sous répertoire \"Canal+/\" y sera automatiquement créé )"
REP=$(zenity --title="Choisir un répertoire pour le télécharchement des émissions" --file-selection --directory)
echo "$REP" > .canal_config


##############################################
# Choix du lecteur vidéo : vlc, totem ou mplayer
zenity --list --list --radiolist --height=210 --width=200 \
    --title="Configuration en cours... 2/7" \
    --text="Choix du lecteur de vidéos"\
    --column="" --column="" --column="mode" \
    --hide-column=2 \
    --separator=" " \
    `true_false vlc` vlc "vlc media player"\
    `true_false mplayer` mplayer "mplayer movie player"\
    `true_false totem` totem "totem" >> .canal_config


##############################################
# Choix du mode de fonctionnement : quotidien, historique par date ou historique par émission
zenity --list --list --radiolist --height=210 --width=840 \
    --title="Configuration en cours... 3/7" \
    --text="Choix du mode de fonctionnement"\
    --column="" --column="" --column="mode" \
    --hide-column=2 \
    --separator=" " \
    `true_false QUO` QUO "Quotidien : les anciennes vidéos sont supprimées et remplacées par les nouvelles"\
    `true_false HIS` HIS "Historique : un dossier est créé pour chaque jour de diffusion, les anciennes vidéos ne sont pas supprimées"\
    `true_false HEM` HEM "Historique : un dossier est créé pour chaque émission, les anciennes vidéos ne sont pas supprimées" >> .canal_config


##############################################
# Choix des émissions à télécharger, utilisation de la fonction choix_emissions
choix_emissions ".canal_config"


##############################################
# Choix de la qualité des vidéos : high ou low
zenity --list --list --radiolist --height=190 --width=650 \
    --title="Configuration en cours... 5/7" \
    --text="Choix de la qualité de lecture des vidéos"\
    --column="" --column="" --column="mode" \
    --hide-column=2 \
    --separator=" " \
    `true_false HIGH` HIGH "High : Optimisation de la qualité d'image, vidéos plus lourde "\
    `true_false LOW` LOW "Low : Optimisation de la vitesse de téléchargement, qualité d'image moins bonne" >> .canal_config


##############################################
# Choix d'un mode de conversion vidéo, conversion des vidéos dans différents formats (lisibles par différents lecteur mp3/vidéo)
choix=$( zenity --list --list --radiolist --height=330 --width=575\
    --title="Configuration en cours... 6/7" \
    --text="Le script permet de convertir les vidéos dans d'autres format que l'original (.flv)
Cliquez sur 'annuler' si vous ne désirez pas convertir les vidéos"\
    --column="" --column="" --column="Format de conversion" \
    --hide-column=2 \
    --separator=" " \
    `true_false AVI` AVI "Convertir les vidéos au format .avi"\
    `true_false MKV` MKV "Convertir les vidéos au format .mkv"\
    `true_false IPOD` IPOD "Convertir les vidéos en un format lisible par un iPod"\
    `true_false ARCHOS` ARCHOS "Convertir les vidéos en un format lisible par un Archos / Creative Zen"\
    `true_false IRIVER` IRIVER "Convertir les vidéos en un format lisible par un iRiver"\
    `true_false MEIZU` MEIZU "Convertir les vidéos en un format lisible par un Meizu"\
    `true_false PSP` PSP "Convertir les vidéos en un format lisible par une PSP "\ )
if ! [[ $? == "0" ]] || [[ -z $choix ]]
then zenity --info --title="Configuration en cours... 6/7" --text="Les vidéos ne seront pas converties"
else 
echo "CONVERT=$choix" >> .canal_config
zenity --info --title="Configuration en cours... 6/7" --text="Certaines dépendances sont nécessaire pour effectuer cette conversion. Merci de bien vouloir les installer. Ouvrez un terminal et entrez les commandes suivantes :

Pour les iPod et PSP
sudo apt-get install ffmpeg faac libfaac0

Pour le mkv
sudo apt-get install ffmpeg ffmpeg2theora

Pour les autres
sudo apt get install mencoder


Si le script ne télécharge pas de vidéos, reconfigurez le pour enlever la conversion et venez me faire part de votre problème sur le forum à l'adresse : http://forum.ubuntu-fr.org/viewtopic.php?id=200149
(ou option bug du menu)"
fi


##############################################
# Choix du mode d'utilisation graphique ou console, en graphique, Zenity affiche des barres de progression
zenity --question --title="Configuration en cours... 7/7" --width=700 --text="Voulez vous utiliser l'interface graphique ?



En cliquant sur valider, le script affichera une barre de progression GTK+ lors du téléchargement des émissions.

Sinon le script sera silencieux jusqu'à la fin des téléchargements (les détails seront néanmoins disponibles en console)"
if [[ $? == "0" ]]
then echo "GTK" >> .canal_config
fi

##############################################
# Inscription de la version du script dans le fichier de config
echo "version=$version" >> .canal_config 

##############################################
#Fin de la configuration, le script est arreté
rm -f .canal_config.bak
echo "Configuration terminée"
exit 0
}
################################################################################################################




########################################## Planification de tache via cron #####################################
# Ajout d'une entrée dans crontab
annuler ()
{
if [ $? = 1 ]; then
exit 0
fi
}

function _cron
{
grep -q CRON .canal_config >> /dev/null 2>&1
if (test $? -eq 1); then
for days in `seq 1 7`;
do
var[days]="TRUE"
done
fi

if ( grep -q CRON "$parent_dir"/.canal_config )
then
	zenity --question --text="Une tâche est déjà planifiée. Voulez-vous la supprimer ou la modifier ? 

( 'Valider' pour la supprimer ; 'Annuler' pour la modifier )"
	if [ $? = 0 ]
	then 
	        crontab -l >> tempcrontab
	        sed -i '/canal/d' tempcrontab
	        crontab tempcrontab
	        rm tempcrontab
	        sed -i '/CRON/d' "$parent_dir"/.canal_config
		zenity --info --text="Tâche supprimée"
        	exit
        	annuler
	else 
		crontab -l | grep canal | awk -F'*' '{print $3}' >> tempcrontab
		for days in `seq 1 7`;
		do
			if ( grep -q $days tempcrontab )
			then var[days]="TRUE"
			else var[days]="FALSE"
			fi
		done
		rm tempcrontab
		annuler
	fi
fi

crontab -l | grep DISPLAY >> /dev/null 2>&1
if  (test $? -eq  1 );
then echo 'DISPLAY=":0.0"' > tempcrontab
fi
crontab -l >> tempcrontab
sed -i '/canal/d' tempcrontab

JOURS=$(zenity --list --checklist --width=500 --height=447 \
        --title "Sélectionner les jours" \
        --text="Veuillez sélectionnez les jours :" \
    --separator="," \
    --hide-column=2 \
    --column="choix" --column="N° jour" --column="jours" \
    ${var[1]}  "1" "lundi" \
    ${var[2]}  "2" "mardi" \
    ${var[3]}  "3" "mercredi" \
    ${var[4]}  "4" "jeudi" \
    ${var[5]}  "5" "vendredi" \
    ${var[6]}  "6" "samedi" \
    ${var[7]}  "7" "dimanche" \ )
annuler
      

crontab -l | grep canal >> /dev/null 2>&1
if (test $? -eq 0)
then 
	HH=`crontab -l | grep canal | awk -F' ' '{print $2}'`
	MM=`crontab -l | grep canal | awk -F' ' '{print $1}'`
else 
	HH=hh
	MM=mm
fi


CHHEURE=$( zenity --entry \
  --title="Heure" \
  --text="Saisissez l'heure du lancement 
 exemple : 20H00" \
  --entry-text "$HH"H"$MM" )
annuler

HEURE=`echo $CHHEURE | awk -F"H" '{print $1}'`
MIN=`echo $CHHEURE | awk -F"H" '{print $2}'`


echo "$MIN $HEURE * * $JOURS $parent_dir/canal" '#canal quotidienne' >> tempcrontab #canal quotidienne
crontab tempcrontab
zenity --text-info --filename=tempcrontab --width=500
rm tempcrontab
sed -i '/CRON/d' "$parent_dir"/.canal_config
echo CRON >> .canal_config
exit
}
################################################################################################################




################################################## Rapport de bug ##############################################
# Fonction --bug ouvre Fx sur la page du forum
function _bug
{
text="Le script va ouvrir Firefox à l'adresse 

http://forum.ubuntu-fr.org/viewtopic.php?id=200149

Veuillez y poster un descriptif clair de votre problème."
display "Rapport de bug" "$text" "--info"
firefox "http://forum.ubuntu-fr.org/viewtopic.php?id=200149"
exit 0
}
################################################################################################################




####################################################### About ###################################################
# Fonction --about
function _about
{
text="Créateur : Ras'
Version : $version
License : Ce programme est diffusée selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation.
Vous êtes libre de l'utiliser, le modifier et le redistribuer selon les termes de la license GNU GPL

Todo list : $todo
"
display "Script Canal" "$text" "--info"
exit 0
}
#################################################################################################################




####################################################### Copie ###################################################
# Fonction qui regroupe les vidéos dans des dossier à leur nom (pour le mode historique par émission)
function copie
{
	mkdir -p "$1"	
	mv -f "$VIDEO" "$1"
	if ! [[ -z $VIDEO ]]
	then
	VIDEO="$1/$VIDEO"
	fi
}
#################################################################################################################




#################################################### Conversion #################################################
# Fonction qui converti les vidéos aux formats avi, mkv, ogm, ipod, archos, iriver, meizu ou psp
function convert
{
mkdir -p PID
source="$1"
# Creation du nom pour le fichier vidéo de sortie
if [[ "$format" == "AVI" ]] || [[ "$format" == "ARCHOS" ]] || [[ "$format" == "MEIZU" ]] ; then VIDEO="$( echo $VIDEO | sed -e 's/\.flv$/\.avi/' )"
elif [[ "$format" == "MKV" ]] ; then VIDEO="$( echo $VIDEO | sed -e 's/.flv$/.mkv/' )"
else VIDEO="$( echo $VIDEO | sed -e 's/.flv$/.mp4/' )"
fi

case "$format" in
	AVI)
		mencoder "$source" -ovc xvid -xvidencopts fixed_quant=3 -oac mp3lame -lameopts cbr:preset=128 -o "$VIDEO" 2>/dev/null &
		;;
	MKV)
		mencoder "$source" -ovc xvid -xvidencopts fixed_quant=3 -oac mp3lame -lameopts cbr:preset=128 -o "$VIDEO" 2>/dev/null &
		;;
	IPOD)
		ffmpeg -y -i "$source" -vcodec mpeg4 -b 717000 -s 480x320 -aspect 16:9 -f mp4 -acodec aac "$VIDEO" 2>/dev/null &
		;;
	ARCHOS)
		mencoder "$source" -ovc xvid -xvidencopts fixed_quant=3 -vf scale=320:-2 -oac mp3lame -lameopts cbr:preset=128 -af volume=+5 -o "$VIDEO" 2>/dev/null &
		;;
	IRIVER)
		mencoder "$source" -ofps 15.000 -vf-add crop=0:0:-1:-1  -vf-add scale=320:240 -vf-add expand=320:240:-1:-1:1 -srate 44100 -ovc xvid -xvidencopts bitrate=380 -oac mp3lame -lameopts vbr=0  -lameopts br=128 -lameopts vol=0 -lameopts mode=0 -lameopts aq=7 -lameopts padding=3 -af volnorm -xvidencopts max_bframes=0:nogmc:noqpel -mc 0 -o "$VIDEO" 2>/dev/null &
		;;
	MEIZU)
		mencoder "$source" -idx -noodml -ofps 20 -vf scale=320:-2,expand=:240:::1,crop=320:240,rotate=1 -ovc lavc -ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -srate 44100 -oac mp3lame -lameopts cbr:br=128:mode=0 -o "$VIDEO" 2>/dev/null &
		;;
	PSP)
		ffmpeg -y -i "$source" -title "$VIDEO" -vcodec h264 -level 13 -g 250 -s 368x208 -r 29.97 -b 768 -acodec aac -ac 2 -ar 48000 -ab 128 "$VIDEO" 2>/dev/null &
		;;
esac
echo $! > "PID/`basename "$VIDEO"`.pid"
echo "$REP/Canal+/$source" >> "PID/`basename "$VIDEO"`.pid"
}
#################################################################################################################




###################################################### Get http #################################################
# fonction qui récupère le code source de la page contenant la vidéo dans un fichier ".menu_src_code"
function get_http
{
	wget -q --save-cookies cookie.txt --keep-session-cookies $1 -O .menu_src_code 
	rm -f .menu_src_code 
	wget -q --load-cookies cookie.txt --keep-session-cookies $1 -O .menu_src_code
	rm -f cookie.txt	
}
#################################################################################################################




###################################################### Get video ################################################
# Fonction qui récupère l'url de la page de téléchargement de la vidéo dans le fichier ".video_src_code", récupère ensuite l'url direct de la vidéo, puis la télécharge
function get_video
{
# Récupération de l'url de la page de téléhargement de la vidéo
	if [[ -z $2 ]]
	then
		aVideos=$( cat .menu_src_code | grep "$date"  | cut -f2 -d [ | cut -f1 -d ] ) # Majorité des émissions 
		if ! [[ -z $aVideos ]]
		then video_id=$( cat .menu_src_code | grep "aVideos\[$aVideos\]" | grep "CONTENT_ID" | cut -f2 -d '"' | head -n 1 )
		fi
	else video_id=$( cat .menu_src_code | grep "$date" | grep chooseVideo | cut -f2 -d "'" | head -n 1 ) # Pepites sur le net, têtes à claques et meilleur du hier
	fi

# Si video_id manque c'est que l'émission n'a pas été diffusée
	if [ -z "$video_id" ]
	then
		i=$(( $i + 100/$n ))
		echo "$i % : L'émission '$1' n'a pu être téléchargée"
		echo "_$1" >> "$parent_dir"/.canal_log
# Si video_id existe, l'url direct de la video est trouvé sur la page et la vidéo est téléchargée
	else
		page="http://www.canalplus.fr/flash/xml/module/embed-video-player/embed-video-player.php?video_id=$video_id"
		wget -q -O .video_src_code "$page"
		url=$( cat .video_src_code | grep -o "http://[^ ]*$quality.flv" )
		wget $url
		i=$(( $i + 100/$n ))
		display "$i % : Fin du téléchargement de l'émission :" "$1" "--progression"
		VIDEO=$( echo $url | cut -c 31- | cut -f2 -d "/" )
	fi
	set --
}
#################################################################################################################




##################################################### Download ##################################################
# Fonction de téléchargement des émissions, lance le téléchargement de la fonctione de téléchargement de page puis de celle de téléchargement de la vidéo
# Copie puis converti les vidéos si nécessaire. Ajoute enfin la vidéo dans la playlist 
function download
{
	get_http "$1"
	get_video "$2" "$3"
	if ! [[ -z $VIDEO ]]
	then
		if [[ $mode == "HEM" ]]
		then copie "$2"
		fi
		if ( grep -q "CONVERT" "$parent_dir"/.canal_config )
		then convert "$VIDEO"
		fi
	echo `pwd`"/$VIDEO" >> $yy-$mm-$dd"-playlist.m3u"
	fi
	unset VIDEO
	unset video_id
	unset aVideos
	rm -f .menu_src_code
	rm -f .video_src_code
}
#################################################################################################################




####################################################### Check ###################################################
# Fonction qui vérifie dans le fichier de config si la vidéo doit être téléchargée ou non, puis apelle la fonction download si nécessaire
##############################################
# Pour La majorité des émissions qui fonctionnent en date : dd/mm/yy
function check
{
if [[ $alacarte == "yes" ]]
then if ( grep -q $1 .alacarte )
     then download "$2" "$3" "$4"
     fi
else
     if ( grep -q $1 "$parent_dir"/.canal_config )
     then download "$2" "$3" "$4"
     fi
fi
}

##############################################
# Pour "le meilleur du hier" qui fonctionne avec des jours (en lettre)
function check_2
{
day=$( date +%A -d $date_us )
date=$( echo $day | tr 'a-z' 'A-Z' )
	if [[ $date == "SAMEDI" ]] || [[ $date == "DIMANCHE" ]]
	then date="WEEK-END"
	fi
	if [[ $alacarte == "yes" ]] ; then
		if ( grep -q $1 .alacarte )
		then download "$2" "$3" "$4"
		fi
	else
		if ( grep -q $1 "$parent_dir"/.canal_config )
		then download "$2" "$3" "$4"
		fi
	fi
date="$dd/$mm/$yy"
}
#################################################################################################################




##################################################### Emissions #################################################
# Appel de la fonction de téléchargement adaptée pour chaque émission
function emissions
{
# Zapping
nom="le zapping"
url="http://www.canalplus.fr/index.php?pid=1830"
check ZAP "$url" "$nom"

# Petit Journal Actu
nom="le petit journal actu"
url="http://www.canalplus.fr/c-humour/pid2397-c-le-petit-journal.html?catId=608"
check PJA "$url" "$nom"

# Guignols
nom="les guignols de l'info"
url="http://www.canalplus.fr/index.php?pid=1784"
check GUI "$url" "$nom"

# Météo
nom="la météo de Louise Bourguoin"
url="http://www.canalplus.fr/index.php?pid=2028"
check MET "$url" "$nom"

# Petit Journal People
nom="le petit journal people"
url="http://www.canalplus.fr/c-humour/pid2397-c-le-petit-journal.html?catId=613"
check PJP "$url" "$nom"

# Top 5
nom="le top 5 de Thomas Ngijol"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=1282"
check TOP "$url" "$nom"

# SAV des emissions
nom="le Service Après Vente des émissions"
url="http://www.canalplus.fr/index.php?pid=1782"
check SAV "$url" "$nom"

# Boite à questions
nom="la boite à questions"
url="http://www.canalplus.fr/index.php?pid=1786"
check BAQ "$url" "$nom"

# Revue de presse
nom="la revue de presse de Chris Esquerre"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=2582"
check RDP "$url" "$nom"

# Sebastien Tohen
nom="la chronique de Sebastien Tohen"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=2584"
check STO "$url" "$nom"

# L'avis de Mouloud
nom="l'avis de Mouloud"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=622"
check ADM "$url" "$nom"

# Le daily show
nom="le daily show"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=722"
check DSH "$url" "$nom"

# La chronique de Stephane Guillon
nom="la chronique de Stephane Guillon"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=682"
check SGU "$url" "$nom"

#Blakowski
nom="Les infos de blako"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=684"
check IDB "$url" "$nom"

#Le champion de l'actu
nom="Le champion de l'actu"
url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=688"
check CDA "$url" "$nom"

# Groland
nom="le Groland"
url="http://www.canalplus.fr/index.php?pid=1787"
check GRO "$url" "$nom"

# Tetes à claques
nom="les têtes à claques"
url="http://www.canalplus.fr/index.php?pid=2170"
check TAC "$url" "$nom" 42

# Pépites sur le net
nom="les pépites du net"
url="http://www.canalplus.fr/index.php?pid=1778"
check PEP "$url" "$nom" 42

# Le meilleur du hier
nom="le meilleur du hier"
url="http://www.canalplus.fr/index.php?pid=1831"
check_2 MDH "$url" "$nom" 42

if ( grep -q "CONVERT" "$parent_dir"/.canal_config )
then
	cd PID/
	( while ( ls | grep ".pid" )
	do
	proc=$( ls -rt | grep ".pid" | head -1 )
		while ! ( top -n 1 | grep `cat $proc | head -1` )
		do sleep 2
		done
	video_source=$( cat $proc | tail -1 )
	find "$video_source" -exec rm -f '{}' \;
	rm -f $proc
	done ) | zenity --progress --title="Conversion" --text="Conversion des vidéos en cours..." --auto-close --pulsate
	cd ..
	rmdir PID/
fi
}
#################################################################################################################








################################################## Début du script ##############################################




#############################################
# Creation du fichier log et définition du dossier parent (ou est rangé le script)
touch .canal_log
clear


##############################################
# Lancement de la vérification de mise à jour éventuelle
maj_auto


##############################################
# Lancement automatique du script en mode config si la version du fichier .canal_config n'est pas la même que celle du script
canal_config_version=$( cat .canal_config | grep "version=[v]" | cut -f2 -d "=" | cut -c 1-4 )
if ! [[ `echo "$version" | cut -c 1-4` = $canal_config_version ]]
then
text="Votre fichier de configuration n'existe pas ou ne correspond pas à la version actuelle du script.
Lancement du script en mode configuration.

Si vous faites fonctionner le script en mode console et que Zenity n'est pas installé, merci de créer votre fichier de config.
Pour celà, inspirez vous de l'explication ici : http://forum.ubuntu-fr.org/viewtopic.php?pid=1762893#p1762893"
display "Fichier de configuration erroné" "$text" "--error"
_config
fi






################################################### Menu Principal ##############################################
# Choix via une fenetre zenity de mode de fonctionnement du script
if [[ "$1" == "-m" ]] || [[ "$1" == "--menu" ]]
then
option=$( zenity --list --radiolist --height=355 --width=515 \
    --title="Choix du mode de lancement" \
    --text="Choissez l'action à exécuter" \
    --column="" --column="" --column="action" \
    --separator=" " \
    --hide-column=2 \
    TRUE "" "Télécharger les émissions d'hier" \
    FALSE "date" "Télécharger des émissions antérieures à hier" \
    FALSE "alacarte" "Choisir exeptionnellement les émissions à télécharger aujourd'hui" \
    FALSE "config" "Modifier la configuration du script" \
    FALSE "lanceur" "Ajouter un lanceur au menu Applications > Son et Video" \
    FALSE "cron" "Automatiser l'exécution du script via cron" \
    FALSE "help" "Afficher l'aide et quitte" \
    FALSE "bug" "Déclarer un bug ( ou faire des remerciements ^^ )" \
    FALSE "about" "A propos du script / Todo list" )

if [[ $? == "1" ]]
then zenity --warning --title="Fin du script" --text="Le script à été arreté"
exit 0
fi

set -- "--$option"
if [[ "$1" == "--" ]]
then set --
fi
fi
#################################################################################################################




################################################## Appel de fonction ############################################
# Appel de la fonction demandé par l'argument d'appel du script, le menu, ou une exeption (fichier de config inexistant)
# Appel fonction --help
if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]
then _help
fi
# Appel fonction --lanceur
if [[ "$1" == "-l" ]] || [[ "$1" == "--lanceur" ]]
then _lanceur
fi
# Appel fonction --config
if [[ "$1" == "-c" ]] || [[ "$1" == "--config" ]]
then _config
fi
# Appel fonction --bug
if [[ "$1" == "-b" ]] || [[ "$1" == "--bug" ]]
then _bug
fi
# Appel fonction --about
if [[ "$1" == "-?" ]] || [[ "$1" == "--about" ]]
then _about
fi
# Appel fonction --alacarte
if [[ "$1" == "-a" ]] || [[ "$1" == "--alacarte" ]]
then
set -- "--date"
alacarte="yes"
fi
# Appel fonction --cron
if [[ "$1" == "-cr" ]] || [[ "$1" == "--cron" ]]
then _cron
fi
#################################################################################################################







############################################# Définition des préférences ########################################
#############################################
# Changement de répertoire vers celui choisi lors de la configuration, création du sous répertoire Canal+
REP=$(head -1 .canal_config)
mkdir -p "$REP"/Canal+
cd "$REP"/Canal+


#############################################
# Vérification de la date de téléchargement choisie
# Si le script est lancé avec l'option --date ou --alacarte, choix de la date dans un calendrier Zenity 
if [[ "$1" == "-d" ]] || [[ "$1" == "--date" ]]
then
	date=$( zenity --calendar --date-format=%d/%m/%y --text="Choix de la date" )
	if ! [[ $? == "0" ]]
	then
		zenity --warning --title="Fin du script" --text="Le script à été arreté"
		exit 0
	fi
# Si la date est la date du jour, la date de la veille est choisie
	if [[ "$date" == "`date +%d/%m/%y`" ]]
	then date=$( date +%d/%m/%y --date '1 days ago' )
	fi
# Si le script n'est pas lancé avec l'option date, le script télécharge les vidéos de $1 days ago, ou de la veille si $1 n'est pas précisé lors de l'appel du script
else 
	if [[ -z $1 ]]
	then d="1"
	else d=$1
	fi
	date=$( date +%d/%m/%y --date ''$d' days ago' )
fi
dd=${date:0:2}
mm=${date:3:2}
yy=${date:6:2}
date_us="$mm/$dd/$yy"
echo `color 1 "Téléchargement des émissions du $date en cours...
"`


#############################################
# Définition du mode de téléchargement, quotidien, historique par date de diffusion ou historique par émission
# Quotidien
if ( grep -q QUO "$parent_dir"/.canal_config )
then
	if [[ $(ls | grep $yy$mm$dd ) ]]
	then error=1
	else
		rm -f *.flv
		rm -f *-playlist.m3u
	fi
fi

# Historique par date de diffusion
if ( grep -q HIS "$parent_dir"/.canal_config )
then
	folder=$( date +%Y-%m-%d -d $date_us )
	if [[ -d $folder ]]
	then error=1
	else
		mkdir -p $folder
		cd $folder
	fi
fi

# Historique par émission
if ( grep -q HEM "$parent_dir"/.canal_config )
then mode="HEM"
fi


#############################################
# Fonction qui arrête le script si les émissions sont déja présentes
if [[ $error == "1" ]]
then
text="Les émissions du $date sont déja présente dans votre dossier Canal+
	
Pour néanmoins télécharger les vidéos, veuillez supprimer les vidéos existantes ou le dossier vidéo existant correspondant à la date désirée puis relancer le script"
display "Emissions déja présentes" "$text" "--warning"
exit 0
fi


#############################################
# Détection de la qualité : High ou Low
if ( grep -q HIGH "$parent_dir"/.canal_config )
then quality="H"
else quality="L"
fi


#############################################
# Détection du format de conversion si nécessaire
format=$( cat "$parent_dir"/.canal_config | grep "CONVERT=" | cut -f2 -d "=" )


#############################################
# création de la playlist
echo "# http://vod-flash.canalplus.fr/" > $yy-$mm-$dd"-playlist.m3u"


#############################################
# Choix des émissions si l'option "alacarte" est choisie
if [[ $alacarte == "yes" ]]
then choix_emissions ".alacarte"
fi


##############################################
# Initialisation des variables pour la barre de progression en fonctionnement graphique
i="0"
n=$( cat "$parent_dir"/.canal_config | head -4 | tail -1 | wc -w )
#################################################################################################################








############################################ Téléchargement des émissions #######################################
# Lancement de la fonction de téléchargement des émissions
	if ( grep -q GTK "$parent_dir"/.canal_config )
	then
	emissions | zenity --progress \
	  --title="Téléchargement" \
	  --text="Téléchargement des émissions en cours..." \
	  --width=300 \
	  --auto-close \
	  --percentage=0
	else emissions
	fi
#################################################################################################################




############################################# Déplacement de la playlist ########################################
# Déplacement de la playlist dans un dossier adapté si le script utilise une des options historique
play_dir="$REP"/Canal+/
if ! ( grep -q QUO "$parent_dir"/.canal_config )
then 
	mkdir -p "$REP"/Canal+/playlists/
	mv *-playlist.m3u "$REP"/Canal+/playlists/
	play_dir="$REP"/Canal+/playlists/
fi
#################################################################################################################








################################# Affichage des logs, ouverture de la playlist ##################################
# Fin des téléchargement, affichage des logs, diffusion dans lecteur vidéo si demande exprimée par l'utilisateur (via fenetre Zenity) 
lecteur_video=$( cat "$parent_dir"/.canal_config | head -2 | tail -1 )
log=$(cat "$parent_dir"/.canal_log)

if ! [[ -z $log ]]
then erreur="Les vidéos suivantes n'ont pas été diffusées ce jour là :"
fi

text="Les vidéos du $date ont été téléchargées
$erreur
$log

"

if ( grep -q GTK "$parent_dir"/.canal_config )
then
	text2="Voulez vous lancer la lecture dans $lecteur_video ?"
	display "Fin du script" "$text$text2" "--question"
	if [[ $? == "0" ]]
	then
		if [[ $lecteur_video == "mplayer" ]]
		then lecteur_video="$lecteur_video -playlist"
		fi
	nohup "$lecteur_video" "$play_dir"/$yy-$mm-$dd"-playlist.m3u" &
	fi
else
	text2="La playlist est disponible dans $play_dir/$yy-$mm-$dd-playlist.m3u"
	echo "$text$text2"
fi

rm -f "$parent_dir"/.canal_log
rm -f .alacarte
exit 0
#################################################################################################################







############################################# Astuces / Post it personnel #######################################
# Les liens direct vers les pages des émissions ont été trouvés sur les pages :
# http://www.canalplus.fr/processus/page/commun/xt_plus_de_rire.php?PAGE_ID=2053&ZONE_TEMPLATE_ID=3659 ## pour le contenu d'encore + de rire
# http://www.canalplus.fr//processus/page/commun/xt_plus_de_rire.php?PAGE_ID=2397&ZONE_TEMPLATE_ID=3659 ## pour le contenu du petit journal
# Pour retrouver les liens : aller sur la page de menu et chercher ZONE_TEMPLATE dans le code source ^^
# 
# Dans le code source de chacun des liens, on trouve un numéro, c'est le catID à rajouter à la fin du lien de la page générale. Par exemple pour le top5 :
# http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=1282

La béta 2 sera consacrée aux changement de type : est ce qu'il faut un ou deux [ pour un test if, uniformisation de l'utilisation de $( ) ou ` ` et aute joyeuseries
Mais d'abord à table ^^


EDIT : Arrrrggh c'est le post #404
><'

Dernière modification par Ras' (Le 15/06/2008, à 12:24)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#405 Le 15/06/2008, à 13:07

beudbeud

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

pour moi ça me va pour la partie crontab


Télécharger les émissions de Arte +7 avec Arte +7 recorder
Theme pour Ubuntu Bisigi Project

Vostro 1510 Ubuntu 10.04

Hors ligne

#406 Le 15/06/2008, à 15:46

yurek

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

j'ai fini les modifications du script et il est beaucoup plus clair, suppression de fonctionnalité inutile, lifting de 100 lignes environs, ...

Seulement la fonction date est très flou,  y'en a dans le main et dans les fonction c'est a n'y rien comprendre.
dd mm yy ne marche pas sur mon script donc il faudrait peut etre jetter un oeil pour simplifier la chose.

if [[ "$1" == "-d" ]] || [[ "$1" == "--date" ]]
then
    date=$( zenity --calendar --date-format=%d/%m/%y --text="Choix de la date" )
    if ! [[ $? == "0" ]]
    then
        zenity --warning --title="Fin du script" --text="Le script à été arreté"
        exit 0
    fi
# Si la date est la date du jour, la date de la veille est choisie
    if [[ "$date" == "`date +%d/%m/%y`" ]]
    then date=$( date +%d/%m/%y --date '1 days ago' )
    fi
# Si le script n'est pas lancé avec l'option date, le script télécharge les vidéos de $1 days ago, ou de la veille si $1 n'est pas précisé lors de l'appel du script
else
    if [[ -z $1 ]]
    then d="1"
    else d=$1
    fi
    date=$( date +%d/%m/%y --date ''$d' days ago' )
fi
dd=${date:0:2}
mm=${date:3:2}
yy=${date:6:2}
date_us="$mm/$dd/$yy"
echo `color 1 "Téléchargement des émissions du $date en cours...
"`

Je ne met pas le script sinon tu va perdre du temps a le scruter. Mais bon si tu le veux je le posterais.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#407 Le 15/06/2008, à 16:21

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

En fait j'ai pas trop bossé dessus...
Pas eu le temps entre le nettoyage de l'appart et le sauna dans 20mn

Je ferais tout demain
Yurek > me donner le script juste comme ça bof, mais expliquer ce que tu as fait pourquoi pas.


explication de la fonction date :

#############################################

# Vérification de la date de téléchargement choisie
# Si le script est lancé avec l'option --date ou --alacarte, choix de la date dans un calendrier Zenity 
if [[ "$1" == "-d" ]] || [[ "$1" == "--date" ]]
then
	date=$( zenity --calendar --date-format=%d/%m/%y --text="Choix de la date" )
	if ! [[ $? == "0" ]]
	then
		zenity --warning --title="Fin du script" --text="Le script à été arreté"
		exit 0
	fi
# Si la date est la date du jour, la date de la veille est choisie
	if [[ "$date" == "`date +%d/%m/%y`" ]]
	then date=$( date +%d/%m/%y --date '1 days ago' )
	fi

C'est assez clair, si on lance le script avec l'option --date, -d ou --alacarte, le scripte ouvre un calendrier zenity pour choisir la date.
Si la date du jour est choisie, le scripte prend celle de la vielle.

# Si le script n'est pas lancé avec l'option date, le script télécharge les vidéos de $1 days ago, ou de la veille si $1 n'est pas précisé lors de l'appel du script
else 
	if [[ -z $1 ]]
	then d="1"
	else d=$1
	fi
	date=$( date +%d/%m/%y --date ''$d' days ago' )
fi

Si on lance le script sans option il prend les vidéos de la veille, ie il y a d=1 jours.
Si le script est lancé avec une option, il prend les vidéos d'il y a d jours.

dd=${date:0:2}
mm=${date:3:2}
yy=${date:6:2}
date_us="$mm/$dd/$yy"

Ca c'est parce que y'a une émission (le meilleur du hier ?) qui à besoin du jour de la semaine.
Donc avec date +%A je le retrouve, mais la date doit être au format us ie mm/dd/yy au lieu de dd/mm/yy donc j'ai du passer par ça... pas trouvé plus propre...
Sinon je me sert du yymmdd pour chercher si les vidéos sont déja présentes en mode quotidien ainsi que pour créer la playlist.





En fait si tu as le temps je suis très interessé par ton script (et si possible avec quelques explications quand même, si tu as gagné 100 lignes doit y'avoir une sacré raison)

Merci.


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#408 Le 15/06/2008, à 20:51

yurek

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Voici ma beta 12

A venir :
* Ajout de fonctionnalité dans la fonction playlist ( que j'adore )
* modification du systeme de choix des émissions qui se feront dynamiquement en fonction du site web de canal+ permettant un choix plus vaste dans le catalogue  ( si elles existent)
* correction des bugs sur certaines vidéo qui ne marche pas ( j'attends le code de Ras qui est très fort dans le domaine )

Nouveauté :
* correction de beaucoup de bugs ( alacarte, ...)
* modification de l'affichage des erreurs
* changement des vidéo enregistrer sous un nom plus commun, modification de l'appel du lecteur video
* Création d'une nouvelle fonction playlist QUI FONCTIONNE pour l'appeler en mode menu ou avec l'argument -p , crée une playlist de tous les vidéos téléchargé ! Pratique non ?
* Suppression de commentaires ( qui ne correspondait plus au code  sorry) , je ne compte pas les écrires ca je trouve ca inutile, le script est compréhensible donc voila !
* création de nouveau controle pour ce qui est du téléchargement des vidéos ( évite de télécharger une vidéo qui est déja téléchargé ! ) je pense surtout a ceux qui ont très peu de débit comme moi et que ras a oublié !
* Lifting de plus de 200 lignes   ( 120 avec les commentaires )
    ==* Création de fonction sur certain morceau pour rendre le script plus modulaire
* résolution du probleme avec cron
* fenetre menu plus moderne !
* ajout de la detection de la connexion internet
* Utilisation de chemin absolu qui résout les probleme si le script est executer a partir d'un autre dossier , rend le script plus facile a maitriser
......

#!/bin/bash

# But: Telecharger des videos de canalplus.fr et les mettre dans une playlist
# Auteur : Ras' modifié par Yurek
# Dépendances : Zenity, wget, sed, cut
# Licence : Ce script est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
# selon les termes de la Licence Publique Générale GNU ( GNU GPL ) publiée par la Free Software
# Foundation.
#
# Merci à beudbeud pour l'implémentation de la fonction d'automatisation via cron
#
# Astuces / Post it personnel
# Les liens direct vers les pages des émissions ont été trouvés sur les pages :
# http://www.canalplus.fr/processus/page/commun/xt_plus_de_rire.php?PAGE_ID=2053&ZONE_TEMPLATE_ID=3659 ## pour le contenu d'encore + de rire
# http://www.canalplus.fr//processus/page/commun/xt_plus_de_rire.php?PAGE_ID=2397&ZONE_TEMPLATE_ID=3659 ## pour le contenu du petit journal
# Pour retrouver les liens : aller sur la page de menu et chercher ZONE_TEMPLATE dans le code source ^^
#
# Dans le code source de chacun des liens, on trouve un numéro, c'est le catID à rajouter à la fin du lien de la page générale. Par exemple pour le top5 :
# http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=1282

VERSION=v2-beta


todo="
Ajouter une icône (voir une barre de progression) dans la zone de notification


N'hésitez pas à proposer les votres sur le forum :
http://forum.ubuntu-fr.org/viewtopic.php?id=200149
"

#
# Fonction --help
function _help
{
zenity --info --title="Menu Help" --text="Télécharger les quotidiennes (ou pas) de Canal+
Créé par Ras'

Usage : ./canal [ARGUMENT];

Arguments disponibles :
-m, --menu	Ouvre un menu permettant de choisir 
		parmis les options suivantes

-c, --config	Configurer le script
		Lors de la première exécution, le script
		se lance automatiquement en configuration

-d, --date	Ouvre un calendrier Zenity
		Permet l'utilisation du script graphiquement

-a, --alacarte	Permet exeptionnellement de télécharger
		des émissions différentes des habituelles
		(sans changer la configuration)

-l, --lanceur	Permet de rajouter une icône de lancement 
		dans le menu \"Applications > Son et Video\"

-p, --playlist	Regénère une playlist des vidéos selectionné et téléchargé

-cr, --cron	Permet l'ajout du tâche planifié

-b, --bug	Ouvre Firefox à l'adresse : 
		http://forum.ubuntu-fr.org/viewtopic.php?id=200149
		Topic du forum ubuntu-fr.org permettant de 
		rapporter un bug

-h, --help	 Affiche cette aide et quitte


-?, --about	Affiche les informations sur le script

"
exit 0
}

function _menu {

	OPTION=$(zenity --list --height=355 --width=515 \
	--title="Choix du mode de lancement" \
	--text="Choissez l'action à exécuter" \
	--column="" --column="Choix" --hide-column=1  \
	"" "Télécharger les dernières emissions disponibles" \
	"date" "Télécharger des émissions antérieures à hier" \
	"alacarte" "Choisir exeptionnellement les émissions à télécharger aujourd'hui" \
	"config" "Modifier la configuration du script" \
	"lanceur" "Ajouter un lanceur au menu Applications > Son et Video" \
	"playlist" "Génère une playlist des vidéos téléchargé" \
	"cron" "Automatiser l'exécution du script via cron" \
	"help" "Afficher l'aide et quitte" \
	"bug" "Déclarer un bug ( ou faire des remerciements ^^ )" \
	"about" "A propos du script / Todo list" )
	erreur
OPTION_ext="--$OPTION"
}

color() {
printf '\033[%sm%s\033[m\n' "$@"
}

function display {
if [ "$INTERFACE" != "GTK" ]; then
	echo `color 1 "$titre"`
	echo `color 34 "$texte"`
fi
}

function erreur {
if [ "$PIPESTATUS" != "0" ]; then
	zenity --error --title="Arret du script" --text="\nAucune selection, le script s'arrete"
	exit 100
fi
}

function requis {
PAQUET_REQUIS=`echo "$PAQUET_REQUIS"|sed s'/[ ]/ /g'`
PAQUET_NONINSTALLER=""
for i in $PAQUET_REQUIS
do
	STATUS=`dpkg -s $i | grep Status`
	echo "PAQUET $i"
	if [ "$STATUS" != "Status: install ok installed" ]; then
			PAQUET_NONINSTALLER=`echo $PAQUET_NONINSTALLER $i`
	fi
done
	if [ "$PAQUET_NONINSTALLER" != "" ]; then
		zenity --info --title="Dépendance non statisfaites" --text="Il manque quelque dépendance, ce script se charge de les installer :\n\nPAQUET_NONINSTALLER"
	sudo aptitude install -y $PAQUET_NONINSTALLER | zenity --progress --auto-close \
		--title="Installation de $PAQUET_NONINSTALLER" \
		--text="Installation de $PAQUET_NONINSTALLER en cours..."
	fi
}

function maj_auto {
cd /tmp
cp "$DOSSIER/canal" "$DOSSIER/canal_ancien"
wget -c "http://ibidems.free.fr/ras/script/canal"
wget -c "http://ibidems.free.fr/ras/script/release.txt"
if  ! [ -f /tmp/canal ]; then
	zenity --warning --title="Aucun script téléchargé" --text="Aucune version ou echec du téléchargement."
	exit ;
fi

NEW=`cat release.txt | grep "version=" | sed s"/version=//"`  ## proposition
if [ "$NEW" != "$VERSION" ]; then
	if [ "$INTERFACE" = "GTK" ] ; then
		zenity --info --title="Mise à jour" --text="La version $NEW est disponible, voici la liste des nouveautées :\n`cat release.txt`\n\nVoulez vous installer cette version ?"
		if [ "$PIPESTATUS" = "0" ]; then
			echo "Mise à jour du script en cours..."
			mv -f "$DOSSIER/canal" "$DOSSIER/canal_ancien"
			cp "/tmp/canal" "$DOSSIER/canal"
			chmod +x "$DOSSIER/canal"
			zenity --info --title="Mise à jour" --text="Une mise à jour a été effectuée vers la version $NEW\nMerci de bien vouloir relancer le script."
			exit 0 ;
		fi
	else
		echo "Voulez vous mettre a jour le script ? oui/non"
		read A
		if [ "$A" = "oui" ]; then
			mv -f "$DOSSIER/canal" "$DOSSIER/canal_ancien"
			cp "/tmp/canal" "$DOSSIER/canal"
			chmod +x "$DOSSIER/canal"
		fi
	fi

fi
}

# Ajout d'une entrée dans le menu Applications > Son et vidéo
function _lanceur
{
if ! [ -f $DOSSIER_CFG/logo64x64.svg ]; then
	cd $DOSSIER_CFG
	wget -c -q http://ibidems.free.fr/ras/script/logo64x64.svg 2>&1
	cd -
fi
echo "[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Canal+
GenericName=Canal+
Comment=Script permettant de télécharger les quotidiennes du site de Canal+
Icon=$DOSSIER_CFG/logo64x64.svg
Exec=$DOSSIER/Canal.sh --menu
Terminal=false
StartupNotify=false
Categories=Application;AudioVideo" > $HOME/Canal.desktop
cp "$0" "$DOSSIER/Canal.sh"
chmod a+x "$DOSSIER/Canal.sh"
zenity --warning --title="Droits administrateurs nécessaires" --text="Le Script à besoin de votre mot de passe utilisateur pour créer l'entrée du menu 'Applications > Son et videos'.\n\nCe mot de passe ne sera évidemment pas sauvegardé ni utilisé ultérieurement par le script."
gksudo "mv -f $HOME/Canal.desktop /usr/share/applications/"
if [ -f "/usr/share/applications/Maintenir-systeme.desktop" ]; then
	zenity --info --title="Menu ajouté" --text="Une entrée 'Canal' a été ajouté au menu 'Applications > Son et videos'."
else zenity --erreur --title="Echec" --text="L'entrée 'Canal' n'a pas été ajouté au menu 'Applications > Son et videos'.
Merci de bien vouloir entrer le mot de passe pour donner cet accès au script."
fi
exit 0
}

function true_false {
if grep -q $1 "$DOSSIER_CFG/canal_config" >/dev/null ;then
	echo "TRUE"
else echo "FALSE"
fi
}


function choix_emissions {
touch $DOSSIER_CFG/canal_config
EMISSIONS=$(zenity --list --checklist --height=580 --width=400 \
	--title="Configuration en cours... 4/7" \
	--text="Choix des émissions à télécharger" \
	--column="Choix" --column=""  --column="Emissions" \
	--hide-column=2 --separator=" " \
	`true_false ZAP` ZAP "Le zapping" \
	`true_false PJA` PJA "Le petit journal actu de Yann Barthès" \
	`true_false GUI` GUI "Les guignols de l'info" \
	`true_false MET` MET "La météo de Louise Bourguoin" \
	`true_false PJP` PJP "Le petit journal people de Yann Barthès" \
	`true_false TOP` TOP "Le Top 5 de Thomas Nguijol" \
	`true_false SAV` SAV "Le service après vente d'Omar et Fred" \
	`true_false BAQ` BAQ "La boite à questions" \
	`true_false RDP` RDP "La revue de presse de Chris Esquerre" \
	`true_false STO` STO "La chronique de Sebastien Tohen" \
	`true_false ADM` ADM "L'avis de Mouloud" \
	`true_false DSH` DSH "Le daily show" \
	`true_false SGU` SGU "La chronique de Stephane Guillon" \
	`true_false IDB` IDB "Les infos de Blakowski" \
	`true_false CDA` CDA "Le champion de l'actu" \
	`true_false GRO` GRO "Le Groland" \
	`true_false TAC` TAC "Les têtes à claques" \
	`true_false PEP` PEP "Les Pépites du net" \
	`true_false MDH` MDH "Le meilleur du hier (semaine courante)" )
erreur
echo "emissions=$EMISSIONS" >> $1
}

function load_config {
echo "`cat "$DOSSIER_CFG/canal_config" | grep "$1" | sed s"/$1//"`"
}

function _config {
mv $DOSSIER_CFG/canal_config $DOSSIER_CFG/canal_config.save
echo "Configuration des choix..."

	PAQUET_REQUIS="zenity"
	requis

zenity --info --title="Configuration en cours... 1/7" --text="Choisir un répertoire pour le téléchargement des émissions
( un sous répertoire \"Canal+/\" y sera automatiquement créé )"
DOSSIER="`zenity  --file-selection --directory --title="Choisir un dossier pour le télécharchement des émissions"`/Canal+"
erreur
echo "dossier=$DOSSIER" > $DOSSIER_CFG/canal_config

choix_emissions "$DOSSIER_CFG/canal_config"


MEMOIRE=$(zenity --list --radiolist --height=210 --width=800 \
	--title="Configuration en cours... 3/7" \
	--text="Choix du mode de fonctionnement" \
	--column="Choix" --column=""  --column="mode" \
	--hide-column=2 --separator=" " \
	`true_false ECO` ECO "Econome  : les anciennes vidéos sont supprimées" \
	`true_false GOL` GOL "Mode gold : les anciennes vidéos ne sont pas supprimées" )
erreur
echo "memoire=$MEMOIRE" >> $DOSSIER_CFG/canal_config


FONCTIONNEMENT=$(zenity --list --radiolist --height=210 --width=800 \
	--title="Configuration en cours... 3/7" \
	--text="Choix du mode de fonctionnement" \
	--column="Choix" --column=""  --column="mode" \
	--hide-column=2 --separator=" " \
	`true_false HIS` HIS "Historique journalier : un dossier est créé pour chaque jour de diffusion, les anciennes vidéos ne sont pas supprimées" \
	`true_false HEM` HEM "Historique typé : un dossier est créé pour chaque émission, les anciennes vidéos ne sont pas supprimées" )
erreur
echo "fonctionnement=$FONCTIONNEMENT" >> $DOSSIER_CFG/canal_config

QUALITE=$(zenity --list --radiolist --height=190 --width=650 \
	--title="Configuration en cours... 5/7" \
	--text="Choix de la qualité de lecture des vidéos" \
	--column="Niveau" --column="" --column="Qualite" --hide-column=2 \
	`true_false HIGH` HIGH "High : Optimisation de la qualité d'image, vidéos plus lourde " \
	`true_false LOW` LOW "Low : Optimisation de la vitesse de téléchargement, qualité d'image moins bonne" )
erreur
echo "qualite=$QUALITE" >> $DOSSIER_CFG/canal_config

LECTEUR=$(zenity --list --radiolist --height=210 --width=200 \
	--title="Configuration en cours... 2\/7" --text="Choix du lecteur de vidéos" \
	--column="Choix" --column="" --column="Lecteur" --hide-column=2 \
	`true_false vlc` vlc "Vlc media player" \
	`true_false mplayer` mplayer "Mplayer movie player" \
	`true_false totem` totem "Totem" )
erreur
echo "lecteur=$LECTEUR" >> $DOSSIER_CFG/canal_config

FORMAT=$(zenity --list --list --radiolist --height=330 --width=575\
	--title="Configuration en cours... 6/7" \
	--text="Le script permet de convertir les vidéos dans d'autres format que l'original (.flv) Cliquez sur 'erreur' si vous ne désirez pas convertir les vidéos" \
	--column="Format"  --column="" --column="Format de conversion" --hide-column=2 \
	`true_false FLV` FLV "Aucune compression .flv " \
	`true_false AVI` AVI "Convertir les vidéos au format .avi"\
	`true_false MKV` MKV "Convertir les vidéos au format .mkv"\
	`true_false IPOD` IPOD "Convertir les vidéos en un format lisible par un iPod"\
	`true_false ARCHOS` ARCHOS "Convertir les vidéos en un format lisible par un Archos / Creative Zen"\
	`true_false IRIVER` IRIVER "Convertir les vidéos en un format lisible par un iRiver"\
	`true_false MEIZU` MEIZU "Convertir les vidéos en un format lisible par un Meizu"\
	`true_false PSP` PSP "Convertir les vidéos en un format lisible par une PSP "\ )
erreur
echo "format=$FORMAT" >> $DOSSIER_CFG/canal_config

zenity --info --title="Configuration en cours... 6/7" --text="Certaines dépendances sont nécessaire pour les différents formats. Vérifications des dépendances..."

if [ "$FORMAT" != "FLV" ] ; then
	if ([ "$FORMAT" = "IPOD" ] || [ "$FORMAT" = "PSP" ])  ; then
		PAQUET_REQUIS="ffmpeg faac libfaac0"
		requis
	elif [ "$FORMAT" = "MKV" ] ; then
		PAQUET_REQUIS="ffmpeg ffmpeg2theora"
		requis
	else
		PAQUET_REQUIS="mencoder"
		requis
	fi
fi

zenity --question --title="Configuration en cours... 7/7" --width=700 --text="Voulez vous utiliser l'interface graphique ?

En cliquant sur valider, le script affichera une barre de progression GTK+ lors du téléchargement des émissions.

Sinon le script sera silencieux jusqu'à la fin des téléchargements (les détails seront néanmoins disponibles en console)"
if [ "$PIPESTATUS" = "0" ];
	then echo "interface=GTK" >> $DOSSIER_CFG/canal_config
fi

echo "version=$VERSION" >> $DOSSIER_CFG/canal_config

rm -f $DOSSIER_CFG/canal_config.save
echo "Configuration terminée"
exit 0
}

function _cron {
if [ "$CRON" != "" ]  ; then
	zenity --question --text="Une tâche est déjà planifiée. Voulez-vous la supprimer ou la modifier ?

( 'Valider' pour la supprimer ; 'Annuler' pour la modifier )"
	if [ "$PIPESTATUS" = "0" ]; then
		echo "cron=`crontab -l`" >> $DOSSIER_CFG/canal_config
		sed -i '/cron=/d' $DOSSIER_CFG/canal_config
		zenity --info --text="Tâche supprimée de la configuration"
		rm $DOSSIER_CFG/tempcrontab
		touch $DOSSIER_CFG/tempcrontab
		crontab $DOSSIER_CFG/tempcrontab
		exit 0
	else
		sed -i '/cron=/d' $DOSSIER_CFG/canal_config
		echo "cron=`crontab -l | grep canal | awk -F'*' '{print $3}'`" >> $DOSSIER_CFG/canal_config
		zenity --info --text="Tâche ajouté à la configuration"
		for days in `seq 1 7`;
		do
			if grep -q $days $DOSSIER_CFG/tempcrontab > /dev/null ; then
				var[days]="TRUE"
			else var[days]="FALSE"
			fi
		done
	fi
else
	if ! crontab -l | grep DISPLAY > /dev/null ; then
		echo 'DISPLAY=":0.0"' > $DOSSIER_CFG/tempcrontab
	fi
	crontab -l > $DOSSIER_CFG/tempcrontab
	sed -i '/canal/d' $DOSSIER_CFG/tempcrontab
	for days in `seq 1 7`;
	do
			var[days]="TRUE"
	done
	JOURS=$(zenity --list --checklist --width=300 --height=300 \
	--title "Sélectionner les jours" \
	--text="Veuillez sélectionnez les jours :" \
	--separator="," \
	--hide-column=2 \
	--column="choix" --column="N° jour" --column="jours" \
	${var[1]}  "1" "lundi" \
	${var[2]}  "2" "mardi" \
	${var[3]}  "3" "mercredi" \
	${var[4]}  "4" "jeudi" \
	${var[5]}  "5" "vendredi" \
	${var[6]}  "6" "samedi" \
	${var[7]}  "7" "dimanche" )
	erreur

	if crontab -l | grep canal > /dev/null ; then
		HH=`crontab -l | grep canal | awk -F' ' '{print $2}'`
		MM=`crontab -l | grep canal | awk -F' ' '{print $1}'`
	else
		HH=hh
		MM=mm
	fi

	CHHEURE=$( zenity --entry \
	--title="Heure" \
	--text="Saisissez l'heure du lancement exemple : 20 00" \
	--entry-text="$HH $MM" )
	erreur

	HEURE=`echo $CHHEURE | awk -F" " '{print $1}'`
	MIN=`echo $CHHEURE | awk -F" " '{print $2}'`

	echo "$MIN $HEURE * * $JOURS $DOSSIER/$0" '#canal quotidienne' >> $DOSSIER_CFG/tempcrontab #canal quotidienne

	crontab $DOSSIER_CFG/tempcrontab
	zenity --text-info --filename="$DOSSIER_CFG/tempcrontab" --width=500
	rm $DOSSIER_CFG/tempcrontab
	echo "cron=`crontab -l`" >> $DOSSIER_CFG/canal_config
fi
exit 0


}

function _bug {
zenity --info --title="Rapport de bug" --text="Le script va ouvrir Firefox à l'adresse

http://forum.ubuntu-fr.org/viewtopic.php?id=200149

Veuillez y poster un descriptif clair de votre problème."

firefox "http://forum.ubuntu-fr.org/viewtopic.php?id=200149"

exit 102
}

function _about {

zenity --info --title="Script Canal" --text="Créateur : Ras'
Version : $VERSION
License : Ce programme est diffusée selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation.
Vous êtes libre de l'utiliser, le modifier et le redistribuer selon les termes de la license GNU GPL

Todo list : $todo"
exit 0
}

function get_http {
CFG_TMP=`echo $RANDOM`
echo $DOSSIER_CFG/$CFG_TMP>>$DOSSIER_CFG/FOLDER_DELETE.txt
dossier "$DOSSIER_CFG/$CFG_TMP"
wget -q --save-cookies $DOSSIER_CFG/$CFG_TMP/cookie.txt --keep-session-cookies $1 -O $DOSSIER_CFG/$CFG_TMP/menu_src_code
echo "rm -f $DOSSIER_CFG/menu_src_code"
wget -q --load-cookies $DOSSIER_CFG/$CFG_TMP/cookie.txt --keep-session-cookies $1 -O $DOSSIER_CFG/$CFG_TMP/menu_src_code
echo "rm -f $DOSSIER_CFG/cookie.txt"
}

function delete_folder {
for i in `cat $DOSSIER_CFG/FOLDER_DELETE.txt`
do
	if ! [ -f $i ]; then
		rm -r "$i"
	else echo "rien a supprimé"
	fi

	i=`echo $i| sed s'/\//\n/g' |tail -n1`
	echo $i
	sed -i /"$i"/d $DOSSIER_CFG/FOLDER_DELETE.txt
done
}
function get_video {

echo $DD/$MM/$YY

echo "$DOSSIER_CFG/$CFG_TMP/ ###############################"
#cat $DOSSIER_CFG/$CFG_TMP/menu_src_code | grep "$DD/$MM/$YY" | grep "aVideos\[" | sed "s/^.*aVideos\[//" | sed "s/\].*//" | head -n1


A=`cat  $DOSSIER_CFG/$CFG_TMP/menu_src_code | grep "$DD/$MM/$YY" | grep "aVideos\[" | sed "s/^.*aVideos\[//" | sed "s/\].*//"  | head -n1`

echo "test 1 = $A"
if  [ -z "$A" ]; then
A=`cat $DOSSIER_CFG/$CFG_TMP/menu_src_code | grep "aVideos\[" | sed "s/^.*aVideos\[//" | sed "s/\].*//"  | sort -u | head -n1`
echo "test 2 = $A"
fi

if ! [ -z "$A" ]; then
	video_id=`cat $DOSSIER_CFG/$CFG_TMP/menu_src_code | grep "aVideos\[$A\]" | grep "CONTENT_ID" | sort -u | cut -f2 -d '"'`

echo "test 3 = $A "
echo "VIDEO_ID = $video_id"

	else
video_id=""
echo "erreur pour définir video_id a partir de A"
fi
if  [ -z "$video_id" ]; then
	video_id=`cat $DOSSIER_CFG/$CFG_TMP/menu_src_code | grep "$YY$MM$DD" | cut -f2 -d "'"`  # meilleur du hier
echo "test 4 VIDEO_iD = $video_id"
fi

if  [ -z "$video_id" ]; then
	video_id=`cat $DOSSIER_CFG/$CFG_TMP/menu_src_code | grep chooseVideo | head -n2 |  cut -f2 -d "'" | tail -n1`
echo "test 5 VIDEO_iD = $video_id"
fi
echo "$DOSSIER_CFG/$CFG_TMP/ ###############################"

chgt_ext # changement de nom

#-z $video_id

if [ -z "$aVideos" -a -z "$video_id" ]; then
	echo "L'émission '$1' n'a pu être téléchargée"
	echo "==> $1" >> $DOSSIER_CFG/download_failed
	VIDEO="" # sinon copie là ou il ne faut pas
else
	PAGE="http://www.canalplus.fr/flash/xml/module/embed-video-player/embed-video-player.php?video_id=$video_id"
	wget -q -O $DOSSIER_CFG/$CFG_TMP/video_src_code "$PAGE" 2>&1
	URL=`cat $DOSSIER_CFG/$CFG_TMP/video_src_code | grep -o "http://[^ ]*$QUALITE.flv"`
	echo "$VIDEO a téléchargé, $URL"

	if ! [ -f "$VIDEO_FOLDERNAME/$VIDEO" ] ; then
		if [ "$INTERFACE" = "GTK" ]; then
			wget -c $URL -O "$VIDEO" 2>&1 | sed -u "s/\([ 0-9]\+K\)[ \.]*\([0-9]\+%\) \(.*\)/\2\n#Telechargement $VIDEO : \1 (\2) à \3/" | zenity --progress --auto-kill --auto-close --width=400 --title="Téléchargement en cours"
		else
			wget -c $URL -O "$VIDEO" 2>&1 
		fi
	echo "> $1 sous le nom de $VIDEO" >> $DOSSIER_CFG/download_success
	elif [ -f "$VIDEO_FOLDERNAME/$VIDEO" ] ; then
		echo "VIDEO DEJA TELECHARGE $VIDEO"
	echo "> $1 sous le nom de $VIDEO" >> $DOSSIER_CFG/download_success
	else echo "ERREUR INCONU"
	fi
#	mv "$URL" "$DOSSIER"
fi
set -- # qui fouare tout ?  
#"==> $VIDEO doit etre produit !"
}

function download {
echo "down load URL $1 NOM $2 nbr $3"
if [ "$FONCTIONNEMENT" = "HIS" ] ; then
	VIDEO_FOLDERNAME=$DOSSIER/$2
elif [ "$FONCTIONNEMENT" = "HEM" ] ; then
	VIDEO_FOLDERNAME=$DOSSIER/$DD-$MM-$YY
else _config
fi
dossier "$VIDEO_FOLDERNAME"

NOM_VI=`echo $2 | sed s'/[ ]/_/g'`
VIDEO="$NOM_VI-$DATE.flv"

echo "NOM VIDEO = $VIDEO "

get_http "$1"
get_video "$2" "$3"

if [ "$VIDEO" = "" ]  ; then  
	echo "Erreur du code bientot corrigé !"

elif (! [ -f "$VIDEO_FOLDERNAME/$VIDEO" ] && [ -f "$DOSSIER_TEMP/$VIDEO" ] ) ; then # condition a deplacer 

		echo "down video $VIDEO"  ## video 
		convert "$DOSSIER_TEMP/$VIDEO" # Nom vidéo change
		copie "$DOSSIER_TEMP/$VIDEO" "$VIDEO_FOLDERNAME"
		playlist "$VIDEO_FOLDERNAME/$VIDEO"

## ?		echo "$VIDEO >> $DOSSIER_CFG/" 
# A VOIR

elif [ -f "$VIDEO_FOLDERNAME/$VIDEO" ] ; then  #[ -e "$DOSSIER_TEMP/$VIDEO" ] ||  
	echo "cou cou"
	playlist "$VIDEO_FOLDERNAME/$VIDEO"
else echo "erreur de telechargement"
fi

}
function copie {

echo "copie  NOM $1"
if (! [ -z "$1" ] && ! [ -z "$2" ]); then
	cp "$1" "$2"
else echo "aucune video à copié"
fi
}


function chgt_ext {
if [ "$FORMAT" = "FLV" ] ; then 
echo "aucun changement d'extension"
elif ([ "$FORMAT" = "AVI" ] || [ "$FORMAT" = "ARCHOS" ] || [ "$FORMAT" = "MEIZU" ]) ; then
	 VIDEO="`echo $VIDEO | sed -e 's/\.flv$/\.avi/'`"
elif [ "$FORMAT" = "MKV" ] ; then
	VIDEO="`echo $VIDEO | sed -e 's/.flv$/.mkv/'`"
else VIDEO="`echo $VIDEO | sed -e 's/.flv$/.mp4/'`"
fi
}

function convert {
dossier "$DOSSIER_CFG/PID"
chgt_ext



case "$FORMAT" in
    FLV)    echo "NO COMPRESSION" ;;
    AVI)
        mencoder "$1" -ovc xvid -xvidencopts fixed_quant=3 -oac mp3lame -lameopts cbr:preset=128 -o "$VIDEO" 2>/dev/null ;;
    MKV)
        mencoder "$1" -ovc xvid -xvidencopts fixed_quant=3 -oac mp3lame -lameopts cbr:preset=128 -o "$VIDEO" 2>/dev/null ;;
    IPOD)
        ffmpeg -y -i "$1" -vcodec mpeg4 -b 717000 -s 480x320 -aspect 16:9 -f mp4 -acodec aac "$VIDEO" 2>/dev/null  ;;
    ARCHOS)
        mencoder "$1" -ovc xvid -xvidencopts fixed_quant=3 -vf scale=320:-2 -oac mp3lame -lameopts cbr:preset=128 -af volume=+5 -o "$VIDEO" 2>/dev/null  ;;
    IRIVER)
        mencoder "$1" -ofps 15.000 -vf-add crop=0:0:-1:-1  -vf-add scale=320:240 -vf-add expand=320:240:-1:-1:1 -srate 44100 -ovc xvid -xvidencopts bitrate=380 -oac mp3lame -lameopts vbr=0  -lameopts br=128 -lameopts vol=0 -lameopts mode=0 -lameopts aq=7 -lameopts padding=3 -af volnorm  xvidencopts max_bframes=0:nogmc:noqpel -mc 0 -o "$VIDEO" 2>/dev/null  ;;
   MEIZU)
        mencoder "$1" -idx -noodml -ofps 20 -vf scale=320:-2,expand=:240:::1,crop=320:240,rotate=1 -ovc lavc -ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -srate 44100 -oac mp3lame -lameopts cbr:br=128:mode=0 -o "$VIDEO" 2>/dev/null ;;
    PSP)
        ffmpeg -y -i "$1" -title "$VIDEO" -vcodec h264 -level 13 -g 250 -s 368x208 -r 29.97 -b 768 -acodec aac -ac 2 -ar 48000 -ab 128 "$VIDEO" 2>/dev/null ;;
esac

echo $! > "$DOSSIER_CFG/PID/`basename "$VIDEO"`.pid"
}


function check_2 {
DAY=`date +%A -d $DATE_US`
DATE=`echo $DAY | tr 'a-z' 'A-Z'`
if ([ "$DATE" = "SAMEDI" ] || [ "$DATE" = "DIMANCHE" ] ); then
	DATE="WEEK-END"
fi
if [ "$ALACARTE" = "yes" ] ; then
	if grep -q "$1" "$DOSSIER_CFG/alacarte" ; then
		download "$2" "$3" "$4"
	fi
else
	if grep -q "$1" "$DOSSIER_CFG/canal_config"; then
		download "$2" "$3" "$4"
	fi
fi
	DATE="$DD-$MM-$YY"
}

function emissions {

echo "emissionsss $2"
case "$2" in
ZAP) # le zapping
	NOM="le zapping"
	URL="http://www.canalplus.fr/index.php?pid=1830"
	$1 "$URL" "$NOM" ;;
PJA) # Petit Journal Actu
	NOM="le petit journal actu"
	URL="http://www.canalplus.fr/c-humour/pid2397-c-le-petit-journal.html?catId=608"
	$1 "$URL" "$NOM" ;;
GUI) # Guignols
	NOM="les guignols de l'info"
	URL="http://www.canalplus.fr/index.php?pid=1784"
	$1 "$URL" "$NOM" ;;
MET) # Météo
	NOM="la météo de Louise Bourguoin"
	URL="http://www.canalplus.fr/index.php?pid=2028"
	$1 "$URL" "$NOM" ;;
PJP) # Petit Journal People
	NOM="le petit journal people"
	URL="http://www.canalplus.fr/c-humour/pid2397-c-le-petit-journal.html"
 #http://www.canalplus.fr/c-humour/pid2397-c-le-petit-journal.html?catId=613
	$1 "$URL" "$NOM" ;;
TOP) # Top 5
	NOM="le top 5 de Thomas Ngijol"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=1282"
	$1 "$URL" "$NOM" ;;
SAV) # SAV des emissions
	NOM="le Service Après Vente des émissions"
	URL="http://www.canalplus.fr/index.php?pid=1782"
	$1 "$URL" "$NOM" ;;
BAQ) # Boite à questions
	NOM="la boite à questions"
	URL="http://www.canalplus.fr/index.php?pid=1786"
	$1 "$URL" "$NOM" ;;
RDP) # Revue de presse
	NOM="la revue de presse de Chris Esquerre"
	URL="http://www.canalplus.fr/c-humour/pid2681-c-chris-esquerre.html"
#	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=2582"
	$1 "$URL" "$NOM" ;;
STO) # Sebastien Tohen
	NOM="la chronique de Sebastien Tohen"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=2584"
	$1 "$URL" "$NOM" ;;
ADM) # L'avis de Mouloud
	NOM="l'avis de Mouloud"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=622"
	$1 "$URL" "$NOM" ;;
DSH) # Le daily show
	NOM="le daily show"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=722"
	$1 "$URL" "$NOM" ;;
SGU) # La chronique de Stephane Guillon
	NOM="la chronique de Stephane Guillon"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=682"
	$1 "$URL" "$NOM" ;;
IDB) #Blakowski
	NOM="Les infos de blako"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=684"
	$1 "$URL" "$NOM" ;;
CDA) #Le champion de l'actu
	NOM="Le champion de l'actu"
	URL="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=688"
	$1 "$URL" "$NOM" ;;
GRO) # Groland
	NOM="le Groland"
	URL="http://www.canalplus.fr/index.php?pid=1787"
	$1 "$URL" "$NOM" ;;
TAC) # Tetes à claques
	NOM="les têtes à claques"
	URL="http://www.canalplus.fr/index.php?pid=2170"
	$1 "$URL" "$NOM" 42 ;;
PEP) # Pépites sur le net
	NOM="les pépites du net"
	URL="http://www.canalplus.fr/c-humour/pid1778-c-pepites-sur-le-net.html"
	$1 "$URL" "$NOM" 42 ;;
MDH) # Le meilleur du hier
	NOM="le meilleur du hier"
	URL="http://www.canalplus.fr/index.php?pid=1831"
	$1 "$URL" "$NOM" 42 ;;
esac
}

function dossier {
	echo "# Creation du dossier ( $1 )";
	mkdir -p "$1" ;
}

function c_ping {

IP=`cat /etc/resolv.conf | grep nameserver |sed s'/^nameserver //'`
if [ "$IP" != "" ]; then
	for i in $IP
	do
		ping -c1 -w 5 -W 5 $i > /dev/null
		connectivite
	done
else connectivite
fi
}
function connectivite {
	if [ "${PIPESTATUS[0]}" != "0" ]; then
		zenity --question --title="Pas de connexion Internet" --text="Aucune connexion internet n'a été détectée. Veuillez vérifier vos connexions."
	fi
}
function playlist {
echo " nom video = $1"
if ! [ -z "$1" ] ; then
	echo "$1" >> "$PLAYLIST"
else echo "erreur dans la playslist"
fi
}

function appel_lecteur {

if cat $DOSSIER_CFG/download_failed >/dev/null ; then
	LOG=`cat $DOSSIER_CFG/download_failed`
	ERREUR="Cependant les vidéos suivantes n'ont pas été téléchargé :
	
$LOG"
fi

if cat $DOSSIER_CFG/download_success >/dev/null ; then
	SUCCESS=`cat $DOSSIER_CFG/download_success`
	rm "$DOSSIER_CFG/download_failed"
	rm "$DOSSIER_CFG/download_success"

fi

#if [ "$INTERFACE" = "GTK" ] ; then
if [ "`cat $PLAYLIST | wc -l`" != "1" ] ; then
	zenity --question --title="Fin du script" --text="Les dernières vidéos disponibles ont été téléchargées :

$SUCCESS

$ERREUR

La playlist est disponible dans $PLAY_DIR sous le nom de $PLAYLIST

Voulez vous lancer la lecture dans $LECTEUR_VIDEO ?"
	erreur

	"$LECTEUR_VIDEO" "$PLAYLIST" &
else zenity --error --title="Aucune vidéo !" --text="Aucune vidéo téléchargé"

fi
}
function produit {
if [ "$FONCTIONNEMENT" = "HIS" ] ; then
	VIDEO_FOLDERNAME=$DOSSIER/$2
elif [ "$FONCTIONNEMENT" = "HEM" ] ; then
	VIDEO_FOLDERNAME=$DOSSIER/$DD-$MM-$YY
else _config
fi
echo "prod nom $1"
for i in `ls "$DOSSIER/$1/"`
do
	playlist "$i"
	echo "==> $1 sous le nom de $i" >> $DOSSIER_CFG/download_success
done
}
function _playlist {
def_date

boucle_emissions produit
#produit
appel_lecteur
exit 0
}
function boucle_emissions {

for i in $EMISSIONS
do
	emissions $1 "$i"
done
delete_folder

#if [ "$INTERFACE" = "GTK" ] ; then

# | zenity --progress --auto-close --auto-kill --pulsate --width=400 \
#	--title="Téléchargement" \
#	--text="Téléchargement en cours... \n Vous pouvez arreter le script en cliquant sur Annuler"

}
function def_date {
if ([ "$OPTION_ext" = "-d" ] || [ "$OPTION_ext" = "--date" ] ); then
	DATE=`zenity --calendar --date-format=%d-%m-%y --text="Choix de la date"`
	erreur
else DATE=`date +%d-%m-%y`

fi
echo "$DATE"

DD=${DATE:0:2}
MM=${DATE:3:2}
YY=${DATE:6:2}
DATE_US="$YY-$MM-$DD"
echo `color 1 "Téléchargement des émissions du $DATE $DATE_US en cours..."`

PLAYLIST="$PLAY_DIR/$DATE-playlist.m3u"

echo "# http://vod-flash.canalplus.fr/" > "$PLAYLIST"
}

function clean {
echo nettoyage
if [ "$MEMOIRE" = "ECO" ] ; then
	if [ "$FONCTIONNEMENT" = "HIS" ] ; then
		if ls ??-??-?? >/dev/null ; then
		for i in `ls ??-??-??`
		do
			if [ "$i" != "$DD-$MM-$YY" ]; then
				rm -r $DOSSIER/$i
	
			fi
		done
		fi
	else 
		if ls "$i" >/dev/null ; then
		boucle_emissions del
		fi
	fi
else echo "mode gold"

fi

}

function del {
rm -r "$DOSSIER/$2" # non protégé TO DO
}
# MAIN

clear
# Début du script, initialisation des valeurs, création du répertoire Canal+
DOSSIER_CFG="$HOME/.config/canal_config"
dossier "$DOSSIER_CFG"
#Chargement des paramètre dans le MAIN
DOSSIER=`load_config "dossier="`
dossier "$DOSSIER"
EMISSIONS=`load_config "emissions="`
FONCTIONNEMENT="`load_config "fonctionnement="`"
QUALITE="`load_config "qualite="`"
LECTEUR_VIDEO=`load_config "lecteur="`
INTERFACE="`load_config "interface="`"
VERSION_CONF="`load_config "version="`"
FORMAT="`load_config "format="`"
MEMOIRE="`load_config "memoire="`"
CRON="`load_config "cron="`"
# Déplacement de la playlist dans un dossier adapté si le script utilise une des options historique
#PLAY_DIR=$DOSSIER

PLAY_DIR="$DOSSIER/playlists"
dossier "$PLAY_DIR"

DOSSIER_TEMP=$DOSSIER/telechargement
dossier "$DOSSIER_TEMP"

OPTION_ext="$1"

if [ "$QUALITE" = "HIGH" ] ; then
	QUALITE="H"
else
	QUALITE="L"
fi

cd $DOSSIER_TEMP

# Lancement automatique du script en mode config si la version du fichier .canal_config n'est pas la même que celle du script
if ( [ "$VERSION" != "$VERSION_CONF" ]||[ "$VERSION_CONF" = "" ]) ; then
	zenity --error --title="Fichier de configuration erroné => reconfiguration" --text="Votre fichier de configuration n'existe pas ou ne correspond pas à la version actuelle du script.
Lancement du script en mode configuration.

Si vous faites fonctionner le script en mode console et que Zenity n'est pas installé, merci de créer votre fichier de config.
Pour celà, inspirez vous de l'explication ici : http://forum.ubuntu-fr.org/viewtopic.php?pid=1762893#p1762893"
	_config	  #exit par _config
fi

clean

# Lancement de la vérification de mise à jour éventuelle
#maj_auto

c_ping

case "$OPTION_ext" in
-m|--menu)	_menu
OPTION_ext="--$OPTION"
#	set -- "--$OPTION"
#	if [ "$OPTION_ext" = "--" ]; then
#		set --
#	fi ;;
esac

case "$OPTION_ext" in
-h|--help)	_help;;
-l|--lanceur)	_lanceur;;
-c|--config)	_config;;
-p|--playlist)	_playlist;;
-b|--bug)	_bug;;
"-?"|--about)	_about;;  # a voir
-a|--alacarte)
	set -- "--date"
	ALACARTE="yes";;
-cr|--cron)	_cron;;
esac
def_date

if [ "$ALACARTE" = "yes" ]; then
	echo "ALACARTE">"$DOSSIER_CFG/alacarte"
	choix_emissions "$DOSSIER_CFG/alacarte"
	EMISSIONS=`cat "$DOSSIER_CFG/alacarte" | grep "emissions=" | sed "s/emissions=//"`
	echo $EMISSIONS
fi
boucle_emissions download
# | zenity --progress
appel_lecteur

exit 0

Dernière modification par yurek (Le 14/07/2008, à 13:59)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#409 Le 15/06/2008, à 20:56

yurek

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

en résumé presque toutes les fonctions ont été revu,
beaucoup d'amélioration dans le code, les chemin des fichiers sont ajouté,
le systeme de téléchargement est revu pour mieux fonctionner, meilleur utilisation de zenity,
correction du cron et interaction avec le fichier de configuration, utilisation du fichier de configuration amélioré
suppression de beaucoup de code inutile trop lourd
........... et j'en passe.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#410 Le 16/06/2008, à 07:34

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Il reste des trucs pas optimisés genre, des trucs que j'ai pas envie de remplacer ( les `` à la place de $(), les PIPESTATUS à la place de $?, et d'autres trucs que j'ai pas envie ), y'a des trucs carrément faux ( ligne 504 "if [ -z "$aVideos" ] ; then" c'est if -s $video_id puisque tu montre juste au dessus dans le else que si y'a pas d'aVideo on peut quand même avoir un $video_id )


Celà dit je garde quand même l'idée de la fonction load_config, j'ai été con de pas y penser plus tôt...


Sinon si tu comptes garder ce fork pour ton utilisation perso, peut être que ce serait plus optimisé d'utiliser un case dans la fonctions emissions (c'est ce que j'avais déja prévu de faire) et tu fera attention, ta fonction requis appelle aptitude avec sudo au lieu de gksudo wink


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#411 Le 16/06/2008, à 09:04

yurek

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Pour la ligne 504 j'ai pas trop réfléchis a ta méthode,je l'ai juste personalisé, je regarderai ca ce soir. sinon pour les choix perso comme on dis les gouts et les couleurs ne se discute pas !

Pour le reste je verrais.

Y'a juste un truck qui me manque encore c'est la vérification des téléchargement déja effectué qui doit se faire sur les vidéos présentes et aussi la correction de la fonction playlist qui ne marche pas. Donc si tu vois les erreurs ...

A toute pour de nouvelles aventures.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#412 Le 16/06/2008, à 09:19

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

La vérification des téléchargements effectués ?
Sinon j'ai pas trop le courage de vérifier les erreurs de ton script, donc à moins ce que l'erreur soit commune...

Sinon la ligne 504 c'est pas question de gout et de couleurs :
[496-499] : Si y'a pas de $2, on cherche le aVideo et on se sert de ce même aVideo pour trouver video_src
[500-501] : Si y'a un $2 on va directement chercher le $video_src (donc y'a pas de aVideo)
Donc c'est bête de dire qu'il n'y a pas de vidéo si y'a pas de aVideo vu que 3 émissions n'en ont pas besoin wink



Sinon je pense enlever la vérification des vidéos présentes ou non...
Ca arrive de plus en plus souvent que le site de canal mette une vidéo du jour avec la date du lendemain (ou l'inverse), du coup quand on lance le script il veut rien dl, j'enlève la fonction pour le moment, si ça vous embête je la remettrais mais bon je pense pas que ce soit nécessaire... A moins ce qu'il y ai d'autres méthodes...

EDIT :j'ai l'impression que la fonction -nc de wget ferait l'affaire, non ?

Dernière modification par Ras' (Le 16/06/2008, à 09:20)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#413 Le 16/06/2008, à 11:50

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Enigme pour les gens qui s'ennuient : Comment automatiser l'installation des dépendances ?

J'avais pensé à :

if ! [[ $choix == "FLV" ]] 
then
	if [[ "$choix" == "IPOD" ]] || [[ "$choix" == "PSP" ]]
	then
		if [[ !  `which ffmpeg` ]]; then dependances="ffmpeg"
		elif [[ !  `which faac` ]]; then dependances="$dependances faac"
		elif [[ !  `which libfaac0` ]]; then dependances="$dependances libfaac0"
		fi
	elif [[ "$choix" == "MKV" ]]
	then
		if [[ !  `which ffmpeg` ]]; then dependances="ffmpeg"
		elif [[ !  `which ffmpeg2theora` ]]; then dependances="$dependances ffmpeg2theora"
		fi
	else dependances="mencoder"
	fi
if ! [[ -z $dependances ]]
then
text="Le Script à besoin de votre mot de passe utilisateur pour :
_Installer les paquets suivants (nécessaires pour effectuer les conversions vidéos) :

    $dependances

_Créer le fichier /etc/apt/sources.list.d/medibuntu.list
(sources des dépots medibuntu)

Ce mot de passe ne sera évidemment pas sauvegardé ni utilisé ultérieurement par le script."
zenity --warning --title="Droits root nécessaire" --text="$text" 
echo "deb http://fr.packages.medibuntu.org/ hardy free non-free" >> medibuntu.list
( gksudo "cp -f medibuntu.list /etc/apt/sources.list.d/"
sudo apt-get update
sudo apt-get install -y $dependances ) | zenity --progress --pulsate --auto-close
sudo -k
text="Les dépendances ont été installées."
zenity --info --title="Dépendances installées" --text="$text"
fi
fi

Mais ça marche pas.
Quand on le lance en console il demande le mot de passe gksudo (normal) copie bien le fichier medibuntu, mais par contre demande le mot de passe sudo de la ligne d'après en console...
Donc forcément quand on le lance via un raccourci ça marche pas...

Faut faire un 2° script dépendances ? ou y'a une solution ?
Parce que gksudo apt-get install c'est sale, et je sais même pas si ça marche...

D'ailleurs je comprend pas pourquoi sudo et gksudo sont différent ?







Deuxième question :
Est ce que quelqu'un peut m'aider à trouver comment trouver l'adresse de la vidéo pour les pépites du net ? J'y ai passé une partie de la matinée mais impossible de trouver la faille...
http://www.canalplus.fr/index.php?pid=1778

merci !


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#414 Le 16/06/2008, à 12:00

MulX

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Salut

echo "deb http://fr.packages.medibuntu.org/ hardy free non-free" >> medibuntu.list

Déjà avant de rajouter le dépôt medibuntu peut être vérifier la présence (grep -r -i "medibuntu" /etc/apt/ -q )

Ensuite pour le mdp
peut être avec

sudo -S < $passwd

En gros saisir le mdp par l'interface est l'injecter dans sudo par stdin mais au niveau sécurité hmm

voilà pour le script smile

EDIT : Est pourquoi ne pas utiliser un case pour les dépendances ? (enfin j'ai fait qu'une lecture rapide mais ça me semble adapter)

Dernière modification par MulX (Le 16/06/2008, à 12:02)


Tchous, MulX. -- PlayOnLinux :) -- Gopherspace !   -- 6 * 9 = 42 (si si) --  Humph? -- Follow me!

Hors ligne

#415 Le 16/06/2008, à 12:08

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

oui, j'avais pas vérifié la présence des dépots medibuntu parce que ça me donnait une "excuse" pour récupérer le mdp et l'utiliser pour l'install ensuite...


Je comprend pas très bien le coup du sudo -S, faudrait faire :

sudo -S < $( zenity --entry --title="Mot de passe Gmail" --text="Saisissez votre mot de passe :" --hide-text )

?

La seule faille de sécurité c'est que quelqu'un intercepte ce qu'on tape au clavier à ce moment là, non ? (je me rapelle plus le nom du procédé...)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#416 Le 16/06/2008, à 12:25

MulX

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

keyloggin/logger ?
Je sais que gksudo si tu ouvre un menu et que tu le lance (avec le menu d'ouvert, passer par sleep pour faire ça) il t'envoie au trou

Sinon pour la commande je pense que ça doit être ça (mais la je ne peux pas vérifier parce que sudo sous windows ou solaris hmm )

Si tu as un nunux sous la main essaye ça :

sudo -S < $(echo "monSuperMotDepasse") echo "I am $(whoami) :o "

Si tu es root c'est bon, sinon ...


Tchous, MulX. -- PlayOnLinux :) -- Gopherspace !   -- 6 * 9 = 42 (si si) --  Humph? -- Follow me!

Hors ligne

#417 Le 16/06/2008, à 13:15

MulX

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Je ne peux pas confirmer mais je crois avoir trouver pour pépite du net cool
Prend des notes parce que c'est vraiment pas simple mad
Donc tu va sur cette page : http://www.canalplus.fr/c-humour/pid1778-c-pepites-sur-le-net.html dans le source tu as : "/processus/page/commun/xt_mea_trombi.php?page_id=1778&zone_template_id=3329&langue_id=1"
Tu va donc sur cette page : http://www.canalplus.fr/processus/page/commun/xt_mea_trombi.php?page_id=1778&zone_template_id=3329&langue_id=1  (merci d'avoir mis un peu de commentaire dans le script tongue )
La une erreur (avec FF) mais c'est pas grave comme bon "hacker" tu regarde a nouveau le source smile
Tu devrais te retrouver dans le code en gros tu as un truc comme ça :

				<div class="content_video" id="video_3" style="cursor:pointer;background-color: black; width:79px;" onmouseover="javascript:putPhotoOff(3);" onmouseout="javascript:putPhotoOn(3);" onclick="javascript:viewVideo(3, 'P%E9pites%20du%2022%2F05%2F08', 'R%E9sum%E9%20des%20vid%E9os%20%E9chang%E9es%20et%20d%E9couvertes%20sur%20le%20net', '128476')"><img src="http://media.canal-plus.com/wwwplus/image/4/4/2/PEPITES_SUR_LE_NET_EMISSION_080522_CAN_31242_image_L.jpg" width="79" height="59"></div>

				<div class="content_text_trombi" id="texte_video_3" style="cursor:pointer;" onmouseover="javascript:putPhotoOff(3);" onmouseout="javascript:putPhotoOn(3);" onclick="javascript:viewVideo(3, 'P%E9pites%20du%2022%2F05%2F08', 'R%E9sum%E9%20des%20vid%E9os%20%E9chang%E9es%20et%20d%E9couvertes%20sur%20le%20net', '128476')">
					<div class="text_noir tt-noir10">Pépites du 22/05/08</div>
					<div class="text_gris txt-gris10">22 mai       2008</div>
				</div>

et la vidéo c'est ça : 128476 smile
Ensuite faut récupérer le lien vers le .flv donc on va ici : http://www.canalplus.fr/flash/xml/configuration/configuration-embed-video-player.php?xmlParam=128476
la tu regarde a nouveau le source (sur une page qui semble vide) et tu as une ligne comme ça : http://www.canalplus.fr/flash/xml/module/embed-video-player/embed-video-player.php?video_id=128476&pid=
Donc bien sur on va dessus et la enfin, on trouve dans le code : http://vod-flash.canalplus.fr/PEPITES_SUR_LE_NET_EMISSION_080522_CAN_31242_video_H.flv

Donc voilà si quelqu'un peut confirmer qu'il s'agit bien l'émission du 22 mai 2008

PS : Je sais pas pourquoi mais si j'ai bon je sens que pour coder ça va être rigolo ^^


Tchous, MulX. -- PlayOnLinux :) -- Gopherspace !   -- 6 * 9 = 42 (si si) --  Humph? -- Follow me!

Hors ligne

#418 Le 16/06/2008, à 13:18

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Non ça veut pas.
C'est relou j'ai pas envie de faire un autre script pour les dépendances...


EDIT : je parlais du sudo

Merci pour les pépites du net smile
J'avais déja trouvé le lien, buggé dans Fx du coup j'ai cru que la page n'existait pas ><'
j'suis vraiment un hacker de bac à sable...

par contre à coder ça devrait pas être bien difficile, à coup de grep/sed c'est vite fait. je m'occupe de ça en fin d'après midi, j'ai un déménagement en daemon ^^



Je suis toujours à la recherche d'une solution pour les dépendances wink


RE EDIT :
redisded, dans ton script tu fais
gksudo apt-get install -y $dependances

Ça marche ?
C'est pas sale comme méthode ?
Je teste ça aussi en fin d'après midi wink

Dernière modification par Ras' (Le 16/06/2008, à 13:25)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#419 Le 16/06/2008, à 13:23

MulX

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Et si pour les dépendances tu utilise le protocole apt:// ?

Auto réponse a moi même pour pépite du net je confirme que c'est bon cool
Il suffit quand on a un débit de .... de prendre le lien http://vod-flash.canalplus.fr/PEPITES_SUR_LE_NET_EMISSION_080522_CAN_31242_video_L.flv plutôt que http://vod-flash.canalplus.fr/PEPITES_SUR_LE_NET_EMISSION_080522_CAN_31242_video_H.flv


Tchous, MulX. -- PlayOnLinux :) -- Gopherspace !   -- 6 * 9 = 42 (si si) --  Humph? -- Follow me!

Hors ligne

#420 Le 16/06/2008, à 13:26

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

firefox apt://$dependances ?
c'est lourd mais si y'a que ça...


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#421 Le 16/06/2008, à 13:30

redisded

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Ras' a écrit :

Faut faire un 2° script dépendances ? ou y'a une solution ?
Parce que gksudo apt-get install c'est sale...

Euh ... tite question d'ignorant : tu peu m'expliquer rapidement pourquoi c'est sale? parce que c'est ce que j'ai fait dans mon script de conversion roll

Ras' a écrit :

et je sais même pas si ça marche...

chez moi si wink

EDIT : oups dsl j'avais pas rafraichi la page donc oui ca marche chez moi par contre est-ce que c'est sale... bah je sais pas moi ca m'a pas choqué sur le coup mais ca veut pas dire que c'est pas sale wink

Dernière modification par redisded (Le 16/06/2008, à 13:33)

Hors ligne

#422 Le 16/06/2008, à 13:34

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Ben j'imagine que c'est pas propre, sur le chat on m'a dit :
sudo apt-get install
gksudo synaptic

ensuite le pourquoi du comment j'en sais rien ...
Je te laisse chercher ^^


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#423 Le 16/06/2008, à 13:37

redisded

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Ben dans le pire des cas tu lance un gksudo synaptic en donnant à l'user les dependances necessaires pour chaque format de conversion, ca reste user-friendly quand meme wink

Hors ligne

#424 Le 16/06/2008, à 13:39

MulX

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

Ouai sinon il y a un moyen (que j'ai oublier) de lancer direct l'install avec l'interface de synaptic
Mais je certifie que gksudo ne pas conseiller pour des prog console (ne pas me demander pourquoi)


Tchous, MulX. -- PlayOnLinux :) -- Gopherspace !   -- 6 * 9 = 42 (si si) --  Humph? -- Follow me!

Hors ligne

#425 Le 16/06/2008, à 13:45

Ras&#039;

Re : [script/bash] Télécharger de nombreuses quotidiennes de canal+

MulX a écrit :

Ouai sinon il y a un moyen (que j'ai oublier) de lancer direct l'install avec l'interface de synaptic

Si tu entends par la ouvir synaptic avec les logiciels cochés et plus qu'a valider ça m'interesse smile


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne