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.

#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)

BUREAU 1
258297171.jpg
BUREAU 2
594531932.jpg

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 ! lol

Hors ligne

#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... big_smile
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! wink

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)

Hors ligne

#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