#!/bin/bash
#
# - 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@bulma.net.nospam>
#      * Aportacions de David Martin <http://sukiweb.net/> Suki_@bulma.net.nospam (parte de la idea)
#      * Victor Zabalza (mejoras)
# * Millores i noves idees per Antoni Bella <bella5@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@lists.debian.org.nospam>.
# * Es requereix la installació de imageMagick per a les miniatures dels comentaris.
#
# Changelog
# *********
#
# 0.1
# Dia 02 de juny de 2003
#    * Es fan les proves per a veure com es pot millorar.
#    * Es crea l'arxiu per any/mes/dia_nom de la foto.
#    * S'envia l'error de l'script a l'usuari per correu local.
#    * Es contacta amb l'autor de l'script homònim de BULMA:
#	- Se li ofereixen els canvis.
#	- Es plantegen noves idees.
# 0.2
# Dia 15 de juny de 2003
#    * S'afegeix el codi per a obtindre i visualitzar els comentaris:
#	- S'obtenen i procerssen les dues pagines web.
#	- Es genera el codi addicional per a un HTML correcte segons el W3C.
#	- Es crea la icona de l'escriptori per a veure'ls amb el konqueror.
#    * Es demana permís per a escriure un article a GiLUG per a documentar la seva installació.
# 0.3
# Dia 18 de juny de 2003
#    * Es soluciona un error (A la APOD/NASA han modificat la URL de la imatge).
#    * S'escriu un article a GiLUG per tal de documentar la seva instal·lació:
#	- <http://gilugsite.sourceforge.net/node.php?id=116>
#    * Es neteja el codi.
# 0.4
# Dia 19 de juny de 2003
#    * S'estableixen uns copyrights que faltaven (gràcies Jean-René).
#    * Més neteja de codi.
# 0.5
# Dia 21 de juny de 2003
#    * Nous enllaços:
#	- S'ha enllaçat la miniatura del comentari amb la imatge gran del repositori
#	  local.
#	- S'ha afegit un enllaça a sobre de la imatge per a descarregar la imatge gran
#	  de la APOD/NASA.
#    * S'ha afegit una nota animant a l'usuari a visitar la font per si desitja
#      votar per la foto o visitar les més votades.
#    * Es comprova l'autenticitat del contingut:
#	- Si la foto de la APOD/NASA no és del dia no es decarrega i s'envia un correu
#	  a l'usuari.
#	- Si no hi ha traducció del comentari del dia es mostra un avís amb l'enllaç
#	  cap a la localització en l'arxiu a on hauria d'estar disponible la foto del
#	  dia en curs.
#    * Més neteja de codi.
# 0.5.1
# Dia 26 de juny de 2003
#    * S'arreglen uns errors a l'script:
#	- Es redirigeix l'eixida d'un test cap a stderr.
#	- Es millora la sintaxi per a llegir el títol en anglès des de la APOD/NASA.
#    * Es creen uns fitxers per si la primera vegada que s'executi l'script aquests no
#      es descarreguen correctament.
# 0.6.0
# Dia 01 de juliol de 2003
#    * Més neteja de codi.
#    * Millores de codi:
#	- S'ha eliminat el comandament ping.
#	- Es llisten els binaris.
#	- mkdir ara treballa recursivament.
#	- Variable per als fitxers d'eixida.
#    * S'ha solventat un error en comprovar el dia de la foto.
# 0.6.1
# Dia 10 de juliol de 2003
#    * Més neteja de codi.
#    * Han modificat el codi a la NASA/APOD (correccions)


USR=/usr/bin
# Llistat de tots els comandaments amb les opcions especials globals
 # sistema
CAT="/bin/cat"
CP='/bin/cp --force'
DATE='/bin/date'
ECHO='/bin/echo'
GREP='/bin/grep -s'
MKDIR='/bin/mkdir -p'
MV='/bin/mv --force'
SED='/bin/sed -e'
 # d'usuari
