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

LutzWillek/webseitentester (zuletzt geändert am 2007年12月23日 22:49:05 durch localhost)

AltStyle によって変換されたページ (->オリジナル) /