Ich habe ein kleines shellscript dass via cronjob regelmäßig durchläuft.
in dem Script werden ganz simpel mit wget einige Seiten aufgerufen, die dann lokal gespeichert werden.
Sieht beispielsweise so aus (URL geändert):
Funktioniert auch klasse. Er überschreibt bei jedem Durchlauf die file. Allerdings kam es in letzter Zeit leider vor, dass der Server auf dem die Seite aufgerufen wird down war.
wget versucht es dann standard mäßig 20mal
Beispiel output:
--11:10:11-- http://xxx.xxx.de/tools/export.py?fid=14&date=2007-03-21&days=365&event=conference&of=xml
(try:12) =\> `news6.xml'
Connecting to xxx.xxx.de[xxx.xxx.5.58]:80... connected.
HTTP request sent, awaiting response...
Read error (Connection reset by peer) in headers.
Retrying.
Er bekommt 20x mal nen Read error und sagt dann „Giving up“. Dann überschreibt er jedoch leider die file mit leerem Inhalt!
Ich suche eine unless-abfrage. Also irgendsowas am Anfang „unless output=ERROR“
so dass er das script nur durchläuft wenn der Server erreichbar ist. Wenn nicht soll er die files im alten Zustand lassen - besser alte Infos als gar keine Wink
natürlich ist es besser, den fehlercode zu verwenden. fragt sich nur, ob wget immer einen fehlercode liefert. ich habe bei wget immer wieder das problem, dass der http-aufruf an sich funktioniert hat, der web-server aber müll geliefert hat. damit hätte wget keinen fehlercode geliefert. ich prüfe daher immer den inhalt der datei und ignoriere den fehlercode. nicht ganz sauber aber funktioniert.
und ja, natürlich kann man den ganzen code auf eine zeile komprimieren. das verbessert aber die lesbarkeit des codes. und wenn man ein paar monte später vielleicht mal was ausbessern will, zahlt sich dass bisschen tipparbeit schon aus.
natürlich ist es besser, den fehlercode zu verwenden. fragt
sich nur, ob wget immer einen fehlercode liefert. ich habe bei
wget immer wieder das problem, dass der http-aufruf an sich
funktioniert hat, der web-server aber müll geliefert hat.
damit hätte wget keinen fehlercode geliefert. ich prüfe daher
immer den inhalt der datei und ignoriere den fehlercode.
dann solltest du aber den Inhalt der Datei tatsächlich prüfen. Von einem Fehler auszugehen, wenn ein einziges Wort, das auch in der Fehlermeldung vorkommt, in der Ausgabe auftaucht, ist nicht sonderlich sinnvoll.
nicht ganz sauber aber funktioniert.
Dein Code würde tatsächlich nicht funktionieren, da im Fehlerfalle die heruntergeladene Datei i.d.R. schlicht leer sein wird (siehe entsprechenden Hinweis des OP), also auch kein ERROR enthalten wird. Es würden aber sehr wohl legitime Dateien verworfen, deren Download geklappt hat.
und ja, natürlich kann man den ganzen code auf eine zeile
komprimieren. das verbessert aber die lesbarkeit des codes.
Die von mir vorgeschlagene Variante enthält sowenig Programm-Logik, dass sie durch eine einzige Zeile nicht übertrieben komprimiert ist.
Eine bessere Prüfung, kann die Tipparbeit wert sein, aber dazu muss sie erstmal tatsächlich besser sein.