Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Wert parsen von einer Webseite

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Wert parsen von einer Webseite

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Smartin last edited by

      Moin,
      ich bräuchte mal eure Hilfe ...
      Also, ich habe z.B. folgenden Text vom Quelltext einer Internetseite

      <div class="styled__Price-sc-dgnucy-7 hrukSM">4.019,199 €</div>
      

      Mit

      (?<=<div class="styled__Price-sc-dgnucy-7 hrukSM">)[\s\S]*?(?=<\/)
      

      im Parser Adapter erhalte ich in ioBroker dann den Wert "4.019,199 €".
      Soweit so gut.
      Wie muss ich weiter vorgehen, um

      • den Wert ohne den Tausender Punkt
      • dafür in der Dezimaltrennung einen Punkt anstatt des Kommas
      • den ganzen Wert ohne das " €"
        zu erhalten?
        Es soll letztendlich nur der nackte Wert "4019,199" entstehen.
        Kann man das vielleicht schon im RegEx des Parser Adapters lösen oder muss der Wert noch durch weitere Schritte bearbeitet werden?
        Für Hilfe wäre ich echt dankbar.

      Danke im voraus und Gruß aus dem hohen Norden

      paul53 OliverIO 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @Smartin last edited by paul53

        @smartin sagte: Es soll letztendlich nur der nackte Wert "4019,199" entstehen.

        Als Zahl oder als String? Die Wandlung nach Zahl macht ein kleines Skript:

        const idSrc = '0_userdata.0.abc'; // String "4.019,199 €"
        const idDst = '0_userdata.0.xyz'; // Zahl
        
        on(idSrc, function(dp) {
            setState(idDst, parseFloat(dp.state.val.replace('.', '').replace(',', '.')), true);
        });
        
        S 1 Reply Last reply Reply Quote 0
        • S
          Smartin @paul53 last edited by

          @paul53
          Hallo, danke für die Antwort.
          Stimmt, hatte ich vergessen zu erwähnen. Ich habe den Wert bisher immer als String über ne andere Quelle bekommen und mein Script zur Weiterverarbeitung daher auch entsprechend geschrieben. Insofern wäre ein String natürlich streßloser, weil ich dann nicht viel ändern muss.
          Kann man das auch so einfach lösen wie bei Zahl?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Smartin last edited by paul53

            @smartin sagte: Kann man das auch so einfach lösen wie bei Zahl?

            const idSrc = '0_userdata.0.abc'; // String "4.019,199 €"
            const idDst = '0_userdata.0.xyz'; // String "4019.199"
            
            on(idSrc, function(dp) {
                setState(idDst, dp.state.val.replace('.', '').replace(',', '.').replace(' €',''), true);
            });
            
            1 Reply Last reply Reply Quote 1
            • OliverIO
              OliverIO @Smartin last edited by OliverIO

              @smartin

              Warum ist dein Regex mit lookbehind und lookahead.
              Es würde auch einfach das folgende reichen.
              Im Parseradapter dann einfach Number (,) als Typ eintragen.
              Dann speichert der parseradapter den Wert direkt als Number ohne javascript

              <div class="styled__Price-sc-dgnucy-7 hrukSM">([\d\,\.]+) €<\/div>
              

              Eine Anleitung um das selbst nachzuvollziehen hatte ich hier mal geschrieben
              https://forum.iobroker.net/topic/8379/einlesen-von-aktienkursen/81?_=1687886883098

              S 1 Reply Last reply Reply Quote 1
              • S
                Smartin @OliverIO last edited by

                @oliverio
                "Warum ist dein Regex mit lookbehind und lookahead."
                Weil ich so ein richtiger RegEx Held bin und eigentlich keine Ahnung habe, was ich da tue 😂
                Alles zusammen geklaut und gebastelt bis es einigermaßen funktionierte ...
                Danke für das auf die Sprünge helfen!
                Mit Deinem RegEx ist das €-Zeichen jetzt gleich weg. Allerdings lasse ich ihn auf String, dann war es hinterher (s.o.) leichter in mein Script einzubauen.
                Ich habe jetzt sozusagen eine Mischung aus deinem RegEx und dem Script von @paul53 eingebaut, funktioniert super!

                Allerdings musste ich alle Regeln im Parser unter neuem Namen neu anlegen, weil die Datenpunkte im Objekte-Tab auf einmal nicht mehr aktualisiert wurden. Keine Ahnung was da passiert war, im Log konnte ich sehen, dass die Werte aktualisiert werden, aber der jeweilige Datenpunkt im Objekte-Tab blieb stur beim alten Wert. Auch eine De- und dann Neuinstallation des Parsers hat nichts gebracht, sobald ich eine Regel mit dem alten Namen neu angelegt habe, hat er sich den alten festgefrorenen Wert wieder reingeholt und ihn auch nicht aktualisiert. Die gleiche Regel mit einem neuen Namen hat er ganz normal aktualisiert.
                Alles bezüglich meiner oben gestellten Fragen funktioniert also nun wie es soll, allerdings wüsste ich schon gerne wie ich die alten Einstellungen noch herauslöschen kann. Auch weil ich die alten Namen der Regeln schon gerne wieder verwenden würde.
                Parser beenden, dann das Verzeichnis "iobroker.parser" unter /opt/iobroker/node_modules/ umbenennen und dann den Parser neu installieren? Oder gibt es eine Art "Cache löschen" Funktion, welche die alte Daten des Adapters in die Tonne tritt?
                Vielleicht weiß noch jemand etwas dazu.

                Auf jeden Fall schon mal vielen Dank für die tolle Hilfe bei den Ursprungsfragen!

                1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO last edited by

                  @smartin
                  Das ist seltsames Verhalten
                  Evtl weiß @Homoran noch was.

                  Homoran 1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators @OliverIO last edited by

                    @oliverio sagte in Wert parsen von einer Webseite:

                    Evtl weiß @Homoran noch was.

                    wozu genau?

                    @smartin sagte in Wert parsen von einer Webseite:

                    Regeln im Parser unter neuem Namen neu anlegen, weil die Datenpunkte im Objekte-Tab auf einmal nicht mehr aktualisiert wurden

                    kenne ich auch, wenn nachträglich der Typ geändert wurde.
                    Allerdings nur für diese eine Regel.
                    Löschen dieser Regel und Neuanlegen (auch mit gleichem Namen) hat bei mir bisher immer geklappt.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate
                    FAQ Cloud / IOT
                    HowTo: Node.js-Update
                    HowTo: Backup/Restore
                    Downloads
                    BLOG

                    654
                    Online

                    31.8k
                    Users

                    79.9k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    280
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo