Angry_Onion
Anmeldungsdatum: 22. Juli 2014
Beiträge: Zähle...
|
Guten Tag, ich warte auf eine Bekanntmachung auf einer Website und schaue dazu jetzt täglich mehrfach auf der Website nach, ob die gewünschte Information schon veröffentlicht wurde.
Ich habe überlegt, ein Shell Script zu schreiben, welches auf dem NAS zuhause alle 5 min ausgeführt wird und prüft, ob eine Änderung auf der Website vorgenommen wird. Jetzt fehlt mir allerdings ein Ansatzpunkt, wie ich die Inhalte der Website mit dem Inhalt davor abgeliche.
Kann ich mit Wget oder cURL die Website/HTML-GEdöns herunterladen und irgendwie abgleichen? Danke im Voraus.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
So in der Art ginge das wahrscheinlich ... Die einfachste Version wäre vielleicht sowas: | curl -s www.website/zum/überwachen | grep "Stichwort"
if [ $? -eq 0 ]; then
echo 'Schrei - es ist da !'
fi
|
LG, track
|
Angry_Onion
(Themenstarter)
Anmeldungsdatum: 22. Juli 2014
Beiträge: Zähle...
|
Danke! Wenn ich allerdings nicht genau weiß, was veröffentlicht wird, ich also kein Stichwort kenne, kann ich dann auch die gesamte Website auf Änderungen zu der davor heruntergeladenen prüfen?
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Sicherlich, das ginge auch. Allerdings darf sich dann nichts ändern, auch kein Datumsstempel oder sonstwas. Und Du musst die frühere Version natürlich in einer Datei speichern. Deshalb würde ich eher positiv suchen, nach dem Stichwort (oder Tag), auf das Du wartest. Wo man da am geschicktesten ansetzt kann man allerdings nicht pauschal sagen. Dafür solltest Du einen konkreten Link oder Beispiel liefern. Sonst bleibt es "stochern im Nebel". LG, track
|
Angry_Onion
(Themenstarter)
Anmeldungsdatum: 22. Juli 2014
Beiträge: 29
|
Okay, danke, ich werde es mal so versuchen ☺
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Mit wget oder curl kannst du die Seite abrufen. Danach kannst du mit diff zwei Stände vergleichen oder mit grep nach Stichwörtern suchen. Du kannst beispielsweise initial einen Stand herunterladen und dann immer den neuesten mit dem nächst älteren vergleichen:
| # händisch
wget -O alter_stand diewebseite.de
# via Skript
wget -O neuer_stand diewebseite.de
diff alter_stand neuer_stand && mv neuer_stand alter_stand || mail -s "Änderung" ...
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
track schrieb:
Die einfachste Version wäre vielleicht sowas: | curl -s www.website/zum/überwachen | grep "Stichwort"
if [ $? -eq 0 ]; then
echo 'Schrei - es ist da !'
fi
|
Bitte wenigstens so | if curl -s www.website/zum/überwachen | grep -q "Stichwort"; then
echo 'Schrei - es ist da !'
fi
|
$? auszuwerten ist oft überflüssig.
|
Angry_Onion
(Themenstarter)
Anmeldungsdatum: 22. Juli 2014
Beiträge: 29
|
Danke für die Antworten. Das Skript mit der Stichwortsuche läuft jetzt soweit. Will jetzt noch ein 2 Skript schreiben, dass die Dateien vergleicht.
Bekomme ich soweit auch hin, allerdings ist tatsächlich immer ein Zeitstempel in der Datei, wann die Seite aufgerufen wurde.
Kann ich irgendwie machen, dass er mir alles in der Datei von Zeile 3, Zeichen 937 bis Zeile 3, Zeichen 956 löscht?
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Internetseiten sind HTML oder sogar XHTML, also eindeutig tag-orientiert. Da solltest Du eher die signifikanten Teile mit geeigneten Werkzeugen herausziehen, also z.B. mit den HTML-XML-Utils nur den HTML-<body> : hxextract body http://www.website/zum/überwachen LG, track
|
Thomas_Do
Moderator
Anmeldungsdatum: 24. November 2009
Beiträge: 8541
|
Ich verstehe ja die sportliche Herausforderung eines solchen Skripts, aber für die GUI gibt es da schon verschiedene Lösugen 😉. Z.B. als Addon für Firefox.
|
Angry_Onion
(Themenstarter)
Anmeldungsdatum: 22. Juli 2014
Beiträge: 29
|
track schrieb: z.B. mit den HTML-XML-Utils
Wollte keine zusätzlichen Pakete auf dem NAS installieren. Aber habe es jetzt mit sed gelöst bekommen, danke ☺ Thomas Do schrieb: Ich verstehe ja die sportliche Herausforderung eines solchen Skripts, aber für die GUI gibt es da schon verschiedene Lösugen 😉. Z.B. als Addon für Firefox.
Naja, zum einen nutze ich Safari und zum anderen läuft mein Notebook/PC nicht den ganzen Tag. So bekomme ich auch wenn ich unterwegs bin ne Mail aufs Smartphone, wenn sich was tut. Aber danke für den Tipp. Und ja, die sportliche Herausforderung steht natürlich an erster Stelle, bin noch ein ziemlicher Anfänger im Shell-Scripting. D: Habe es jetzt so gelöst: Skript 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/bin/sh
log(){
current_time=$(date +'%F %T')
echo "[$current_time scr1] $1" >> /volume1/public/log.txt
tail -n500 /volume1/public/log.txt > /volume1/public/log.temp
mv /volume1/public/log.temp /volume1/public/volume1/log.txt
}
if curl -s website.de | grep -qE "wort1|wort2"; then
/usr/syno/bin/synonotify website_changed
log "Es wurde ein Stichwort gefunden."
else
log "Es wurde kein Stichwort gefunden."
fi
|
Skript 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #!/bin/sh
log(){
current_time=$(date +'%F %T')
echo "[$current_time scr2] $1" >> /volume1/public/log.txt
tail -n500 /volume1/public/log.txt > /volume1/public/log.temp
mv /volume1/public/log.temp /volume1/public/log.txt
}
wget -O /volume1/public/cn_neu.html -4 --ca-certificate /etc/ssl/certs/ca-certificates.crt website.de
sed -n '/<body/,/<\/body>/p' /volume1/public/cn_neu.html | sed -e '1s/.*<body/<body/' -e '$s/<\/body>.*/<\/body>/' > /volume1/public/cn_neu_body
DIFF=$(diff /volume1/public/cn_neu_body /volume1/public/cn_alt_body)
if [ "$DIFF" != "" ]
then
log "Aenderung auf Website CN!"
/usr/syno/bin/synonotify website_changed
else
log "Keine Aenderung auf Website."
fi
rm /volume1/public/cn_neu.html
mv /volume1/public/cn_neu_body cn_alt_body
|
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Angry Onion schrieb: DIFF=$(diff /volume1/public/cn_neu_body /volume1/public/cn_alt_body) if [ "$DIFF" != "" ]
Dieses Konstrukt kann man auch wieder ohne Variable schreiben, wie du es schon im ersten Skript gemacht hast:
| if diff /volume1/public/cn_neu_body /volume1/public/cn_alt_body; then
log "Aenderung auf Website CN!"
/usr/syno/bin/synonotify website_changed
else
log "Keine Aenderung auf Website."
fi
|
|
Angry_Onion
(Themenstarter)
Anmeldungsdatum: 22. Juli 2014
Beiträge: 29
|
Okay danke, ich dachte ich muss das so machen, da diff ja keinen Boolean zurückgibt.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Angry Onion schrieb: Okay danke, ich dachte ich muss das so machen, da diff ja keinen Boolean zurückgibt.
Nun, einen Rückkehr-Code bzw. Return-Code liefert auch diff. Den kann man sich so ansehen:
| diff dateiA dateiB
echo $?
|
Das ist auch der Wert der vom If-Konstrukt interpretiert wird. Eine 0 heißt true, alles andere wird als false interpretiert.
|
Angry_Onion
(Themenstarter)
Anmeldungsdatum: 22. Juli 2014
Beiträge: 29
|
misterunknown schrieb: | if diff /volume1/public/cn_neu_body /volume1/public/cn_alt_body; then
|
Also mit der Methode loggt er mir immer, dass es eine Änderung gibt, obwohl es keine gibt.
|