Tot seguit us ofereixo l'script amb el que configurarem un usuari del sistema per a que es vagi decarregant les imatges i comentaris en anglès des de la p@ gina APOD/NASA i la seva traducció al castell@ des de AstroRED (sempre respectant-ne els crèdits). Com a requisits necessitareu tindre instal·lat el programa Image MagickTM, és el que farem servir per a, si escau, crear una miniatura amb la que poder-se llegir el comentari del dia amb més comoditat.
A banda d'això aconseguirem un repositori molt ben ordenat del que en podrem fer còpies de seguretat (de les còpies de seguretat us n'haureu de cuidar vosaltres mateixos) i us aniré documentant fil per randa cada pedaç de l'script, de manera que us atreviu a modificar aquest o "qualsevol" altre.
L'artricle preten ser germ@ de l'article Espléndidas im@¡genes para el escritorio (en castell@ ) que hi ha a la web BULMA, naturalment haig de fer obligada menció al seu autor, en Jean-René Mérou, H (http://h.says.it/), per als demés crèdits llegiu-vos la capçalera de l'script.
Naturalment tot escriptori que desitgi competir disposa de l'opció per a mostrar fons amb imatges aleatòries, però em de tindre en compte que no tinc la intenció d'instal·lar-los tots per a documentar-ho, així que ho deixò tal qual i ja investigareu pel vostre compte, si m'ho indiqueu als comentaris millor.
Configuració amb un usuari del sistema:
L'script el podeu descarregar directament des d'aquí.
- Ara ubiqueu-lo al directori "~/bin" (aquest ser@ el directori "bin" en el nivell base del vostre usuari).
- Doneu-li permissos d'execució amb el comandament de consola "chmod 700 ~/bin/astres.sh"
- Configuració per a la desc@ rrega autom@ tica:
Hi ha dos modes de fer-ho, manualment des de la consola amb el comandament "crontab", el qual passa les ordres al dimoni "cron" o usant el programa "KCron" del paquet kdeadmin de KDE.
- crontab; la línia de comandaments és "crontab -u nom_usuari -e" el qual obrir@ el fitxer "/var/spool/cron/crontabs/usuari_en_qüestió" en mode edició amb l'editor que tingueu especificat a la variable d'entorn "EDITOR=nano" (jo us aconsello nano doncs és un editor de molt f@ cil ús) en el vostre fitxer de configuració personal "~/.bashrc" amb la línia:"0 13 * * * /ruta_cap_a_script/bin/astres.sh"(sense cometes), tal com indica, l'script s'executar@ di@ riament a la una del migdia. Per a més informació consulteu la p@ gina de manual "man crontab".
- KCron; si el teniu instal·lat el trobareu a "Menú K->Sistema->KCron". Tot seguit l'executeu, creeu una nova tasca amb l'ítem del menú "Arxiva->Nova" i tan tranquils omplim la informació que ens sol·licita, les meus opcions són les mateixes que les indicades a "crontab".
NOTA: Naturalment, la primera vegada és aconsellable executar l'script manualment per a que ens crei els directoris, descarregui la imatge i comentari del dia, i ens generi la icona a l'escriptori de manera que la poguem ubicar al lloc que desitgem.
- Ara us toca configurar la primera imatge de fons: Haureu de clicar amb el botó esquerra del ratolí a sobre d'una part lliure del fons de l'escriptori i des del menú emergent escolliu l'ítem del menú "Configura l'escriptori...", ara escolliu l'ítem "Fons" i ja sou a on podreu procedir a configurar-lo.
Desmarqueu la caixa de selecció Fons comú, a sobre seu seleccioneu l'escriptori virtual en el que penseu veure les imatges de fons i tot seguit passeu a la pestanya "Paper pintat" (cliqueu-hi a sobre com a un ítem qualsevol); marqueu la caixa de selecció "Paper pintat múltiple" i premeu el botó "Arranjament múltiple", us apareixer@ una petita finestra de configuració a on podreu arranjar les diferents opcions:
- Interval: Contra més curt siga el temps més recusos necessitareu.
- Mode: Teniu les opcions "En ordre" o "Aleatori", això va al vostre gust.
- A sota podeu seleccionar fitxer i directoris: Home, tampoc em queda gran cosa per explicar però la opció més lògica ser@ l'escollir el directori a on desarem el repositori dels últims set dies, tal com est@ l'script aquest ser@ "~/imatges/astres/". NOTA: No cal a dir que si personalitzeu els directoris de l'script haureu d'escollir el directori adecuat.
Ara tindreu una icona a l'escriptori, la qual podreu usar per a visualitzar amb el navegador web Konqueror el comentari de l'últim fons descarregat. I ja sols us queda gaudir-l'ho. ;-)
Documentació de l'script:
Tingueu en compte que l'script que mantinc a la meua web personal pot veure's millorat i que no mantindré dites modificacions en els següents comentaris, això no retreu que hi pogueu aprendre quelcom que us siga d'utilitat.
NOTA: Actualment la configuració de Drupal (el programari que usa aquest weblog) no est@ afinada per a permetre la visualització de colors pel que haurem de tindre paciència mentre es soluciona, tot i així trobo que aquesta part de l'article és prou llegible.
Primer de tot s'estableix la línia que indicar@ a l'íntèrpret de comandaments (bash, a gairabé totes les configuracions) sota quin comandament s'haur@ d'interpretar l'script (també s'hi podria posar #!/bin/sh).
#!/bin/bash
A continuació es posen els comentaris; que f@ l'script, qui l'ha creat i/o l'est@ desenvolupant -- més o menys com un petit changelog i/o TODO (un TODO ve a llistar els objectius que s'ha marcat un cert projecte per al futur) si escau.
#
# - Script per a obtindre un fons d'escriptori diari de tema estellar des de la NASA
# (amb comentaris en anglès/castell@ inclosos mitjançant una icona a l'escriptori).
#
# * Script estret d'un article de BULMA:
# - <http://bulmalug.net/body.phtml?nIdNoticia=1632>
# * Autor en Jean-René Mérou, <h(arrova)bulma.net.nospam>
# * Col·laboradors:
# * Aportacions de David Martin http://sukiweb.net/ Suki_(arrova)bulma.net.nospam (part de la idea)
# * Victor Zabalza (millores)
# * Millores i noves idees per Antoni Bella <bella5(arrova)teleline.es.nospam>.
# - <http://www.terra.es/personal7/bella5/mini_notes/scripts/astres.sh>
# * Pedaços perl amb l'ajuda llista de correu <debian-user-catalan(arrova)lists.debian.org.nospam>.
# * Es requereix la installació de Image Magick (TM) per a les miniatures dels comentaris.
#
Primer s'estableixen les variables globals per tal de tindre-les a ma quan calgui (b@ sicament s'usen per a no tindre que escriure el mateix cada vegada o desar un valor modificable en un moment -- això ho veureu a la subsegüent secció de codi doncs permet personalitzar la gerarquia de directoris).
# Les URL
NASA='http://antwrp.gsfc.nasa.gov/apod/'
ASTRORED='http://www.astrored.org/astrofotos/apod/'
# Variables
ANY=`date +%Y`
MES=`date +%m`
DIA=`date +%d`
DATA_L="$DIA de $(date +%B) de $ANY"
Aqui s'estableixen les variables que donen nom als directoris (podeu canviar els noms que hi ha entre cometes simples -- "apòstrofs") i després creo un bucle "for" per a crear-los a la seva ubicació definitiva.
# Personalització dels directoris per part de l'usuari
# Example: /home/user/.imatges/astres/arxiu/2003/06/comentaris/miniatures
ROOT_1='.imatges'
ROOT_2='astres'
F_DIR=$HOME/$ROOT_1/$ROOT_2
TMP_D='.tmp'
ARCHIVE='arxiu'
THUMBNAILS='miniatures'
COMMENTS='comentaris'
DIR_THUMBNAILS=$F_DIR/$ARCHIVE/$ANY/$MES/$COMMENTS/$THUMBNAILS
# Creant els directoris (sols si no hi són)
for dir in $HOME/$ROOT_1 $F_DIR $F_DIR/$TMP_D $F_DIR/$ARCHIVE $F_DIR/$ARCHIVE/$ANY $F_DIR/$ARCHIVE/$ANY/$MES $DIR_THUMBNAILS $F_DIR/$ARCHIVE/$ANY/$MES/$COMMENTS
do
test -d $dir || mkdir $dir
done
Tot seguit su's presenta una matriu i en aquest cas la he usat per especificar l'estructura del missatge d'error que ens enviar@ l'script si hi ha quelcom que no funciona. La variable $MSG correspon al cos del missatge i l'estableixo al punt a on s'ha generat l'error en base al tipus d'aquest.
També cal indicar que una matriu no ser@ interpretada a menys que la cridem pel seu nom, en aquest cas missatge_error i aquesta s'executar@ com a un comandament qualsevol. Fins i tot li podreu passar par@ metres, però sols si així ho permet el codi que hi incloeu.
# Missatge d'error per al correu electrònic
missatge_error() { echo -e "n $(date +%d-%m-%Y)n ERROR: $MSG_ERRn"; }
Amb la següent matriu generarem el codi de la icona, s'usa una canonada mitjançant el car@ cter "|", tot seguit s'arregla una qüestió d'accents per a resoldre la crida de l'últim fons comentat per part de konqueror i tot plegat en la mateixa canonada es filtra tot cap al joc de car@ cters UTF-8 (el joc de car@ cters est@ ndard de l'entorn d'escriptori KDE) i la ubiquem a un fitxer al directori a on es desa el contingut del mateix "$HOME/Desktop/Background comment".
# Aquest és el codi de la icona de l'escriptori
# $HOME/Desktop/Background comment
icona_seethecomment()
{
echo "[Desktop Entry]
Comment=View the comment of the desktop background daily from the NASA.
Comment[ca]=Visualitza el comentari del fons d'escriptori diari de la NASA.
Comment[es]=Visualiza el comentario del fondo de escritorio diario de la NASA.
Encoding=UTF-8
Exec=kfmclient openURL $(ls $F_DIR/$ARCHIVE/@date +%Y@/@date +%m@/$COMMENTS/*.mess | tail -1)
GenericName=Comment display of the background.
GenericName[ca]=Mostra comentari del fons d'escriptori.
GenericName[es]=Muestra el comentario del fondo de escritorio.
Icon=kstars
MimeType=text/html
Name=Background comment
Name[ca]=Comentari fons
Name[es]=Comentario fondo de escritorio
Path=
ServiceTypes=
SwallowExec=
SwallowTitle=
Terminal=false
TerminalOptions=
Type=Application
X-KDE-SubstituteUID=false
KDE-Username=
"
}
# Afegint els accents per a executar el comandament
edita_accents() { sed -e "s/@/`/i" -e "s/@/`/i" -e "s/@/`/i" -e "s/@/`/i"; }
# Creant la icona de l'escriptori (sols si no existeix)
test -f $HOME/Desktop/Background comment || icona_seethecomment | edita_accents | iconv -t UTF8 > $HOME/Desktop/Background comment
En aquesta secció ja hi tinc forces comentaris però b@ sicament:
- Arrivats aquí es comprova amb la cadena "if" si ja tenim la foto del dia i si és així es procedir@ amb la crida else per a generar el missatge d'error, enviar-lo per correu a l'usuari que ha executat l'script i conseqüentment finalitzar l'execució de l'script amb el comandament "exit 1" (el número indica el tipus d'eixida del programa, tot i que per a la simplicitat de l'script no té import@ ncia si que la té per a quan aquest codi és llegit per algú que entenga el codi -- qüestions de seguir una certa etiqueta en la programació).
- Es descarreguen les dues p@ gines web (APOD/NASA i AstroRED) amb wget i l'argument "-k" per a que el fitxer html es desi amb les URL apuntant cap a la font original.
NOTA: Arribats a aquest punt he descobert que no es pot usar conjuntament amb l'argument -O, que serveix per a redigirir la p@ gina cap a un nom de fitxer especificat, bé doncs, aquest comportament ho és un error (bug en anglès) o hauria d'estar documentat a les p@ gines man o info. Després de comentar-ho amb d'altres usuaris de l'IRC n'he informat mitjançant el sistema de seguiment d'errors de Debian - BTS. L'informe d'error és aquest: #197916.
- S'obté la fotografia directament des de APOD/NASA.
- Si escau, es crea la miniatura per a facilitar la visualització del comentari.Això de "si escau" és deu a que si es tracta d'una seqüència d'imatges encastades en una de sola prefereixo oferir-la tal qual. Molt més bufó!! OI? ;-)
- S'inclou perl des de les dues matrius m_angles i m_castella, alli trobarem la canonada formada pel comandament cat que llegir@ el fitxer, amb la línia en perl (o script perl) que processar@ el text de la p@ gina web per a sols agafar el pedaç que ens interessa; nom de la foto, crèdits i comentari.
- Tot seguit s'usen tres matrius per a mitjançant el comandament echo visualitzar el codi que ens f@ falta per a crear una p@ gina web que respecti l'est@ ndard del World Wide Web Consortium (W3C)
- Per acavar la secció es criden totes cinc matrius; mess_capcalera, m_angles, mess_trad, mess_castella i per últim mess_peu, les quals contenen el codi de la p@ gina html de comentari, a mesura que s'executen aquestes matrius es redirigeix el contingut de la seva eixida cap al fitxer establert a la variable $FILE_OUT.
##
# Comprovo si ja tinc la foto del dia (evito malmetre el bucle setmanal)
if [ -z `ls $F_DIR/$ARCHIVE/$ANY/$MES/$DIA* 2>/dev/null | head -1` ]; then
# Aconsegueixo les dues p@ gines web
wget -q -k $NASA && mv index.html $F_DIR/$TMP_D/nasa.html
wget -q -k $ASTRORED && mv index.html $F_DIR/$TMP_D/astrored.html
# Aconseguint la foto directament des de la NASA
cat $F_DIR/$TMP_D/nasa.html | grep '<a href="image/' | sed 's/<a href="/http://antwrp.gsfc.nasa.gov/apod//' | sed 's/">//' | xargs wget -qP $F_DIR/$TMP_D
# Obtinguent el nom de la foto
FILE=`cd $F_DIR/$TMP_D/; ls *_*.*`
F_THUMBNAIL="m_`date +%d`_$(echo $FILE |cut -f 1 -d'.').jpg"
# Comprovo si la imatge es tracta d'una seqüència d'imatges
for i in `identify $F_DIR/$TMP_D/$FILE | awk '{print $1}'`
do
SIMPLE=0
test -f $i 2>/dev/null && SIMPLE=1
done
if [ $SIMPLE = 1 ];then
# Creo la miniatura
convert $F_DIR/$TMP_D/$FILE -resize 281x289 +profile "*" $DIR_THUMBNAILS/$M_THUMBNAIL
else
cp $F_DIR/$TMP_D/$FILE $DIR_THUMBNAILS/m_`date +%d`_$FILE
fi; F_THUMBNAIL=$(cd $DIR_THUMBNAILS/; ls m_`date +%d`_*)
# Processo les p@ gines per a obtindre els comentaris
m_angles() { cat $F_DIR/$TMP_D/nasa.html | perl -n0700e 'm,(<center>s*<b>.*?)<p>s*<center>$,ms; print $1'; }
m_castella() { cat $F_DIR/$TMP_D/astrored.html | perl -n0700e 'm,<div.*?>(.*?)<hr noshade.*?>,ms; print $1'; }
# Aconsegueixo el títol/nom_de_fitxer en castell@
M_TITLE=`grep -n 'titulo1' $F_DIR/$TMP_D/astrored.html | head -1 | awk -F'<' '{print $6}' | cut -f 2 -d'>'`
F_TITLE=`echo $M_TITLE | sed -e "s/:/_/i" -e "s/ ... //i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i"`
# Capçalera i peu HTML
mess_capcalera()
{ echo -e "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"">
<html>
<head>
<title>$M_TITLE</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div align=justify>
<div align="left"> <a href="http://antwrp.gsfc.nasa.gov/">APOD/NASA</a>
<br> <b> $DATA_L </b></div>
<img src="$THUMBNAILS/$F_THUMBNAIL" alt="$M_TITLE" width="281" height="289" hspace="20" vspace="20" align="left" border="0">
<br>
"
}
mess_trad()
{ echo -e "<br><br>Source page: <a href="$NASA">Asytronomy Picture of the Day</a>
</p>
</div>
<hr><hr>
<a href="http://www.astrored.org/">AstroRED</a>
<div align=justify>
<center>
<b> $M_TITLE </b>
</center>
<p>
<b> Traducción: </b>n"
}
mess_peu()
{ echo -e "P@¡gina fuente: <a href="$ASTRORED">Imagen astronómica del día</a>
</p>
</body>
</html>
"
}
filtre() { sed -e "s/<br><div align='right'/<div align=left/i" -e "s/)</div><br>/)</div>/i"; }
# Generant la p@ gina de comentaris
FILE_OUT="$F_DIR/$ARCHIVE/$ANY/$MES/$COMMENTS/`date +%d`_$F_TITLE.mess"
mess_capcalera > $FILE_OUT
m_angles >> $FILE_OUT
mess_trad >> $FILE_OUT
m_castella | filtre >> $FILE_OUT
mess_peu >> $FILE_OUT
else
MSG_ERR="Ja teniu la foto del dia!"
# Usant el correu electrònic per a enviar el missatge d'error a l'usuari en qüestió
(missatge_error | /usr/bin/mail --subject="$0 $DATA_L" $USER) &
exit 1
fi
Una altra secció formada per "if":
- Es comprova si la foto del dia ha estat descarregat correctament i així evitar-nos el trangle de fer malbé el cau setmanal de fotos solapant-les amb la més nova. Com és d'esperar li segueix un else" que envia per correu el missatge d'error corresponent a l'usuari en qüestió.
- Es mouen les fotos a una posició de més antiguitat i es copia la nova foto a la posició ú, la qual correspon a la més nova.
- I finalment es mou la foto del dia cap al repositori anual, mensual (sinó disposeu de gaire espai caldr@ que netegeu totes aquelles fotos i comentaris que no us interessi preservar).
##
if [ -f $F_DIR/$TMP_D/$FILE ]; then
# Bucle de les fotos a l'arxiu setmanal
test -f $F_DIR/foto_6.jpg && cp $F_DIR/foto_6.jpg $F_DIR/foto_7.jpg
test -f $F_DIR/foto_5.jpg && cp $F_DIR/foto_5.jpg $F_DIR/foto_6.jpg
test -f $F_DIR/foto_4.jpg && cp $F_DIR/foto_4.jpg $F_DIR/foto_5.jpg
test -f $F_DIR/foto_3.jpg && cp $F_DIR/foto_3.jpg $F_DIR/foto_4.jpg
test -f $F_DIR/foto_2.jpg && cp $F_DIR/foto_2.jpg $F_DIR/foto_3.jpg
test -f $F_DIR/foto_1.jpg && cp $F_DIR/foto_1.jpg $F_DIR/foto_2.jpg
# Es copia la nova foto cap a la posició ú de l'arxiu setmanal
cp $F_DIR/$TMP_D/$FILE $F_DIR/foto_1.jpg
# Es mou cap a l'arxiu històric amb el dia en el nom de fitxer
# -- bon mtode per a tindre-les ordenades. ;-)
mv $F_DIR/$TMP_D/$FILE $F_DIR/$ARCHIVE/$ANY/$MES/`date +%d`_$FILE
else
MSG_ERR="No s'ha descarregat cap imatge!"
# Usant el correu electrònic per a enviar el missatge d'error a l'usuari en qüestió
(missatge_error | /usr/bin/mail --subject="$0 $DATA_L" $USER) &
fi
exit 0
Enllaços relacionats:
L'article de BULMA que ha gestat tot aquest rebombori:Espléndidas im@¡genes para el escritorio
P@ gina font de Asytronomy Picture of the Day.
P@ gina font de Imagen astronómica del día.
P@ gina mare del projecte AstroRED.
P@ gina web del programari de manipulació fotogr@ fica Image MagickTM (usat per a les miniatures).
L'enllaç cap a l'script que usem i la meua p@ gina web personal amb molts altres continguts d'interés.
Una bona guia per aprendre BASH en profunditat Advanced Bash-Scripting Guide (és matinguda molt activament).
Per a perl jo uso el Manual de referencia PERL (de McDraw-Hill) però haig de reconèixer que m'han solventat la papereta des de la llista de correu usuaris de debian amb aquest correu i un altre d'anterior que ja em recomanava l'ús d'expressions regulars junta amb perl.
WOW!
Estic realment encantat, es increible el veure créixer el meu petit script. :)
Mai no vaig pensar que arribaria a creixer tant, coses del programari lliure. XD
H.says.it