[linux] Derivata di un sito •PDF• •Print• •E-mail•
•User Rating•: / 1
•Poor••Best• 
•Written by Riccardo Carlesso•   

Ric e il suo pinguinoAvete mai pensato di mettere insieme il comando diff e il comando wget (o il fratellino lynx --dump)?!?

Otterrete così un programmillo che, messo in crontab, vi dirà quando un sito web cambia!!!  Vediamo come fare.Il comando da dare è:

#  /usr/local/bin/varia /home/riccardo/bin/estratto-webpage NOMESITO Vediamo nel dettaglio:

/home/riccardo/bin/estratto-webpage

VER="2.0"
WEBPAGE="$1"                                                    # http://nome.dominio.com/dir/ecto/ry/file.txt
DOMINIO=$( echo "$1" | sed -e 's-^http://--' |  sed -e 's:/.*$::' ) # nome.dominio.com
                        # HEAD
                        # pagina vera e propria (GET)
DUMP=$( lynx --dump -hiddenlinks=ignore -image_links=no -nolist "$WEBPAGE" |
                egrep -v "^#|^$" |                      # righe vuote o commentate da me...
                egrep -v "visitator. online"    | # causa palladius/joomla
                sed -e 's/\[[^]]*\]//g'
        )
echo "$DUMP"

Tenetevi forti. Ecco ora la chicca, il programma che fa la derivata d/dt:

/usr/local/bin/varia: 

#!/bin/sh
# questo programma è cio' che ho sempre sognato, verifica se cio' che segue cambia o meno. Se non cambia, non ha stdout, se no ce l'ha in formato mail...
VER="1.6"
# 2007 01 03   1.6  la exit e' corretta (0 uguali, <>0 diversi)
# 2006 07 04   1.5  aqggiunto supporto a utenti (carlo, riccardo, ...)
# 2006 02 13   1.4      aggiunta roba, tolta parte verbosa con date (un giorno sara' nel -v)
MD5=$(echo $*|md5sum|awk '{print $1}')
PAZ="/tmp/varia/"
UTENTE=$(whoami) # dovesse un giorno non bastare + in UTENET andra' l'ulteriore specificazione (chesso', utente+computer+dominio+cliente, ....
OLD="$PAZ/$MD5.$UTENTE.old"
ERR="$PAZ/$MD5.$UTENTE.err"
NEW="$PAZ/$MD5.$UTENTE.new"
OK="$PAZ/$MD5.$UTENTE.nochanges"   # da quanto non cambia
CNT="$PAZ/$MD5.$UTENTE.count"       # storia dei cambiamenti
OLDNEWGLOB="$PAZ/$MD5.$UTENTE.*"    # glob che becca tutti e soli i due file
SEP="---------------------------------------------"
INDENTSEP=" | "
mkdir -p  $PAZ 2>/dev/null
chmod 777 $PAZ 2>/dev/null
touch $NEW      # cosi' al primo colpo va gia'
mv $NEW $OLD
#$* 2>/dev/null | tee $NEW
#echo DEB: eseguo $*
eval $@ 1>$NEW 2>$ERR
if diff -q $NEW $OLD >/dev/null;
    then
        touch $OK
        echo -n = >> $CNT
        exit 0
    else
                echo "NUOVO($(date))" > $CNT
        echo "Subject: [varia] '"$*"'"
        echo
        echo "+ Differenze:"
        diff $NEW $OLD | sed -e 's/^>/OLD /'|  sed -e 's/^</NEW /' | /usr/local/bin/indenta "$INDENTSEP"
        echo " --"
        echo " $0, ver $VER"
        exit 42
fi

Il programma 'varia' prende il comando che gli avete dato, e mette in /tmp/ un file con l0'aoutput del comando e un nome che è (md5isticamente parlando) unico in base al comando. Così la prox volta che lo chiamate lo confonta e fa una banale diff, che è ciò che vi restituisce ad output. Dato che io confondo maggiori con minori, li ho sostituiti con OLD e NEW così è a prova di handicappato (come il sottoscritto). 

Affuinchè vada avete bisogno della banale utility carlessiana:

/usr/local/bin/indenta

while read LINEA
do
        echo "$1$LINEA"
done

Provatelo in cronta ad esempio con la seguente chiamata e dimmi se vi manda un'email se e solo se quando la pagina cambia Cool:

*/30 * * * * /usr/local/bin/varia /home/riccardo/bin/estratto-webpage http://www.palladius.it/

 Fatemi sapere se ho dimenticato qualcosa, grazie.

Riccardux Laughing

NB guardate che bello, alle 19:00 mi è arrivata la seguente mail:

VARIATO!!!!!!!!!! --> /tmp/.monitorasiti.c52f6197aa2b57c13597a664ebfba0f8  -
Subject: [varia] '/home/riccardo/bin/estratto-webpage www.palladius.it'

+ Differenze:
| 21d20
| NEW * Derivata di un sito
| 32a32
| OLD * L'inferno è esotermico?
| 50a51,52
| OLD PPPS. Il 29 festeggio il mio compleanno! Se sei tra i fortunati invitati,
| OLD clicca qui per i dettagli.
--
/usr/local/bin/varia, ver 1.6

Poiché la derivata mi ha notare una derivata, si può parlare di derivata seconda?!? Per questo vi rimando al mio amore per il meta .

 

 
Make Text Bigger Make Text Smaller Reset Text Size

Menu Utente

Phoca Gallery Menu Module