AWK="$USR/awk"
CUT="$USR/cut"
HEAD="$USR/head -1"
ICONV="$USR/iconv"
MAIL="$USR/mail"
PERL="$USR/perl -n0700e"
TEST="$USR/test"
WGET="$USR/wget -q"
XARGS="$USR/xargs"
 # ImageMagick
CONVERT="$USR/convert"
IDENTIFY="$USR/identify"

# Les URL i fitxers d'eixida
NASA='http://antwrp.gsfc.nasa.gov/apod/';	     NS='nasa.html'
ASTRORED='http://www.astrored.org/astrofotos/apod/'; AST='astrored.html'

# Variables
ANY=`$DATE +%Y`
MES=`$DATE +%m`
DIA=`$DATE +%d`
DATA_L="$DIA de $($DATE +%B) de $ANY"

# Personalització dels directoris per part de l'usuari
# Example: /home/user/.imatges/astres/arxiu/2003/06/comentaris/miniatures
F_DIR=$HOME/.imatges/astres
TMP_D='.tmp'
ARCHIVE='arxiu'
THUMBNAILS='miniatures'
COMMENTS='comentaris'
DIR_THUMBNAILS=$F_DIR/$ARCHIVE/$ANY/$MES/$COMMENTS/$THUMBNAILS

# Creant recursivament els directoris (sols si no hi són)
for dir in $F_DIR/$TMP_D $DIR_THUMBNAILS
  do
    $MKDIR $dir
  done

# Missatge d'error per correu electrònic
missatge_error()
  { cos_email() { $ECHO -e "\n  $($DATE +%d-%m-%Y)\n  ERROR: $MSG_ERR\n"; }
    (cos_email | $MAIL  --subject="$0 $DATA_L" $USER) &
  }

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

##
    # 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` ]; then
	# Procediment per aconseguir les dues pàgines web
	cd $F_DIR/$TMP_D/
	$TEST $NS  || $ECHO 0 > $NS
	$TEST $AST || $ECHO 0 > $AST
	$WGET -k $NASA     && $MV index.html $NS
	$WGET -k $ASTRORED && $MV index.html $AST

	# Es comprova per seguretat que tenim la foto del dia en curs.
	DIA_APOD_NASA=`grep $($DATE +%Y) $NS | $HEAD | $CUT -f 3 -d' '`
	if [ $DIA_APOD_NASA != $($DATE +%e) ]; then
	    MSG_ERR="No hi ha foto del dia!"
	    # Usant el correu electrònic per a enviar el missatge d'error a l'usuari en qüestió
	    missatge_error
	    exit 1
	fi

	# Aconseguint la foto petita directament des de la NASA (és la que anirà al fons)
	SC_SED="\"http://antwrp.gsfc.nasa.gov/apod/image/"
	$GREP "href=$SC_SED" $NS | $AWK -F'\"' '{print $2}' | $HEAD | $XARGS $WGET
	# Capturo la URL de la foto gran (s'gi podrà accedir mitjançant la miniatura del comentari)
	URL_BIG_IMAGE=`$GREP "SRC=$SC_SED" $NS | $AWK -F'"' '{print $2}' | $HEAD`

	# Obtinguent el nom de la foto
	FILE=`ls *_*.*`
	F_THUMBNAIL="m_`$DATE +%d`_$($ECHO $FILE | $CUT -f 1 -d'.').jpg"

	# Es comprova que la traducció és del dia en curs.
	dia_com() { $GREP -q 'IMPOSIBLE MOSTRAR IMAGEN' $AST && $ECHO 0 || \
		    $GREP 'titulo1' $AST | $HEAD | $CUT -f 3 -d'>' | $HEAD | $CUT -f 1 -d' ' 2>/dev/null; }
	if [ $(dia_com) = $DIA 2>/dev/null ]; then
	    VR_DIA=1
          else
	    VR_DIA=0
	fi

        # Comprovo si la imatge es tracta d'una seqüència d'imatges
	SIMPLE=0
	for i in `$IDENTIFY $FILE | $AWK '{print $1}'`
          do
	    $TEST -f $i 2>/dev/null && SIMPLE=1
          done
	if [ $SIMPLE = 1 ];then
	# Creo la miniatura
	    $CONVERT $FILE -resize 281x289 +profile "*" $DIR_THUMBNAILS/$F_THUMBNAIL
	  else
	    $CP $FILE $DIR_THUMBNAILS/m_${DIA}_$FILE
        fi; F_THUMBNAIL=$(cd $DIR_THUMBNAILS/; ls m_${DIA}_*)

	# Processo les pàgines per a obtindre els comentaris
	# Matriu per a mostrar l'eixida d'error per la falta de traducció del dia en curs.
	dia_tr_com()
	  {
	    if [ $VR_DIA = 1 ]; then
		mess_trad
		filtre_c() { $SED "s/<br><div align='right'/<div align=left/i" -e "s/)<\/div><br>/)<\/div>/i"; }
		m_castella | filtre_c
		mess_peu
	      else
		mess_err_dia_com()
		  { $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> NO DISPONIBLE!! </b>
</center>
<p><b> Error: </b> Lo sentimos, no hay contenido disponible para el día en curso.<br>
Cuando este disponible la podreis localitzar en el enlace inferior</a>.
</p></div><br><br>"
		  }
		mess_err_dia_com
		mess_peu
	    fi
	  }
	m_angles()   { $CAT $NS  | $PERL 'm,(<center>\s*<b>.*?)<p>\s*<center>$,ms; print $1'; }
	m_castella() { $CAT $AST | $PERL 'm,<div.*?>(.*?)<hr noshade.*?>,ms; print $1'; }

	# Aconsegueixo el títol/nom_de_fitxer en castellà
	if [ $VR_DIA = 1 ]; then
	    M_TITLE=`$GREP -n 'titulo1' $AST | $HEAD | $AWK -F'<' '{print $6}' | $CUT -f 2 -d'>'`
	  else
	    M_TITLE=`$CAT $NS | $PERL 'm,<center>\n<b> (.*?)</b> <br>,ms; print $1'`
	fi
	F_TITLE=`$ECHO $M_TITLE | $SED "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" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i" -e "s/ /_/i"`
	COM_THUMBNAIL="$M_TITLE. (Cliqueu a la imatge per a descarregar la versió gran local)."

        # 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=ISO-8859-15\">
