Ich wollte Webseiten auf Veränderung überprüfen. Das kam dabei raus, ist für Einsatz als cron-skript gedacht. Bei Verbesserungen bitte eine Mail an mich, Danke!
#
# Dieses Skript holt sich URL und fakultativ eine maximalabweichung als Zahl
# aus seiner Konfigurationsdatei, vergleicht dabei den Unterschied zwischen der
# Webseite aus dem vorhergehenden und jetzigem Lauf. Es mailt eine kurze Übersichtsmail
# an den Administrator, sowie eine etwas ausführlichere Mail an eine weitere Emailadresse,
# wenn sich Änderungen an der Webseite ergeben haben.
#
# Autor: Lutz Willek lutz[punkt]willek[das affenzeichen]belug[punkt]de
# Version 0.1 vom 26.06.2007
#
# TODO:
# Der Dump und der Diff ist langsam, das koennte durch eine bessere Veriante,
# alternativ durch gleichzeitiges Abarbeiten beschleunigt werden.
# Bis ca. 100 Domains ist diese Version aber erst mal gut genug.
#
set -e
umask 077
# Variablenzuweisungen
URLLIST='/etc/webseitentester/urllist.txt'
WORKDIR='/tmp/webseitentester/'
MAIL='some.user@domain.com'
# Erzeuge Arbeitsverzeichnis
[ -d ${WORKDIR} ] || mkdir -p ${WORKDIR}
# loesche Dateien, die entstehen, wenn sich die Liste der URL's aendert
find ${WORKDIR} \! -type d -amin +720 -exec rm {} \;
# erzeugt bei Bedarf eine besser bearbeitbare Konfigurationsdatei,
# die dann spaeter im Skript verwendet wird
new_hash () {
echo -n 'Konfigurationsdatei geaendert, generiere Hashwerte neu... '
[ -f ${URLLIST}.db ] && rm ${URLLIST}.db
[ -f ${URLLIST}.sha1 ] && rm ${URLLIST}.sha1
cat ${URLLIST} |egrep -v '^#+|^$' | while read -a FOO ;
do
# wenn in der Konfigurationsdatei keine moeglichen aenderungen angegeben wurden,
# dann nimm 0 an
[ ${FOO[1]} -ge 0 ] 2>/dev/null || FOO[1]=0
HASH=`printf ${FOO[0]} |sha1sum |awk ' { print $1 } '`
echo ${HASH} ${FOO[1]} ${FOO[0]} >> ${URLLIST}.db
done
sha1sum ${URLLIST} > ${URLLIST}.sha1
echo 'done.'
}
# nur wenn sich Daten in der Konfigurationsdatei geaendert haben:
# erzeuge die Konfigurationsdatei neu
sha1sum -c ${URLLIST}.sha1 &>/dev/null || new_hash
lynx_dump () {
# der eigentliche Dump mit Lynx
# Dieser Dump könnte irgendwie schoener gemacht werden,
# diese Version hier kostet relativ viel Zeit
lynx -dump -hiddenlinks=ignore ${FOO[2]}
}
some_stuff () {
# Der Text fuer die Email
cat <<EOF
Die Webseite ${FOO[2]} hat ${BAR} Aenderungen. Laut Konfiguration sind
jedoch nur max ${FOO[1]} Aenderungen erlaubt.
Ein Dump der Webseite findet sich in den beiden Dateien
${WORKDIR}${FOO[0]}
${WORKDIR}${FOO[0]}.old
Diese Dateien werden automatisch beim naechsten Lauf, jedoch spaetestens nach 12 Stunden geloescht.
EOF
}
# Hole die Daten aus ${URLLIST}.db
# Lese die Liste Zeilenweise ein
cat ${URLLIST}.db | while read -a FOO ;
do
# nun eingelesen: FOO[0] FOO[1] FOO[2]
# entspricht Hashwert Maximale Abweichung URL der Webseite
# ueberpruefe auf vorhandensein einer Datei mit dem Namen $FOO[0] (der hash)
if [ -f ${WORKDIR}${FOO[0]} ] ;
then
# die normalen Checks durchfuehren
lynx_dump >${WORKDIR}${FOO[0]}.temp
# wieviel Unterschied ist da?
BAR=`diff ${WORKDIR}${FOO[0]}.temp ${WORKDIR}${FOO[0]} |wc -l`
if [ ${FOO[1]} -ge ${BAR} ] ;
then
# alles gut, nicht genug hat sich in ${FOO[3]} (der URL) geaendert
rm ${WORKDIR}${FOO[0]}.temp
else
# Anderung ueber Schwellenwert, schicke eine Email
some_stuff |mailx -s "Webseite ${FOO[2]} geaendert" ${MAIL}
echo "Mail an ${MAIL} wegen Aenderung an ${FOO[2]} verschickt"
mv ${WORKDIR}${FOO[0]} ${WORKDIR}${FOO[0]}.old
mv ${WORKDIR}${FOO[0]}.temp ${WORKDIR}${FOO[0]}
fi
else
# Die URL nur dumpen, nicht vergleichen. Das passiert nur beim ersten Lauf,
# nachdem eine URL neu hinzugefuegt wurde.
lynx_dump >${WORKDIR}${FOO[0]}
fi
done
# Definierter "Abgang"
exit 0
##EOF#Die dazu passende Konfigurationsdatei unter /etc/webseitentester/
cat /etc/webseitentester/urllist.txt
# Konfigurationsdatei # in der Datei werden die urls angegeben, die ueberwacht werden sollen # fakultativ kann hinter der URL eine Zahl angegeben werden, dann wird so lange nicht benachrichtigt, # bis sich alte und neue Webseite in mehr als $ZAHL Unterschieden unterscheiden... # ein muss... google.de # unbedingt mal draufschauen! http://belug.de #bei Heise ändert sich viel http://heise.de 300 #schwierige urls gehen genau so... http://belug.de/termin.html?&tx_jwcalendar_pi1[eventid]=4&tx_jwcalendar_pi1[uid]=169&tx_jwcalendar_pi1[action]=singleView&tx_jwcalendar_pi1[day]=1182895200&cHash=6457b51025 0
