Externe Seite auf Veränderung überprüfen (Cronjob?)

beartooth

Ensign
Registriert
Jan. 2020
Beiträge
179
Guten Morgen zusammen,

ich bin in meinem Beruf auf Leitlinien und Empfehlungen angewiesen. Leider gibt es nicht für alle einen Newsletter oder einen RSS-Feed. Deswegen würde ich gerne eine bestimmte Seite 1x täglich über einen Cronjob auf Veränderung überprüfen, damit ich über einen neuen Upload informiert werde.

Wonach muss ich hier suchen? Gibt es solche Scripte? Wie gehe ich hier am besten vor?

beartooth
 
Hast du einfach mal bei google "cronjob check changes webpage" oder ähnliches eingegeben? Da finde ich diverse Lösungen. Schau doch mal ob da etwas für dich dabei ist. Zum Beispiel das hier: Klick!
 
  • Gefällt mir
Reaktionen: beartooth
nur auf deutsch, und da kam ich zu irgendwelchen WP CronJob Tutorials... Danke dir.
 
Prinzipiell läuft es am Ende darauf hinaus, dass mittels curl die Webseite heruntergeladen, gespeichert und mit der Vorgängerversion verglichen wird. Ich habe obiges Skript allerdings nur überflogen und du musst ausprobieren ob es deinen Ansprüchen genügt. Sofern man die Struktur der Seite kennt, kann man das Skript natürlich auch insofern ergänzen, dass ganz bestimmte Änderungen getrackt werden.
 
  • Gefällt mir
Reaktionen: beartooth
Prinzipiell ist es ja einfach selbst zu schreiben.

Du brauchst ja 2 Versionen: die alte (Vortag.html) und neue (Heute.html).

1. Mit curl (oder wget oder irgendeinem anderen Programm deiner Wahl) die Website runterladen und lokal als Datei speichern: curl <URL> -o Heute.html
2. diff Vortag.html Heute.html > Neues.txt
3. mv Heute.html Vortag.html -f

Und mehr ist es eigentlich auch nicht.

edit: Bei Schritt 2 noch den Redirect in eine Datei eingefügt da du die Änderungen ja irgendwo auch sehen willst.
 
  • Gefällt mir
Reaktionen: Raijin und beartooth
Tatsächlich bin ich durch die englische Google-Suche auf https://visualping.io/ gestoßen. Der kostenlose Account reicht für meine Zwecke. Es geht mir ja nur darum tagesaktuell darüber informiert zu werden, ob es eine neue Version der Dokumente auf einer bestimmten Seite gibt.

Vielen Dank trotzdem für eure Hilfe =)
 
  • Gefällt mir
Reaktionen: User007 und Raijin
visualping habe ich auch mal eine Weile benutzt, hat funktioniert.
 
  • Gefällt mir
Reaktionen: beartooth
Bash:
#!/bin/bash
curl "https://www.computerbase.de/forum/threads/externe-seite-auf-veraenderung-ueberpruefen-cronjob.2148920/" -o out2.html
if [ ! -f "out1.html" ]; then
  cp -v out2.html out1.html
fi
diff_fn="$(date +%s).txt"
diff -w out1.html out2.html > "$diff_fn"
cat "$diff_fn"
cp -v out2.html out1.html

Aufruf mit bash dateiname.sh.
Ergänzung ()

Das gibt dann zum Beispiel die kleine Änderung aus, die ich gerade gemacht hatte:

Code:
2733c2733
< diff_fn=&quot;$(date).txt&quot;
---
> diff_fn=&quot;$(date +%s).txt&quot;
 
Zuletzt bearbeitet:
CyborgBeta schrieb:
Das gibt dann zum Beispiel die kleine Änderung aus, die ich gerade gemacht hatte:
Das ist eher ein Gegenbeispiel, wieso man es eher nicht so machen sollte. Vielleicht wird einfach nur andere Werbung eingeblendet oder statt "Vor 10 Minuten" steht über einem Beitrag dann "Vor 12 Minuten". Sprich, viele Falsch-Positiv Meldungen.
 
  • Gefällt mir
Reaktionen: kuddlmuddl und Raijin
@BeBur Du weißt doch noch nicht mal, welche Seite er "untersuchen" möchte. Also, wenn man keine Ahnung hat...
 
CyborgBeta schrieb:
Du weißt doch noch nicht mal, welche Seite er "untersuchen" möchte.
DU hast aber ein konkretes Beispiel gebracht und das war schlicht kein gutes bzw. eines das die Probleme eines solchen Vorgehens aufzeigt. Das Seiten dynamische Inhalte haben ist heute generell keine Besonderheit mehr, von daher sollte das zumindest erwähnt werden, dass ein reines diff ggf. viele falsch-positiv erzeugt.
 
... denn ansonsten wird er mit einem Shell-Script nicht weit kommen, und sollte stattdessen "schmutziges" HTML parsen. Das wird nicht so leicht. ;)
Ergänzung ()