</head>
<body>

<div align=justify>
<div align=\"left\">&nbsp;&nbsp; <a href=\"http://antwrp.gsfc.nasa.gov/\">APOD/NASA</a>
<br>&nbsp;&nbsp; <b> $DATA_L </b>
<br>&nbsp;&nbsp; <a href=\"$URL_BIG_IMAGE\">Imatge gran</a></div>
<a href=\"$F_DIR/$ARCHIVE/$ANY/$MES/`$DATE +%d`_$FILE\">
<img src=\"$THUMBNAILS/$F_THUMBNAIL\" alt=\"$COM_THUMBNAIL\" width=\"281\" height=\"289\" hspace=\"20\" vspace=\"20\" align=\"left\" border=\"0\">
</a>
<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=\"http://www.astrored.org/astrofotos/apod/index.php/ap$($DATE +%y%m%d).html\">Imagen 
astronómica del día $DIA</a>
<br><i><b>NOTA:</b> Si os atraye la foto del día visitad la página para votar por ella o 
dejar un comentario.</i>
</body>
</html>
"
          }
	# Generant la pàgina de comentaris
	FILE_OUT="$F_DIR/$ARCHIVE/$ANY/$MES/$COMMENTS/${DIA}_$F_TITLE.mess"
	mess_capcalera	>  $FILE_OUT
	m_angles	>> $FILE_OUT
	dia_tr_com	>> $FILE_OUT
      else
	MSG_ERR="Ja teniu la foto del dia!"
	missatge_error
	exit 1
    fi

##
    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/${DIA}_$FILE
      else
	MSG_ERR="No s'ha descarregat cap imatge!"
	missatge_error
	exit 1
    fi

exit 0

