IE - Auslesen, Stringformatierung, Error - Handling

  • Hallo liebe Leute,

    zurzeit habe ich mir ein kleines Projekt in den Kopf gesetzt. Es geht um eine 24/7 Software welche Informationen von einer Website bezieht und sie mit den als letztes bezogenen Daten abgleicht. Bei einer Änderung (es geht dabei hauptsächlich um "Textblöcke") wird eine Nachricht via FB-Messenger an eine oder mehrere Personen ausgeschickt.
    Klingt für manche hier wahrscheinlich recht einfach, für mich ist es jedoch gar nicht mal so wenig Denkarbeit. So weit bin ich bisher gekommen, es ging mir allerdings mehr um Denkansätze und Tests der verschiedenen Optionen. Leider bin ich jetzt mit meinem Latein am Ende und habe keine Ahnung wie ich es anstellen könnte, dass:

    • Die Textblöcke welche ausgelesen werden in der Zeilenanzahl variieren können ohne das komplette Konzept über den Haufen zu werfen.
    • Die Software allgemein stabil und zuverlässig läuft (Error-Handling usw.) da es sich ja um eine 24/7 Applikation handeln soll.
    • Die Textblöcke einzeln ("Einsatzkennung?") ausgelesen werden und nicht der gesamte ".innertext"
    • Ich keine langen "Sleep(5000) Pausen einbauen muss, damit das Programm nicht abstürzt.

    Um euch ein bisschen mehr als einen Haufen Rechtschreib.- und Tippfehler bieten zu können, hab ich mal meine Photoshop Skillz ausgepackt und einige Screenshots der "Problemzonen" gemacht.

    Source(Annonymisiert)


    Bei

    AutoIt
    $LineBreak = "{SHIFTDOWN}" & "{ENTER}" & "{SHIFTUP}"


    handelt es sich um den Ablauf um bei einer Messenger - Nachricht einen Zeilenumbruch zu machen, ohne die Nachricht mit "ENTER" zu verschicken.
    Ja ich weiß, der Code ist einfach nur schrecklich schlecht Organisiert. :/


    http://up.picr.de/24469638sw.jpg
    http://up.picr.de/24469639ca.png
    http://up.picr.de/24469640co.png
    http://up.picr.de/24469641kh.png
    Beim ersten Bild sieht man noch ein Problem: Wenn ich den ".innertext" auslese, schreibt er auch den kleinen farbig eingerahmten Buchstaben für die Einsatzart mit dazu. Leider hab ich keine Ahnung wie ich den da wegbekomme, da er ja ständig variiert... ?(
    Mit dem Messenger hab ich eigentlich keine Probleme, der macht mir das Leben eigentlich recht leicht ;)

    Würde mich über einige Denkansätze freuen! :thumbup:
    ____________________________________________________
    Edit 7:

    Hallo Leute!
    Die allererste Version des Notifiers ist jetzt so weit fertig!

    Punkte die noch in Arbeit sind:

    • Message über Whatsapp versenden (wenn jemand Erfahrung oder Vorschläge hat, BITTE weitersagen!)

    Source:

    Spoiler anzeigen

    Bei meinem letzten Post kann man den Entstehungsprozess ein bisschen mitverfolgen.
    Nochmals Vielen Dank an Kanashius!
    ____________________________________________________

    Liebe Grüße,
    Stoani

    mfg, Stoani

    7 Mal editiert, zuletzt von Stoani (9. Februar 2016 um 16:45)

  • Danke für die flotte Antwort bert!

    Ich weiß zwar nicht genau was du mit Spieleautomation meinst, aber ich will damit für meinen Bezirk eine Benachrichtigungssoftware erstellen, damit meine Kollegen und ich uns schneller auf z.B. die Nachbesetzung einer Dienststelle (RK) vorbereiten können. Hat für mich nicht recht viel mit einem "Spiel" zu tun. Aber wenn du sagst, es wird nicht unterstützt, werde ich mich natürlich damit begnügen müssen.

    Liebe Grüße,
    Stoani

    mfg, Stoani

  • Lies dir die Forenregeln durch und versuch jetzt nicht mir/uns zu erklären das es sich um echte
    Einsätze handelt. Ich hab die URL in deinem Skript

    Code
    Global $aIE = _IECreate("http://ooe.martinhochreiter.at")

    aufgerufen für mich eindeutig ein Simulationsspiel = eindeutig gegen die Forenregeln. Oder kann in Oberösterreich jeder mitlesen wo es im Moment etwas zu sehen gibt. Wieviel zusätzliche Einsatzkräfte benötigt ihr um die ganzen Schaulistigen im Zaun zu halten?

    2 Mal editiert, zuletzt von autoBert (2. Februar 2016 um 22:06)

  • Sorry. Ich weiß ich hab eigentlich nicht das Recht dich zu berichtigen, aber verdammt nochmal das sind echte. Die Seite http://ooe.martinhochreiter.at bezieht ihre Daten von der Offiziellen LFK (LandesFeuerwehrKommando) Oberösterreich (http://intranet.ooelfv.at/) Wenn du mir das nicht glaubst, tut es mir leid.

    Das ist kein verdammtes Spiel!
    So funktioniert das nun einmal bei uns in Oberösterreich!
    Sobald die jeweiligen Feuerwehren alarmiert werden, und das werden sie vom http://www.ooelfv.at/ LFK, dann wird sofort ein Eintrag (http://intranet.ooelfv.at/) erstellt.
    Ich bin unter anderem in einer Rettungsleitstelle tätig und du wirst mir jetzt sicher nicht sagen, wie unser Feuerwehr - Alarmierungssystem funktioniert.

    Sorry für den rauen Ton aber ich fühle mich gerade echt im Recht.

    Grüße,
    Stoani

    mfg, Stoani

  • Armes Österreich, wenn jetzt schon Privatleute eigentlich hoheitliche Seiten unter eigenem Namen hosten müssen. Und wieder andere sich erst selbst die Werkzeuge erstellen müssen um die hoheitlichen Aufgaben erledigen zu können.

    Halte du (und auch andere) dich bitte zurück bis sich ein Moderator dazu geäussert hat.

    Im übrigen solltest du den Ersteller der Seite darüber informieren, daß er gegen § 5 Abs. 1 E-Commerce-Gesetz (ECG) verstößt, denn ich kann gar nicht (und erst recht nicht leicht) die geforderten Infos abrufen!

    2 Mal editiert, zuletzt von autoBert (2. Februar 2016 um 22:31)

  • @autoBert:
    Sieh mal hier: http://ooe.martinhochreiter.at/#about
    Dort steht, dass die Infos von den Livedaten stammen. Woher die Seite die Daten hat ist ja auch relativ egal, da muss sich die Seite verantworten (wobei für mich dort alles rechtens aussieht). Dort steht sogar, warum es unter privatem Namen steht...

    Also mal ganz abgesehen davon, dass das ein sehr langweiliges Spiel wäre... Du musst doch nicht immer gleich jeden verdächtigen einen Bot zu schreiben, nur weil er etwas automatisieren möchte ;)

    Hab grad keine Zeit (Klausuren), werds mir demnächst ansehen, falls bis dahin niemand eine Antwort/Lösung hat.

    OÖLFV bei google gibt auch direkt die Original-Seite, sowie die hier genannte als 2tes Ergebnis.

    @Stoani':
    Magst du einmal präzisieren, wie genau wir dir helfen können? Suchst du nach einer Besseren Lösung, einfach nur allgemeinen verbesserungs Vorschlägen,... hab dein Problem nicht so genau erkennen können.

    Edit: (Autobert,) Da du den zugriff auf der Offiziellen Seite nicht gefunden hast:
    http://intranet.ooelfv.at/
    Dort links einfach in der Liste draufklicken.

    • Offizieller Beitrag

    Kloppt euch nicht... ;)

  • Zitat von Raupi

    Kloppt euch nicht...

    Aber er hat angefangen :D


    Mein Hauptproblem liegt beim Auslesen von dynamischen Daten (Textzeilen) aus oben genannter Website. Kann aber auch direkt die LFK - Homepage (http://intranet.ooelfv.at/) sein. Ich hatte die Website von Martin Hochreiter nur verwendet, weil es mir damit leichter gefallen ist.

    Wenn sich nun mehrere Feuerwehren im Einsatz befinden, verändert sich schließlich die Anzahl der verwendeten Zeilen. Dies macht es mir nicht gerade leicht, nach dem "Auslesen, Abspeichern, Formatieren, Zeilen auslesen und als Paket verschicken" - System zu arbeiten wie ich es in meinem ersten Lösungsansatz versucht habe. Ich würde daher gerne wissen, wie ich diese http://up.picr.de/24469640co.png "Einsatz - Blockbauteile" im Ganzen auslesen kann, und nicht den gesamten ".innertext" um ihn danach erst recht wieder formatieren zu müssen.

    Liebe Grüße,
    Stoani

    mfg, Stoani

  • So, habs mir mal angeschaut, nen kleinen Moment hatte ich noch :)

    Aus der Seite hab ich mal ausgelesen, wo die die Daten her hat. Die kommen von einer JSON-Abfrage:
    Laufende Einsätze: http://intranet.ooelfv.at/webext2/getjson.php?scope=laufend&callback=?
    Die Adresse einfach mit InetRead herunterladen.
    Alle Adressen:
    ressource_current = http://intranet.ooelfv.at/webext2/getjson.php?scope=laufend&callback=?
    ressource_day = http://intranet.ooelfv.at/webext2/getjson.php?scope=taeglich&callback=?
    ressource_2days = http://intranet.ooelfv.at/webext2/getjson.php?scope=2tage&callback=?
    ressource_6hours = http://intranet.ooelfv.at/webext2/getjson.php?scope=6stunden&callback=?
    ressource_district = http://intranet.ooelfv.at/webext2/getjson.php?scope=taeglich
    ressource_detail = http://intranet.ooelfv.at/webext2/detail.php?output=json


    Um die \u00e4 (Unicode Schriftzeichen herauszubekommen):

    AutoIt
    #include <WinAPI.au3>
    Local $str = "My name is \u0393\u03A1\u0397"
    Local $utfStr = Execute("'" & StringRegExpReplace($str, "(\\u([[:xdigit:]]{4}))","' & ChrW(0x$2) & '") & "'")
    Local $ansiStr = _WinAPI_WideCharToMultiByte($utfStr)
    MsgBox(64,"Unicode2Ansi", $utfStr & @CRLF & $ansiStr)

    Die JSON-Datei, diese musst du parsen und die Daten verarbeiten. Kannst ja mal versuchen, wie weit du kommst :)


    Mit dem Kram kannst du alles bis aufs senden mit dem Messenger aus deinem Script rausnehmen.
    Das auslesen kannst du dann einfach öfter wiederholen.
    (Würde empfehlen, nicht allzuoft, um die Seite nicht allzusehr auszuwerten. Denke, alle 30 Sekunden, oder so dürfte reichen)

    Zum Parsen kannst du RegExp nutzen z.B. StringRegExp($sJSON,'"cnt_feuerwehren":(.*?),')
    Und _StringBetween($sJSON,'"cnt_feuerwehren":',","), gibt nen array. In diesem Fall einfach mit [0] auf den ersten Eintrag zugreifen
    Und ...
    Probier einfach mal aus.
    Dadurch ist dein Programm auch nicht sehr Fehleranfällig, sobald du beim Parsen alle eventualitäten bedenkst.


    Dies ist ein Beispieldatensatz. Hab ihn eingerückt, damit du eine bessere Übersicht bekommst. Du musst Parsen, als würde alles in einer Zeile stehen.
    Beispiel JSON:


    Hoffe, das hilft dir weiter.

    MfG Kanashius.

    Edit: Hier wird das Parsen von der Seite gemacht:
    view-source:http://ooe.martinhochreiter.at/javascript/functions.js?v1
    Hilft dir vielleicht noch.

  • AutoIt
    While 1
    	Send("Danke")
    WEnd

    Das ist ja wie Weihnachten und Ostern gemeinsam!

    Vielen Dank, werde mich morgen darauf stürzen. Deinen Post muss ich mir zwar teilweise von Google übersetzen lassen und auch parsen etc. wird zum lernen sein, aber des wird schon klappen!


    So wie du drauf bist, gehen deine Klausuren doch runter wie nix! :D

    Liebe Grüße,
    Stoani

    mfg, Stoani

  • Ganz kurz noch, kennst du gutes Lesematerial zum einlesen in die Marterie?


    Edit:

    Zitat von Kanashius

    (Würde empfehlen, nicht allzuoft, um die Seite nicht allzusehr auszuwerten. Denke, alle 30 Sekunden, oder so dürfte reichen)

    Nope, war mir klar. Würde mir auch nix bringen wenn ich die Seite überstrapaziere.

    mfg, Stoani

    Einmal editiert, zuletzt von Stoani (3. Februar 2016 um 00:03)

  • Bin immer noch der Meinung, das die Seite (mit Duldung?) zwar offizielle Daten nutzt, aber es ist keine offizielle Seite:

    Code
    Hierbei handelt es sich um KEINE offizielle Applikation des OÖ. Landesfeuerwehr- verbandes (OÖLFV). Ziel der Anwendung ist es, das Bild der oberösterreichischen Feuerwehren zu stärken und feuerwehr- interessierten Personen einen Einblick in das Tagesgeschehen oberösterreichischer Feuerwehren zu geben.

    auch bin ich immer noch der Meinung daß die Seite nicht der Impressumspflicht genügt (simples Icon mit Kontakt-Link). Aber solange @Oscar oder ein anderer Mod hier nicht schliesst ist es mir recht.

    Das man Daten einer IntraNetseite (http://intranet.ooelfv.at/) ohne angemeldet zu sein zu sehen bekommt und auch auslesen kann verwundert mich etwas,denn:

    Intranet

    Ein Intranet (lat. intra ‚innerhalb‘ und engl. net ‚Netz‘) ist ein Rechnernetz, das im Gegensatz zum Internet

    kein öffentliches Netz benutzt
    nicht öffentlich ist,
    eingeschränkte Funktionen (Protokolle) bietet


    Afair habe ich etwas ähnliches (Rettungswesen/Bergwacht? auch Österreich) vor Jahren schon einmal supportet, damals hat der TE aber zu erkennen gegeben, daß es eine Seite für Übungszwecke ist. Wer sagt dir/uns denn, daß die Seite ooelfv.at nicht auch nur ein Übungsserver ist? Dies wäre besser für Vöcklabruck ATTNANG-PUCHHEIM, denn dort gibt es mindestens 1 Hirnrissigen der sinnlos die Brandmeldetaste mehrmals drückt.
    Aber auch mit Daten aus einem Übungsserver auszulesen habe ich kein Problem. Aber Daten auslesen um sich in einem Wettbewerb Vorteile zu verschaffen, damit habe ich Probleme.

    mfg autoBert

    4 Mal editiert, zuletzt von autoBert (3. Februar 2016 um 00:53)

  • Das mit VB und der Brandmeldetaste ist mir auch aufgefallen. Aber ich denke nicht, dass die wirklich so oft gedrückt wurde.


    Wenn du willst, Bert, kann ich dir gerne Aktuelle Ereignisse dokumentieren. Der Brand zum Beispiel in GM - Ebensee, Langwieserstraße 132 ist tatsächlich passiert. Ich hab früher mal in der Nähe gewohnt und ein Freund aus der Zeit hat mir bestätigt, dass das Haus gegenüber der Firma "Leirich" komplett abgebrannt ist. Kannst du mir jetzt natürlich glauben oder auch nicht. Fakt ist, ich kann dir ein dutzend Beispiele nennen, bei denen ich sogar "live" dabei war.
    Seltsam ist es schon, dass die Daten der Öffentlichkeit ohne wenn und aber zur Verfügung gestellt werden. Vor allem da sich Präzise Einsatzadressen darunter befinden...

    http://up.picr.de/24471039cy.jpg

    Bei diesem Einsatz war ich zb. das erste Rettungsmittel vor Ort und Anforderer der FF (eingekl. u. ohne. Bewusstsein)
    Kannst du mir auch wieder glauben oder auch nicht ;)

    mfg, Stoani

  • Ich habe kein Problem damit hinterher über einen Einsatz zu lesen. Wenn ich/jeder aber aktuell sehen kann in XY sind Feuerwehr A-Stadt und Feuerwehr B-Stadt aktuell im Einsatz wundere ich mich schon. Daß es Personengruppen gibt, welche es sogar einsehen können müssen ist für mich absolut klar.
    Btw.: Ist eure Gendamerie genauso auskunftsfreudig? Was, wo, wieviele Fahrzeuge im Einsatz und das in Echtzeit. Wenn ja schule ich um und wandere nach Österreich aus.

  • Nein. Auch von uns im Rettungsdienst bekommst du keine Auskunft.
    Frag mich nicht wieso.

    Gendarmerie gibt es schon lange nicht mehr. So weit in der Steinzeit leben wir auch nicht mehr ;)

    Edit1:

    Soweit so gut. Läuft wie geschmiert. Mit deinem Ansatz lässt sich wirklich so einiges Anstellen @Kanashius !


    _StringBetween2 hab ich mir aus diesem Thread gemobst: https://www.autoitscript.com/forum/topic/89554-parsing-html-data/?do=findComment&comment=643708

    Danke an
    StrategicX


    Falls jemand Lust und Laune hat, kann er ja gern noch ein paar Pointer zum Thema 24/7 abgeben. Ich würde wahrscheinlich AdlibRegister verwenden. Vorschläge?

    Edit2:
    Noch mehr Codegeschnipsel ;)


    Edit3:

    Nächstes Update vom Code, hab mich nun entschieden die Daten erstmal in eine .ini - Datei zu packen. Da laufen sich nicht davon ;)
    Nur wie es mit dem auslesen wird weiß ich noch nicht so ganz. Aber wird schon klappen.


    Edit4:

    Hier ein Auszug der .ini - Datei:

    Funktionen die noch fehlen:

    • Handlung wenn keine Einsätze geladen werden können weil zum Beispiel keine vorhanden sind.

    EDIT5:

    Nochmal ein Source Update. Ich hab soweit alle relevanten Daten raus bekommen, wenn ich Zeit hab, mach ich eventuell noch die Koordinaten und andere unwichtige Daten.
    Jetzt geht es an das Aktualisieren und Verschicken der Pakete.


    Verbesserungsvorschläge zur Optimierung? Weniger Fehlerquellen und so.

    Nochmal die .ini-Datei:

    EDIT6:


    So sieht das Ganze vor Erst einmal aus. Schluss für heute :D



    Liebe Grüße,
    Stoani

    mfg, Stoani

    12 Mal editiert, zuletzt von Stoani (4. Februar 2016 um 18:51)