Batch URLs Absurfen und Status auslesen

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo,

für unsere Entwicklungsumgebung gibt es mehrere "Check-Seiten". Diese würde ich gerne per Unix-Script absurfen, deren Status auslesen und via HTML "allen" Mitarbeitern zur Verfügung stellen.

Der Auszulesene Part jeder Seite ist im Prinzip:

Code:
<td><h3>7 Application States present</h3>
                   Status: <span class="success">i.O.</span><br/>
                   
                   
              </td>
Wobei mich nur das i.O. interessiert.


Problem 1: wie bekomme ich den inhalt aus der seite ausgelesen und weiterverarbeitet?
Problem 2: es betrifft ca, 12 Seiten - wie kann ich alle auslesen und weiterverarbeiten?

Problem 3: Wie generiere ich daraus ein script, welches per cronjob ca alle 5 minuten ausgeführt wird und eine html datei daraus bastelt?

Leider sind meine "Script-Skills" noch nicht so weit ausgereift -daher würde ich mich sehr über detailiertes Material freuen!

Merci
 
Fangen wir mal von hinten an: Das Ganze würde mit nem Shellscript gehen, dass du dann über das CGI aufrufst (Realtime) und das dir HTML zurück gibt, bzw. das Script via Cronjob alle 5 Min. eine (HTML-)Datei in ein Verzeichnis des HTTP-Servers schreibt.
Das Script sollte nichts anderes tun, als eine Liste von URLs abzuklappern (Wget). Die jeweilige Datei kann als .tmp-Datei gespeichert und verarbeitet werden. Das Verarbeiten ist dann reine Textverarbeitung, mit "sed" sollte das ganz einfach sein (man sed), den String zu finden: "Status: <span class=""|irgendwas|">"|das interessante|"</span>". Die Konstanten hab ich mal in Anführungsstriche gesetzt.
Nach jeder Verarbeitung einer URL gibtst du bissl HTML-Code aus.

gruß
hostile

PS: Brauchst du mehr Informationen?
 
hi,

danke soweit erstmal.
wget ist mir ein begriff und war mir fasst klar, das man damit am besten die infos sammelt.
leider bekomme ich noch einen proxy fehler - aber das hindert nicht am grundgedanke:

ich habe mich versucht durch man sed zu lesen, finde aber nicht genau das, wovon du redest. also wie übergebe ich den such-string an sed?

Habe es jetzt einfach mal mit "sed "i.O" check.jsp " versucht und leider nur die gesammte ausgabe bekommen.
Vielleicht kannst Du mir hier mit der Syntax helfen?
 
Ich würde statt sed es mit grep machen.

Einfahc die html-Seite mit wget runterladen und speichern. Dann mit grep die Zeile suchen, welche relevant ist.
Mit cut kannst Du dann die Zeile z.B. in Felder unterteilen, Trennzeichen kann definiert werden.

Beispiel:

Zeile:
Status: <span class="success">i.O.</span><br/>

Code:
ZEILE='Status: <span class="success">i.O.</span><br/>'

FELD=`cut -d '>' -f2 $ZEILE`

Im Beispiel wird die Zeile an '>'-Zeichen aufgetrennt. Mit -f2 würde ich dann das zweite Feld quasi wählen.
So kannst Du Dir den string zerlegen und prüfen ob dieser einem gewissen Wert entspricht (z.B. "i.O." ).
Natürlich sind im Feld noch andere Zeichen enthalten, allerdings kannst Du mit cut den String notfalls auch weiter "zerschnippeln".

Das prüfen kannst Du wiederrum mit test machen.
 
hmm,

okay, ich hab mal etwas rumgeblödelt:

Code:
#!/bin/bash

wget http://url/check.jsp -O de.txt

ZEILE='Status: <span class="success">i.O.</span><br/>'
FELD=`cut de.txt -d '>' -f2 $ZEILE` 

echo $FELD

Meiner Meinung nach wäre so die syntax richtig, oder?

Unix meint es anders ^^

: command not found
cut: Status:: Datei oder Verzeichnis nicht gefunden
cut: <span: Datei oder Verzeichnis nicht gefunden
: Datei oder Verzeichnis nicht gefunden
: command not found
: command not found
: command not found
 
Blackbenji schrieb:
Code:
FELD=`cut de.txt -d '>' -f2 $ZEILE`

Was soll das "de.txt" da ?

$ZEILE enthält doch schon den string.

Also einfach nur:
Code:
cut -d '>' -f2 $ZEILE

Und Sonderzeichen natürlich escapen, hatte ich verpennt zu erwähnen .
 
okay,

mir war nicht ganz klar, dass die datei automatisch genommen wird?

ändert aber nichts an der sache:

Code:
: command not found
: command not found
cut: Status:: Datei oder Verzeichnis nicht gefunden
cut: <span: Datei oder Verzeichnis nicht gefunden
: Datei oder Verzeichnis nicht gefunden
: command not found
 
Ne, da ist noch ein kleiner Denkfehler.

Die Datei musst Du zuvor mit grep nach der Zeile durchsuchen. Das Ergebnis speicherst Du dann in $ZEILE

Teste das ganze erstmal mit einem einfacherem string

Hier mal ein kurzes Beispiel hab grad nicht die Zeit das ausführlich zu machen:

Code:
#!/bin/bash

FILE=Datei.html
ZEILE=`grep "Suchbegriff" $FILE`

#$ZEILE ist nun die Zeile aus der Datei, wo "Suchbegriff" vorkommt
# nun mit cut diese Zeile bearbeiten und auswerten:

#Beispiel-Zeile: "Suchbegriff,Wort,Wort2"

FELD=`cut -d ',' -f2 $ZEILE`
 
#$FELD ist nun "Wort"

Hoffe das hilft Dir etwas weiter
 
Würde mit grep gehen, wenn das HTML mit CR LF vorliegt. Wenn der ganze Body als String zurückgeliefert wird, könnte das Probleme geben. Aber es gibt ja noch egrep, bzw. grep -e.

gruß
hostile
Ergänzung ()

urlliste.txt
Code:
http://www.gutierrez.dyndns.org/~hostile/test.txt
http://www.gutierrez.dyndns.org/~hostile/test2.txt

check.sh
Code:
#!/bin/sh

echo '<html><head><title>Status test</title></head>'
echo '<body><table><tr><td>Status:</td></tr>'
for i in `cat urlliste.txt`; do
    echo '<tr><td>'
    wget -q $i -O tmp.txt && sed 's/^ *//g' tmp.txt | grep Status | sed 's/Status: <span class="success">//g' | sed 's/<\/span><br\/>//g' && rm tmp.txt
    echo '</td></tr>'
done
echo '</tr></table></body></html>'

Ist das gut so? :P

gruß
hostile
 
Zuletzt bearbeitet:
Zurück
Oben