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