Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Preis von Propellets.at mittels Parser auslesen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Preis von Propellets.at mittels Parser auslesen

Scheduled Pinned Locked Moved ioBroker Allgemein
44 Posts 9 Posters 4.8k Views 9 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G GeorgL76

    @looxer01

    Hi,

    super danke dir :-)

    Verstehe ich das jetzt richtig. Parser wird dafür nicht benötigt?

    bekomme immer sowas als Antwort nach dem ausführen des Script.

    5.1.2023, 09:48:42.058	[info ]: javascript.0 (515365) Stop script script.js.common.Heizung.Pelletspreis
    5.1.2023, 09:48:42.063	[info ]: javascript.0 (515365) Start javascript script.js.common.Heizung.Pelletspreis
    5.1.2023, 09:48:42.064	[error]: javascript.0 (515365) script.js.common.Heizung.Pelletspreis compile failed:
    at script.js.common.Heizung.Pelletspreis:75
    
    
    javascript.0
    515721	2023-01-05 10:22:33.033	error	at processImmediate (node:internal/timers:468:21)
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1527:17)
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	at /opt/iobroker/node_modules/iobroker.javascript/main.js:2053:17
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1955:37)
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1702:21)
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	at new Script (node:vm:100:7)
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	SyntaxError: Unexpected identifier
    
    javascript.0
    515721	2023-01-05 10:22:33.032	error	^^^^^^
    
    javascript.0
    515721	2023-01-05 10:22:33.031	error	"sec-ch-ua": ""Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"",
    
    javascript.0
    515721	2023-01-05 10:22:33.031	error	script.js.Pelletspreise compile failed: at script.js.Pelletspreise:75
    

    Viele Grüße,
    Georg

    L Online
    L Online
    looxer01
    wrote on last edited by looxer01
    #28

    @georgl76

    mmmh, da läuft was falsch und es hängt vielleicht nicht mit dem Script zusammen.
    Poste bitte mal deine Zeile 75.
    Hast du das Script in "common" oder "global" reinkopiert ?
    (sollte "common" sein.
    Hast du auch die beiden NPM Module eingetragen ? siehe screen print im vorherigen post.

    Zur Parserfrage
    genau, den brauchst du nicht. Der Parser zieht den bundesweiten Durchschnittspreis.
    Das Script zieht dir aber die Preise, die du tatsächlich zahlen würdest.

    vG Looxer

    G 1 Reply Last reply
    0
    • L looxer01

      @georgl76

      mmmh, da läuft was falsch und es hängt vielleicht nicht mit dem Script zusammen.
      Poste bitte mal deine Zeile 75.
      Hast du das Script in "common" oder "global" reinkopiert ?
      (sollte "common" sein.
      Hast du auch die beiden NPM Module eingetragen ? siehe screen print im vorherigen post.

      Zur Parserfrage
      genau, den brauchst du nicht. Der Parser zieht den bundesweiten Durchschnittspreis.
      Das Script zieht dir aber die Preise, die du tatsächlich zahlen würdest.

      vG Looxer

      G Offline
      G Offline
      GeorgL76
      wrote on last edited by GeorgL76
      #29

      @looxer01

      Frag nicht was ich jetzt gemacht hab, hab nochmals dein Eintrag vom 10.12 kopiert und neu eingefügt und schon gehts :-)

      Danke für die Hilfe.

      Vg,
      Georg

      L 1 Reply Last reply
      0
      • G GeorgL76

        @looxer01

        Frag nicht was ich jetzt gemacht hab, hab nochmals dein Eintrag vom 10.12 kopiert und neu eingefügt und schon gehts :-)

        Danke für die Hilfe.

        Vg,
        Georg

        L Online
        L Online
        looxer01
        wrote on last edited by
        #30

        @georgl76
        ok, super. ich hatte bemerkt, dass der code nicht in code tags eingefaßt war und dies zwischenzeitlich nachgeholt.
        Wahrscheinlich hattest du einfach noch ein paar schnipsel mit kopiert die nicht dahin gehörten.
        Würde es erklären

        1 Reply Last reply
        0
        • Andreas HaselwanterA Offline
          Andreas HaselwanterA Offline
          Andreas Haselwanter
          wrote on last edited by Andreas Haselwanter
          #31

          Hallo @OliverIO mittlerweile hat sich das aussehen der Homepage geändert und es kommen keine Daten mehr. Vielleicht hat wer Zeit einen neuen REGEX zu schreiben. Wäre mir sehr geholfen.

          MFG

          OliverIOO 1 Reply Last reply
          0
          • Andreas HaselwanterA Andreas Haselwanter

            Hallo @OliverIO mittlerweile hat sich das aussehen der Homepage geändert und es kommen keine Daten mehr. Vielleicht hat wer Zeit einen neuen REGEX zu schreiben. Wäre mir sehr geholfen.

            MFG

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            wrote on last edited by
            #32

            @andreas-haselwanter

            ja die seite ist so nicht mehr verfügbar.
            poste bitte nochmal den link auf dem du die preise für deine postleitzahl im browser findest

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            Andreas HaselwanterA 1 Reply Last reply
            0
            • OliverIOO OliverIO

              @andreas-haselwanter

              ja die seite ist so nicht mehr verfügbar.
              poste bitte nochmal den link auf dem du die preise für deine postleitzahl im browser findest

              Andreas HaselwanterA Offline
              Andreas HaselwanterA Offline
              Andreas Haselwanter
              wrote on last edited by
              #33

              @oliverio Auf der Seite https://www.propellets.at/aktuelle-pelletpreise?gclid=Cj0KCQjwmtGjBhDhARIsAEqfDEdSui5upGPtPTGp9EGU38qbdT60PFdnv3FVE-iDd6jj8_GiANIVmOsaAksyEALw_wcB
              Für die Region West.
              Wenns gehen würde wär ich total dankbar.

              OliverIOO 1 Reply Last reply
              0
              • Andreas HaselwanterA Andreas Haselwanter

                @oliverio Auf der Seite https://www.propellets.at/aktuelle-pelletpreise?gclid=Cj0KCQjwmtGjBhDhARIsAEqfDEdSui5upGPtPTGp9EGU38qbdT60PFdnv3FVE-iDd6jj8_GiANIVmOsaAksyEALw_wcB
                Für die Region West.
                Wenns gehen würde wär ich total dankbar.

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                wrote on last edited by OliverIO
                #34

                @andreas-haselwanter

                oh mann.
                Exaktes arbeiten und exakte Angaben sind heute wohl aus der Mode gekommen.
                Du wirfst mir einen Duden hin und sagst, da steht das Wort drin das ich meine.

                Auf der verlinkten Seite sind mehr als 12 Diagramme und Tabelln mit diversen Auswahlmöglichkeiten.
                Du darfst gern auch einen Screenshot machen und einen Kringel um den Wert den du meinst.

                Evtl zu meinem Hintergrund: Ich habe keine Pelletheizung. Eigentlich interessieren mich die Preise für Pellets gar nicht. Erst recht nicht die von Österreich. Ich weiß auch nicht wo ich da genau hinschauen muss. Ich kenne auch keine Fachbegriffe zu diesem Thema. Ich will auch nicht so eine große Seite von oben bis unten durchlesen, damit ich den Inhalt verstehe.
                Das musst du mir schon exakt sagen.
                Aber ich helfe gerne bei Punkten, die andere nicht so können.
                Wenn ich allerdings merke, das man Aufgaben komplett delegiert, dann verliere ich schnell die Lust dran.

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                1 Reply Last reply
                0
                • L looxer01

                  @oliverio
                  super und vielen Dank.
                  Ich habe mir erlaubt das Programm etwas zu gestalten, so dass Einstellungen leichter vorgenommen werden können.
                  auch die States werden angelegt.
                  lG Looxer

                  //Author Olivero aus Forumsbeitrag
                  //https://forum.iobroker.net/topic/56432/preis-von-propellets-at-mittels-parser-auslesen/22?_=1670064893887&lang=de
                  // Angepasst: 03.12.22 Looxer01
                  
                  //..........................................
                  // Einstellungen
                  //..........................................
                  const dpPrice1 = "javascript.0.Heizung.Pelletspreise.dpPrice1";
                  const dpDealer1 = "javascript.0.Heizung.Pelletspreise.dpDealer1";
                  const dpPrice2 = "javascript.0.Heizung.Pelletspreise.dpPrice2";
                  const dpDealer2 = "javascript.0.Heizung.Pelletspreise.dpDealer2";
                  const dpPrice3 = "javascript.0.Heizung.Pelletspreise.dpPrice3";
                  const dpDealer3 = "javascript.0.Heizung.Pelletspreise.dpDealer3";
                  
                  const Abfragemenge = "6000";
                  const AbfragePLZ = "65760";
                  const Abfrageplan = '0 */2 * * *' ;            // Cron - alle 2 Stunden
                  
                  
                  //..........................................
                  // Programm Vorbereitung
                  //..........................................
                  const fetch = require("node-fetch");
                  const cheerio = require("cheerio");
                  CreateStates();
                  
                  //--------------------------------------------------------------------------------------------------------------------
                  // Schedule 
                  //--------------------------------------------------------------------------------------------------------------------
                  schedule (Abfrageplan,function () {
                  log("Pelletspeise schedule gestarted","info")
                  analyze();
                  
                  }) // End Schedule
                  //..........................................
                  // Programmablauf Ende
                  //..........................................
                  
                  
                  
                  //--------------------------------------------------------------------------------------------------------------------
                  // Function Analyze
                  //--------------------------------------------------------------------------------------------------------------------
                  async function analyze() {
                    let text = await getData();
                    let $ = cheerio.load(text);
                    let price1 = $($(".price-middle:not(.total)")[0]).text().trim();
                    //var  price1Total = $($(".price-middle total <span> ")[0]).text().trim();
                    //log ("price total " + price1Total
                    let dealer1 = $($(".dealer-name")[0]).text().trim()
                    let price2 = $($(".price-middle:not(.total)")[1]).text().trim();
                    let dealer2 = $($(".dealer-name")[1]).text().trim()
                    let price3 = $($(".price-middle:not(.total)")[2]).text().trim();
                    let dealer3 = $($(".dealer-name")[2]).text().trim()
                  
                    setState(dpPrice1,price1);
                    setState(dpDealer1,dealer1);
                    setState(dpPrice2,price2);
                    setState(dpDealer2,dealer2);
                    setState(dpPrice3,price3);
                    setState(dpDealer3,dealer3);
                  } // End Function
                  
                  
                  //--------------------------------------------------------------------------------------------------------------------
                  // Function getData
                  //--------------------------------------------------------------------------------------------------------------------
                  async function getData() {
                  var fetchstring = "https://www.heizpellets24.de/pelletpreis-direkt/"+AbfragePLZ+"/"+Abfragemenge+"/1/dt5"
                  var bodystring =  "ctl00%24ScriptManager1=ctl00%24MainContent%24OrderProcess_Step_1%24PriceOrderUpdatePanel%7Cctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTTARGET=ctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTARGUMENT=LoadPrices&__LASTFOCUS=&__VIEWSTATE=ZOqYdG%2BFwZ%2BPrH15aLaMOhCzmA140AC7FRQT3yJlHciVxQ48WlVoIAneqpP531uNShrNE4s8pYwrxCbi2Al%2FD78egos7NN8N26Wwp3FQY0QU2BUEUQiUvMfvrw6k4579ZlpA%2BjWBFS2L9gdEqrq%2BNy%2F2FfulD2BLGcSw3dxN2BoDBJ6ZlKMEYhpcwsnrciH0JzSBmCppft1AUYcTCh4bnwEkEqrmCNNc6JWx0jm9kdJIHMlHNVXJg3HujRyj8g75ZwMJVzQQGVljGNVsx6EeMrHhu%2BVgrjM3dMPwV5p485kdwKlPvkhPliUDI3ES2l%2FLcTGvyQIdMULrFFG5TanRnKkRKf40BvCE8Wu233%2Bb5b7dl8vhb8PCOilHtpSvMESCcyrxMvctN2ALlFrLPfV15ydI6aghBWm1dULmXOMINUXu%2BTdc0irIq4qxw3BDYvjCVADCXio9a5syz5qcdori2HzaaTpFD1X5V2h8L3jG%2FRSnU9fGxl38FEHQ5CejNn%2FBqIpurm6uDvsfLznni1EwbO52WsrlqWVyIrKaT2594wPUVV9IKfg%2FJ9CjjlYASS2zQmXp2UNpZIJCWgFXqsL1Y0IJeONZmNdqt%2Fs5VL%2FXh0aZpWpr8Z0V4FzhsxX1Fz%2BSLVQ4s%2F7lQJ0r1ZKffmwNXdxHyqoag%2BTYBpqqv8wIs88%2BjO8ZIONKPaeRhoHmFFZAVCrP3bpaRYxwRPdRK1ZG0omNc%2FCmNhnoPr1flBfnqfMkhofm3ihkL3cEu6A%2BB%2Bdp4cVkuzCA6Pgva7JQ23bhOhXhN%2BHlwd1cwH6UBx83tTEEC5vMToqSMEQIM3Kzhf38FMlPf0E%2B77h1v2kaIP8l%2FxBDCwRpfqGoAtUIxrlJSdAEfaE2m4p4thTkkCj4XgUc2wWlxDHEbuNexg3oGS4TbgyO%2BPVMgUdq15QTir9YDQ6sPX16EMKjUmwes%2FERLwmctj8z3jCBrTBO%2FZl1HnHYApgpSmCIRq5UZTNAIIwouoMK%2FFlAkZJGMDpS6azY%2BHoXc42r%2BeB1r%2FOGMkcCs2Yg0i6sXXMM1MEes5V2ETT4RwzPVN1XN7oqCVlX9%2Fa2R%2FMpdyL%2BbriLCqVWgtBEp%2FaI3KhYlsb%2BvouM3MPeCXPvLQMlYtjUcF6AajPK8Kuilc1yS%2FluMNQrLSGnngyyU3%2BaBkDeU1SSdpPqRw7BJwgafDEiXwWXL9TTHuTrdDAGTteBFHvRI1%2BOS9qOzt9qZiJ3wBUA0NhtEWeOmrkpMUHj8NiP6IA3KLeDsu8InVNRKIX93ALsnNQKr2l57bPOmCgMAz2LKbPfUEPZGcuhIPW6857%2BDLyUpZPBimleNRXhzfZ5UKr0UV8oi9BIWeO9aEctJfRba1DxGHNL0CPXAAXJHDo9dQCxhSHB1O3NxPb8mFX8NhmFCsLSb78%2FMqPL%2BHjzAijQumviqAjRG8lmCDSTCt%2Bcam1a%2FkPZFH7KXlDhF7QWX45XOFc4mO6BDhCRmZcoD2%2FYHFkMEVPi7K%2FOlNL6jTAXqm0UTLnsGuhaeUwDRZlJKlJKjUfgGCFZYV78%2BjE%2FDDmocBaaBTqcWoJ4QyCUU70XxEN%2BZMPbZtnFtVXTeS0VPZykzMah%2BugET7zPlvS8xUO1YqbcpmoGeaXTDrchJdMnkOea02C4xa5aMwEnnAQi2udDLeMXfjYD8PhUThKP3anE93ta7u37jYvXm8vLXPVMNFCqUv%2BvJTUxEVlpYpczcgqqcUPGi9sNrmgVxgIFvnu%2BR%2FD%2Bot8eQ8zXpLJMljPe9mt1KYIoYQH13DoJO%2BSnxEahfMlcfJio6Vt2CLK7yCCiwzLvIzsXDw3CBv2i%2Bkkga1uvw3OjlMjfnEcRjPJ4VjfrEfrjGTy6TjnSuMiENlt4MMTSgz4CfdAOhL2avTkh7AAVlHzLUQCPxI1q69fdRI%2B3wUvEnMvK%2BjTpAiuxFmveQ9ws5%2BnUULRH54L37qejMOVeI5ryRzSSQPJZIRUJMV5nX%2FM71YC0uJ1TcVJMqlV2S10zl4%2B8jS5cfZka%2FFsESP6MkrB%2BDuI9JwTB7mI5bJzlVbtlfflblcw4aiY9nvd%2BdkUbifX%2FRLTXkOSmvEwz%2FfhbtLZ9oMwj%2BOwZGIXaupyZ2n0ZLk%2FCHNp1CObl3O8NVk4XQO%2BPUIvjqW93aiaZaQnt1fevy%2FWP58wMv6j6vKRmWK2dFxb2c8nojmLja9CYIJE4pVokwdDN0dW4uvNhp1ji9183kL%2BPZDi0kZ1HS5poNFpq1kPmlvimPGBMbBA991LdH0ZE0%2FhSE1wjE5VrfBTxkz8jDNxvlhr74qbPF6rB5esZYNGV1PJJdiwO0IxbL727ZFJ3dRpv1MYQIA7zDkKhmRvNH2%2FKCA7RLFw1nBACOoctXUTY0oTE89R7zTUFMYbfcRUDatJLTW7hCP3NbYLRE8YHaQESuA0yU4tbfY1IS%2BaurfI7iAcviEZxSk2y9akqRXo%2BsnfqV%2Bu6zV3RjuPS8X9%2FLnj4bj2xS1MP5s3ll2fx8FFwZ4%2BhnKy73eaj8kLCwP6ydLpA34APrj8%2B7PmXOjwO6%2FttZlAwZPf8pt%2Fnyx3VA02oun41c22TFSw5G06YIouLb1FK1doRBJKpuanQnf0TPywfg2fikSXEgdd%2FpOzqJ0Z4KDmiQMVp81vKFxfNJMBJJERy%2FC4Pbe2%2F%2BMj1xiYA72xupCTtzSlpO0h3HJM%2FUjIU70iK%2FeVo8W%2F5oG4hc5RR5qtZZ8wuyJekAjQmp3kSIqYxrMsLXoKFlRYwa7uhY3OUAJj87JdReMB2mdtLmGCu8vAVGyXreVO9EGMCWe6wqObm6DeYqLUzMqH6BSvsQSq%2FT28r9YQnmSoR8UH7rj4ENHnA96aRWd45rB1N1TpQKchlsMx71s1t34vGnFgdmbPR54SouwIU9I0vgqLwLNxJccJ8SFZYgQyNZx63oLfc%2FND%2FPnGiNcFuGvFcR4z3PZxxUxiGWIECWLcgj5MZqHyF4IFZQo%2B7rsPIWwjreOE50zEzCbkN1BRncsYjjHV5du4MyaEgww1jqWTL6O5f%2FQeBbKlfxDMi8ucHZby94P4itRSewQQdWjZpRunxIhyOZk24SsWPlUHEIYoj3le7qydXsDbt%2Fd2gHz9nO3f%2B%2BX3a4DdoAfipctxjYigMm6fzq8GqMG9FVDbpyUvhut7TrsmiBqzsr8qyRSuW%2B2cuqUjsDKVqG1sygPiXv5LvLjFQFQEixxNf7ed9aRRr0J3%2FE8gQ50EIASX%2FtzIMPXCmTULaAhdCohppG71oVG3K9Nz3mmCgUZ7S%2BZg9udbC1Shq44hp%2FDE1FslIiMhbLca2UYDKDKkk8YMit7AWDuq1L9RhsusHGrrTO9WoXSKvx20%2BN2D2SsqC0InP7IGwor%2BF4XQoRpbP4%2B0mtiOoIUI21K3SnDe2Za5nBn7JMg3LRSAJRTyFaYLk8jc1dbimsRLxEUoe%2F%2BwRHP7yeJrVoN1Thjdr4xdPYFyq2lkM%2FNLajfyXVJnz6CdDHD5cYXVO5Q7XTSCV%2FTIqOWDh2SyIoiWrGAWpRdaZB4%2BpiiaKFXG0Sy7%2Bpi0GOXv3HnewyyfQjWHlwu%2BYvQAy2mDjpkiGkG3tp7YF8%2FlLnVxUKNGV0AnSarRyOUmwTmhaKEAjYSVCUyqtlUjrZf1KCgsvi5VPlinB86Ot4jbWpT%2BNp6ZLO1HRzYKEIl%2FVEW8nCzxBi7PrF3ji1KbIwdMiuRWJYzyzpWeUzDHi1ml2mqEBsxTqRqsqwhM4KYDaaKGsqgTNpDpyb71AYBdLyz3yJXxa%2FonL14sQ7WrgRjRVhgpe3vBUSI2hN%2BsZtsts82jf2tx7zxAvlG8M7JPSUj7YerELqv3XKM4S9lI021ZdVbqpnKK6oPAEHGeIst%2FaUjVGhE19v0yu0mP4VuLu7kBvosA%2BHXZLOv3CRiz7UW1Zs4hj0LIJCqHW8TbAgxuUpZ7zJk8%2FW004uNoo13WEH4Iwim0ZIPH76NqnJ6%2B1%2BMrNwo171SEuRS%2FaQQp9oPWDdcytcdF3tzWwu4FnYi51N9ZASnYJkBpO%2FGmbrVzaouSLhWwuagb5WcSrzEQzRdPj8Xg0QXgxVtFXKyLKFRt7l7sg8uu50KC2v7vfygsnx%2FtOCy9B5a5uGUcrXNAmBhpiKGToijnqUm4hn7zG7K%2Bbw7kcWjMgGmdev0ZsRvjRaCTBJxxkW2CUhw%2BXKtPhM37%2FPSEgHHhYryUMQfr9QPNIjq4x%2BCJhee%2FGhu9Fc2rTwT78cE341hw%2BlhjfkLEQvvbVKa4JYVUWaJztpLJaSFF%2Bl9sAxBqlVVSdHUHp%2FRFObkMqAnYXi7tjOc8DCaMTc4EwEWDzn2kzOupW0OmbfHsuwWINLxfFxafHYTm3y8udjcRJ3f%2BzDwPE7LKL%2BsZkWR3Oi9VvFlBgCXlsItViVXBSbXqF3EP5iLu9WtCKG8j%2BqugfXGQZH5inYjS6nrYQ7E3RE5r9WlM0T8W2UZP8x01N8r427loZHsfuRz56AreKG%2FMyZ1z2LgVD9dQpRCqrpx7kJWpdm4DhrNXpqF5vsaToM%2BQDbrcyv8H2xwNMEG72%2FU3C2tLrULKbVyF1ON2YOh7qZ6k9KIcszZZkmvbc6jV2n2BU3VzWrNKlBoMJdbxd2pashEqJBQYsaJGdqrCyAwW6E8LhGBEiJSWHT2Y6UHIC6Su3uIyUqMJeO7p8KKmcmOswhQFa5bmuwJUAIrhc9%2FUCF6r%2FgyvzueZg1rEr24KAVH%2FPv0Ajtm7TdlAiGdDWYXUgiLOLybLp%2FfVRRjaVTQ%2B2i%2BPwTaVNknmau00RMXi9Dt46udf3%2Bc%2F6M%2Bd28qg4SUkikvmphBFcVYC5VK1NvhTw7I7kx875qXzMGXc4fnDAtsUmMNZxGMV20CVAvux7i7CHt4JR2YYRj0uOGeHhR3mfzNgwtB0PtVHWUcZreUAb3SAYJMVnIfeED5clC1Yro7%2FFLynBDhrJyiAOnG06Z7yhcP0hhw%2FQARFx5q8jamuJc9z8DRNRkZe2aVfa9aPHXK6%2BvJSdNHxRKNTgVgSgsLidvevrU27W%2BY0ufK4HZRDlRQK21q6AM8lx8MUHtV7AU4mFJ8o9TIAL8%2FIcjtJtg7hV7u5yDx8ZQsiSzMWma0uldW%2BN4SbuNk9G3OI6isUtfhutyo8QGQk%2FwHhY%2FOpDhb%2Fu6KHByGfUf6khRi3A8dkZJvg7cJ70fmMODahIhWOq2S6qRhHqVbq3DD5zs13FM1ja%2BxmbW4MRDAoGNFM1rrKuuqrFCTxQa5SBepSCoOaUpL3LnuIowXlxNwQ0NxVqrBdYze8XcgBgbPeaobyXxvVkZ9a3uhTg47glgoNKEJLgIgQkxa%2Boj%2F5NO0qehPXEnOYhSa1hnemDUs%2F6jqL9GIHx9JXMmyWqztdrUL3Q%2F%2BnXGHZVqVcqEk4thw65a32QqfF3po%2BE5ORYHaIJOZZ%2Fdz8e6RBGGEqGIzR1PXOSnSS4OtH%2FzEPdqEdxQ2yxE%2FJTRGeSFs%2Fs%2BP3iCLMI9lXZipfCe7pGhveSH1PmP%2BITp%2BIxBbDpBdzW84aVtS5muRJ%2BS%2FOUTXF5Y2CNGyvK6IaUFCpcT%2B%2BqKmWWFWq5CbWIDmtBEzg9%2FzRInzq9zp%2FedkOP7%2FsFH7DFClrkEPVNeXjCeZtTN9M7Ez%2FxdTXiqh0%2BhkYTSp5C7PqdTc%2Bo%2FlN1TCBi%2FzkHFrGk%2FXnTXe2G8Fxsko15utYt%2FSFV7rm3btB3BSCOoV5HesXb1PLtxjM4XWGSXVILpnqIHj6h6jRalSeaebJyRUe7LmSiO9aZMc870gs4xgvWCmE5Uiej%2F3TWzFYQhHiYqNVJFexIbVoCyZvPOAnmoDO9ttVYaMSFCE76YxQdb%2BzyI2bBQ9Pzf4jCIo1okIsdtWVYnmJLIdJ%2BcJfonim8hFsiQqx4Vch8kubvPjZfWVUSwEUd%2FimFH7bLrDIV0aapcfk57uR%2BlPp%2BBlN60gGckho3Y9dpjxdqEWrLwzl8%2B711Nhai3JmkUle6i8fZtKTQT73CtEgPfET4IisojCnv6GR%2B1SxeBkXMSykq%2F1mI0rxTp4vMUoYFHkTRn7cx4cYj9ghjsaYyMXwAWu3%2FCwlHeD4xCVmU8HnpxKogz7YmW6IiYRRupt8xvLYtY6RB1o63N0Dgxns0psqy%2BcBhyXuqpxUyAoFKMwLBzxaRvw%3D%3D&__VIEWSTATEGENERATOR=5DCC3F26&ctl00%24LoginView%24UserName=&ctl00%24LoginView%24Password=&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24ZIP=" + AbfragePLZ + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Quantity=" + Abfragemenge + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeId=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeCheckBox=on&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl02%24TypeId=2&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24PaymentGroup%24OptionGroupDropDown=6&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Stations=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryGroup%24OptionGroupDropDown=5&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryTimeGroup%24OptionGroupDropDown=24&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TruckSizeGroup%24OptionGroupDropDown=19&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TubeLengthGroup%24OptionGroupDropDown=9&ctl00%24MainContent%24OrderProcess_Step_1%24IsLoggedIn=0&ctl00%24MainContent%24OrderProcess_Step_1%24SortingType=-1&ctl00%24MainContent%24OrderProcess_Step_1%24ProductTypeSelector=1&ctl00%24MainContent%24OrderProcess_Step_1%24SortDropDown=-1&__ASYNCPOST=true&"
                  log("Pelletspeise werden ermittelt "+ fetchstring,"info")
                    let response = await fetch(fetchstring, {
                      "headers": {
                        "accept": "*/*",
                        "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                        "cache-control": "no-cache",
                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                        "pragma": "no-cache",
                        "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
                        "sec-ch-ua-mobile": "?0",
                        "sec-ch-ua-platform": "\"Windows\"",
                        "sec-fetch-dest": "empty",
                        "sec-fetch-mode": "cors",
                        "sec-fetch-site": "same-origin",
                        "x-microsoftajax": "Delta=true",
                        "x-requested-with": "XMLHttpRequest",
                        "Referer": fetchstring,
                        "Referrer-Policy": "strict-origin-when-cross-origin"
                      },
                      "body": bodystring,
                      "method": "POST"
                    });
                      let text = await response.text();
                      return text;
                  } // EndFunction
                  
                  
                  
                  //--------------------------------------------------------------------------------------------------------------------
                  // Function CreateStates
                  //--------------------------------------------------------------------------------------------------------------------
                  function CreateStates() {
                      if ( !existsState(dpPrice1 )) { createState(dpPrice1,0,{name: "guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpPrice2 )) { createState(dpPrice2,0,{name: "Zweit guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpPrice3 )) { createState(dpPrice3,0,{name: "Dritt guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpDealer1)) { createState(dpDealer1,0,{name: "guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpDealer2)) { createState(dpDealer2,0,{name: "Zweit guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpDealer3)) { createState(dpDealer3,0,{name: "Dritt guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                  } // End Function
                  
                  
                  P Offline
                  P Offline
                  pepe12ooo
                  wrote on last edited by
                  #35

                  Leider wurde das Seitendesign von heizpellets24.de geändert und das Programm funktioniert nicht mehr. Gibt es jemand der sich die mühe machen würde das anzupassen, ich kenne mich leider nicht gut genug aus und steig da nicht durch. Ich versuche mal unten alles zusammen zu fassen. Liebe Grüße

                  Die Seite die ich meine:

                  https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode=12305&amount=4000&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0

                  Hier ein Bild der Gewünschten werte:

                  Unbenannt.png

                  Und hier das Programm das seit ein par Tagen nicht mehr funktioniert:

                  //Author Olivero aus Forumsbeitrag
                  //https://forum.iobroker.net/topic/56432/preis-von-propellets-at-mittels-parser-auslesen/22?_=1670064893887&lang=de
                  // Angepasst: 03.12.22 Looxer01
                   
                  //..........................................
                  // Einstellungen
                  //..........................................
                  const dpPrice1 = "javascript.0.Heizung.Pelletspreise.dpPrice1";
                  const dpDealer1 = "javascript.0.Heizung.Pelletspreise.dpDealer1";
                  const dpPrice2 = "javascript.0.Heizung.Pelletspreise.dpPrice2";
                  const dpDealer2 = "javascript.0.Heizung.Pelletspreise.dpDealer2";
                  const dpPrice3 = "javascript.0.Heizung.Pelletspreise.dpPrice3";
                  const dpDealer3 = "javascript.0.Heizung.Pelletspreise.dpDealer3";
                   
                  const Abfragemenge = "6000";
                  const AbfragePLZ = "65760";
                  const Abfrageplan = '0 */2 * * *' ;            // Cron - alle 2 Stunden
                   
                   
                  //..........................................
                  // Programm Vorbereitung
                  //..........................................
                  const fetch = require("node-fetch");
                  const cheerio = require("cheerio");
                  CreateStates();
                   
                  //--------------------------------------------------------------------------------------------------------------------
                  // Schedule 
                  //--------------------------------------------------------------------------------------------------------------------
                  schedule (Abfrageplan,function () {
                  log("Pelletspeise schedule gestarted","info")
                  analyze();
                   
                  }) // End Schedule
                  //..........................................
                  // Programmablauf Ende
                  //..........................................
                   
                   
                   
                  //--------------------------------------------------------------------------------------------------------------------
                  // Function Analyze
                  //--------------------------------------------------------------------------------------------------------------------
                  async function analyze() {
                    let text = await getData();
                    let $ = cheerio.load(text);
                    let price1 = $($(".price-middle:not(.total)")[0]).text().trim();
                    //var  price1Total = $($(".price-middle total <span> ")[0]).text().trim();
                    //log ("price total " + price1Total
                    let dealer1 = $($(".dealer-name")[0]).text().trim()
                    let price2 = $($(".price-middle:not(.total)")[1]).text().trim();
                    let dealer2 = $($(".dealer-name")[1]).text().trim()
                    let price3 = $($(".price-middle:not(.total)")[2]).text().trim();
                    let dealer3 = $($(".dealer-name")[2]).text().trim()
                   
                    setState(dpPrice1,price1);
                    setState(dpDealer1,dealer1);
                    setState(dpPrice2,price2);
                    setState(dpDealer2,dealer2);
                    setState(dpPrice3,price3);
                    setState(dpDealer3,dealer3);
                  } // End Function
                   
                   
                  //--------------------------------------------------------------------------------------------------------------------
                  // Function getData
                  //--------------------------------------------------------------------------------------------------------------------
                  async function getData() {
                  var fetchstring = "https://www.heizpellets24.de/pelletpreis-direkt/"+AbfragePLZ+"/"+Abfragemenge+"/1/dt5"
                  var bodystring =  "ctl00%24ScriptManager1=ctl00%24MainContent%24OrderProcess_Step_1%24PriceOrderUpdatePanel%7Cctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTTARGET=ctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTARGUMENT=LoadPrices&__LASTFOCUS=&__VIEWSTATE=ZOqYdG%2BFwZ%2BPrH15aLaMOhCzmA140AC7FRQT3yJlHciVxQ48WlVoIAneqpP531uNShrNE4s8pYwrxCbi2Al%2FD78egos7NN8N26Wwp3FQY0QU2BUEUQiUvMfvrw6k4579ZlpA%2BjWBFS2L9gdEqrq%2BNy%2F2FfulD2BLGcSw3dxN2BoDBJ6ZlKMEYhpcwsnrciH0JzSBmCppft1AUYcTCh4bnwEkEqrmCNNc6JWx0jm9kdJIHMlHNVXJg3HujRyj8g75ZwMJVzQQGVljGNVsx6EeMrHhu%2BVgrjM3dMPwV5p485kdwKlPvkhPliUDI3ES2l%2FLcTGvyQIdMULrFFG5TanRnKkRKf40BvCE8Wu233%2Bb5b7dl8vhb8PCOilHtpSvMESCcyrxMvctN2ALlFrLPfV15ydI6aghBWm1dULmXOMINUXu%2BTdc0irIq4qxw3BDYvjCVADCXio9a5syz5qcdori2HzaaTpFD1X5V2h8L3jG%2FRSnU9fGxl38FEHQ5CejNn%2FBqIpurm6uDvsfLznni1EwbO52WsrlqWVyIrKaT2594wPUVV9IKfg%2FJ9CjjlYASS2zQmXp2UNpZIJCWgFXqsL1Y0IJeONZmNdqt%2Fs5VL%2FXh0aZpWpr8Z0V4FzhsxX1Fz%2BSLVQ4s%2F7lQJ0r1ZKffmwNXdxHyqoag%2BTYBpqqv8wIs88%2BjO8ZIONKPaeRhoHmFFZAVCrP3bpaRYxwRPdRK1ZG0omNc%2FCmNhnoPr1flBfnqfMkhofm3ihkL3cEu6A%2BB%2Bdp4cVkuzCA6Pgva7JQ23bhOhXhN%2BHlwd1cwH6UBx83tTEEC5vMToqSMEQIM3Kzhf38FMlPf0E%2B77h1v2kaIP8l%2FxBDCwRpfqGoAtUIxrlJSdAEfaE2m4p4thTkkCj4XgUc2wWlxDHEbuNexg3oGS4TbgyO%2BPVMgUdq15QTir9YDQ6sPX16EMKjUmwes%2FERLwmctj8z3jCBrTBO%2FZl1HnHYApgpSmCIRq5UZTNAIIwouoMK%2FFlAkZJGMDpS6azY%2BHoXc42r%2BeB1r%2FOGMkcCs2Yg0i6sXXMM1MEes5V2ETT4RwzPVN1XN7oqCVlX9%2Fa2R%2FMpdyL%2BbriLCqVWgtBEp%2FaI3KhYlsb%2BvouM3MPeCXPvLQMlYtjUcF6AajPK8Kuilc1yS%2FluMNQrLSGnngyyU3%2BaBkDeU1SSdpPqRw7BJwgafDEiXwWXL9TTHuTrdDAGTteBFHvRI1%2BOS9qOzt9qZiJ3wBUA0NhtEWeOmrkpMUHj8NiP6IA3KLeDsu8InVNRKIX93ALsnNQKr2l57bPOmCgMAz2LKbPfUEPZGcuhIPW6857%2BDLyUpZPBimleNRXhzfZ5UKr0UV8oi9BIWeO9aEctJfRba1DxGHNL0CPXAAXJHDo9dQCxhSHB1O3NxPb8mFX8NhmFCsLSb78%2FMqPL%2BHjzAijQumviqAjRG8lmCDSTCt%2Bcam1a%2FkPZFH7KXlDhF7QWX45XOFc4mO6BDhCRmZcoD2%2FYHFkMEVPi7K%2FOlNL6jTAXqm0UTLnsGuhaeUwDRZlJKlJKjUfgGCFZYV78%2BjE%2FDDmocBaaBTqcWoJ4QyCUU70XxEN%2BZMPbZtnFtVXTeS0VPZykzMah%2BugET7zPlvS8xUO1YqbcpmoGeaXTDrchJdMnkOea02C4xa5aMwEnnAQi2udDLeMXfjYD8PhUThKP3anE93ta7u37jYvXm8vLXPVMNFCqUv%2BvJTUxEVlpYpczcgqqcUPGi9sNrmgVxgIFvnu%2BR%2FD%2Bot8eQ8zXpLJMljPe9mt1KYIoYQH13DoJO%2BSnxEahfMlcfJio6Vt2CLK7yCCiwzLvIzsXDw3CBv2i%2Bkkga1uvw3OjlMjfnEcRjPJ4VjfrEfrjGTy6TjnSuMiENlt4MMTSgz4CfdAOhL2avTkh7AAVlHzLUQCPxI1q69fdRI%2B3wUvEnMvK%2BjTpAiuxFmveQ9ws5%2BnUULRH54L37qejMOVeI5ryRzSSQPJZIRUJMV5nX%2FM71YC0uJ1TcVJMqlV2S10zl4%2B8jS5cfZka%2FFsESP6MkrB%2BDuI9JwTB7mI5bJzlVbtlfflblcw4aiY9nvd%2BdkUbifX%2FRLTXkOSmvEwz%2FfhbtLZ9oMwj%2BOwZGIXaupyZ2n0ZLk%2FCHNp1CObl3O8NVk4XQO%2BPUIvjqW93aiaZaQnt1fevy%2FWP58wMv6j6vKRmWK2dFxb2c8nojmLja9CYIJE4pVokwdDN0dW4uvNhp1ji9183kL%2BPZDi0kZ1HS5poNFpq1kPmlvimPGBMbBA991LdH0ZE0%2FhSE1wjE5VrfBTxkz8jDNxvlhr74qbPF6rB5esZYNGV1PJJdiwO0IxbL727ZFJ3dRpv1MYQIA7zDkKhmRvNH2%2FKCA7RLFw1nBACOoctXUTY0oTE89R7zTUFMYbfcRUDatJLTW7hCP3NbYLRE8YHaQESuA0yU4tbfY1IS%2BaurfI7iAcviEZxSk2y9akqRXo%2BsnfqV%2Bu6zV3RjuPS8X9%2FLnj4bj2xS1MP5s3ll2fx8FFwZ4%2BhnKy73eaj8kLCwP6ydLpA34APrj8%2B7PmXOjwO6%2FttZlAwZPf8pt%2Fnyx3VA02oun41c22TFSw5G06YIouLb1FK1doRBJKpuanQnf0TPywfg2fikSXEgdd%2FpOzqJ0Z4KDmiQMVp81vKFxfNJMBJJERy%2FC4Pbe2%2F%2BMj1xiYA72xupCTtzSlpO0h3HJM%2FUjIU70iK%2FeVo8W%2F5oG4hc5RR5qtZZ8wuyJekAjQmp3kSIqYxrMsLXoKFlRYwa7uhY3OUAJj87JdReMB2mdtLmGCu8vAVGyXreVO9EGMCWe6wqObm6DeYqLUzMqH6BSvsQSq%2FT28r9YQnmSoR8UH7rj4ENHnA96aRWd45rB1N1TpQKchlsMx71s1t34vGnFgdmbPR54SouwIU9I0vgqLwLNxJccJ8SFZYgQyNZx63oLfc%2FND%2FPnGiNcFuGvFcR4z3PZxxUxiGWIECWLcgj5MZqHyF4IFZQo%2B7rsPIWwjreOE50zEzCbkN1BRncsYjjHV5du4MyaEgww1jqWTL6O5f%2FQeBbKlfxDMi8ucHZby94P4itRSewQQdWjZpRunxIhyOZk24SsWPlUHEIYoj3le7qydXsDbt%2Fd2gHz9nO3f%2B%2BX3a4DdoAfipctxjYigMm6fzq8GqMG9FVDbpyUvhut7TrsmiBqzsr8qyRSuW%2B2cuqUjsDKVqG1sygPiXv5LvLjFQFQEixxNf7ed9aRRr0J3%2FE8gQ50EIASX%2FtzIMPXCmTULaAhdCohppG71oVG3K9Nz3mmCgUZ7S%2BZg9udbC1Shq44hp%2FDE1FslIiMhbLca2UYDKDKkk8YMit7AWDuq1L9RhsusHGrrTO9WoXSKvx20%2BN2D2SsqC0InP7IGwor%2BF4XQoRpbP4%2B0mtiOoIUI21K3SnDe2Za5nBn7JMg3LRSAJRTyFaYLk8jc1dbimsRLxEUoe%2F%2BwRHP7yeJrVoN1Thjdr4xdPYFyq2lkM%2FNLajfyXVJnz6CdDHD5cYXVO5Q7XTSCV%2FTIqOWDh2SyIoiWrGAWpRdaZB4%2BpiiaKFXG0Sy7%2Bpi0GOXv3HnewyyfQjWHlwu%2BYvQAy2mDjpkiGkG3tp7YF8%2FlLnVxUKNGV0AnSarRyOUmwTmhaKEAjYSVCUyqtlUjrZf1KCgsvi5VPlinB86Ot4jbWpT%2BNp6ZLO1HRzYKEIl%2FVEW8nCzxBi7PrF3ji1KbIwdMiuRWJYzyzpWeUzDHi1ml2mqEBsxTqRqsqwhM4KYDaaKGsqgTNpDpyb71AYBdLyz3yJXxa%2FonL14sQ7WrgRjRVhgpe3vBUSI2hN%2BsZtsts82jf2tx7zxAvlG8M7JPSUj7YerELqv3XKM4S9lI021ZdVbqpnKK6oPAEHGeIst%2FaUjVGhE19v0yu0mP4VuLu7kBvosA%2BHXZLOv3CRiz7UW1Zs4hj0LIJCqHW8TbAgxuUpZ7zJk8%2FW004uNoo13WEH4Iwim0ZIPH76NqnJ6%2B1%2BMrNwo171SEuRS%2FaQQp9oPWDdcytcdF3tzWwu4FnYi51N9ZASnYJkBpO%2FGmbrVzaouSLhWwuagb5WcSrzEQzRdPj8Xg0QXgxVtFXKyLKFRt7l7sg8uu50KC2v7vfygsnx%2FtOCy9B5a5uGUcrXNAmBhpiKGToijnqUm4hn7zG7K%2Bbw7kcWjMgGmdev0ZsRvjRaCTBJxxkW2CUhw%2BXKtPhM37%2FPSEgHHhYryUMQfr9QPNIjq4x%2BCJhee%2FGhu9Fc2rTwT78cE341hw%2BlhjfkLEQvvbVKa4JYVUWaJztpLJaSFF%2Bl9sAxBqlVVSdHUHp%2FRFObkMqAnYXi7tjOc8DCaMTc4EwEWDzn2kzOupW0OmbfHsuwWINLxfFxafHYTm3y8udjcRJ3f%2BzDwPE7LKL%2BsZkWR3Oi9VvFlBgCXlsItViVXBSbXqF3EP5iLu9WtCKG8j%2BqugfXGQZH5inYjS6nrYQ7E3RE5r9WlM0T8W2UZP8x01N8r427loZHsfuRz56AreKG%2FMyZ1z2LgVD9dQpRCqrpx7kJWpdm4DhrNXpqF5vsaToM%2BQDbrcyv8H2xwNMEG72%2FU3C2tLrULKbVyF1ON2YOh7qZ6k9KIcszZZkmvbc6jV2n2BU3VzWrNKlBoMJdbxd2pashEqJBQYsaJGdqrCyAwW6E8LhGBEiJSWHT2Y6UHIC6Su3uIyUqMJeO7p8KKmcmOswhQFa5bmuwJUAIrhc9%2FUCF6r%2FgyvzueZg1rEr24KAVH%2FPv0Ajtm7TdlAiGdDWYXUgiLOLybLp%2FfVRRjaVTQ%2B2i%2BPwTaVNknmau00RMXi9Dt46udf3%2Bc%2F6M%2Bd28qg4SUkikvmphBFcVYC5VK1NvhTw7I7kx875qXzMGXc4fnDAtsUmMNZxGMV20CVAvux7i7CHt4JR2YYRj0uOGeHhR3mfzNgwtB0PtVHWUcZreUAb3SAYJMVnIfeED5clC1Yro7%2FFLynBDhrJyiAOnG06Z7yhcP0hhw%2FQARFx5q8jamuJc9z8DRNRkZe2aVfa9aPHXK6%2BvJSdNHxRKNTgVgSgsLidvevrU27W%2BY0ufK4HZRDlRQK21q6AM8lx8MUHtV7AU4mFJ8o9TIAL8%2FIcjtJtg7hV7u5yDx8ZQsiSzMWma0uldW%2BN4SbuNk9G3OI6isUtfhutyo8QGQk%2FwHhY%2FOpDhb%2Fu6KHByGfUf6khRi3A8dkZJvg7cJ70fmMODahIhWOq2S6qRhHqVbq3DD5zs13FM1ja%2BxmbW4MRDAoGNFM1rrKuuqrFCTxQa5SBepSCoOaUpL3LnuIowXlxNwQ0NxVqrBdYze8XcgBgbPeaobyXxvVkZ9a3uhTg47glgoNKEJLgIgQkxa%2Boj%2F5NO0qehPXEnOYhSa1hnemDUs%2F6jqL9GIHx9JXMmyWqztdrUL3Q%2F%2BnXGHZVqVcqEk4thw65a32QqfF3po%2BE5ORYHaIJOZZ%2Fdz8e6RBGGEqGIzR1PXOSnSS4OtH%2FzEPdqEdxQ2yxE%2FJTRGeSFs%2Fs%2BP3iCLMI9lXZipfCe7pGhveSH1PmP%2BITp%2BIxBbDpBdzW84aVtS5muRJ%2BS%2FOUTXF5Y2CNGyvK6IaUFCpcT%2B%2BqKmWWFWq5CbWIDmtBEzg9%2FzRInzq9zp%2FedkOP7%2FsFH7DFClrkEPVNeXjCeZtTN9M7Ez%2FxdTXiqh0%2BhkYTSp5C7PqdTc%2Bo%2FlN1TCBi%2FzkHFrGk%2FXnTXe2G8Fxsko15utYt%2FSFV7rm3btB3BSCOoV5HesXb1PLtxjM4XWGSXVILpnqIHj6h6jRalSeaebJyRUe7LmSiO9aZMc870gs4xgvWCmE5Uiej%2F3TWzFYQhHiYqNVJFexIbVoCyZvPOAnmoDO9ttVYaMSFCE76YxQdb%2BzyI2bBQ9Pzf4jCIo1okIsdtWVYnmJLIdJ%2BcJfonim8hFsiQqx4Vch8kubvPjZfWVUSwEUd%2FimFH7bLrDIV0aapcfk57uR%2BlPp%2BBlN60gGckho3Y9dpjxdqEWrLwzl8%2B711Nhai3JmkUle6i8fZtKTQT73CtEgPfET4IisojCnv6GR%2B1SxeBkXMSykq%2F1mI0rxTp4vMUoYFHkTRn7cx4cYj9ghjsaYyMXwAWu3%2FCwlHeD4xCVmU8HnpxKogz7YmW6IiYRRupt8xvLYtY6RB1o63N0Dgxns0psqy%2BcBhyXuqpxUyAoFKMwLBzxaRvw%3D%3D&__VIEWSTATEGENERATOR=5DCC3F26&ctl00%24LoginView%24UserName=&ctl00%24LoginView%24Password=&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24ZIP=" + AbfragePLZ + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Quantity=" + Abfragemenge + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeId=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeCheckBox=on&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl02%24TypeId=2&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24PaymentGroup%24OptionGroupDropDown=6&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Stations=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryGroup%24OptionGroupDropDown=5&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryTimeGroup%24OptionGroupDropDown=24&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TruckSizeGroup%24OptionGroupDropDown=19&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TubeLengthGroup%24OptionGroupDropDown=9&ctl00%24MainContent%24OrderProcess_Step_1%24IsLoggedIn=0&ctl00%24MainContent%24OrderProcess_Step_1%24SortingType=-1&ctl00%24MainContent%24OrderProcess_Step_1%24ProductTypeSelector=1&ctl00%24MainContent%24OrderProcess_Step_1%24SortDropDown=-1&__ASYNCPOST=true&"
                  log("Pelletspeise werden ermittelt "+ fetchstring,"info")
                    let response = await fetch(fetchstring, {
                      "headers": {
                        "accept": "*/*",
                        "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                        "cache-control": "no-cache",
                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                        "pragma": "no-cache",
                        "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
                        "sec-ch-ua-mobile": "?0",
                        "sec-ch-ua-platform": "\"Windows\"",
                        "sec-fetch-dest": "empty",
                        "sec-fetch-mode": "cors",
                        "sec-fetch-site": "same-origin",
                        "x-microsoftajax": "Delta=true",
                        "x-requested-with": "XMLHttpRequest",
                        "Referer": fetchstring,
                        "Referrer-Policy": "strict-origin-when-cross-origin"
                      },
                      "body": bodystring,
                      "method": "POST"
                    });
                      let text = await response.text();
                      return text;
                  } // EndFunction
                   
                   
                   
                  //--------------------------------------------------------------------------------------------------------------------
                  // Function CreateStates
                  //--------------------------------------------------------------------------------------------------------------------
                  function CreateStates() {
                      if ( !existsState(dpPrice1 )) { createState(dpPrice1,0,{name: "guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpPrice2 )) { createState(dpPrice2,0,{name: "Zweit guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpPrice3 )) { createState(dpPrice3,0,{name: "Dritt guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpDealer1)) { createState(dpDealer1,0,{name: "guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpDealer2)) { createState(dpDealer2,0,{name: "Zweit guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                      if ( !existsState(dpDealer3)) { createState(dpDealer3,0,{name: "Dritt guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                  } // End Function
                   
                  
                  HomoranH 1 Reply Last reply
                  0
                  • P pepe12ooo

                    Leider wurde das Seitendesign von heizpellets24.de geändert und das Programm funktioniert nicht mehr. Gibt es jemand der sich die mühe machen würde das anzupassen, ich kenne mich leider nicht gut genug aus und steig da nicht durch. Ich versuche mal unten alles zusammen zu fassen. Liebe Grüße

                    Die Seite die ich meine:

                    https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode=12305&amount=4000&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0

                    Hier ein Bild der Gewünschten werte:

                    Unbenannt.png

                    Und hier das Programm das seit ein par Tagen nicht mehr funktioniert:

                    //Author Olivero aus Forumsbeitrag
                    //https://forum.iobroker.net/topic/56432/preis-von-propellets-at-mittels-parser-auslesen/22?_=1670064893887&lang=de
                    // Angepasst: 03.12.22 Looxer01
                     
                    //..........................................
                    // Einstellungen
                    //..........................................
                    const dpPrice1 = "javascript.0.Heizung.Pelletspreise.dpPrice1";
                    const dpDealer1 = "javascript.0.Heizung.Pelletspreise.dpDealer1";
                    const dpPrice2 = "javascript.0.Heizung.Pelletspreise.dpPrice2";
                    const dpDealer2 = "javascript.0.Heizung.Pelletspreise.dpDealer2";
                    const dpPrice3 = "javascript.0.Heizung.Pelletspreise.dpPrice3";
                    const dpDealer3 = "javascript.0.Heizung.Pelletspreise.dpDealer3";
                     
                    const Abfragemenge = "6000";
                    const AbfragePLZ = "65760";
                    const Abfrageplan = '0 */2 * * *' ;            // Cron - alle 2 Stunden
                     
                     
                    //..........................................
                    // Programm Vorbereitung
                    //..........................................
                    const fetch = require("node-fetch");
                    const cheerio = require("cheerio");
                    CreateStates();
                     
                    //--------------------------------------------------------------------------------------------------------------------
                    // Schedule 
                    //--------------------------------------------------------------------------------------------------------------------
                    schedule (Abfrageplan,function () {
                    log("Pelletspeise schedule gestarted","info")
                    analyze();
                     
                    }) // End Schedule
                    //..........................................
                    // Programmablauf Ende
                    //..........................................
                     
                     
                     
                    //--------------------------------------------------------------------------------------------------------------------
                    // Function Analyze
                    //--------------------------------------------------------------------------------------------------------------------
                    async function analyze() {
                      let text = await getData();
                      let $ = cheerio.load(text);
                      let price1 = $($(".price-middle:not(.total)")[0]).text().trim();
                      //var  price1Total = $($(".price-middle total <span> ")[0]).text().trim();
                      //log ("price total " + price1Total
                      let dealer1 = $($(".dealer-name")[0]).text().trim()
                      let price2 = $($(".price-middle:not(.total)")[1]).text().trim();
                      let dealer2 = $($(".dealer-name")[1]).text().trim()
                      let price3 = $($(".price-middle:not(.total)")[2]).text().trim();
                      let dealer3 = $($(".dealer-name")[2]).text().trim()
                     
                      setState(dpPrice1,price1);
                      setState(dpDealer1,dealer1);
                      setState(dpPrice2,price2);
                      setState(dpDealer2,dealer2);
                      setState(dpPrice3,price3);
                      setState(dpDealer3,dealer3);
                    } // End Function
                     
                     
                    //--------------------------------------------------------------------------------------------------------------------
                    // Function getData
                    //--------------------------------------------------------------------------------------------------------------------
                    async function getData() {
                    var fetchstring = "https://www.heizpellets24.de/pelletpreis-direkt/"+AbfragePLZ+"/"+Abfragemenge+"/1/dt5"
                    var bodystring =  "ctl00%24ScriptManager1=ctl00%24MainContent%24OrderProcess_Step_1%24PriceOrderUpdatePanel%7Cctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTTARGET=ctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTARGUMENT=LoadPrices&__LASTFOCUS=&__VIEWSTATE=ZOqYdG%2BFwZ%2BPrH15aLaMOhCzmA140AC7FRQT3yJlHciVxQ48WlVoIAneqpP531uNShrNE4s8pYwrxCbi2Al%2FD78egos7NN8N26Wwp3FQY0QU2BUEUQiUvMfvrw6k4579ZlpA%2BjWBFS2L9gdEqrq%2BNy%2F2FfulD2BLGcSw3dxN2BoDBJ6ZlKMEYhpcwsnrciH0JzSBmCppft1AUYcTCh4bnwEkEqrmCNNc6JWx0jm9kdJIHMlHNVXJg3HujRyj8g75ZwMJVzQQGVljGNVsx6EeMrHhu%2BVgrjM3dMPwV5p485kdwKlPvkhPliUDI3ES2l%2FLcTGvyQIdMULrFFG5TanRnKkRKf40BvCE8Wu233%2Bb5b7dl8vhb8PCOilHtpSvMESCcyrxMvctN2ALlFrLPfV15ydI6aghBWm1dULmXOMINUXu%2BTdc0irIq4qxw3BDYvjCVADCXio9a5syz5qcdori2HzaaTpFD1X5V2h8L3jG%2FRSnU9fGxl38FEHQ5CejNn%2FBqIpurm6uDvsfLznni1EwbO52WsrlqWVyIrKaT2594wPUVV9IKfg%2FJ9CjjlYASS2zQmXp2UNpZIJCWgFXqsL1Y0IJeONZmNdqt%2Fs5VL%2FXh0aZpWpr8Z0V4FzhsxX1Fz%2BSLVQ4s%2F7lQJ0r1ZKffmwNXdxHyqoag%2BTYBpqqv8wIs88%2BjO8ZIONKPaeRhoHmFFZAVCrP3bpaRYxwRPdRK1ZG0omNc%2FCmNhnoPr1flBfnqfMkhofm3ihkL3cEu6A%2BB%2Bdp4cVkuzCA6Pgva7JQ23bhOhXhN%2BHlwd1cwH6UBx83tTEEC5vMToqSMEQIM3Kzhf38FMlPf0E%2B77h1v2kaIP8l%2FxBDCwRpfqGoAtUIxrlJSdAEfaE2m4p4thTkkCj4XgUc2wWlxDHEbuNexg3oGS4TbgyO%2BPVMgUdq15QTir9YDQ6sPX16EMKjUmwes%2FERLwmctj8z3jCBrTBO%2FZl1HnHYApgpSmCIRq5UZTNAIIwouoMK%2FFlAkZJGMDpS6azY%2BHoXc42r%2BeB1r%2FOGMkcCs2Yg0i6sXXMM1MEes5V2ETT4RwzPVN1XN7oqCVlX9%2Fa2R%2FMpdyL%2BbriLCqVWgtBEp%2FaI3KhYlsb%2BvouM3MPeCXPvLQMlYtjUcF6AajPK8Kuilc1yS%2FluMNQrLSGnngyyU3%2BaBkDeU1SSdpPqRw7BJwgafDEiXwWXL9TTHuTrdDAGTteBFHvRI1%2BOS9qOzt9qZiJ3wBUA0NhtEWeOmrkpMUHj8NiP6IA3KLeDsu8InVNRKIX93ALsnNQKr2l57bPOmCgMAz2LKbPfUEPZGcuhIPW6857%2BDLyUpZPBimleNRXhzfZ5UKr0UV8oi9BIWeO9aEctJfRba1DxGHNL0CPXAAXJHDo9dQCxhSHB1O3NxPb8mFX8NhmFCsLSb78%2FMqPL%2BHjzAijQumviqAjRG8lmCDSTCt%2Bcam1a%2FkPZFH7KXlDhF7QWX45XOFc4mO6BDhCRmZcoD2%2FYHFkMEVPi7K%2FOlNL6jTAXqm0UTLnsGuhaeUwDRZlJKlJKjUfgGCFZYV78%2BjE%2FDDmocBaaBTqcWoJ4QyCUU70XxEN%2BZMPbZtnFtVXTeS0VPZykzMah%2BugET7zPlvS8xUO1YqbcpmoGeaXTDrchJdMnkOea02C4xa5aMwEnnAQi2udDLeMXfjYD8PhUThKP3anE93ta7u37jYvXm8vLXPVMNFCqUv%2BvJTUxEVlpYpczcgqqcUPGi9sNrmgVxgIFvnu%2BR%2FD%2Bot8eQ8zXpLJMljPe9mt1KYIoYQH13DoJO%2BSnxEahfMlcfJio6Vt2CLK7yCCiwzLvIzsXDw3CBv2i%2Bkkga1uvw3OjlMjfnEcRjPJ4VjfrEfrjGTy6TjnSuMiENlt4MMTSgz4CfdAOhL2avTkh7AAVlHzLUQCPxI1q69fdRI%2B3wUvEnMvK%2BjTpAiuxFmveQ9ws5%2BnUULRH54L37qejMOVeI5ryRzSSQPJZIRUJMV5nX%2FM71YC0uJ1TcVJMqlV2S10zl4%2B8jS5cfZka%2FFsESP6MkrB%2BDuI9JwTB7mI5bJzlVbtlfflblcw4aiY9nvd%2BdkUbifX%2FRLTXkOSmvEwz%2FfhbtLZ9oMwj%2BOwZGIXaupyZ2n0ZLk%2FCHNp1CObl3O8NVk4XQO%2BPUIvjqW93aiaZaQnt1fevy%2FWP58wMv6j6vKRmWK2dFxb2c8nojmLja9CYIJE4pVokwdDN0dW4uvNhp1ji9183kL%2BPZDi0kZ1HS5poNFpq1kPmlvimPGBMbBA991LdH0ZE0%2FhSE1wjE5VrfBTxkz8jDNxvlhr74qbPF6rB5esZYNGV1PJJdiwO0IxbL727ZFJ3dRpv1MYQIA7zDkKhmRvNH2%2FKCA7RLFw1nBACOoctXUTY0oTE89R7zTUFMYbfcRUDatJLTW7hCP3NbYLRE8YHaQESuA0yU4tbfY1IS%2BaurfI7iAcviEZxSk2y9akqRXo%2BsnfqV%2Bu6zV3RjuPS8X9%2FLnj4bj2xS1MP5s3ll2fx8FFwZ4%2BhnKy73eaj8kLCwP6ydLpA34APrj8%2B7PmXOjwO6%2FttZlAwZPf8pt%2Fnyx3VA02oun41c22TFSw5G06YIouLb1FK1doRBJKpuanQnf0TPywfg2fikSXEgdd%2FpOzqJ0Z4KDmiQMVp81vKFxfNJMBJJERy%2FC4Pbe2%2F%2BMj1xiYA72xupCTtzSlpO0h3HJM%2FUjIU70iK%2FeVo8W%2F5oG4hc5RR5qtZZ8wuyJekAjQmp3kSIqYxrMsLXoKFlRYwa7uhY3OUAJj87JdReMB2mdtLmGCu8vAVGyXreVO9EGMCWe6wqObm6DeYqLUzMqH6BSvsQSq%2FT28r9YQnmSoR8UH7rj4ENHnA96aRWd45rB1N1TpQKchlsMx71s1t34vGnFgdmbPR54SouwIU9I0vgqLwLNxJccJ8SFZYgQyNZx63oLfc%2FND%2FPnGiNcFuGvFcR4z3PZxxUxiGWIECWLcgj5MZqHyF4IFZQo%2B7rsPIWwjreOE50zEzCbkN1BRncsYjjHV5du4MyaEgww1jqWTL6O5f%2FQeBbKlfxDMi8ucHZby94P4itRSewQQdWjZpRunxIhyOZk24SsWPlUHEIYoj3le7qydXsDbt%2Fd2gHz9nO3f%2B%2BX3a4DdoAfipctxjYigMm6fzq8GqMG9FVDbpyUvhut7TrsmiBqzsr8qyRSuW%2B2cuqUjsDKVqG1sygPiXv5LvLjFQFQEixxNf7ed9aRRr0J3%2FE8gQ50EIASX%2FtzIMPXCmTULaAhdCohppG71oVG3K9Nz3mmCgUZ7S%2BZg9udbC1Shq44hp%2FDE1FslIiMhbLca2UYDKDKkk8YMit7AWDuq1L9RhsusHGrrTO9WoXSKvx20%2BN2D2SsqC0InP7IGwor%2BF4XQoRpbP4%2B0mtiOoIUI21K3SnDe2Za5nBn7JMg3LRSAJRTyFaYLk8jc1dbimsRLxEUoe%2F%2BwRHP7yeJrVoN1Thjdr4xdPYFyq2lkM%2FNLajfyXVJnz6CdDHD5cYXVO5Q7XTSCV%2FTIqOWDh2SyIoiWrGAWpRdaZB4%2BpiiaKFXG0Sy7%2Bpi0GOXv3HnewyyfQjWHlwu%2BYvQAy2mDjpkiGkG3tp7YF8%2FlLnVxUKNGV0AnSarRyOUmwTmhaKEAjYSVCUyqtlUjrZf1KCgsvi5VPlinB86Ot4jbWpT%2BNp6ZLO1HRzYKEIl%2FVEW8nCzxBi7PrF3ji1KbIwdMiuRWJYzyzpWeUzDHi1ml2mqEBsxTqRqsqwhM4KYDaaKGsqgTNpDpyb71AYBdLyz3yJXxa%2FonL14sQ7WrgRjRVhgpe3vBUSI2hN%2BsZtsts82jf2tx7zxAvlG8M7JPSUj7YerELqv3XKM4S9lI021ZdVbqpnKK6oPAEHGeIst%2FaUjVGhE19v0yu0mP4VuLu7kBvosA%2BHXZLOv3CRiz7UW1Zs4hj0LIJCqHW8TbAgxuUpZ7zJk8%2FW004uNoo13WEH4Iwim0ZIPH76NqnJ6%2B1%2BMrNwo171SEuRS%2FaQQp9oPWDdcytcdF3tzWwu4FnYi51N9ZASnYJkBpO%2FGmbrVzaouSLhWwuagb5WcSrzEQzRdPj8Xg0QXgxVtFXKyLKFRt7l7sg8uu50KC2v7vfygsnx%2FtOCy9B5a5uGUcrXNAmBhpiKGToijnqUm4hn7zG7K%2Bbw7kcWjMgGmdev0ZsRvjRaCTBJxxkW2CUhw%2BXKtPhM37%2FPSEgHHhYryUMQfr9QPNIjq4x%2BCJhee%2FGhu9Fc2rTwT78cE341hw%2BlhjfkLEQvvbVKa4JYVUWaJztpLJaSFF%2Bl9sAxBqlVVSdHUHp%2FRFObkMqAnYXi7tjOc8DCaMTc4EwEWDzn2kzOupW0OmbfHsuwWINLxfFxafHYTm3y8udjcRJ3f%2BzDwPE7LKL%2BsZkWR3Oi9VvFlBgCXlsItViVXBSbXqF3EP5iLu9WtCKG8j%2BqugfXGQZH5inYjS6nrYQ7E3RE5r9WlM0T8W2UZP8x01N8r427loZHsfuRz56AreKG%2FMyZ1z2LgVD9dQpRCqrpx7kJWpdm4DhrNXpqF5vsaToM%2BQDbrcyv8H2xwNMEG72%2FU3C2tLrULKbVyF1ON2YOh7qZ6k9KIcszZZkmvbc6jV2n2BU3VzWrNKlBoMJdbxd2pashEqJBQYsaJGdqrCyAwW6E8LhGBEiJSWHT2Y6UHIC6Su3uIyUqMJeO7p8KKmcmOswhQFa5bmuwJUAIrhc9%2FUCF6r%2FgyvzueZg1rEr24KAVH%2FPv0Ajtm7TdlAiGdDWYXUgiLOLybLp%2FfVRRjaVTQ%2B2i%2BPwTaVNknmau00RMXi9Dt46udf3%2Bc%2F6M%2Bd28qg4SUkikvmphBFcVYC5VK1NvhTw7I7kx875qXzMGXc4fnDAtsUmMNZxGMV20CVAvux7i7CHt4JR2YYRj0uOGeHhR3mfzNgwtB0PtVHWUcZreUAb3SAYJMVnIfeED5clC1Yro7%2FFLynBDhrJyiAOnG06Z7yhcP0hhw%2FQARFx5q8jamuJc9z8DRNRkZe2aVfa9aPHXK6%2BvJSdNHxRKNTgVgSgsLidvevrU27W%2BY0ufK4HZRDlRQK21q6AM8lx8MUHtV7AU4mFJ8o9TIAL8%2FIcjtJtg7hV7u5yDx8ZQsiSzMWma0uldW%2BN4SbuNk9G3OI6isUtfhutyo8QGQk%2FwHhY%2FOpDhb%2Fu6KHByGfUf6khRi3A8dkZJvg7cJ70fmMODahIhWOq2S6qRhHqVbq3DD5zs13FM1ja%2BxmbW4MRDAoGNFM1rrKuuqrFCTxQa5SBepSCoOaUpL3LnuIowXlxNwQ0NxVqrBdYze8XcgBgbPeaobyXxvVkZ9a3uhTg47glgoNKEJLgIgQkxa%2Boj%2F5NO0qehPXEnOYhSa1hnemDUs%2F6jqL9GIHx9JXMmyWqztdrUL3Q%2F%2BnXGHZVqVcqEk4thw65a32QqfF3po%2BE5ORYHaIJOZZ%2Fdz8e6RBGGEqGIzR1PXOSnSS4OtH%2FzEPdqEdxQ2yxE%2FJTRGeSFs%2Fs%2BP3iCLMI9lXZipfCe7pGhveSH1PmP%2BITp%2BIxBbDpBdzW84aVtS5muRJ%2BS%2FOUTXF5Y2CNGyvK6IaUFCpcT%2B%2BqKmWWFWq5CbWIDmtBEzg9%2FzRInzq9zp%2FedkOP7%2FsFH7DFClrkEPVNeXjCeZtTN9M7Ez%2FxdTXiqh0%2BhkYTSp5C7PqdTc%2Bo%2FlN1TCBi%2FzkHFrGk%2FXnTXe2G8Fxsko15utYt%2FSFV7rm3btB3BSCOoV5HesXb1PLtxjM4XWGSXVILpnqIHj6h6jRalSeaebJyRUe7LmSiO9aZMc870gs4xgvWCmE5Uiej%2F3TWzFYQhHiYqNVJFexIbVoCyZvPOAnmoDO9ttVYaMSFCE76YxQdb%2BzyI2bBQ9Pzf4jCIo1okIsdtWVYnmJLIdJ%2BcJfonim8hFsiQqx4Vch8kubvPjZfWVUSwEUd%2FimFH7bLrDIV0aapcfk57uR%2BlPp%2BBlN60gGckho3Y9dpjxdqEWrLwzl8%2B711Nhai3JmkUle6i8fZtKTQT73CtEgPfET4IisojCnv6GR%2B1SxeBkXMSykq%2F1mI0rxTp4vMUoYFHkTRn7cx4cYj9ghjsaYyMXwAWu3%2FCwlHeD4xCVmU8HnpxKogz7YmW6IiYRRupt8xvLYtY6RB1o63N0Dgxns0psqy%2BcBhyXuqpxUyAoFKMwLBzxaRvw%3D%3D&__VIEWSTATEGENERATOR=5DCC3F26&ctl00%24LoginView%24UserName=&ctl00%24LoginView%24Password=&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24ZIP=" + AbfragePLZ + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Quantity=" + Abfragemenge + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeId=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeCheckBox=on&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl02%24TypeId=2&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24PaymentGroup%24OptionGroupDropDown=6&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Stations=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryGroup%24OptionGroupDropDown=5&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryTimeGroup%24OptionGroupDropDown=24&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TruckSizeGroup%24OptionGroupDropDown=19&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TubeLengthGroup%24OptionGroupDropDown=9&ctl00%24MainContent%24OrderProcess_Step_1%24IsLoggedIn=0&ctl00%24MainContent%24OrderProcess_Step_1%24SortingType=-1&ctl00%24MainContent%24OrderProcess_Step_1%24ProductTypeSelector=1&ctl00%24MainContent%24OrderProcess_Step_1%24SortDropDown=-1&__ASYNCPOST=true&"
                    log("Pelletspeise werden ermittelt "+ fetchstring,"info")
                      let response = await fetch(fetchstring, {
                        "headers": {
                          "accept": "*/*",
                          "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                          "cache-control": "no-cache",
                          "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                          "pragma": "no-cache",
                          "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
                          "sec-ch-ua-mobile": "?0",
                          "sec-ch-ua-platform": "\"Windows\"",
                          "sec-fetch-dest": "empty",
                          "sec-fetch-mode": "cors",
                          "sec-fetch-site": "same-origin",
                          "x-microsoftajax": "Delta=true",
                          "x-requested-with": "XMLHttpRequest",
                          "Referer": fetchstring,
                          "Referrer-Policy": "strict-origin-when-cross-origin"
                        },
                        "body": bodystring,
                        "method": "POST"
                      });
                        let text = await response.text();
                        return text;
                    } // EndFunction
                     
                     
                     
                    //--------------------------------------------------------------------------------------------------------------------
                    // Function CreateStates
                    //--------------------------------------------------------------------------------------------------------------------
                    function CreateStates() {
                        if ( !existsState(dpPrice1 )) { createState(dpPrice1,0,{name: "guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                        if ( !existsState(dpPrice2 )) { createState(dpPrice2,0,{name: "Zweit guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                        if ( !existsState(dpPrice3 )) { createState(dpPrice3,0,{name: "Dritt guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                        if ( !existsState(dpDealer1)) { createState(dpDealer1,0,{name: "guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                        if ( !existsState(dpDealer2)) { createState(dpDealer2,0,{name: "Zweit guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                        if ( !existsState(dpDealer3)) { createState(dpDealer3,0,{name: "Dritt guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                    } // End Function
                     
                    
                    HomoranH Do not disturb
                    HomoranH Do not disturb
                    Homoran
                    Global Moderator Administrators
                    wrote on last edited by
                    #36

                    @pepe12ooo sagte in Preis von Propellets.at mittels Parser auslesen:

                    Und hier das Programm das seit ein par Tagen nicht mehr funktioniert:

                    Was schreibt das log dazu?

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    L 1 Reply Last reply
                    0
                    • HomoranH Homoran

                      @pepe12ooo sagte in Preis von Propellets.at mittels Parser auslesen:

                      Und hier das Programm das seit ein par Tagen nicht mehr funktioniert:

                      Was schreibt das log dazu?

                      L Online
                      L Online
                      looxer01
                      wrote on last edited by
                      #37

                      Hi,

                      aufgrund der neuen Seite muss der Fetch natürlich anders aussehen. Ich habe mir das mal angesehen und mit folgender URL kann man z.B. Pellets für ein PLZ Gebiet und einer Tonnage für lose Ware abrufen:
                      https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode=60308&amount=6000&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0

                      PLZ: 60308
                      KG: 6000

                      Auf der Seite im Browser ist dann die Liste ok.
                      Allerdings im geladenen Text im Javascript finde ich die Lieferanten und deren Preise nicht.

                      @oliverio
                      Ich komme hier nicht weiter. Wäre super, wenn du mal schauen könntest

                      vG Looxer

                      OliverIOO 1 Reply Last reply
                      0
                      • L looxer01

                        Hi,

                        aufgrund der neuen Seite muss der Fetch natürlich anders aussehen. Ich habe mir das mal angesehen und mit folgender URL kann man z.B. Pellets für ein PLZ Gebiet und einer Tonnage für lose Ware abrufen:
                        https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode=60308&amount=6000&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0

                        PLZ: 60308
                        KG: 6000

                        Auf der Seite im Browser ist dann die Liste ok.
                        Allerdings im geladenen Text im Javascript finde ich die Lieferanten und deren Preise nicht.

                        @oliverio
                        Ich komme hier nicht weiter. Wäre super, wenn du mal schauen könntest

                        vG Looxer

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        wrote on last edited by OliverIO
                        #38

                        @looxer01

                        ja, der html-aufbau und css bezeichnung bei preis hat sich geändert.
                        probiere mal den preis mit folgendem Aufbau

                        $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim()
                        

                        Der Preis ist nun leider mit zusätzliochen Zeichen versehen (\n und leerzeichen).
                        das ergänzte regex filtert diese zeichen nun aus.

                        Der Lieferant müsste eigentlich ausgegeben werden.
                        Falls nein, bitte evtl Fehlermeldungen hier mit angeben.
                        Habe allerdings nicht das skript selbst geprüft, sondern nur die einzelnen Anweisungen im Browser und da erhalte ich das Ergebnis für dealer

                        die sortierung der seite ist aber seltsam.
                        255,13 bei manus ist günstiger als
                        249,31 bei eckhard

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        L 1 Reply Last reply
                        0
                        • OliverIOO OliverIO

                          @looxer01

                          ja, der html-aufbau und css bezeichnung bei preis hat sich geändert.
                          probiere mal den preis mit folgendem Aufbau

                          $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim()
                          

                          Der Preis ist nun leider mit zusätzliochen Zeichen versehen (\n und leerzeichen).
                          das ergänzte regex filtert diese zeichen nun aus.

                          Der Lieferant müsste eigentlich ausgegeben werden.
                          Falls nein, bitte evtl Fehlermeldungen hier mit angeben.
                          Habe allerdings nicht das skript selbst geprüft, sondern nur die einzelnen Anweisungen im Browser und da erhalte ich das Ergebnis für dealer

                          die sortierung der seite ist aber seltsam.
                          255,13 bei manus ist günstiger als
                          249,31 bei eckhard

                          L Online
                          L Online
                          looxer01
                          wrote on last edited by looxer01
                          #39

                          @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                          probiere mal den preis mit folgendem Aufbau

                          Vielen Dank für die Anpassung.

                          @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                          die sortierung der seite ist aber seltsam.

                          Die Sortierung sollte ok sein, da nach Gesamtpreis sortiert wird und der Tonnenpreis günstiger erscheinen kann. (z.B. wegen Einblaspauschalen)

                          Leider erhalte ich überhaupt keine Ergebnisse, weder für Dealer noch für Price.
                          Und wenn ich den string ausgebe als text (log), und nach dem Dealer suche (z.B. STRG F) dann erhalte ich auch kein Ergebnis. Mir scheint es so, dass der Fetch gar nicht das gewünschte Ergebnis liefert.

                          Ich poste mal den Code.
                          Irgendwas passt da noch nicht. Vielleicht kannst du mal reinschauen.

                          //Author Olivero aus Forumsbeitrag
                          //https://forum.iobroker.net/topic/56432/preis-von-propellets-at-mittels-parser-auslesen/22?_=1670064893887&lang=de
                          // Angepasst: 03.12.22 Looxer01
                          
                          //..........................................
                          // Einstellungen
                          //..........................................
                          const dpPrice1 = "javascript.0.Heizung.Pelletspreise.dpPrice1";
                          const dpDealer1 = "javascript.0.Heizung.Pelletspreise.dpDealer1";
                          const dpPrice2 = "javascript.0.Heizung.Pelletspreise.dpPrice2";
                          const dpDealer2 = "javascript.0.Heizung.Pelletspreise.dpDealer2";
                          const dpPrice3 = "javascript.0.Heizung.Pelletspreise.dpPrice3";
                          const dpDealer3 = "javascript.0.Heizung.Pelletspreise.dpDealer3";
                          
                          const Abfragemenge = "6000";
                          const AbfragePLZ = "60308";
                          //const Abfrageplan = '0 */2 * * *' ;            // Cron - alle 2 Stunden
                          const Abfrageplan = '* * * * *' ;            // Cron - jede Minute
                          
                          
                          //..........................................
                          // Programm Vorbereitung
                          //..........................................
                          const fetch = require("node-fetch");
                          const cheerio = require("cheerio");
                          CreateStates();
                          
                          //--------------------------------------------------------------------------------------------------------------------
                          // Schedule 
                          //--------------------------------------------------------------------------------------------------------------------
                          schedule (Abfrageplan,function () {
                          log("Pelletspeise schedule gestarted","info")
                          analyze();
                          
                          }) // End Schedule
                          //..........................................
                          // Programmablauf Ende
                          //..........................................
                          //analyze() 
                          
                          //--------------------------------------------------------------------------------------------------------------------
                          // Function Analyze
                          //--------------------------------------------------------------------------------------------------------------------
                          async function analyze() {
                            let text = await getData();
                            let $ = cheerio.load(text);
                           // log("Text geladen "+text)
                             let price1 = $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim() 
                            // let price1 = $($(".price-middle:not(.total)")[0]).text().trim();
                            // var  price1Total = $($(".price-middle total <span> ")[0]).text().trim();
                            let dealer1 = $($(".dealer-name")[0]).text().trim()
                          log("Dealer1 "+ dealer1 + " Price1 "+price1)
                             let price2 = $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim() 
                          //  let price2 = $($(".price-middle:not(.total)")[1]).text().trim();
                            let dealer2 = $($(".dealer-name")[1]).text().trim()
                          log("Dealer2 "+ dealer2 + " Price2 "+price2)
                             let price3 = $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim() 
                           // let price3 = $($(".price-middle:not(.total)")[2]).text().trim();
                            let dealer3 = $($(".dealer-name")[2]).text().trim()
                          log("Dealer3 "+ dealer3 + " Price3 "+price3)
                           // log ("Pelletspreise -  price 1 " + price1 + " Price 2 " + price2 + " Price 3 " + price3)
                            setState(dpPrice1,price1);
                            setState(dpDealer1,dealer1);
                            setState(dpPrice2,price2);
                            setState(dpDealer2,dealer2);
                            setState(dpPrice3,price3);
                            setState(dpDealer3,dealer3);
                          } // End Function
                          
                          
                          //--------------------------------------------------------------------------------------------------------------------
                          // Function getData
                          //--------------------------------------------------------------------------------------------------------------------
                          async function getData() {
                          var fetchstring = "https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode="+AbfragePLZ+"&amount="+Abfragemenge+"&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0"
                          //var fetchstring = "https://www.heizpellets24.de/pelletpreis-direkt/"+AbfragePLZ+"/"+Abfragemenge+"/1/dt5"
                          var bodystring =  "ctl00%24ScriptManager1=ctl00%24MainContent%24OrderProcess_Step_1%24PriceOrderUpdatePanel%7Cctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTTARGET=ctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTARGUMENT=LoadPrices&__LASTFOCUS=&__VIEWSTATE=ZOqYdG%2BFwZ%2BPrH15aLaMOhCzmA140AC7FRQT3yJlHciVxQ48WlVoIAneqpP531uNShrNE4s8pYwrxCbi2Al%2FD78egos7NN8N26Wwp3FQY0QU2BUEUQiUvMfvrw6k4579ZlpA%2BjWBFS2L9gdEqrq%2BNy%2F2FfulD2BLGcSw3dxN2BoDBJ6ZlKMEYhpcwsnrciH0JzSBmCppft1AUYcTCh4bnwEkEqrmCNNc6JWx0jm9kdJIHMlHNVXJg3HujRyj8g75ZwMJVzQQGVljGNVsx6EeMrHhu%2BVgrjM3dMPwV5p485kdwKlPvkhPliUDI3ES2l%2FLcTGvyQIdMULrFFG5TanRnKkRKf40BvCE8Wu233%2Bb5b7dl8vhb8PCOilHtpSvMESCcyrxMvctN2ALlFrLPfV15ydI6aghBWm1dULmXOMINUXu%2BTdc0irIq4qxw3BDYvjCVADCXio9a5syz5qcdori2HzaaTpFD1X5V2h8L3jG%2FRSnU9fGxl38FEHQ5CejNn%2FBqIpurm6uDvsfLznni1EwbO52WsrlqWVyIrKaT2594wPUVV9IKfg%2FJ9CjjlYASS2zQmXp2UNpZIJCWgFXqsL1Y0IJeONZmNdqt%2Fs5VL%2FXh0aZpWpr8Z0V4FzhsxX1Fz%2BSLVQ4s%2F7lQJ0r1ZKffmwNXdxHyqoag%2BTYBpqqv8wIs88%2BjO8ZIONKPaeRhoHmFFZAVCrP3bpaRYxwRPdRK1ZG0omNc%2FCmNhnoPr1flBfnqfMkhofm3ihkL3cEu6A%2BB%2Bdp4cVkuzCA6Pgva7JQ23bhOhXhN%2BHlwd1cwH6UBx83tTEEC5vMToqSMEQIM3Kzhf38FMlPf0E%2B77h1v2kaIP8l%2FxBDCwRpfqGoAtUIxrlJSdAEfaE2m4p4thTkkCj4XgUc2wWlxDHEbuNexg3oGS4TbgyO%2BPVMgUdq15QTir9YDQ6sPX16EMKjUmwes%2FERLwmctj8z3jCBrTBO%2FZl1HnHYApgpSmCIRq5UZTNAIIwouoMK%2FFlAkZJGMDpS6azY%2BHoXc42r%2BeB1r%2FOGMkcCs2Yg0i6sXXMM1MEes5V2ETT4RwzPVN1XN7oqCVlX9%2Fa2R%2FMpdyL%2BbriLCqVWgtBEp%2FaI3KhYlsb%2BvouM3MPeCXPvLQMlYtjUcF6AajPK8Kuilc1yS%2FluMNQrLSGnngyyU3%2BaBkDeU1SSdpPqRw7BJwgafDEiXwWXL9TTHuTrdDAGTteBFHvRI1%2BOS9qOzt9qZiJ3wBUA0NhtEWeOmrkpMUHj8NiP6IA3KLeDsu8InVNRKIX93ALsnNQKr2l57bPOmCgMAz2LKbPfUEPZGcuhIPW6857%2BDLyUpZPBimleNRXhzfZ5UKr0UV8oi9BIWeO9aEctJfRba1DxGHNL0CPXAAXJHDo9dQCxhSHB1O3NxPb8mFX8NhmFCsLSb78%2FMqPL%2BHjzAijQumviqAjRG8lmCDSTCt%2Bcam1a%2FkPZFH7KXlDhF7QWX45XOFc4mO6BDhCRmZcoD2%2FYHFkMEVPi7K%2FOlNL6jTAXqm0UTLnsGuhaeUwDRZlJKlJKjUfgGCFZYV78%2BjE%2FDDmocBaaBTqcWoJ4QyCUU70XxEN%2BZMPbZtnFtVXTeS0VPZykzMah%2BugET7zPlvS8xUO1YqbcpmoGeaXTDrchJdMnkOea02C4xa5aMwEnnAQi2udDLeMXfjYD8PhUThKP3anE93ta7u37jYvXm8vLXPVMNFCqUv%2BvJTUxEVlpYpczcgqqcUPGi9sNrmgVxgIFvnu%2BR%2FD%2Bot8eQ8zXpLJMljPe9mt1KYIoYQH13DoJO%2BSnxEahfMlcfJio6Vt2CLK7yCCiwzLvIzsXDw3CBv2i%2Bkkga1uvw3OjlMjfnEcRjPJ4VjfrEfrjGTy6TjnSuMiENlt4MMTSgz4CfdAOhL2avTkh7AAVlHzLUQCPxI1q69fdRI%2B3wUvEnMvK%2BjTpAiuxFmveQ9ws5%2BnUULRH54L37qejMOVeI5ryRzSSQPJZIRUJMV5nX%2FM71YC0uJ1TcVJMqlV2S10zl4%2B8jS5cfZka%2FFsESP6MkrB%2BDuI9JwTB7mI5bJzlVbtlfflblcw4aiY9nvd%2BdkUbifX%2FRLTXkOSmvEwz%2FfhbtLZ9oMwj%2BOwZGIXaupyZ2n0ZLk%2FCHNp1CObl3O8NVk4XQO%2BPUIvjqW93aiaZaQnt1fevy%2FWP58wMv6j6vKRmWK2dFxb2c8nojmLja9CYIJE4pVokwdDN0dW4uvNhp1ji9183kL%2BPZDi0kZ1HS5poNFpq1kPmlvimPGBMbBA991LdH0ZE0%2FhSE1wjE5VrfBTxkz8jDNxvlhr74qbPF6rB5esZYNGV1PJJdiwO0IxbL727ZFJ3dRpv1MYQIA7zDkKhmRvNH2%2FKCA7RLFw1nBACOoctXUTY0oTE89R7zTUFMYbfcRUDatJLTW7hCP3NbYLRE8YHaQESuA0yU4tbfY1IS%2BaurfI7iAcviEZxSk2y9akqRXo%2BsnfqV%2Bu6zV3RjuPS8X9%2FLnj4bj2xS1MP5s3ll2fx8FFwZ4%2BhnKy73eaj8kLCwP6ydLpA34APrj8%2B7PmXOjwO6%2FttZlAwZPf8pt%2Fnyx3VA02oun41c22TFSw5G06YIouLb1FK1doRBJKpuanQnf0TPywfg2fikSXEgdd%2FpOzqJ0Z4KDmiQMVp81vKFxfNJMBJJERy%2FC4Pbe2%2F%2BMj1xiYA72xupCTtzSlpO0h3HJM%2FUjIU70iK%2FeVo8W%2F5oG4hc5RR5qtZZ8wuyJekAjQmp3kSIqYxrMsLXoKFlRYwa7uhY3OUAJj87JdReMB2mdtLmGCu8vAVGyXreVO9EGMCWe6wqObm6DeYqLUzMqH6BSvsQSq%2FT28r9YQnmSoR8UH7rj4ENHnA96aRWd45rB1N1TpQKchlsMx71s1t34vGnFgdmbPR54SouwIU9I0vgqLwLNxJccJ8SFZYgQyNZx63oLfc%2FND%2FPnGiNcFuGvFcR4z3PZxxUxiGWIECWLcgj5MZqHyF4IFZQo%2B7rsPIWwjreOE50zEzCbkN1BRncsYjjHV5du4MyaEgww1jqWTL6O5f%2FQeBbKlfxDMi8ucHZby94P4itRSewQQdWjZpRunxIhyOZk24SsWPlUHEIYoj3le7qydXsDbt%2Fd2gHz9nO3f%2B%2BX3a4DdoAfipctxjYigMm6fzq8GqMG9FVDbpyUvhut7TrsmiBqzsr8qyRSuW%2B2cuqUjsDKVqG1sygPiXv5LvLjFQFQEixxNf7ed9aRRr0J3%2FE8gQ50EIASX%2FtzIMPXCmTULaAhdCohppG71oVG3K9Nz3mmCgUZ7S%2BZg9udbC1Shq44hp%2FDE1FslIiMhbLca2UYDKDKkk8YMit7AWDuq1L9RhsusHGrrTO9WoXSKvx20%2BN2D2SsqC0InP7IGwor%2BF4XQoRpbP4%2B0mtiOoIUI21K3SnDe2Za5nBn7JMg3LRSAJRTyFaYLk8jc1dbimsRLxEUoe%2F%2BwRHP7yeJrVoN1Thjdr4xdPYFyq2lkM%2FNLajfyXVJnz6CdDHD5cYXVO5Q7XTSCV%2FTIqOWDh2SyIoiWrGAWpRdaZB4%2BpiiaKFXG0Sy7%2Bpi0GOXv3HnewyyfQjWHlwu%2BYvQAy2mDjpkiGkG3tp7YF8%2FlLnVxUKNGV0AnSarRyOUmwTmhaKEAjYSVCUyqtlUjrZf1KCgsvi5VPlinB86Ot4jbWpT%2BNp6ZLO1HRzYKEIl%2FVEW8nCzxBi7PrF3ji1KbIwdMiuRWJYzyzpWeUzDHi1ml2mqEBsxTqRqsqwhM4KYDaaKGsqgTNpDpyb71AYBdLyz3yJXxa%2FonL14sQ7WrgRjRVhgpe3vBUSI2hN%2BsZtsts82jf2tx7zxAvlG8M7JPSUj7YerELqv3XKM4S9lI021ZdVbqpnKK6oPAEHGeIst%2FaUjVGhE19v0yu0mP4VuLu7kBvosA%2BHXZLOv3CRiz7UW1Zs4hj0LIJCqHW8TbAgxuUpZ7zJk8%2FW004uNoo13WEH4Iwim0ZIPH76NqnJ6%2B1%2BMrNwo171SEuRS%2FaQQp9oPWDdcytcdF3tzWwu4FnYi51N9ZASnYJkBpO%2FGmbrVzaouSLhWwuagb5WcSrzEQzRdPj8Xg0QXgxVtFXKyLKFRt7l7sg8uu50KC2v7vfygsnx%2FtOCy9B5a5uGUcrXNAmBhpiKGToijnqUm4hn7zG7K%2Bbw7kcWjMgGmdev0ZsRvjRaCTBJxxkW2CUhw%2BXKtPhM37%2FPSEgHHhYryUMQfr9QPNIjq4x%2BCJhee%2FGhu9Fc2rTwT78cE341hw%2BlhjfkLEQvvbVKa4JYVUWaJztpLJaSFF%2Bl9sAxBqlVVSdHUHp%2FRFObkMqAnYXi7tjOc8DCaMTc4EwEWDzn2kzOupW0OmbfHsuwWINLxfFxafHYTm3y8udjcRJ3f%2BzDwPE7LKL%2BsZkWR3Oi9VvFlBgCXlsItViVXBSbXqF3EP5iLu9WtCKG8j%2BqugfXGQZH5inYjS6nrYQ7E3RE5r9WlM0T8W2UZP8x01N8r427loZHsfuRz56AreKG%2FMyZ1z2LgVD9dQpRCqrpx7kJWpdm4DhrNXpqF5vsaToM%2BQDbrcyv8H2xwNMEG72%2FU3C2tLrULKbVyF1ON2YOh7qZ6k9KIcszZZkmvbc6jV2n2BU3VzWrNKlBoMJdbxd2pashEqJBQYsaJGdqrCyAwW6E8LhGBEiJSWHT2Y6UHIC6Su3uIyUqMJeO7p8KKmcmOswhQFa5bmuwJUAIrhc9%2FUCF6r%2FgyvzueZg1rEr24KAVH%2FPv0Ajtm7TdlAiGdDWYXUgiLOLybLp%2FfVRRjaVTQ%2B2i%2BPwTaVNknmau00RMXi9Dt46udf3%2Bc%2F6M%2Bd28qg4SUkikvmphBFcVYC5VK1NvhTw7I7kx875qXzMGXc4fnDAtsUmMNZxGMV20CVAvux7i7CHt4JR2YYRj0uOGeHhR3mfzNgwtB0PtVHWUcZreUAb3SAYJMVnIfeED5clC1Yro7%2FFLynBDhrJyiAOnG06Z7yhcP0hhw%2FQARFx5q8jamuJc9z8DRNRkZe2aVfa9aPHXK6%2BvJSdNHxRKNTgVgSgsLidvevrU27W%2BY0ufK4HZRDlRQK21q6AM8lx8MUHtV7AU4mFJ8o9TIAL8%2FIcjtJtg7hV7u5yDx8ZQsiSzMWma0uldW%2BN4SbuNk9G3OI6isUtfhutyo8QGQk%2FwHhY%2FOpDhb%2Fu6KHByGfUf6khRi3A8dkZJvg7cJ70fmMODahIhWOq2S6qRhHqVbq3DD5zs13FM1ja%2BxmbW4MRDAoGNFM1rrKuuqrFCTxQa5SBepSCoOaUpL3LnuIowXlxNwQ0NxVqrBdYze8XcgBgbPeaobyXxvVkZ9a3uhTg47glgoNKEJLgIgQkxa%2Boj%2F5NO0qehPXEnOYhSa1hnemDUs%2F6jqL9GIHx9JXMmyWqztdrUL3Q%2F%2BnXGHZVqVcqEk4thw65a32QqfF3po%2BE5ORYHaIJOZZ%2Fdz8e6RBGGEqGIzR1PXOSnSS4OtH%2FzEPdqEdxQ2yxE%2FJTRGeSFs%2Fs%2BP3iCLMI9lXZipfCe7pGhveSH1PmP%2BITp%2BIxBbDpBdzW84aVtS5muRJ%2BS%2FOUTXF5Y2CNGyvK6IaUFCpcT%2B%2BqKmWWFWq5CbWIDmtBEzg9%2FzRInzq9zp%2FedkOP7%2FsFH7DFClrkEPVNeXjCeZtTN9M7Ez%2FxdTXiqh0%2BhkYTSp5C7PqdTc%2Bo%2FlN1TCBi%2FzkHFrGk%2FXnTXe2G8Fxsko15utYt%2FSFV7rm3btB3BSCOoV5HesXb1PLtxjM4XWGSXVILpnqIHj6h6jRalSeaebJyRUe7LmSiO9aZMc870gs4xgvWCmE5Uiej%2F3TWzFYQhHiYqNVJFexIbVoCyZvPOAnmoDO9ttVYaMSFCE76YxQdb%2BzyI2bBQ9Pzf4jCIo1okIsdtWVYnmJLIdJ%2BcJfonim8hFsiQqx4Vch8kubvPjZfWVUSwEUd%2FimFH7bLrDIV0aapcfk57uR%2BlPp%2BBlN60gGckho3Y9dpjxdqEWrLwzl8%2B711Nhai3JmkUle6i8fZtKTQT73CtEgPfET4IisojCnv6GR%2B1SxeBkXMSykq%2F1mI0rxTp4vMUoYFHkTRn7cx4cYj9ghjsaYyMXwAWu3%2FCwlHeD4xCVmU8HnpxKogz7YmW6IiYRRupt8xvLYtY6RB1o63N0Dgxns0psqy%2BcBhyXuqpxUyAoFKMwLBzxaRvw%3D%3D&__VIEWSTATEGENERATOR=5DCC3F26&ctl00%24LoginView%24UserName=&ctl00%24LoginView%24Password=&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24ZIP=" + AbfragePLZ + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Quantity=" + Abfragemenge + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeId=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeCheckBox=on&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl02%24TypeId=2&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24PaymentGroup%24OptionGroupDropDown=6&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Stations=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryGroup%24OptionGroupDropDown=5&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryTimeGroup%24OptionGroupDropDown=24&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TruckSizeGroup%24OptionGroupDropDown=19&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TubeLengthGroup%24OptionGroupDropDown=9&ctl00%24MainContent%24OrderProcess_Step_1%24IsLoggedIn=0&ctl00%24MainContent%24OrderProcess_Step_1%24SortingType=-1&ctl00%24MainContent%24OrderProcess_Step_1%24ProductTypeSelector=1&ctl00%24MainContent%24OrderProcess_Step_1%24SortDropDown=-1&__ASYNCPOST=true&"
                          log("Pelletspeise werden ermittelt "+ fetchstring,"info")
                            let response = await fetch(fetchstring, {
                              "headers": {
                                "accept": "*/*",
                                "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                "cache-control": "no-cache",
                                "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                                "pragma": "no-cache",
                                "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
                                "sec-ch-ua-mobile": "?0",
                                "sec-ch-ua-platform": "\"Windows\"",
                                "sec-fetch-dest": "empty",
                                "sec-fetch-mode": "cors",
                                "sec-fetch-site": "same-origin",
                                "x-microsoftajax": "Delta=true",
                                "x-requested-with": "XMLHttpRequest",
                                "Referer": fetchstring,
                                "Referrer-Policy": "strict-origin-when-cross-origin"
                              },
                              "body": bodystring,
                              "method": "POST"
                            });
                              let text = await response.text();
                              return text;
                          } // EndFunction
                          
                          
                          
                          //--------------------------------------------------------------------------------------------------------------------
                          // Function CreateStates
                          //--------------------------------------------------------------------------------------------------------------------
                          function CreateStates() {
                              if ( !existsState(dpPrice1 )) { createState(dpPrice1,0,{name: "guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                              if ( !existsState(dpPrice2 )) { createState(dpPrice2,0,{name: "Zweit guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                              if ( !existsState(dpPrice3 )) { createState(dpPrice3,0,{name: "Dritt guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                              if ( !existsState(dpDealer1)) { createState(dpDealer1,0,{name: "guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                              if ( !existsState(dpDealer2)) { createState(dpDealer2,0,{name: "Zweit guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                              if ( !existsState(dpDealer3)) { createState(dpDealer3,0,{name: "Dritt guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                          } // End Function
                          
                           
                          
                           
                          

                          vG Looxer

                          OliverIOO 1 Reply Last reply
                          0
                          • L looxer01

                            @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                            probiere mal den preis mit folgendem Aufbau

                            Vielen Dank für die Anpassung.

                            @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                            die sortierung der seite ist aber seltsam.

                            Die Sortierung sollte ok sein, da nach Gesamtpreis sortiert wird und der Tonnenpreis günstiger erscheinen kann. (z.B. wegen Einblaspauschalen)

                            Leider erhalte ich überhaupt keine Ergebnisse, weder für Dealer noch für Price.
                            Und wenn ich den string ausgebe als text (log), und nach dem Dealer suche (z.B. STRG F) dann erhalte ich auch kein Ergebnis. Mir scheint es so, dass der Fetch gar nicht das gewünschte Ergebnis liefert.

                            Ich poste mal den Code.
                            Irgendwas passt da noch nicht. Vielleicht kannst du mal reinschauen.

                            //Author Olivero aus Forumsbeitrag
                            //https://forum.iobroker.net/topic/56432/preis-von-propellets-at-mittels-parser-auslesen/22?_=1670064893887&lang=de
                            // Angepasst: 03.12.22 Looxer01
                            
                            //..........................................
                            // Einstellungen
                            //..........................................
                            const dpPrice1 = "javascript.0.Heizung.Pelletspreise.dpPrice1";
                            const dpDealer1 = "javascript.0.Heizung.Pelletspreise.dpDealer1";
                            const dpPrice2 = "javascript.0.Heizung.Pelletspreise.dpPrice2";
                            const dpDealer2 = "javascript.0.Heizung.Pelletspreise.dpDealer2";
                            const dpPrice3 = "javascript.0.Heizung.Pelletspreise.dpPrice3";
                            const dpDealer3 = "javascript.0.Heizung.Pelletspreise.dpDealer3";
                            
                            const Abfragemenge = "6000";
                            const AbfragePLZ = "60308";
                            //const Abfrageplan = '0 */2 * * *' ;            // Cron - alle 2 Stunden
                            const Abfrageplan = '* * * * *' ;            // Cron - jede Minute
                            
                            
                            //..........................................
                            // Programm Vorbereitung
                            //..........................................
                            const fetch = require("node-fetch");
                            const cheerio = require("cheerio");
                            CreateStates();
                            
                            //--------------------------------------------------------------------------------------------------------------------
                            // Schedule 
                            //--------------------------------------------------------------------------------------------------------------------
                            schedule (Abfrageplan,function () {
                            log("Pelletspeise schedule gestarted","info")
                            analyze();
                            
                            }) // End Schedule
                            //..........................................
                            // Programmablauf Ende
                            //..........................................
                            //analyze() 
                            
                            //--------------------------------------------------------------------------------------------------------------------
                            // Function Analyze
                            //--------------------------------------------------------------------------------------------------------------------
                            async function analyze() {
                              let text = await getData();
                              let $ = cheerio.load(text);
                             // log("Text geladen "+text)
                               let price1 = $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim() 
                              // let price1 = $($(".price-middle:not(.total)")[0]).text().trim();
                              // var  price1Total = $($(".price-middle total <span> ")[0]).text().trim();
                              let dealer1 = $($(".dealer-name")[0]).text().trim()
                            log("Dealer1 "+ dealer1 + " Price1 "+price1)
                               let price2 = $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim() 
                            //  let price2 = $($(".price-middle:not(.total)")[1]).text().trim();
                              let dealer2 = $($(".dealer-name")[1]).text().trim()
                            log("Dealer2 "+ dealer2 + " Price2 "+price2)
                               let price3 = $($(".dynamic-currency-number")[0]).text().replace(/[^0-9,]/g,"").trim() 
                             // let price3 = $($(".price-middle:not(.total)")[2]).text().trim();
                              let dealer3 = $($(".dealer-name")[2]).text().trim()
                            log("Dealer3 "+ dealer3 + " Price3 "+price3)
                             // log ("Pelletspreise -  price 1 " + price1 + " Price 2 " + price2 + " Price 3 " + price3)
                              setState(dpPrice1,price1);
                              setState(dpDealer1,dealer1);
                              setState(dpPrice2,price2);
                              setState(dpDealer2,dealer2);
                              setState(dpPrice3,price3);
                              setState(dpDealer3,dealer3);
                            } // End Function
                            
                            
                            //--------------------------------------------------------------------------------------------------------------------
                            // Function getData
                            //--------------------------------------------------------------------------------------------------------------------
                            async function getData() {
                            var fetchstring = "https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode="+AbfragePLZ+"&amount="+Abfragemenge+"&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0"
                            //var fetchstring = "https://www.heizpellets24.de/pelletpreis-direkt/"+AbfragePLZ+"/"+Abfragemenge+"/1/dt5"
                            var bodystring =  "ctl00%24ScriptManager1=ctl00%24MainContent%24OrderProcess_Step_1%24PriceOrderUpdatePanel%7Cctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTTARGET=ctl00_MainContent_OrderProcess_Step_1_PriceOrderUpdatePanel&__EVENTARGUMENT=LoadPrices&__LASTFOCUS=&__VIEWSTATE=ZOqYdG%2BFwZ%2BPrH15aLaMOhCzmA140AC7FRQT3yJlHciVxQ48WlVoIAneqpP531uNShrNE4s8pYwrxCbi2Al%2FD78egos7NN8N26Wwp3FQY0QU2BUEUQiUvMfvrw6k4579ZlpA%2BjWBFS2L9gdEqrq%2BNy%2F2FfulD2BLGcSw3dxN2BoDBJ6ZlKMEYhpcwsnrciH0JzSBmCppft1AUYcTCh4bnwEkEqrmCNNc6JWx0jm9kdJIHMlHNVXJg3HujRyj8g75ZwMJVzQQGVljGNVsx6EeMrHhu%2BVgrjM3dMPwV5p485kdwKlPvkhPliUDI3ES2l%2FLcTGvyQIdMULrFFG5TanRnKkRKf40BvCE8Wu233%2Bb5b7dl8vhb8PCOilHtpSvMESCcyrxMvctN2ALlFrLPfV15ydI6aghBWm1dULmXOMINUXu%2BTdc0irIq4qxw3BDYvjCVADCXio9a5syz5qcdori2HzaaTpFD1X5V2h8L3jG%2FRSnU9fGxl38FEHQ5CejNn%2FBqIpurm6uDvsfLznni1EwbO52WsrlqWVyIrKaT2594wPUVV9IKfg%2FJ9CjjlYASS2zQmXp2UNpZIJCWgFXqsL1Y0IJeONZmNdqt%2Fs5VL%2FXh0aZpWpr8Z0V4FzhsxX1Fz%2BSLVQ4s%2F7lQJ0r1ZKffmwNXdxHyqoag%2BTYBpqqv8wIs88%2BjO8ZIONKPaeRhoHmFFZAVCrP3bpaRYxwRPdRK1ZG0omNc%2FCmNhnoPr1flBfnqfMkhofm3ihkL3cEu6A%2BB%2Bdp4cVkuzCA6Pgva7JQ23bhOhXhN%2BHlwd1cwH6UBx83tTEEC5vMToqSMEQIM3Kzhf38FMlPf0E%2B77h1v2kaIP8l%2FxBDCwRpfqGoAtUIxrlJSdAEfaE2m4p4thTkkCj4XgUc2wWlxDHEbuNexg3oGS4TbgyO%2BPVMgUdq15QTir9YDQ6sPX16EMKjUmwes%2FERLwmctj8z3jCBrTBO%2FZl1HnHYApgpSmCIRq5UZTNAIIwouoMK%2FFlAkZJGMDpS6azY%2BHoXc42r%2BeB1r%2FOGMkcCs2Yg0i6sXXMM1MEes5V2ETT4RwzPVN1XN7oqCVlX9%2Fa2R%2FMpdyL%2BbriLCqVWgtBEp%2FaI3KhYlsb%2BvouM3MPeCXPvLQMlYtjUcF6AajPK8Kuilc1yS%2FluMNQrLSGnngyyU3%2BaBkDeU1SSdpPqRw7BJwgafDEiXwWXL9TTHuTrdDAGTteBFHvRI1%2BOS9qOzt9qZiJ3wBUA0NhtEWeOmrkpMUHj8NiP6IA3KLeDsu8InVNRKIX93ALsnNQKr2l57bPOmCgMAz2LKbPfUEPZGcuhIPW6857%2BDLyUpZPBimleNRXhzfZ5UKr0UV8oi9BIWeO9aEctJfRba1DxGHNL0CPXAAXJHDo9dQCxhSHB1O3NxPb8mFX8NhmFCsLSb78%2FMqPL%2BHjzAijQumviqAjRG8lmCDSTCt%2Bcam1a%2FkPZFH7KXlDhF7QWX45XOFc4mO6BDhCRmZcoD2%2FYHFkMEVPi7K%2FOlNL6jTAXqm0UTLnsGuhaeUwDRZlJKlJKjUfgGCFZYV78%2BjE%2FDDmocBaaBTqcWoJ4QyCUU70XxEN%2BZMPbZtnFtVXTeS0VPZykzMah%2BugET7zPlvS8xUO1YqbcpmoGeaXTDrchJdMnkOea02C4xa5aMwEnnAQi2udDLeMXfjYD8PhUThKP3anE93ta7u37jYvXm8vLXPVMNFCqUv%2BvJTUxEVlpYpczcgqqcUPGi9sNrmgVxgIFvnu%2BR%2FD%2Bot8eQ8zXpLJMljPe9mt1KYIoYQH13DoJO%2BSnxEahfMlcfJio6Vt2CLK7yCCiwzLvIzsXDw3CBv2i%2Bkkga1uvw3OjlMjfnEcRjPJ4VjfrEfrjGTy6TjnSuMiENlt4MMTSgz4CfdAOhL2avTkh7AAVlHzLUQCPxI1q69fdRI%2B3wUvEnMvK%2BjTpAiuxFmveQ9ws5%2BnUULRH54L37qejMOVeI5ryRzSSQPJZIRUJMV5nX%2FM71YC0uJ1TcVJMqlV2S10zl4%2B8jS5cfZka%2FFsESP6MkrB%2BDuI9JwTB7mI5bJzlVbtlfflblcw4aiY9nvd%2BdkUbifX%2FRLTXkOSmvEwz%2FfhbtLZ9oMwj%2BOwZGIXaupyZ2n0ZLk%2FCHNp1CObl3O8NVk4XQO%2BPUIvjqW93aiaZaQnt1fevy%2FWP58wMv6j6vKRmWK2dFxb2c8nojmLja9CYIJE4pVokwdDN0dW4uvNhp1ji9183kL%2BPZDi0kZ1HS5poNFpq1kPmlvimPGBMbBA991LdH0ZE0%2FhSE1wjE5VrfBTxkz8jDNxvlhr74qbPF6rB5esZYNGV1PJJdiwO0IxbL727ZFJ3dRpv1MYQIA7zDkKhmRvNH2%2FKCA7RLFw1nBACOoctXUTY0oTE89R7zTUFMYbfcRUDatJLTW7hCP3NbYLRE8YHaQESuA0yU4tbfY1IS%2BaurfI7iAcviEZxSk2y9akqRXo%2BsnfqV%2Bu6zV3RjuPS8X9%2FLnj4bj2xS1MP5s3ll2fx8FFwZ4%2BhnKy73eaj8kLCwP6ydLpA34APrj8%2B7PmXOjwO6%2FttZlAwZPf8pt%2Fnyx3VA02oun41c22TFSw5G06YIouLb1FK1doRBJKpuanQnf0TPywfg2fikSXEgdd%2FpOzqJ0Z4KDmiQMVp81vKFxfNJMBJJERy%2FC4Pbe2%2F%2BMj1xiYA72xupCTtzSlpO0h3HJM%2FUjIU70iK%2FeVo8W%2F5oG4hc5RR5qtZZ8wuyJekAjQmp3kSIqYxrMsLXoKFlRYwa7uhY3OUAJj87JdReMB2mdtLmGCu8vAVGyXreVO9EGMCWe6wqObm6DeYqLUzMqH6BSvsQSq%2FT28r9YQnmSoR8UH7rj4ENHnA96aRWd45rB1N1TpQKchlsMx71s1t34vGnFgdmbPR54SouwIU9I0vgqLwLNxJccJ8SFZYgQyNZx63oLfc%2FND%2FPnGiNcFuGvFcR4z3PZxxUxiGWIECWLcgj5MZqHyF4IFZQo%2B7rsPIWwjreOE50zEzCbkN1BRncsYjjHV5du4MyaEgww1jqWTL6O5f%2FQeBbKlfxDMi8ucHZby94P4itRSewQQdWjZpRunxIhyOZk24SsWPlUHEIYoj3le7qydXsDbt%2Fd2gHz9nO3f%2B%2BX3a4DdoAfipctxjYigMm6fzq8GqMG9FVDbpyUvhut7TrsmiBqzsr8qyRSuW%2B2cuqUjsDKVqG1sygPiXv5LvLjFQFQEixxNf7ed9aRRr0J3%2FE8gQ50EIASX%2FtzIMPXCmTULaAhdCohppG71oVG3K9Nz3mmCgUZ7S%2BZg9udbC1Shq44hp%2FDE1FslIiMhbLca2UYDKDKkk8YMit7AWDuq1L9RhsusHGrrTO9WoXSKvx20%2BN2D2SsqC0InP7IGwor%2BF4XQoRpbP4%2B0mtiOoIUI21K3SnDe2Za5nBn7JMg3LRSAJRTyFaYLk8jc1dbimsRLxEUoe%2F%2BwRHP7yeJrVoN1Thjdr4xdPYFyq2lkM%2FNLajfyXVJnz6CdDHD5cYXVO5Q7XTSCV%2FTIqOWDh2SyIoiWrGAWpRdaZB4%2BpiiaKFXG0Sy7%2Bpi0GOXv3HnewyyfQjWHlwu%2BYvQAy2mDjpkiGkG3tp7YF8%2FlLnVxUKNGV0AnSarRyOUmwTmhaKEAjYSVCUyqtlUjrZf1KCgsvi5VPlinB86Ot4jbWpT%2BNp6ZLO1HRzYKEIl%2FVEW8nCzxBi7PrF3ji1KbIwdMiuRWJYzyzpWeUzDHi1ml2mqEBsxTqRqsqwhM4KYDaaKGsqgTNpDpyb71AYBdLyz3yJXxa%2FonL14sQ7WrgRjRVhgpe3vBUSI2hN%2BsZtsts82jf2tx7zxAvlG8M7JPSUj7YerELqv3XKM4S9lI021ZdVbqpnKK6oPAEHGeIst%2FaUjVGhE19v0yu0mP4VuLu7kBvosA%2BHXZLOv3CRiz7UW1Zs4hj0LIJCqHW8TbAgxuUpZ7zJk8%2FW004uNoo13WEH4Iwim0ZIPH76NqnJ6%2B1%2BMrNwo171SEuRS%2FaQQp9oPWDdcytcdF3tzWwu4FnYi51N9ZASnYJkBpO%2FGmbrVzaouSLhWwuagb5WcSrzEQzRdPj8Xg0QXgxVtFXKyLKFRt7l7sg8uu50KC2v7vfygsnx%2FtOCy9B5a5uGUcrXNAmBhpiKGToijnqUm4hn7zG7K%2Bbw7kcWjMgGmdev0ZsRvjRaCTBJxxkW2CUhw%2BXKtPhM37%2FPSEgHHhYryUMQfr9QPNIjq4x%2BCJhee%2FGhu9Fc2rTwT78cE341hw%2BlhjfkLEQvvbVKa4JYVUWaJztpLJaSFF%2Bl9sAxBqlVVSdHUHp%2FRFObkMqAnYXi7tjOc8DCaMTc4EwEWDzn2kzOupW0OmbfHsuwWINLxfFxafHYTm3y8udjcRJ3f%2BzDwPE7LKL%2BsZkWR3Oi9VvFlBgCXlsItViVXBSbXqF3EP5iLu9WtCKG8j%2BqugfXGQZH5inYjS6nrYQ7E3RE5r9WlM0T8W2UZP8x01N8r427loZHsfuRz56AreKG%2FMyZ1z2LgVD9dQpRCqrpx7kJWpdm4DhrNXpqF5vsaToM%2BQDbrcyv8H2xwNMEG72%2FU3C2tLrULKbVyF1ON2YOh7qZ6k9KIcszZZkmvbc6jV2n2BU3VzWrNKlBoMJdbxd2pashEqJBQYsaJGdqrCyAwW6E8LhGBEiJSWHT2Y6UHIC6Su3uIyUqMJeO7p8KKmcmOswhQFa5bmuwJUAIrhc9%2FUCF6r%2FgyvzueZg1rEr24KAVH%2FPv0Ajtm7TdlAiGdDWYXUgiLOLybLp%2FfVRRjaVTQ%2B2i%2BPwTaVNknmau00RMXi9Dt46udf3%2Bc%2F6M%2Bd28qg4SUkikvmphBFcVYC5VK1NvhTw7I7kx875qXzMGXc4fnDAtsUmMNZxGMV20CVAvux7i7CHt4JR2YYRj0uOGeHhR3mfzNgwtB0PtVHWUcZreUAb3SAYJMVnIfeED5clC1Yro7%2FFLynBDhrJyiAOnG06Z7yhcP0hhw%2FQARFx5q8jamuJc9z8DRNRkZe2aVfa9aPHXK6%2BvJSdNHxRKNTgVgSgsLidvevrU27W%2BY0ufK4HZRDlRQK21q6AM8lx8MUHtV7AU4mFJ8o9TIAL8%2FIcjtJtg7hV7u5yDx8ZQsiSzMWma0uldW%2BN4SbuNk9G3OI6isUtfhutyo8QGQk%2FwHhY%2FOpDhb%2Fu6KHByGfUf6khRi3A8dkZJvg7cJ70fmMODahIhWOq2S6qRhHqVbq3DD5zs13FM1ja%2BxmbW4MRDAoGNFM1rrKuuqrFCTxQa5SBepSCoOaUpL3LnuIowXlxNwQ0NxVqrBdYze8XcgBgbPeaobyXxvVkZ9a3uhTg47glgoNKEJLgIgQkxa%2Boj%2F5NO0qehPXEnOYhSa1hnemDUs%2F6jqL9GIHx9JXMmyWqztdrUL3Q%2F%2BnXGHZVqVcqEk4thw65a32QqfF3po%2BE5ORYHaIJOZZ%2Fdz8e6RBGGEqGIzR1PXOSnSS4OtH%2FzEPdqEdxQ2yxE%2FJTRGeSFs%2Fs%2BP3iCLMI9lXZipfCe7pGhveSH1PmP%2BITp%2BIxBbDpBdzW84aVtS5muRJ%2BS%2FOUTXF5Y2CNGyvK6IaUFCpcT%2B%2BqKmWWFWq5CbWIDmtBEzg9%2FzRInzq9zp%2FedkOP7%2FsFH7DFClrkEPVNeXjCeZtTN9M7Ez%2FxdTXiqh0%2BhkYTSp5C7PqdTc%2Bo%2FlN1TCBi%2FzkHFrGk%2FXnTXe2G8Fxsko15utYt%2FSFV7rm3btB3BSCOoV5HesXb1PLtxjM4XWGSXVILpnqIHj6h6jRalSeaebJyRUe7LmSiO9aZMc870gs4xgvWCmE5Uiej%2F3TWzFYQhHiYqNVJFexIbVoCyZvPOAnmoDO9ttVYaMSFCE76YxQdb%2BzyI2bBQ9Pzf4jCIo1okIsdtWVYnmJLIdJ%2BcJfonim8hFsiQqx4Vch8kubvPjZfWVUSwEUd%2FimFH7bLrDIV0aapcfk57uR%2BlPp%2BBlN60gGckho3Y9dpjxdqEWrLwzl8%2B711Nhai3JmkUle6i8fZtKTQT73CtEgPfET4IisojCnv6GR%2B1SxeBkXMSykq%2F1mI0rxTp4vMUoYFHkTRn7cx4cYj9ghjsaYyMXwAWu3%2FCwlHeD4xCVmU8HnpxKogz7YmW6IiYRRupt8xvLYtY6RB1o63N0Dgxns0psqy%2BcBhyXuqpxUyAoFKMwLBzxaRvw%3D%3D&__VIEWSTATEGENERATOR=5DCC3F26&ctl00%24LoginView%24UserName=&ctl00%24LoginView%24Password=&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24ZIP=" + AbfragePLZ + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Quantity=" + Abfragemenge + "&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeId=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl01%24TypeCheckBox=on&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24QualityCheckBoxRepeater%24ctl02%24TypeId=2&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24PaymentGroup%24OptionGroupDropDown=6&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24Stations=1&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryGroup%24OptionGroupDropDown=5&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24DeliveryTimeGroup%24OptionGroupDropDown=24&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TruckSizeGroup%24OptionGroupDropDown=19&ctl00%24MainContent%24OrderProcess_Step_1%24CalculatorView%24TubeLengthGroup%24OptionGroupDropDown=9&ctl00%24MainContent%24OrderProcess_Step_1%24IsLoggedIn=0&ctl00%24MainContent%24OrderProcess_Step_1%24SortingType=-1&ctl00%24MainContent%24OrderProcess_Step_1%24ProductTypeSelector=1&ctl00%24MainContent%24OrderProcess_Step_1%24SortDropDown=-1&__ASYNCPOST=true&"
                            log("Pelletspeise werden ermittelt "+ fetchstring,"info")
                              let response = await fetch(fetchstring, {
                                "headers": {
                                  "accept": "*/*",
                                  "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                  "cache-control": "no-cache",
                                  "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                                  "pragma": "no-cache",
                                  "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
                                  "sec-ch-ua-mobile": "?0",
                                  "sec-ch-ua-platform": "\"Windows\"",
                                  "sec-fetch-dest": "empty",
                                  "sec-fetch-mode": "cors",
                                  "sec-fetch-site": "same-origin",
                                  "x-microsoftajax": "Delta=true",
                                  "x-requested-with": "XMLHttpRequest",
                                  "Referer": fetchstring,
                                  "Referrer-Policy": "strict-origin-when-cross-origin"
                                },
                                "body": bodystring,
                                "method": "POST"
                              });
                                let text = await response.text();
                                return text;
                            } // EndFunction
                            
                            
                            
                            //--------------------------------------------------------------------------------------------------------------------
                            // Function CreateStates
                            //--------------------------------------------------------------------------------------------------------------------
                            function CreateStates() {
                                if ( !existsState(dpPrice1 )) { createState(dpPrice1,0,{name: "guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                                if ( !existsState(dpPrice2 )) { createState(dpPrice2,0,{name: "Zweit guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                                if ( !existsState(dpPrice3 )) { createState(dpPrice3,0,{name: "Dritt guenstigster Preis",  type: 'string', role: 'value'}, function () {});  }
                                if ( !existsState(dpDealer1)) { createState(dpDealer1,0,{name: "guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                                if ( !existsState(dpDealer2)) { createState(dpDealer2,0,{name: "Zweit guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                                if ( !existsState(dpDealer3)) { createState(dpDealer3,0,{name: "Dritt guenstigster Haendler",  type: 'string', role: 'value'}, function () {});  }
                            } // End Function
                            
                             
                            
                             
                            

                            vG Looxer

                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            wrote on last edited by
                            #40

                            @looxer01

                            ah das hab ich nicht überprüft.
                            die seite wird nun dynamisch erzeugt.
                            die daten stammen aus einer json, die so abgerufen wird.

                            ein einfacher replay funktioniert leider nicht mehr. da wird wohl auf serverseite etwas mehr geprüft. das könnte aufwändiger werden.
                            hast du eine andere quelle für diese informationen?

                            fetch("https://www.heizpellets24.de/api/kalkulation/berechnen", {
                              "headers": {
                                "accept": "application/json, text/plain, */*",
                                "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                                "content-type": "application/json;charset=UTF-8",
                                "priority": "u=1, i",
                                "sec-ch-ua": "\"Chromium\";v=\"124\", \"Google Chrome\";v=\"124\", \"Not-A.Brand\";v=\"99\"",
                                "sec-ch-ua-mobile": "?0",
                                "sec-ch-ua-platform": "\"Windows\"",
                                "sec-fetch-dest": "empty",
                                "sec-fetch-mode": "cors",
                                "sec-fetch-site": "same-origin"
                              },
                              "referrer": "https://www.heizpellets24.de/holzpellets-lose/angebotsliste?zipCode=60308&amount=6000&stations=1&product=20&options=108,131,-18,127,159&ap=0&pcert=4,2,6,1&lbp=0",
                              "referrerPolicy": "strict-origin-when-cross-origin",
                              "body": "{\"Initialized\":true,\"IsDefault\":false,\"ProductGroupId\":3,\"ZipCode\":\"60308\",\"Amount\":6000,\"Stations\":1,\"Product\":{\"Id\":20},\"Parameters\":[{\"Key\":\"DeliveryMax\",\"Id\":108,\"Modifier\":-1,\"Name\":\"maximal\",\"ShortName\":null,\"DisplayName\":\"max. Lieferfrist\",\"CalculatorName\":null,\"SubText\":null,\"InfoText\":null,\"OrderText\":null,\"IconKey\":null,\"HasSpecialView\":false,\"IsUpselling\":false,\"BlackList\":[],\"Selected\":true,\"HasSubItems\":false,\"UseIcon\":false},{\"Key\":\"DeliveryTimeWholeDay\",\"Id\":131,\"Modifier\":-1,\"Name\":\"ganztägig möglich (7-18 Uhr)\",\"ShortName\":null,\"DisplayName\":null,\"CalculatorName\":null,\"SubText\":null,\"InfoText\":null,\"OrderText\":null,\"IconKey\":null,\"HasSpecialView\":false,\"IsUpselling\":false,\"BlackList\":[],\"Selected\":true,\"HasSubItems\":false,\"UseIcon\":false},{\"Key\":null,\"Id\":-18,\"Modifier\":-1,\"Name\":\"alle\",\"ShortName\":null,\"DisplayName\":null,\"CalculatorName\":null,\"SubText\":null,\"InfoText\":null,\"OrderText\":null,\"IconKey\":null,\"HasSpecialView\":false,\"IsUpselling\":false,\"BlackList\":[],\"Selected\":true,\"HasSubItems\":false,\"UseIcon\":false},{\"Key\":\"TruckBigTrailer\",\"Id\":127,\"Modifier\":-1,\"Name\":\"mit Hänger\",\"ShortName\":\"groß\",\"DisplayName\":\"LKW mit Hänger\",\"CalculatorName\":\"mit Hänger\",\"SubText\":null,\"InfoText\":null,\"OrderText\":null,\"IconKey\":\"with-trailer\",\"HasSpecialView\":false,\"IsUpselling\":false,\"BlackList\":[],\"Selected\":true,\"HasSubItems\":false,\"UseIcon\":true},{\"Key\":\"TubeLength30m\",\"Id\":159,\"Modifier\":-1,\"Name\":\"30 m\",\"ShortName\":\"30m\",\"DisplayName\":null,\"CalculatorName\":\"30 m\",\"SubText\":null,\"InfoText\":null,\"OrderText\":\"30m Schlauch\",\"IconKey\":null,\"HasSpecialView\":false,\"IsUpselling\":false,\"BlackList\":[],\"Selected\":true,\"HasSubItems\":false,\"UseIcon\":false}],\"CountryId\":1,\"ProductCertifications\":[4,2,6,1],\"LooseBlowingProcess\":false,\"PalletBagSize\":null,\"PalletBagCount\":null,\"Ap\":false,\"AppointmentPlus\":false,\"Ordering\":0,\"OfferProductCertifications\":null,\"OfferLooseBlowingProcess\":null}",
                              "method": "POST",
                              "mode": "cors",
                              "credentials": "include"
                            });
                            

                            Meine Adapter und Widgets
                            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                            Links im Profil

                            1 Reply Last reply
                            0
                            • L Online
                              L Online
                              looxer01
                              wrote on last edited by
                              #41

                              @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                              die seite wird nun dynamisch erzeugt.

                              das hatte ich schon befürchtet. Nicht so gut.

                              @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                              hast du eine andere quelle für diese informationen?

                              hab jetzt mal nachgesehen aber ich bin nicht so richtig fündig geworden. Die einzige Alternative, die ich gesehen habe, ist mit Sicherheit noch schwieriger, da Preise bzw die Lieferanten erst per manuellen klick erzeugt werden.

                              dann schauts nicht so gut aus.

                              Vielleicht hat aber noch ein Mitleser einen Tipp, ob es gute alternative Seiten gibt ?

                              vG Looxer

                              OliverIOO 1 Reply Last reply
                              0
                              • L looxer01

                                @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                                die seite wird nun dynamisch erzeugt.

                                das hatte ich schon befürchtet. Nicht so gut.

                                @oliverio sagte in Preis von Propellets.at mittels Parser auslesen:

                                hast du eine andere quelle für diese informationen?

                                hab jetzt mal nachgesehen aber ich bin nicht so richtig fündig geworden. Die einzige Alternative, die ich gesehen habe, ist mit Sicherheit noch schwieriger, da Preise bzw die Lieferanten erst per manuellen klick erzeugt werden.

                                dann schauts nicht so gut aus.

                                Vielleicht hat aber noch ein Mitleser einen Tipp, ob es gute alternative Seiten gibt ?

                                vG Looxer

                                OliverIOO Offline
                                OliverIOO Offline
                                OliverIO
                                wrote on last edited by
                                #42

                                @looxer01

                                Nenne die Seite bitte.
                                Manueller Klick ist kein schwieriges Kriterium

                                Meine Adapter und Widgets
                                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                Links im Profil

                                L 1 Reply Last reply
                                0
                                • OliverIOO OliverIO

                                  @looxer01

                                  Nenne die Seite bitte.
                                  Manueller Klick ist kein schwieriges Kriterium

                                  L Online
                                  L Online
                                  looxer01
                                  wrote on last edited by
                                  #43

                                  @oliverio
                                  hatte die Seite holzpellets.net im Blick. Allerdings wird dort immer nur ein Lieferant angezeigt.
                                  Die Auswahl nach dem günstigsten Lieferanten kann also nicht wirklich getroffen werden.
                                  Mit anderen Worten: Ich bin nicht fündig geworden :(

                                  L 1 Reply Last reply
                                  0
                                  • L looxer01

                                    @oliverio
                                    hatte die Seite holzpellets.net im Blick. Allerdings wird dort immer nur ein Lieferant angezeigt.
                                    Die Auswahl nach dem günstigsten Lieferanten kann also nicht wirklich getroffen werden.
                                    Mit anderen Worten: Ich bin nicht fündig geworden :(

                                    L Online
                                    L Online
                                    looxer01
                                    wrote on last edited by
                                    #44

                                    ich habe jetzt nochmal auf die Seite Heizpellets24 geguckt.
                                    Da wird ja auf der ersten Seite schon ein Preis angezeigt.
                                    Aber auch der scheint dynamisch ermittelt zu werden, nämlich von dem was in den Feldern PLZ und KG enthalten ist.
                                    Man sieht auch im Seitenaufbau, dass der Preis sich während des Aufbaus der Seite ändert.
                                    Das scheint also auch nicht zu gehen.

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    Support us

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

                                    744

                                    Online

                                    32.5k

                                    Users

                                    81.6k

                                    Topics

                                    1.3m

                                    Posts
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Home
                                    • Recent
                                    • Tags
                                    • Unread 0
                                    • Categories
                                    • Unreplied
                                    • Popular
                                    • GitHub
                                    • Docu
                                    • Hilfe