Text aus HTML auslesen

  • Hallo Leute, ich freiwilliger Mitarbeiter beim Roten Kreuz in Österreich und hätte ein kleines Anliegen.

    Wir haben vor kurzem eine Umstellung unseres Notrufsystems gehabt (bzw. stellen noch immer um) und dadurch leider einige kleinere Einschränkungen im System.

    Man konnte früher die Statusmeldungen mit Uhrzeit ablesen, derzeit aber nicht mehr.

    Auf Nachfrage bei der Leitstelle, werde diese Funktion noch implementiert. Irgendwann!!! -_-

    Ich dachte mir da gleich, dass man da was mit AutoIT machen kann...

    Einfach die Werte auslesen und Ihnen bei Änderung eine Uhrzeit zuweisen.

    Grund: Uns wird dadurch die interne Disposition der einzelnen Fahrzeuge erleichtert, da wir wissen, wann ein Fahrzeug zB. Auftragsbereit gegangen ist, und wie lange es ca. von "Bsp. Wr. Neustadt" noch "nach Hause" braucht...

    Mein Problem ist, ich muss "Text aus HTML auslesen".... Ich habe einiges hier im Forum darüber gefunden, doch so ganz bin ich nicht schlau daraus geworden.

    Ich möchte von der Seite "web.lsz-b.at/Statusanzeige" die verschiedenen Status- Meldungen der einzelnen Fahrzeuge (vorwiegend derer mit 3 beginnend [301,302,303,304,305,306]) auslesen und ihnen in einem GUI den derzeitigen Status zuweisen... [Status: EINSATZBEREIT, HINFAHRT, ABHOLORT, TRANSPORT, ZIELORT, AUFTRAGSBEREIT, UNBESETZT] und natürlich auch die Uhrzeit, wann sich der Status zB. von HINFAHRTauf ABHOLORT änderte...

    Das mit der GUI bekomm ich selber hin, nur die Werte auszulesen schaffe ich nicht...

    Ich habe es mit _StringBetween versucht, doch das ergab irgendwie kein Ergebnis... :(


    Hier der "normale" Aufruf der Seite per _IECreate.

    Ich bräuchte eine kleine Hilfestellung, wie ich an die Daten rankomme, bzw. wie ich sie sinngemäß auslesen kann.

    Danke, im Vorhinein...

    Einmal editiert, zuletzt von rkma (13. Juli 2010 um 17:14)

  • Also den Sourcecode der seite bekommst du mit:

    [autoit]

    _INetGetSource

    [/autoit]

    diesen dann auszuwerten sollte egtl mit diesen hier gut gehn

    [autoit]

    _StringBetween()
    StringinStr()
    StringTrim...()
    ; oder ähnlichen

    [/autoit][autoit][/autoit][autoit]

    ; oder noch besser mit RegEx
    StringRegExp()

    [/autoit]

    Also wenn du RegEx kannst oder bereit bist es dir anzusehn dann nimm das ;)
    StringRegExp Tutorial / Reguläre Ausdrücke in AutoIt

  • OK, so weit so gut...

    Das mit dem StringRegExp ist eine coole Sache!!! :thumbup:

    Ich bin so weit, dass ich dieses rausbekomme:

    Code
    302</td><td bgcolor="#80FF00">Einsatzbereit</td><td bgcolor="#80FF00">Mattersburg

    Jetzt versuche ich mich gerade mit den String Funktionen, die wollen aber nicht so ganz....

    Hat irgendwer auf die Schnelle eine Lösung oder Hilfestellung, wie ich aus dem oberen Schnipsel "302" "Einsatzbereit" "Mattersburg" rausbekomme?

    Wenn möglich in 3 Strings... :S Bitte...

  • Hallo, nochmal...

    Also, soweit ist es eingentlich geschafft... :D

    [autoit]


    #include <Array.au3>
    #Include <File.au3>
    #include <INet.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;FileOpen("C:\txt.txt",0)

    [/autoit][autoit][/autoit][autoit]

    ;$sString1 = FileRead("C:\txt.txt")

    [/autoit][autoit][/autoit][autoit]

    $sString1 = _INetGetSource("http://web.lsz-b.at/Statusanzeige")

    [/autoit][autoit][/autoit][autoit]

    $sString = StringReplace(StringReplace(StringReplace($sstring1,"ö","oe"),"ä","ae"),"ü","ue")

    [/autoit][autoit][/autoit][autoit]

    FileWrite("C:\txt1.txt",$sString)

    [/autoit][autoit][/autoit][autoit]

    ;$aFlag3 = StringRegExp($sString, "l[1-4][^>]+>(\d+\/\d+)", 3)

    [/autoit][autoit][/autoit][autoit]

    ;$aFlag3 = StringRegExp($sString, "3[0-6][0-6]", 3)

    [/autoit][autoit][/autoit][autoit]

    ;$aFlag3 = StringRegExp($sString, "3[0-6][0-6].....\r\n..........................\w+.....\r\n..........................\w+|3[0-6][0-6].....\r\n..........................\w+.....\r\n..........................\w+\s\w+", 3)

    [/autoit][autoit][/autoit][autoit]

    $aFlag3 = StringRegExp($sString, "3[0-6][0-6].....\r\n..........................\w+", 3)

    [/autoit][autoit][/autoit][autoit]

    $aFlag2 = StringRegExp($sString, "3[0-6][0-6].....\r\n..........................\w+.....\r\n..........................\w+\s\w+|3[0-6][0-6].....\r\n..........................\w+.....\r\n..........................\w+", 3)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "", "Flag 3 zeigt alle Matches ")
    _ArrayDisplay($aFlag3, "Flag 3")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(0, "", "Die einzelnen Arrays beinhalten Full Match + Subpatterns." & @CRLF & _
    "Leider kann man Arrays in Arrays nicht direkt ansprechen" & @CRLF & _
    "(ohne sie zwischenzuspeichern), deswegen benutze ich statt Flag 4 immer Flag 3." & @CRLF & _
    "Hier mal alle Arrays in $aFlag4:")

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound($aFlag3) - 1
    $aDummy = $aFlag3[$i]
    _ArrayDisplay($aDummy, "$aFlag3[" & $i & "]")
    Next

    [/autoit][autoit][/autoit][autoit]

    $wagen = StringMid($aFlag3[0],1,3)
    $status = StringMid($aFlag3[0],37,40)

    [/autoit][autoit][/autoit][autoit]

    $ortcount = StringLen($status)

    [/autoit][autoit][/autoit][autoit]

    $ortcalc = StringMid($aFlag2[0],70+$ortcount,40)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(32,"Ausgabe", $wagen)
    MsgBox(32,"Ausgabe", $status)
    MsgBox(32,"Ausgabe", $ortcalc)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $wagen = StringMid($aFlag3[1],1,3)
    $status = StringMid($aFlag3[1],37,40)

    [/autoit][autoit][/autoit][autoit]

    $ortcount = StringLen($status)

    [/autoit][autoit][/autoit][autoit]

    $ortcalc = StringMid($aFlag2[1],70+$ortcount,40)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(32,"Ausgabe", $wagen)
    MsgBox(32,"Ausgabe", $status)
    MsgBox(32,"Ausgabe", $ortcalc)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $wagen = StringMid($aFlag3[2],1,3)
    $status = StringMid($aFlag3[2],37,40)

    [/autoit][autoit][/autoit][autoit]

    $ortcount = StringLen($status)

    [/autoit][autoit][/autoit][autoit]

    $ortcalc = StringMid($aFlag2[2],70+$ortcount,40)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(32,"Ausgabe", $wagen)
    MsgBox(32,"Ausgabe", $status)
    MsgBox(32,"Ausgabe", $ortcalc)

    [/autoit]

    Über die Sauberkeit des Codes möchte ich nicht sprechen, das kommt nacher...

    Wichtig ist, dass ich meine Werte auslesen kann... :rolleyes:

    Gibt sicher einen 100 000 Mal einfacheren Weg, aber was solls, so geht´s auch... :thumbup:

    Danke nocheinmal für den Tipp mit "StringRepExp".... Wirklich cooles Teil... :thumbup:

    • Offizieller Beitrag

    Hier mal ein einfacherer Weg:

    [autoit]


    #include <Array.au3>
    $sSource = BinaryToString(InetRead('http://web.lsz-b.at/Statusanzeige', 1))
    $aSearch = StringRegExp($sSource, '(?s)<td bgcolor=".+?">(3\d\d)</td>.+?<td bgcolor=".+?">(.+?)</td>.+?<td bgcolor=".+?">(.+?)</td>', 3)
    _ArrayDisplay($aSearch)

    [/autoit]