#1 Le 24/02/2012, à 14:25
- Saturnin51
Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
Bonjour,
j'ai récupéré sur un forum anglophone un script permettant d'afficher l'image astronomique du jour avec ses explications.
Après récupération de l'image et du texte, les deux sont mixés pour construire l'image finale.
Le problème est que le texte ne semble pas comporter de retour ligne. Aussi on ne voit que le début du texte sur une seule ligne qui déborde de l'écran.
Quelqu'un pourrait-il arranger cela ?
D'avance merci.
Le script :
#!/bin/sh -xv
#
# downloads today's Astronomy Picture of the Day
# and sets it as wallpaper
#
# Adjust SCREEN_GEOMETRY for your needs
#
# Version 1.4
# A. Dominik, 19. Oct 2011SCREEN_GEOMETRY="1366x768"
APOD_URL="http://apod.nasa.gov/apod/"
FILE_URL="http://apod.nasa.gov/apod/astropix.html"
ORIGINAL="raw.html"
ORI_NO_HEAD="raw-no-head.html"
IMAGE_URL="http://dummy.jpg"
IMAGE_NAME="dummy.jpg"WALLPAPER_NAME="apod.png"
WALLPAPER_TEMP_NAME="temp.png"
WALLPAPER_TXT="apod.txt"IMAGE_TITLE="dummy"
IMAGE_TITLE_FILE="title.txt"
IMAGE_EXPL="dummy"
IMAGE_EXPL_FILE="explanation.txt"HOME_DIR=$HOME
WORK_DIR="${HOME}/.apod"TEMP1="tempfile1"
TEMP2="tempfile2"#
# Read config file:
#
. ${WORK_DIR}/apod-wallpaper.config#
# Check for working dir:
if ! test -d $WORK_DIR
then
echo "Directory $WORK_DIR not found"
exit
ficd $WORK_DIR
#
# check for internet connection:
#
wget www.google.comI_NET=$?
if ! test $I_NET -eq 0
then
echo "No internet connection"
exit
fi#
# test for a filename to download
#
if test $# -gt 0
then
FILE_URL="$1"
fi#
# get html page
#
wget $FILE_URL -O $ORIGINAL#
# extract image url
# extract image name
# and download hi-res image
#
IMAGE_URL=$(cat $ORIGINAL | grep 'href="image' | head -1 | \
sed 's/<a href="/ /g' | sed 's/"/ /g' | sed 's/>/ /g' |\
awk '{print( "http://apod.nasa.gov/" $1)}')IMAGE_NAME=$(echo $IMAGE_URL | sed 's+/+ +g' | awk '{print( $NF)}' | sed 's/\"//g')
wget $IMAGE_URL -O $IMAGE_NAME
#
# extract title
# and remove html tags
#
# The following part of the code tries to find the lines in the APOD HTML
# page, that holds title and explanation.
# Due to slight changes of the file format, it may not work properly for
# all historic APOD pages.
#
# make files nice
# Some HTML tags lower:
#
cat $ORIGINAL | \
sed 's/<CENTER>/<center>/g;s/<\/CENTER>/<\/center>/g;s/<B>/<b>/g;s/<\/B>/<\/b>/g' > $TEMP1# Add line breaks after center tags:
#
cat $TEMP1 | \
sed 's/<center><b>/<center>\n<b>/g' > $TEMP2# Add line breaks after word Explanation:
#
cat $TEMP2 | \
sed 's/Explanation<\/b>/Explanation\n<\/b>/g;s/Explanation:<\/b>/Explanation:\n<\/b>/g;' > $TEMP1# Remove page header
# del all up to image link
#
cat $TEMP1 | \
awk 'BEGIN {MOD = 0} { if (MOD==1) {print}; if ($0 ~ "href=\"image") {MOD = 1}}' | \
awk 'NR>2 { print }' > $ORI_NO_HEAD
# del all up to 2nd center
cat $ORI_NO_HEAD | \
awk 'BEGIN {MOD = 0} { if (MOD==1) {print}; if ($0 ~ "<center>") {MOD = 1}}' > $TEMP1# Extract line with title and
# trim title; i.e. remove html, trim and remove line breaks
#
cat $TEMP1 | awk 'NR==1 {print}' > $TEMP2
cat $TEMP2 | sed 's/<[^>]*>//g;s/^ *//g;s/ *$//g;s/ \{1,\}/ /g;s/[\n\r]/ /g' > $IMAGE_TITLE_FILEcat $IMAGE_TITLE_FILE
#
# extract explanation
# and remove html tags
#
# del all up to 1st Explanation
#
cat $ORI_NO_HEAD | \
awk 'BEGIN {MOD = 0} { if (MOD==1) {print}; if ($0 ~ "Explanation") {MOD = 1}}' > $TEMP1# del all from next center
cat $TEMP1 | \
awk 'BEGIN {MOD = 1} { if ($0 ~ "<center>") {MOD = 0}; if (MOD==1) {print}}' > $TEMP2# remove html, line breaks and unneeded spaces:
#
cat $TEMP2 | tr '\012' ' ' | tr '\015' ' ' | \
sed 's/<[^>]*>//g;s/^ *//;s/ *$//;s/ \{1,\}/ /g' > $IMAGE_EXPL_FILEcat $IMAGE_EXPL_FILE
#
# create annotated image with imagemagick
#
convert $IMAGE_NAME -resize ${SCREEN_GEOMETRY}^ $IMAGE_NAME
convert $IMAGE_NAME -gravity center -extent ${SCREEN_GEOMETRY}+0+0 $IMAGE_NAMEconvert $IMAGE_NAME -fill white -pointsize 12 -gravity NorthWest -annotate +10+70 "@$IMAGE_EXPL_FILE" -pointsize 20 -annotate +30+30 "@$IMAGE_TITLE_FILE" $IMAGE_NAME
composite -gravity NorthEast -geometry +0+100 ubuntu-550.png $IMAGE_NAME $WALLPAPER_TEMP_NAME
if test -s $WALLPAPER_TEMP_NAME
then
mv $WALLPAPER_TEMP_NAME $WALLPAPER_NAME
fi#
# create text file with annotation:
#
IMAGE_ANNOTATION_TXT="${IMAGE_NAME}.txt"
echo "$IMAGE_NAME" > $IMAGE_ANNOTATION_TXT
echo "\n Title: " >> $IMAGE_ANNOTATION_TXT
cat $IMAGE_TITLE_FILE >> $IMAGE_ANNOTATION_TXT
echo "\n Explanation: " >> $IMAGE_ANNOTATION_TXT
cat $IMAGE_EXPL_FILE >> $IMAGE_ANNOTATION_TXT# Remove all temporary files:
#
rm -f $TEMP1 $TEMP2
rm -f $ORIGINAL $ORI_NO_HEAD
rm -f $IMAGE_TITLE_FILE $IMAGE_EXPL_FILE
rm -r $IMAGE_NAME $WALLPAPER_TEMP_NAME
mv $IMAGE_ANNOTATION_TXT $WALLPAPER_TXT
rm -f index.*#
# Set as wallpaper (Gnome):
#
gconftool-2 -t str --set /usr/share/backgrounds/picture_filename "${WORK_DIR}/${WALLPAPER_NAME}"
mv /home/robert/.apod/apod.png /home/robert/Images/apod.png
Le fichier de configuration contient les lignes suivantes:
#
# Configuration for APOD wallpaper
#
SCREEN_GEOMETRY="1366x768"
#SCREEN_GEOMETRY="1920x1200"
#SCREEN_GEOMETRY="1280x800"
#SCREEN_GEOMETRY="1280x960
#SCREEN_GEOMETRY="1024x768"
Merci d'avance.
Dernière modification par Saturnin51 (Le 17/08/2012, à 17:55)
Hors ligne
#2 Le 25/02/2012, à 20:14
- pode
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
Tu peux rajouter une étape intermédiaire de formatage à l'aide de la commande fmt.
Par exemple avec les modifications suivantes (modifications affichées avec l'outil diff) :
$ diff -u astro.sh.orig astro.sh
--- astro.sh.orig 2012-02-25 19:00:50.236610861 +0100
+++ astro.sh 2012-02-25 19:02:56.277869989 +0100
@@ -145,7 +145,10 @@
# remove html, line breaks and unneeded spaces:
#
cat $TEMP2 | tr '\012' ' ' | tr '\015' ' ' | \
- sed 's/<[^>]*>//g;s/^ *//;s/ *$//;s/ \{1,\}/ /g' > $IMAGE_EXPL_FILE
+ sed 's/<[^>]*>//g;s/^ *//;s/ *$//;s/ \{1,\}/ /g' > $TEMP1
+
+ # formatage pour texte long - limite de 250 ecrite en dur
+ fmt -w 250 $TEMP1 > $IMAGE_EXPL_FILE
cat $IMAGE_EXPL_FILE
La coupure à 250 est à tester et éventuellement à adapter.
Si tu ne comprends pas la sortie de la commande diff, le plus simple est de :
1. Faire une sauvegarde de ton script
2. Recopier le résultat complet de la commande diff dans un fichier nommé astro.patch
3. Exécuter la commande suivante (en remplaçant nomDuScript.sh par le nom de ton script) :
patch -p0 nomDuScript.sh < astro.sh.patch
Hors ligne
#3 Le 25/02/2012, à 23:10
- Saturnin51
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
Génial ! Résultat impeccable, j'en suis très heureux ! Merci beaucoup.
Sans vouloir abuser, pourrait-on faire en sorte que ce texte puisse être replier et déplier en cliquant sur un bouton, comme dans la version Windows ?
Dernière modification par Saturnin51 (Le 25/02/2012, à 23:17)
Hors ligne
#4 Le 26/02/2012, à 10:09
- michcauch
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
Bonjour,
Je suis intéressé pour utiliser ce script, peux-tu, s'il te plait en donner le mode d'emploi ?
Voici ce que j'ai fait (et qui ne fonctionne pas)
J'ai enregistré
- le premier script (en modifiant les chemins selon ma configuration) sous le nom apod.sh
- celui de pode sous le nom astro.sh.patch
- j'ai lancé selon le commande donnée par pode
Cela donne ceci avec un message d'erreur
michel@bureau-michel:~/bin$ patch -p0 apod.sh < astro.sh.patch
patching file apod.sh
Hunk #1 FAILED at 145.
1 out of 1 hunk FAILED -- saving rejects to file apod.sh.rej
de plus je ne sais pas que faire du fichier de configuration.
Merci d'avance pour tes explications.
Cordialement
Michel
___
Ubuntu 22.04 sur Clevo N141WU
Hors ligne
#5 Le 26/02/2012, à 11:29
- Saturnin51
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
Je n'ai pas su non plus utiliser la commande $diff ou le script (?). Aussi j'ai inséré manuellement la ligne de formatage (la ligne sed et la ligne fmt) dans le script directement.
Voici l'adresse ou trouver le package complet avec des explications d'installations :
Hors ligne
#6 Le 26/02/2012, à 11:45
- pode
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
pourrait-on faire en sorte que ce texte puisse être replier et déplier en cliquant sur un bouton, comme dans la version Windows ?
La commande convert a créé une image statique au format JPEG
Est-ce que c'est possible de faire ce que tu dis avec convert ou un autre outil, je ne sais pas.
- j'ai lancé selon le commande donnée par pode
Cela donne ceci avec un message d'erreurmichel@bureau-michel:~/bin$ patch -p0 apod.sh < astro.sh.patch patching file apod.sh Hunk #1 FAILED at 145. 1 out of 1 hunk FAILED -- saving rejects to file apod.sh.rej
Pour ce qui est de la partie modifiée, l'utilisation de la commande patch est juste une possibilité, au cas où le résultat de la commande diff n'était pas compris.
La commande patch a échoué car tu as dû modifié le script de telle façon que, par exemple, les lignes sont décalées.
La ligne 145 du fichier, avant exécution de la commande patch, doit être la ligne :
# remove html, line breaks and unneeded spaces:
Sinon, sans passer par la commande patch, le but final est simplement de remplacer la ligne :
sed 's/<[^>]*>//g;s/^ *//;s/ *$//;s/ \{1,\}/ /g' > $IMAGE_EXPL_FILE
par les lignes :
sed 's/<[^>]*>//g;s/^ *//;s/ *$//;s/ \{1,\}/ /g' > $TEMP1
# formatage pour texte long - limite de 250 ecrite en dur
fmt -w 250 $TEMP1 > $IMAGE_EXPL_FILE
Je n'ai pas su non plus utiliser la commande $diff ou le script (?). Aussi j'ai inséré manuellement la ligne de formatage (la ligne sed et la ligne fmt) dans le script directement.
Par convention, lorsqu'on donne des commandes à taper en ligne de commande, on met souvent un prompt en début de chaque ligne, pour faciliter la lecture (c'est notamment pratique quand on a des commandes très longues, pour voir rapidement où se trouve le début de chaque commande).
Par convention, pour un compte non root, on met souvent $ (ou %)
Par convention, pour le compte root, on met souvent #
Hors ligne
#7 Le 26/02/2012, à 16:27
- Saturnin51
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
Merci encore une fois pour ta disponibilité et tes explications. J'avais pratiqué Linux il y a bien longtemps et je constate que cela a bien évolué, en bien !
Hors ligne
#8 Le 06/03/2012, à 04:24
- Watael
Re : Script pour afficher l'image du jour APoD sur le bureau. [Terminé]
salut,
une version allégée du script de Andreas Dominik
#!/bin/bash
#set -x
ping -c1 google.com &>/dev/null || { echo "pas de connexion internet :("; exit 1;}
declare -A img
destRep="/tmp"
tmpFile="/tmp/astropix.html"
addr="http://apod.nasa.gov/apod/astropix.html"
wget "$addr" -qO "$tmpFile"
img[addr]="${addr%/*}/$(sed -n 's/^<a href="\(image[^"]*\)".*/\1/p' "$tmpFile")"
if [ "${img[addr]}" != "${addr%/*}/" ]
then
img[title]=$(sed -n '/<b>.*<br>/{s/<[^>]*>\( \|$\)//gp;q}' "$tmpFile")
img[DL]="$destRep/${img[addr]##*/}"
wget "${img[addr]}" -qO "${img[DL]}"
img[comment]=$(sed -n '/Explanation:/,/<p>/{s/<[^>]*>//g;s/<[^$]*//g;/^<.*/d;s/^[^>]*>//g;/^$/d;p}' /tmp/astropix.html | fmt -w150)
img[geom]="1280x1024"
convert "${img[DL]}" -resize ${img[geom]}^ \
-gravity center -extent ${img[geom]}+0+0 \
-fill white \
-gravity NorthWest \
-pointsize 20 \
-annotate +30+30 "${img[title]}" \
-pointsize 12 \
-annotate +10+70 "${img[comment]}" "${img[DL]}"
gconftool-2 -t str --set /usr/share/backgrounds/picture_filename "${img[DL]}"
else
echo "Allo Houston ? Nous avons un problème !"
fi
mais aujourd'hui ça ne fonctionne pas : le site fait un lien vers une vidéo sur youtube.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne