#1 Le 07/06/2014, à 13:25
- betasub
[script/sh] Un téléchargeur de fond d'écrans bing
Salut à tous, j'ai fait un petit script que je voulais partager avec vous.
Il va télécharger le fond d'écran bing du jour sur un site qui les archive, et le met en fond d'écran.
Il met celui de la veille sur le bureau 2.
Je vais essayer de le faire évoluer pour gérer dynamiquement n Bureaux.
Le code est perfectible sur quelques points, j'en ai conscience, et je sais déjà où améliorer certaines choses, mais j'ai essayé de traiter différents cas de figure pour ne pas télécharger 2 fois la même image, si l'ordinateur n'a pas été allumé de plusieurs jours... Soyez indulgent, je débute en shell même si j'ai déjà programmé durant mes études.
Je l'ai rajouté à mon autostart.
Je gère les fonds d'écran avec pcmanfm mais c'est adaptable bien sûr.
J'attends vos avis et suggestions!
#!/bin/sh
#ce script télécharge le fond d'écran du jour de Bing et le met en fond d'écran.
#il met celui de la veille sur le bureau 2 ou bien le premier qu'il trouve plus vieux
#volontairement et pour ne pas compliquer le code, on ne télécharge pas le fichier de la veille
#il s'agit d'un roulement, et lors de la première exécution, il faudra soit les télécharger manuellement
#soit attendre un jour
#----------------------------------
#----------------------------------
fichier_temp="/home/tristan/.scripts_perso/tampon"
destination="/home/tristan/Images/.fond_ecran"
#----------------------------------
#----------------------------------
#boucle infinie
while true
do
calend=$(date +%Y%m%d)
#si le fond d'écran du jour n'existe pas, alors on lance la procédure
if [ ! -f "$destination/bing_$calend.jpg" ]
then
#télécharge le code source de la page
wget "http://www.istartedsomething.com/bingimages/index.php" -O "$fichier_temp/temp.txt"
#si le téléchargement a été concluant, alors on continue
if [ $? -eq 0 ]
then
#on extrait l'adresse de la dernière image
grep "jpg" <"$fichier_temp/temp.txt"> "$fichier_temp/temp1.txt"
sed -n '$ p' <"$fichier_temp/temp1.txt"> "$fichier_temp/temp.txt"
tr "=" "\n" <"$fichier_temp/temp.txt"> "$fichier_temp/temp1.txt"
tr "&w" "\n" <"$fichier_temp/temp1.txt"> "$fichier_temp/temp.txt"
grep "jpg" <"$fichier_temp/temp.txt"> "$fichier_temp/temp1.txt"
#on lit la dernière photo disponible
while read line
do
fond_actuel="$line"
done < "$fichier_temp/temp1.txt"
#on lit la dernière photo que l'on a téléchargé
while read line
do
prec_fond="$line"
done < "$fichier_temp/previous.txt"
#si elles sont différentes, alors on lance la procédure de téléchargement
if [ "$fond_actuel" != "$prec_fond" ]
then
#on purge les fichiers temporaires
rm -f "$fichier_temp/previous.txt"
rm -f "$fichier_temp/temp.txt"
rm -f "$fichier_temp/temp1.txt"
#on stocke la nouvelle image téléchargée
cp "$fichier_temp/temp1.txt" "$fichier_temp/previous.txt"
#téléchargement de l'image
wget "http://www.istartedsomething.com/bingimages/cache/$fond_actuel" -O "$destination/bing_$calend.jpg"
#si le téléchargement a été concluant, alors on continue
if [ $? -eq 0 ]
then
#on met en place le fond d'écran de la veille sur le bureau 1
wmctrl -s 0
pcmanfm -w "$destination/bing_$calend.jpg" --wallpaper-mode=stretch --one-screen
#et celui de l'avant veille sur le bureau 2
#on détermine la date de la veille
calend=`expr $calend - 1`
#initialisation du compteur (pour ne pas rentrer dans une boucle infinie si on ne trouve jamais de fichiers plus vieux)
compt=0
#tant que le fichier correspondant n'est pas trouvé, on recule d'un jour (si l'ordinateur n'est pas allumé de plusieurs jours) mais on s'arrête à 10 jours avant!
while [ ! -f "$destination/bing_$calend.jpg" ] && [ $compt -le 10 ]
do
#on incrémente le compteur
compt=`expr $compt + 1`
#on décrémente la date
calend=`expr $calend - 1`
done
wmctrl -s 1
pcmanfm -w "$destination/bing_$calend.jpg" --wallpaper-mode=stretch --one-screen
fi
fi
fi
fi
sleep 3600
done
exit 0;
#travailler sur le changement de bureau
#gérer n bureaux
#créer les dossiers et fichiers s'ils n'existent pas (previous)
Tristan
Dernière modification par betasub (Le 08/06/2014, à 11:57)
Hors ligne
#2 Le 07/06/2014, à 14:41
- bruno
Re : [script/sh] Un téléchargeur de fond d'écrans bing
while [ 1 = 1 ]
do
Maginfique !
#3 Le 07/06/2014, à 14:51
- betasub
Re : [script/sh] Un téléchargeur de fond d'écrans bing
J'avoue... Mais ça marche...
Le coté algo ne me gêne pas mais je débute en Shell je ne me prends pas trop la tête. Mais je suis ouvert aux critiques constructives et suggestions!
Tristan
Hors ligne
#4 Le 07/06/2014, à 14:58
- bruno
Re : [script/sh] Un téléchargeur de fond d'écrans bing
Bon tu aurais pu faire la même chose avec :
while true
et des tas d'autres variantes.
Même si le web regorge de script bash avec des boucles infinies, je considère cela comme une très mauvaise pratique… Il faut se poser la question : Ai-je vraiment besoin de faire cela ?
Dans la plupart des cas : non et particulièrement ici. Tu n'as pas besoin de refaire toutes ces actions en permanence, seulement une fois par jour.
Il te suffit de prendre le script qui est à l'intérieur de ta boucle (on télécharge le fond d'acran du jour et on le place comme fond d'écran de bureau) et de créer une tâche cron pour qu'il s'exécute une fois par jour.
Dernière modification par bruno (Le 07/06/2014, à 14:59)
#5 Le 07/06/2014, à 15:10
- betasub
Re : [script/sh] Un téléchargeur de fond d'écrans bing
Oui j'y ai pensé, mais je n'ai pas trop regardé comment ça se passait si mon pc était éteint ou sans connexion internet comme c'est souvent le cas. Je vais lire un peu comment ça marche cron et anacron. Merci pour ton avis en tout cas.
Hors ligne