BeBur schrieb:
konkretes Beispiel
Ganz richtig, es war nur ein Beispiel. Die URL ist natürlich anzupassen auf die Seite, die er tatsächlich untersuchen möchte. Hätte ich dazuschreiben müssen, ja.
 
HTML parsen ist jetzt keine Kunst mit den entsprechenden libraries.
CyborgBeta schrieb:
Ganz richtig, es war nur ein Beispiel.
Ja, vielen Dank dafür, dass du mit deinem Beispiel hervorragend die Probleme gezeigt hast. Bestimmt findest du mit etwas suchen eine 20 Jahre alte Website, wo solche Probleme nicht auftreten können.
 
BeBur schrieb:
HTML parsen ist jetzt keine Kunst mit den entsprechenden libraries.

:rolleyes: Wie gesagt, das geht mit der Konsole nicht, stattdessen braucht er dann eine Programmiersprache/ein Programm, und danach hat er nicht gefragt.
Ergänzung ()

E: Mit dem CLI-Tool "pup" ginge das: https://github.com/ericchiang/pup

Ich bin mir an der Stelle aber unsicher, was er überhaupt parsen möchte.
 
CyborgBeta schrieb:
Wie gesagt, das geht mit der Konsole nicht, stattdessen braucht er dann eine Programmiersprache/ein Programm, und danach hat er nicht gefragt.
Der TE hat nach cronjobs gefragt, das hat nichts mit einer Programmiersprache zu tun. Wenn es wirklich Bash sein soll würde man sinnvollerweise per Bash xmllint aufrufen und damit den relevanten Teil der Website extrahieren und dann dieses Extrakt diffen.
 
CyborgBeta schrieb:
Ich bin mir an der Stelle aber unsicher, was er überhaupt parsen möchte.
Deswegen ist es auch müßig, über die Details zu diskutieren. @beartooth hat ja nun Lösungsansätze bekommen und hat sich in #6 gar für eine fertige Lösung von visualping.io entschieden. Solange es keine weiteren Kommentare seitens des TE gibt, die auf Probleme damit hindeuten oder die weitere Details zu seinem Vorhaben preisgeben, erübrigt sich eigentlich jede weitere Beitrag unsererseits :schluck:
 
  • Gefällt mir
Reaktionen: beartooth und CyborgBeta
BeBur schrieb:
kann er per Bash xmllint aufrufen und damit den relevanten Teil der Website extrahieren und dann dieses Extrakt diffen.
Nein, das geht mit "schmutzigem" HTML nicht.

Raijin schrieb:
erübrigt sich eigentlich jede weitere Beitrag
das. 👍
 
Moin, ich hab jetzt noch ein wenig gewerkelt und "clobbering" und einen Treshold eingebaut: Nur, wenn sich das HTML dieser Seite zum Vorgänger um mehr als 1500 Zeichen unterscheidet, wird ein Diff-File angelegt ... Das sollte genau den Anforderungen entsprechen (die wir aber nicht genau kennen):

Bash:
#!/bin/bash
curl "https://www.computerbase.de/forum/threads/externe-seite-auf-veraenderung-ueberpruefen-cronjob.2148920/" -o out2.html
if [ ! -f "out1.html" ]; then
  cp -v out2.html out1.html
fi
diff_fn="$(date +%s).txt"
diff -w out1.html out2.html >| "$diff_fn"
find . -type f -size -1500c -name "*.txt" -delete
cat "$diff_fn"
cp -v out2.html out1.html

Wie gehabt, ist die URL und der Treshold anzupassen.

Ein anderes Programm oder er selber kann dann prüfen, ob Diff-Files existieren, also, ob es eine Änderung gab.
 
Das ist auch keine robuste Methode versuchen zu erraten, wie viele Zeichen der irrelevante Anteil wohl hat und haben wird und wie viel davon sich wohl zukünftig ändern könnte. Zumal sich das mengenmäßig mit dem relevanten Teil überschneiden kann. Der diff schlägt auch schon an wenn irgendwas am html/css umbenannt wird, wenn zwei Elemente vertauscht werden, etc.. Im übrigen wird hier nicht geprüft, ob sich die Dokumente um 1500 Zeichen unterscheiden, sondern ob sie sich um 1500 Byte unterscheiden. Für den Rest müsste ich mich zu sehr in Bash reindenken und das kann man sich ja nun wirklich sparen :D.
 
BeBur schrieb:
Das ist auch keine robuste Methode versuchen zu erraten, wie viele Zeichen der irrelevante Anteil wohl hat und haben wird und wie viel davon sich wohl zukünftig ändern könnte. Zumal sich das mengenmäßig mit dem relevanten Teil überschneiden kann.

Das ist auch nur nichts anderes als Spekulation, da wir die genauen Anforderungen nicht kennen. Und so lange ist die Lösung robust.
 
Zurück
Oben