Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Preis von Propellets.at mittels Parser auslesen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Preis von Propellets.at mittels Parser auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mic905 @OliverIO last edited by

      @oliverio Perfekt. Vielen Vielen Dank für die schnelle Hilfe.
      Ich denke ich bin nicht der einzige der das gerne nutzt.
      Wenn ich jetzt mal angenommen die Preise nicht für 6000 kg sondern nur für 3000 kg haben möchte...
      Muss ich dann nur die beiden Zeilen ("https://www.heizpellets24.de/pelletpreis-direkt/96465/6000/1/dt5") ändern oder ist das dann mehr Aufwand ?
      Vielen Dank
      Michael

      OliverIO 1 Reply Last reply Reply Quote 0
      • W
        wusa @Mic905 last edited by

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

        Mich Wundert es ja wirklich das sich da noch niemand an die Entwicklung eines Adapters zu dem Thema gemacht hat.

        Das wundert mich allerdings auch.

        Nutze auch oft die Seite um zu sehen wie sich die Pelletspreise verhalten.

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

          @mic905
          postleitzahl und KG kommen in der Abfrage insgesamt 3mal vor
          In der body-Zeile befinden sich die ganzen Formular informationen.
          da ist das auch mit dabei. Insgesamt sind es aber sehr viel Informationen und teilweise auch verschlüsselt
          Referer ist wahrscheinlich gar nicht wichtig ob das enthalten ist.
          Hängt aber davon ab, was der Server alles prüft, um die Abfrage eines Browsers zu einer Abfrage eines Skriptes zu unterscheiden (so wie wir das machen.)
          Ich hab einfach den Request im browser ausgeführt und die Anfrage aus den developer tools herauskopiert (daher auch der fetch-befehl)

          L 1 Reply Last reply Reply Quote 0
          • L
            looxer01 @OliverIO last edited by 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
            
            
            G P 2 Replies Last reply Reply Quote 0
            • G
              GeorgL76 @looxer01 last edited by GeorgL76

              @looxer01

              Hallo,

              hört sich alles richtig gut an, leider bin ich blutiger Anfänger 🙂
              Gibt es für die Auswertung schon ne Anleitung vom Parser bis hin zu den Scrips wie die Einstellung wo zu machen sind und evtl welche Datenpunkte manuell gesetzt werden müssen.

              Danke und Grüße,
              Georg

              L 1 Reply Last reply Reply Quote 0
              • L
                looxer01 @GeorgL76 last edited by looxer01

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

                leider bin ich blutiger Anfänger
                Gibt es für die Auswertung schon ne Anleitung

                Hi,
                also, eigentlich ist es sehr einfach. Allerdings geringe Kenntnisse sind schon vorausgesetzt.
                Schritt für Schritt

                1. Trage die notwendigen zusätzlichen NPM Module in den Javascript Adapter ein.
                  findest du bei den Instanzen und Javascript - Einstellungen
                  pellets1.JPG

                2. kopiere das Javascript programm von meinem Beitrag aus diesem Thread vom 10.12.2022 15:12 in die Zwischenablage

                3. Erstelle ein neues Javascript im Menu Punkte "Scripte" - neues Script erstellen und wähle Javascript

                4. Kopiere jetzt aus der Zwischenablage in den Editor

                5. Passe im Bereich "Einstellungen" des gerade kopierten scripts folgende Einstellungen an:

                  • die Datenpunkte - optional - ansonsten legt das script die Datenpunkte so wie angegeben an
                  • const Abfragemenge = "6000"; - Angabe in kg für die Preisabfrage
                  • const AbfragePLZ = "42349"; - Deine PLZ für die Preisberechnung
                  • const Abfrageplan = '0 */2 * * *' ; // Cron - alle 2 Stunden . sollte nicht zu häufig sein. 2 Stunden sollte reichen
                6. Speicherm und Script aktivieren

                Jetzt werden die Datenpunkte angelegt. die DP werden aber nur alle 2 Stunden zur vollen Stunde gefüllt. Da musst du dann noch solange warten.

                Die Datenpunkte müssen dann natürlich noch in deine Visu eingebaut werden.

                Ich hoffe, dass das hilft.

                vG Looxer

                G 1 Reply Last reply Reply Quote 1
                • G
                  GeorgL76 @looxer01 last edited by 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 1 Reply Last reply Reply Quote 0
                  • L
                    looxer01 @GeorgL76 last edited by 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 1 Reply Last reply Reply Quote 0
                    • G
                      GeorgL76 @looxer01 last edited by 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 1 Reply Last reply Reply Quote 0
                      • L
                        looxer01 @GeorgL76 last edited by

                        @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 Reply Quote 0
                        • Andreas Haselwanter
                          Andreas Haselwanter last edited by 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

                          OliverIO 1 Reply Last reply Reply Quote 0
                          • OliverIO
                            OliverIO @Andreas Haselwanter last edited by

                            @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 Haselwanter 1 Reply Last reply Reply Quote 0
                            • Andreas Haselwanter
                              Andreas Haselwanter @OliverIO last edited by

                              @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.

                              OliverIO 1 Reply Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @Andreas Haselwanter last edited by OliverIO

                                @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.

                                1 Reply Last reply Reply Quote 0
                                • P
                                  pepe12ooo @looxer01 last edited by

                                  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
                                   
                                  
                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @pepe12ooo last edited by

                                    @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 1 Reply Last reply Reply Quote 0
                                    • L
                                      looxer01 @Homoran last edited by

                                      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

                                      OliverIO 1 Reply Last reply Reply Quote 0
                                      • OliverIO
                                        OliverIO @looxer01 last edited by 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 1 Reply Last reply Reply Quote 0
                                        • L
                                          looxer01 @OliverIO last edited by 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

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

                                            @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"
                                            });
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

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

                                            904
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

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