Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. [gelöst] Funktion gibt kein result aus und JS erweitern

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    371

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    327

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    946

[gelöst] Funktion gibt kein result aus und JS erweitern

Geplant Angeheftet Gesperrt Verschoben Blockly
32 Beiträge 3 Kommentatoren 1.1k Aufrufe 2 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • David G.D David G.

    @marc-berg

    Also die Zeile

          const result = JSON.stringify(alleErgebnisse, null, 2);
    

    zu

          result = JSON.stringify(alleErgebnisse, null, 2);
    

    abändern?

    Marc BergM Online
    Marc BergM Online
    Marc Berg
    Most Active
    schrieb am zuletzt editiert von
    #8

    @david-g

    Das wäre jetzt mein Quick Hack, wenn es sicher auch schönere Lösungen gibt.

    NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

    Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

    Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

    David G.D 1 Antwort Letzte Antwort
    0
    • Marc BergM Marc Berg

      @david-g

      Das wäre jetzt mein Quick Hack, wenn es sicher auch schönere Lösungen gibt.

      David G.D Online
      David G.D Online
      David G.
      schrieb am zuletzt editiert von David G.
      #9

      @marc-berg

      Macht leider keinen unterschied.....

      Auch bekommt Mr. GPT nicht die weitere Infos ausgelesen die ich gerne noch hätte.
      Ich würde gerne neben dem Namen und dem Bild noch das Geburts- und Sterbedatum auslesen.

      Dieser Beriech wiederholt sich mehrmals auf den ausgelesenen Seiten mit den Infos.

      <div class="col-12 d-flex align-items-stretch" >
      
      
      
      <div class="c-blockitem text-center c-blockitem-noborder c-blockitem-nobg c-blockitem-noshadow c-blockitem-heading-center" id="karin-pilch">
          
          <div class="c-blockitem-heading"><h2 class="c-blockitem-title"><a href="https://www.57trauer.de/traueranzeige/karin-pilch" class="" title="Anzeige Karin Pilch geb. Becker"  >Anzeige Karin Pilch geb. Becker</a></h2><div  class="c-blockitem-subtitle">* 10.03.1943 - † 03.09.2023</div></div>
      
      
          <div class="mt-3 row">
                          <div class="col-12">
                                 <a href="https://www.57trauer.de/traueranzeige/karin-pilch" class="" title="Traueranzeige von Karin Pilch von Siegener Zeitung" >
                                      <img src="/MEDIASERVER/content/LH186/obi_new/2023_9/karin-pilch-traueranzeige-3b4ca367-d074-4e50-bd49-7924ec55c1eb.jpg" loading="lazy" class="img-fluid  mb-1 h-auto" title="Traueranzeige von Karin Pilch von Siegener Zeitung" alt="Traueranzeige von Karin Pilch von Siegener Zeitung"  />
                                  </a>   
                          </div>
                          <div class="col-12 mt-0 pt-0 mb-3">
                              <span class="text-muted"><i class="c-icon c-icon-calendar"></i> veröffentlicht am <strong>06.09.2023</strong> in <strong>Siegener Zeitung</strong></span>
                          </div> 
          </div>
      

      EDIT:
      Evtl hat @OliverIO eine Idee um an die Daten zu kommen. Gerne als Sting mit dem * und +.
      Schreibe das json jetzt einfach in einen DP. So hat sich das mit dem result erledigt.

      Zeigt eure Lovelace-Visualisierung klick
      (Auch ideal um sich Anregungen zu holen)

      Meine Tabellen für eure Visualisierung klick

      OliverIOO 1 Antwort Letzte Antwort
      0
      • David G.D David G.

        @marc-berg

        Macht leider keinen unterschied.....

        Auch bekommt Mr. GPT nicht die weitere Infos ausgelesen die ich gerne noch hätte.
        Ich würde gerne neben dem Namen und dem Bild noch das Geburts- und Sterbedatum auslesen.

        Dieser Beriech wiederholt sich mehrmals auf den ausgelesenen Seiten mit den Infos.

        <div class="col-12 d-flex align-items-stretch" >
        
        
        
        <div class="c-blockitem text-center c-blockitem-noborder c-blockitem-nobg c-blockitem-noshadow c-blockitem-heading-center" id="karin-pilch">
            
            <div class="c-blockitem-heading"><h2 class="c-blockitem-title"><a href="https://www.57trauer.de/traueranzeige/karin-pilch" class="" title="Anzeige Karin Pilch geb. Becker"  >Anzeige Karin Pilch geb. Becker</a></h2><div  class="c-blockitem-subtitle">* 10.03.1943 - † 03.09.2023</div></div>
        
        
            <div class="mt-3 row">
                            <div class="col-12">
                                   <a href="https://www.57trauer.de/traueranzeige/karin-pilch" class="" title="Traueranzeige von Karin Pilch von Siegener Zeitung" >
                                        <img src="/MEDIASERVER/content/LH186/obi_new/2023_9/karin-pilch-traueranzeige-3b4ca367-d074-4e50-bd49-7924ec55c1eb.jpg" loading="lazy" class="img-fluid  mb-1 h-auto" title="Traueranzeige von Karin Pilch von Siegener Zeitung" alt="Traueranzeige von Karin Pilch von Siegener Zeitung"  />
                                    </a>   
                            </div>
                            <div class="col-12 mt-0 pt-0 mb-3">
                                <span class="text-muted"><i class="c-icon c-icon-calendar"></i> veröffentlicht am <strong>06.09.2023</strong> in <strong>Siegener Zeitung</strong></span>
                            </div> 
            </div>
        

        EDIT:
        Evtl hat @OliverIO eine Idee um an die Daten zu kommen. Gerne als Sting mit dem * und +.
        Schreibe das json jetzt einfach in einen DP. So hat sich das mit dem result erledigt.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #10

        @david-g
        Mir cheerio warst schon mal gut unterwegs.
        Leider muss man da etwas tüfteln. Auch reicht der Ausschnitt einer Seite nicht aus. Das muss man auf Basis der ganzen Seite analysieren.

        Cheerio ist ja die Nachbildung von jquery für den Server (also nodejs)
        Grund Funktion basiert auf den css selektoren.
        https://wiki.selfhtml.org/wiki/CSS/Selektoren
        Darüber kann man mit relativ kurzen Anweisungen irgend ein Element in einer html Seite adressieren und dann auch den Wert auslesen.

        Bin allerdings gerade im Urlaub. Kann erst nächste Woche wieder schauen.
        Ich benötige die url bzw. Einmal den vollständigen Quelltext
        Und die Auflistung welche Tele du genau haben willst

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

        David G.D 1 Antwort Letzte Antwort
        0
        • OliverIOO OliverIO

          @david-g
          Mir cheerio warst schon mal gut unterwegs.
          Leider muss man da etwas tüfteln. Auch reicht der Ausschnitt einer Seite nicht aus. Das muss man auf Basis der ganzen Seite analysieren.

          Cheerio ist ja die Nachbildung von jquery für den Server (also nodejs)
          Grund Funktion basiert auf den css selektoren.
          https://wiki.selfhtml.org/wiki/CSS/Selektoren
          Darüber kann man mit relativ kurzen Anweisungen irgend ein Element in einer html Seite adressieren und dann auch den Wert auslesen.

          Bin allerdings gerade im Urlaub. Kann erst nächste Woche wieder schauen.
          Ich benötige die url bzw. Einmal den vollständigen Quelltext
          Und die Auflistung welche Tele du genau haben willst

          David G.D Online
          David G.D Online
          David G.
          schrieb am zuletzt editiert von David G.
          #11

          @oliverio

          Cool,

          danke.

          Dann mach jetzt erstmal schön Urlaub.
          Und dann erstmal ganz gemach in den Alltag kommen ^^.


          Die URL ist
          https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-1

          Was das aktuelle Skript macht:

          • Den Link zum Bild (Traueranzeige) auslesen und den Fehlenden Teil vor den Pfad setzen.
          • Den title="Traueranzeige von Gertrud Cimander von Siegener Zeitung" auslesen und nur den Text zwischen den beiden "von" nehmen.
          • Am Seitenende die Gesamtseiten mit Ergebnissen erfassen und für die Folgeseiten auch die Daten abrufen (idr um die 30 Seiten).
          • Das alles in eine JSON schreiben

          Was mir fehlt: Die Geburts- und Todesdaten auslesen. * 21.07.1933 - † 04.09.2023. Gerne auch so am Stück als String

          Als Ausschnitt sieht eine Todesanzeige so aus:

          <div class="col-12 d-flex align-items-stretch" >
          
          
          
          <div class="c-blockitem text-center c-blockitem-noborder c-blockitem-nobg c-blockitem-noshadow c-blockitem-heading-center" id="gertrud-cimander">
              
              <div class="c-blockitem-heading"><h2 class="c-blockitem-title"><a href="https://www.57trauer.de/traueranzeige/gertrud-cimander" class="" title="Anzeige Gertrud Cimander geb. Weber"  >Anzeige Gertrud Cimander geb. Weber</a></h2><div  class="c-blockitem-subtitle">* 21.07.1933 - † 04.09.2023</div></div>
          
          
              <div class="mt-3 row">
                              <div class="col-12">
                                     <a href="https://www.57trauer.de/traueranzeige/gertrud-cimander" class="" title="Traueranzeige von Gertrud Cimander von Siegener Zeitung" >
                                          <img src="/MEDIASERVER/content/LH186/obi_new/2023_9/gertrud-cimander-traueranzeige-7f9a6160-32e6-4bee-bdec-faf7b6e08f73.jpg" loading="lazy" class="img-fluid  mb-1 h-auto" title="Traueranzeige von Gertrud Cimander von Siegener Zeitung" alt="Traueranzeige von Gertrud Cimander von Siegener Zeitung"  />
                                      </a>   
                              </div>
                              <div class="col-12 mt-0 pt-0 mb-3">
                                  <span class="text-muted"><i class="c-icon c-icon-calendar"></i> veröffentlicht am <strong>06.09.2023</strong> in <strong>Siegener Zeitung</strong></span>
                              </div> 
              </div>
          

          Das ist der ganze Quellcode:
          code.txt

          Und hier mein aktuelles Script:

          const axios = require('axios');
          const cheerio = require('cheerio');
          
          // Die URL-Basis der Webseite
          const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-';
          
          // Eine Funktion, um die Anzahl der verfügbaren Seiten zu ermitteln
          async function ermittleAnzahlDerSeiten() {
            try {
              // Die Webseite mit Axios abrufen
              const response = await axios.get(baseUrl + '1');
          
              // Den HTML-Inhalt mit Cheerio analysieren
              const $ = cheerio.load(response.data);
          
              // Das Element mit der Anzahl der Seiten finden und die Anzahl extrahieren
              const anzahlDerSeiten = parseInt($('.pagination li').last().prev().text());
          
              return anzahlDerSeiten;
            } catch (error) {
              console.error('Fehler beim Abrufen der Anzahl der Seiten:', error);
              return 0;
            }
          }
          
          // Eine Funktion, um die Informationen von einer bestimmten Seite zu extrahieren
          async function extrahiereInformationenVonSeite(seite) {
            try {
              // Die Webseite mit Axios abrufen
              const response = await axios.get(baseUrl + seite);
          
              // Den HTML-Inhalt mit Cheerio analysieren
              const $ = cheerio.load(response.data);
          
              // Eine leere Liste für die Ergebnisse
              const ergebnisse = [];
          
              // Alle div-Elemente mit der Klasse "mt-3 row" finden und durch sie iterieren
              $('div.mt-3.row').each((index, div) => {
                const aTag = $(div).find('a');
                if (aTag.length > 0) {
                  const titleFull = aTag.attr('title');
                  // Den relevanten Text zwischen "Traueranzeige von" und "von Siegener Zeitung" extrahieren
                  const match = titleFull.match(/Traueranzeige von (.*?) von Siegener Zeitung/);
                  if (match) {
                    const relevantText = match[1];
                    // Den Link zum Bild vor "https://www.57trauer.de" setzen
                    const imgSrc = 'https://www.57trauer.de' + aTag.find('img').attr('src');
                    // Die Informationen in ein Objekt speichern und zur Liste hinzufügen
                    const ergebnis = { title: relevantText, jpg: imgSrc };
                    ergebnisse.push(ergebnis);
                  }
                }
              });
          
              return ergebnisse;
            } catch (error) {
              console.error('Fehler beim Extrahieren von Informationen von Seite ' + seite + ':', error);
              return [];
            }
          }
          // Die Anzahl der verfügbaren Seiten ermitteln
          ermittleAnzahlDerSeiten()
            .then(async (anzahlDerSeiten) => {
              if (anzahlDerSeiten > 0) {
                // Eine leere Liste für alle Ergebnisse
                const alleErgebnisse = [];
          
                // Durch alle Seiten iterieren und die Informationen extrahieren
                for (let seite = 1; seite <= anzahlDerSeiten; seite++) {
                  const ergebnisseVonSeite = await extrahiereInformationenVonSeite(seite);
                  alleErgebnisse.push(...ergebnisseVonSeite);
                }
          
                // Die gesamten Ergebnisse in die Variable "result" speichern
          
                result = JSON.stringify(alleErgebnisse, null, 2);
          
                // Die Informationen aus der Variable "result" über die Konsole ausgeben
                console.log(result);
                setState("0_userdata.0.trauer"/*trauer*/, result, true);
          
              } else {
                console.log('Keine Seiten gefunden.');
              }
            })
            .catch((error) => {
              console.error('Fehler:', error);
            });
          return result
          

          Zeigt eure Lovelace-Visualisierung klick
          (Auch ideal um sich Anregungen zu holen)

          Meine Tabellen für eure Visualisierung klick

          OliverIOO 1 Antwort Letzte Antwort
          0
          • David G.D David G.

            @oliverio

            Cool,

            danke.

            Dann mach jetzt erstmal schön Urlaub.
            Und dann erstmal ganz gemach in den Alltag kommen ^^.


            Die URL ist
            https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-1

            Was das aktuelle Skript macht:

            • Den Link zum Bild (Traueranzeige) auslesen und den Fehlenden Teil vor den Pfad setzen.
            • Den title="Traueranzeige von Gertrud Cimander von Siegener Zeitung" auslesen und nur den Text zwischen den beiden "von" nehmen.
            • Am Seitenende die Gesamtseiten mit Ergebnissen erfassen und für die Folgeseiten auch die Daten abrufen (idr um die 30 Seiten).
            • Das alles in eine JSON schreiben

            Was mir fehlt: Die Geburts- und Todesdaten auslesen. * 21.07.1933 - † 04.09.2023. Gerne auch so am Stück als String

            Als Ausschnitt sieht eine Todesanzeige so aus:

            <div class="col-12 d-flex align-items-stretch" >
            
            
            
            <div class="c-blockitem text-center c-blockitem-noborder c-blockitem-nobg c-blockitem-noshadow c-blockitem-heading-center" id="gertrud-cimander">
                
                <div class="c-blockitem-heading"><h2 class="c-blockitem-title"><a href="https://www.57trauer.de/traueranzeige/gertrud-cimander" class="" title="Anzeige Gertrud Cimander geb. Weber"  >Anzeige Gertrud Cimander geb. Weber</a></h2><div  class="c-blockitem-subtitle">* 21.07.1933 - † 04.09.2023</div></div>
            
            
                <div class="mt-3 row">
                                <div class="col-12">
                                       <a href="https://www.57trauer.de/traueranzeige/gertrud-cimander" class="" title="Traueranzeige von Gertrud Cimander von Siegener Zeitung" >
                                            <img src="/MEDIASERVER/content/LH186/obi_new/2023_9/gertrud-cimander-traueranzeige-7f9a6160-32e6-4bee-bdec-faf7b6e08f73.jpg" loading="lazy" class="img-fluid  mb-1 h-auto" title="Traueranzeige von Gertrud Cimander von Siegener Zeitung" alt="Traueranzeige von Gertrud Cimander von Siegener Zeitung"  />
                                        </a>   
                                </div>
                                <div class="col-12 mt-0 pt-0 mb-3">
                                    <span class="text-muted"><i class="c-icon c-icon-calendar"></i> veröffentlicht am <strong>06.09.2023</strong> in <strong>Siegener Zeitung</strong></span>
                                </div> 
                </div>
            

            Das ist der ganze Quellcode:
            code.txt

            Und hier mein aktuelles Script:

            const axios = require('axios');
            const cheerio = require('cheerio');
            
            // Die URL-Basis der Webseite
            const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-';
            
            // Eine Funktion, um die Anzahl der verfügbaren Seiten zu ermitteln
            async function ermittleAnzahlDerSeiten() {
              try {
                // Die Webseite mit Axios abrufen
                const response = await axios.get(baseUrl + '1');
            
                // Den HTML-Inhalt mit Cheerio analysieren
                const $ = cheerio.load(response.data);
            
                // Das Element mit der Anzahl der Seiten finden und die Anzahl extrahieren
                const anzahlDerSeiten = parseInt($('.pagination li').last().prev().text());
            
                return anzahlDerSeiten;
              } catch (error) {
                console.error('Fehler beim Abrufen der Anzahl der Seiten:', error);
                return 0;
              }
            }
            
            // Eine Funktion, um die Informationen von einer bestimmten Seite zu extrahieren
            async function extrahiereInformationenVonSeite(seite) {
              try {
                // Die Webseite mit Axios abrufen
                const response = await axios.get(baseUrl + seite);
            
                // Den HTML-Inhalt mit Cheerio analysieren
                const $ = cheerio.load(response.data);
            
                // Eine leere Liste für die Ergebnisse
                const ergebnisse = [];
            
                // Alle div-Elemente mit der Klasse "mt-3 row" finden und durch sie iterieren
                $('div.mt-3.row').each((index, div) => {
                  const aTag = $(div).find('a');
                  if (aTag.length > 0) {
                    const titleFull = aTag.attr('title');
                    // Den relevanten Text zwischen "Traueranzeige von" und "von Siegener Zeitung" extrahieren
                    const match = titleFull.match(/Traueranzeige von (.*?) von Siegener Zeitung/);
                    if (match) {
                      const relevantText = match[1];
                      // Den Link zum Bild vor "https://www.57trauer.de" setzen
                      const imgSrc = 'https://www.57trauer.de' + aTag.find('img').attr('src');
                      // Die Informationen in ein Objekt speichern und zur Liste hinzufügen
                      const ergebnis = { title: relevantText, jpg: imgSrc };
                      ergebnisse.push(ergebnis);
                    }
                  }
                });
            
                return ergebnisse;
              } catch (error) {
                console.error('Fehler beim Extrahieren von Informationen von Seite ' + seite + ':', error);
                return [];
              }
            }
            // Die Anzahl der verfügbaren Seiten ermitteln
            ermittleAnzahlDerSeiten()
              .then(async (anzahlDerSeiten) => {
                if (anzahlDerSeiten > 0) {
                  // Eine leere Liste für alle Ergebnisse
                  const alleErgebnisse = [];
            
                  // Durch alle Seiten iterieren und die Informationen extrahieren
                  for (let seite = 1; seite <= anzahlDerSeiten; seite++) {
                    const ergebnisseVonSeite = await extrahiereInformationenVonSeite(seite);
                    alleErgebnisse.push(...ergebnisseVonSeite);
                  }
            
                  // Die gesamten Ergebnisse in die Variable "result" speichern
            
                  result = JSON.stringify(alleErgebnisse, null, 2);
            
                  // Die Informationen aus der Variable "result" über die Konsole ausgeben
                  console.log(result);
                  setState("0_userdata.0.trauer"/*trauer*/, result, true);
            
                } else {
                  console.log('Keine Seiten gefunden.');
                }
              })
              .catch((error) => {
                console.error('Fehler:', error);
              });
            return result
            
            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #12

            @david-g sagte in Funktion gibt kein result aus und JS Funktion erweitern:

            ah etwas pikante informationen

            du warst schon auf einem guten weg.
            ich habe die einzelnen aufgaben in einzelne funktionen gepackt
            und noch einen useragent-header hinzugefügt, so das der abruf auch so aussieht wie von einem browser
            darüber hinaus habe ich noch geburts und sterbedatum mit in die infos mit reingepackt.
            die bilder habe ich zu einem array gemacht, da es manchmal auch mehrere anzeigen zu einem namen gibt
            den namen habe ich nicht aus dem bild genommen, da es nicht immer ein bild gibt

            const axios = require('axios');
            const cheerio = require('cheerio');
             
            const domain = 'https://www.57trauer.de';   // domain für die bilder
            const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
            const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
            let info=[]; //array in dem  alle infos gesammelt werden
            
            async function main() {
            
                let p1 = await readPage(1); //lesen der ersten seite
                let px = await countPages(p1); // ermitteln wieviele seiten
                let p=p1;
                for (var i=2;i<=px;i++) {
                    getInformations(p,info); //informationen je seite einsammeln
                    p=await readPage(i); //nächste seite lesen
                    console.log("page "+i); 
                }
            console.log(info);  //ausgabe aller ergebnisse
            }
            
            //alle informationen einer seite einsammeln
            async function getInformations(data,info) {
                const $ = cheerio.load(data);
                //alle anzeigen einer seite ermitteln und abklappern
                $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                    let obj=[]; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                    obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                    obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                    obj.birth = getBirth(el)||""; //geburtsdatum
                    obj.death = getDeath(el)||""; //sterbedatum
                    info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                });
            }
            //geburtsdatum ermitteln
            function getBirth(data) {
                const $ = cheerio.load(data);
                let match = $(".c-blockitem-subtitle").html().match(/\* ([\d\.]+) - † ([\d\.]+)/);
                if (match) {
                    return match[1];
                } else {
                    return "";
                }
            }
            //sterbedatum ermitteln
            function getDeath(data) {
                const $ = cheerio.load(data);
                let match = $(".c-blockitem-subtitle").html().match(/\* ([\d\.]+) - † ([\d\.]+)/);
                if (match) {
                    return match[2];
                } else {
                    return "";
                }
            }
            //alle anzeigenbilder ermitteln und als array zurückgeben
            function getImages(data) {
                const $ = cheerio.load(data);
                return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
            }
            //den namen ermitteln und zurückgeben
            function getTitle(data) {
                const $ = cheerio.load(data);
                let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                if (title) {
                    return title[1];
                } else {
                    return "";
                }
            
            }
            //die anzahl aller seiten ermitteln
            async function countPages(data) {
                const $ = cheerio.load(data);
                return parseInt($(".pagination:first .page-item a").eq(-2).html());
            }
            //eine seite mit der angegebenen seitennummer abrufen
            async function readPage(page) {
              try {
                const response = await axios.get(baseUrl + page,{
                    headers: {
                        userAgent: userAgent
                    }
                });
             
                return response.data;
              } catch (error) {
                console.error('Fehler Abruf Seite: '+page, error);
                return 0;
              }
            
            }
            
            main();
            
            
            

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

            David G.D 2 Antworten Letzte Antwort
            1
            • OliverIOO OliverIO

              @david-g sagte in Funktion gibt kein result aus und JS Funktion erweitern:

              ah etwas pikante informationen

              du warst schon auf einem guten weg.
              ich habe die einzelnen aufgaben in einzelne funktionen gepackt
              und noch einen useragent-header hinzugefügt, so das der abruf auch so aussieht wie von einem browser
              darüber hinaus habe ich noch geburts und sterbedatum mit in die infos mit reingepackt.
              die bilder habe ich zu einem array gemacht, da es manchmal auch mehrere anzeigen zu einem namen gibt
              den namen habe ich nicht aus dem bild genommen, da es nicht immer ein bild gibt

              const axios = require('axios');
              const cheerio = require('cheerio');
               
              const domain = 'https://www.57trauer.de';   // domain für die bilder
              const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
              const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
              let info=[]; //array in dem  alle infos gesammelt werden
              
              async function main() {
              
                  let p1 = await readPage(1); //lesen der ersten seite
                  let px = await countPages(p1); // ermitteln wieviele seiten
                  let p=p1;
                  for (var i=2;i<=px;i++) {
                      getInformations(p,info); //informationen je seite einsammeln
                      p=await readPage(i); //nächste seite lesen
                      console.log("page "+i); 
                  }
              console.log(info);  //ausgabe aller ergebnisse
              }
              
              //alle informationen einer seite einsammeln
              async function getInformations(data,info) {
                  const $ = cheerio.load(data);
                  //alle anzeigen einer seite ermitteln und abklappern
                  $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                      let obj=[]; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                      obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                      obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                      obj.birth = getBirth(el)||""; //geburtsdatum
                      obj.death = getDeath(el)||""; //sterbedatum
                      info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                  });
              }
              //geburtsdatum ermitteln
              function getBirth(data) {
                  const $ = cheerio.load(data);
                  let match = $(".c-blockitem-subtitle").html().match(/\* ([\d\.]+) - † ([\d\.]+)/);
                  if (match) {
                      return match[1];
                  } else {
                      return "";
                  }
              }
              //sterbedatum ermitteln
              function getDeath(data) {
                  const $ = cheerio.load(data);
                  let match = $(".c-blockitem-subtitle").html().match(/\* ([\d\.]+) - † ([\d\.]+)/);
                  if (match) {
                      return match[2];
                  } else {
                      return "";
                  }
              }
              //alle anzeigenbilder ermitteln und als array zurückgeben
              function getImages(data) {
                  const $ = cheerio.load(data);
                  return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
              }
              //den namen ermitteln und zurückgeben
              function getTitle(data) {
                  const $ = cheerio.load(data);
                  let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                  if (title) {
                      return title[1];
                  } else {
                      return "";
                  }
              
              }
              //die anzahl aller seiten ermitteln
              async function countPages(data) {
                  const $ = cheerio.load(data);
                  return parseInt($(".pagination:first .page-item a").eq(-2).html());
              }
              //eine seite mit der angegebenen seitennummer abrufen
              async function readPage(page) {
                try {
                  const response = await axios.get(baseUrl + page,{
                      headers: {
                          userAgent: userAgent
                      }
                  });
               
                  return response.data;
                } catch (error) {
                  console.error('Fehler Abruf Seite: '+page, error);
                  return 0;
                }
              
              }
              
              main();
              
              
              
              David G.D Online
              David G.D Online
              David G.
              schrieb am zuletzt editiert von
              #13

              @oliverio

              Danke, morgen Abend kann ich es bei mir testen.
              Den ganzen Tag auf Messe.

              Zeigt eure Lovelace-Visualisierung klick
              (Auch ideal um sich Anregungen zu holen)

              Meine Tabellen für eure Visualisierung klick

              1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @david-g sagte in Funktion gibt kein result aus und JS Funktion erweitern:

                ah etwas pikante informationen

                du warst schon auf einem guten weg.
                ich habe die einzelnen aufgaben in einzelne funktionen gepackt
                und noch einen useragent-header hinzugefügt, so das der abruf auch so aussieht wie von einem browser
                darüber hinaus habe ich noch geburts und sterbedatum mit in die infos mit reingepackt.
                die bilder habe ich zu einem array gemacht, da es manchmal auch mehrere anzeigen zu einem namen gibt
                den namen habe ich nicht aus dem bild genommen, da es nicht immer ein bild gibt

                const axios = require('axios');
                const cheerio = require('cheerio');
                 
                const domain = 'https://www.57trauer.de';   // domain für die bilder
                const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                let info=[]; //array in dem  alle infos gesammelt werden
                
                async function main() {
                
                    let p1 = await readPage(1); //lesen der ersten seite
                    let px = await countPages(p1); // ermitteln wieviele seiten
                    let p=p1;
                    for (var i=2;i<=px;i++) {
                        getInformations(p,info); //informationen je seite einsammeln
                        p=await readPage(i); //nächste seite lesen
                        console.log("page "+i); 
                    }
                console.log(info);  //ausgabe aller ergebnisse
                }
                
                //alle informationen einer seite einsammeln
                async function getInformations(data,info) {
                    const $ = cheerio.load(data);
                    //alle anzeigen einer seite ermitteln und abklappern
                    $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                        let obj=[]; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                        obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                        obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                        obj.birth = getBirth(el)||""; //geburtsdatum
                        obj.death = getDeath(el)||""; //sterbedatum
                        info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                    });
                }
                //geburtsdatum ermitteln
                function getBirth(data) {
                    const $ = cheerio.load(data);
                    let match = $(".c-blockitem-subtitle").html().match(/\* ([\d\.]+) - † ([\d\.]+)/);
                    if (match) {
                        return match[1];
                    } else {
                        return "";
                    }
                }
                //sterbedatum ermitteln
                function getDeath(data) {
                    const $ = cheerio.load(data);
                    let match = $(".c-blockitem-subtitle").html().match(/\* ([\d\.]+) - † ([\d\.]+)/);
                    if (match) {
                        return match[2];
                    } else {
                        return "";
                    }
                }
                //alle anzeigenbilder ermitteln und als array zurückgeben
                function getImages(data) {
                    const $ = cheerio.load(data);
                    return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                }
                //den namen ermitteln und zurückgeben
                function getTitle(data) {
                    const $ = cheerio.load(data);
                    let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                    if (title) {
                        return title[1];
                    } else {
                        return "";
                    }
                
                }
                //die anzahl aller seiten ermitteln
                async function countPages(data) {
                    const $ = cheerio.load(data);
                    return parseInt($(".pagination:first .page-item a").eq(-2).html());
                }
                //eine seite mit der angegebenen seitennummer abrufen
                async function readPage(page) {
                  try {
                    const response = await axios.get(baseUrl + page,{
                        headers: {
                            userAgent: userAgent
                        }
                    });
                 
                    return response.data;
                  } catch (error) {
                    console.error('Fehler Abruf Seite: '+page, error);
                    return 0;
                  }
                
                }
                
                main();
                
                
                
                David G.D Online
                David G.D Online
                David G.
                schrieb am zuletzt editiert von
                #14

                @oliverio

                Hab es jetzt mal in Blockly in einen Funktiobsbaustein gepackt.
                Im Log erhalte ich dann nur ein:

                07:33:26.892	info	javascript.0 (23527) script.js.Eigene_Scripte.Test: []
                

                Ist es möglich das JSON mit den Daten in einen DP zu schreiben oder in die Variable "result" (Die Variable darf aber wie ich weiter oben gelesen habe nicht definiert sein, damit mir der Blockly Block diese zurückgeben kann).

                Die JSON kann ich dann schön in Blockly weiterverarbeiten.
                47cdb9a5-5c45-4c49-873a-4e0127e20d98-image.png

                Zeigt eure Lovelace-Visualisierung klick
                (Auch ideal um sich Anregungen zu holen)

                Meine Tabellen für eure Visualisierung klick

                OliverIOO 1 Antwort Letzte Antwort
                0
                • David G.D David G.

                  @oliverio

                  Hab es jetzt mal in Blockly in einen Funktiobsbaustein gepackt.
                  Im Log erhalte ich dann nur ein:

                  07:33:26.892	info	javascript.0 (23527) script.js.Eigene_Scripte.Test: []
                  

                  Ist es möglich das JSON mit den Daten in einen DP zu schreiben oder in die Variable "result" (Die Variable darf aber wie ich weiter oben gelesen habe nicht definiert sein, damit mir der Blockly Block diese zurückgeben kann).

                  Die JSON kann ich dann schön in Blockly weiterverarbeiten.
                  47cdb9a5-5c45-4c49-873a-4e0127e20d98-image.png

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #15

                  @david-g
                  Mit blockly kenne ich mich nicht so aus.
                  Am besten du schreibst das in ein JavaScript script

                  In einen datenpunkt Schreiben kannst du es mit setState in Zeile 19
                  Dein blockly trigger dann am besten auf Änderung dieses datenpunktes

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

                  David G.D 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

                    @david-g
                    Mit blockly kenne ich mich nicht so aus.
                    Am besten du schreibst das in ein JavaScript script

                    In einen datenpunkt Schreiben kannst du es mit setState in Zeile 19
                    Dein blockly trigger dann am besten auf Änderung dieses datenpunktes

                    David G.D Online
                    David G.D Online
                    David G.
                    schrieb am zuletzt editiert von
                    #16

                    @oliverio

                    Wenn ich es in ein JS Skript einfüge bekomme ich auch kein Ergebnis:

                    07:23:34.119	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                    07:23:34.129	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    07:23:35.589	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                    

                    Zeigt eure Lovelace-Visualisierung klick
                    (Auch ideal um sich Anregungen zu holen)

                    Meine Tabellen für eure Visualisierung klick

                    OliverIOO 1 Antwort Letzte Antwort
                    0
                    • David G.D David G.

                      @oliverio

                      Wenn ich es in ein JS Skript einfüge bekomme ich auch kein Ergebnis:

                      07:23:34.119	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                      07:23:34.129	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                      07:23:35.589	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                      
                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von OliverIO
                      #17

                      @david-g

                      wenn du in das script gegangen bist und es laufen lassen hast, sind da keine Meldungen gekommen?

                      Leider können die Variationen in der Ausgabe relativ vielfältig sein. Wenn die nicht berücksichtigt werden, dann führt das zu fehlern, die behoben werden müssen.

                      Bei den aktuellen Anzeigen, waren welche ohne Geburtsdatum oder gar komplett ohne Daten dabei.
                      Das ist jetzt in der folgenden Version berücksichtigt.

                      Ausserdem hab ich noch einen Fehler korrigiert, bei dem sich der Lauf des Skriptes in vscode zu iobroker unterscheidet

                      const axios = require('axios');
                      const cheerio = require('cheerio');
                       
                      const domain = 'https://www.57trauer.de';   // domain für die bilder
                      const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                      const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                      let info=[]; //array in dem  alle infos gesammelt werden
                      
                      async function main() {
                      
                          let p1 = await readPage(1); //lesen der ersten seite
                          let px = await countPages(p1); // ermitteln wieviele seiten
                          console.log("Anzahl Seiten "+px)
                          let p=p1;
                          for (var i=2;i<=px;i++) {
                              getInformations(p,info); //informationen je seite einsammeln
                              p=await readPage(i); //nächste seite lesen
                          }
                      console.log(info);  //ausgabe aller ergebnisse
                      }
                      
                      //alle informationen einer seite einsammeln
                      async function getInformations(data,info) {
                          const $ = cheerio.load(data);
                          //alle anzeigen einer seite ermitteln und abklappern
                          $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                              let obj={}; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                              obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                              obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                              obj.birth = getBirth(el)||""; //geburtsdatum
                              obj.death = getDeath(el)||""; //sterbedatum
                              info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                          });
                      }
                      //geburtsdatum ermitteln
                      function getBirth(data) {
                          const $ = cheerio.load(data);
                          let html=$(".c-blockitem-subtitle").html();
                          if (!html) return "";
                          let match = html.match(/\* ([\d\.]+)/);
                          if (match) {
                              return match[1];
                          } else {
                              return "";
                          }
                      }
                      //sterbedatum ermitteln
                      function getDeath(data) {
                          const $ = cheerio.load(data);
                          let html=$(".c-blockitem-subtitle").html();
                          if (!html) return "";
                          let match = html.match(/ - † ([\d\.]+)/);
                          if (match) {
                              return match[1];
                          } else {
                              return "";
                          }
                      }
                      //alle anzeigenbilder ermitteln und als array zurückgeben
                      function getImages(data) {
                          const $ = cheerio.load(data);
                          return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                      }
                      //den namen ermitteln und zurückgeben
                      function getTitle(data) {
                          const $ = cheerio.load(data);
                          let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                          if (title) {
                              return title[1];
                          } else {
                              return "";
                          }
                      
                      }
                      //die anzahl aller seiten ermitteln
                      async function countPages(data) {
                          const $ = cheerio.load(data);
                          return parseInt($(".pagination:first .page-item a").eq(-2).html());
                      }
                      //eine seite mit der angegebenen seitennummer abrufen
                      async function readPage(page) {
                        try {
                          const response = await axios.get(baseUrl + page,{
                              headers: {
                                  userAgent: userAgent
                              }
                          });
                      console.log("page "+page); 
                      console.log("status "+response.status); 
                       
                          return response.data;
                        } catch (error) {
                          console.error('Fehler Abruf Seite: '+page, error);
                          return 0;
                        }
                      
                      }
                      
                      main();
                      
                      

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

                      David G.D 1 Antwort Letzte Antwort
                      0
                      • OliverIOO OliverIO

                        @david-g

                        wenn du in das script gegangen bist und es laufen lassen hast, sind da keine Meldungen gekommen?

                        Leider können die Variationen in der Ausgabe relativ vielfältig sein. Wenn die nicht berücksichtigt werden, dann führt das zu fehlern, die behoben werden müssen.

                        Bei den aktuellen Anzeigen, waren welche ohne Geburtsdatum oder gar komplett ohne Daten dabei.
                        Das ist jetzt in der folgenden Version berücksichtigt.

                        Ausserdem hab ich noch einen Fehler korrigiert, bei dem sich der Lauf des Skriptes in vscode zu iobroker unterscheidet

                        const axios = require('axios');
                        const cheerio = require('cheerio');
                         
                        const domain = 'https://www.57trauer.de';   // domain für die bilder
                        const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                        const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                        let info=[]; //array in dem  alle infos gesammelt werden
                        
                        async function main() {
                        
                            let p1 = await readPage(1); //lesen der ersten seite
                            let px = await countPages(p1); // ermitteln wieviele seiten
                            console.log("Anzahl Seiten "+px)
                            let p=p1;
                            for (var i=2;i<=px;i++) {
                                getInformations(p,info); //informationen je seite einsammeln
                                p=await readPage(i); //nächste seite lesen
                            }
                        console.log(info);  //ausgabe aller ergebnisse
                        }
                        
                        //alle informationen einer seite einsammeln
                        async function getInformations(data,info) {
                            const $ = cheerio.load(data);
                            //alle anzeigen einer seite ermitteln und abklappern
                            $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                                let obj={}; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                                obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                                obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                                obj.birth = getBirth(el)||""; //geburtsdatum
                                obj.death = getDeath(el)||""; //sterbedatum
                                info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                            });
                        }
                        //geburtsdatum ermitteln
                        function getBirth(data) {
                            const $ = cheerio.load(data);
                            let html=$(".c-blockitem-subtitle").html();
                            if (!html) return "";
                            let match = html.match(/\* ([\d\.]+)/);
                            if (match) {
                                return match[1];
                            } else {
                                return "";
                            }
                        }
                        //sterbedatum ermitteln
                        function getDeath(data) {
                            const $ = cheerio.load(data);
                            let html=$(".c-blockitem-subtitle").html();
                            if (!html) return "";
                            let match = html.match(/ - † ([\d\.]+)/);
                            if (match) {
                                return match[1];
                            } else {
                                return "";
                            }
                        }
                        //alle anzeigenbilder ermitteln und als array zurückgeben
                        function getImages(data) {
                            const $ = cheerio.load(data);
                            return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                        }
                        //den namen ermitteln und zurückgeben
                        function getTitle(data) {
                            const $ = cheerio.load(data);
                            let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                            if (title) {
                                return title[1];
                            } else {
                                return "";
                            }
                        
                        }
                        //die anzahl aller seiten ermitteln
                        async function countPages(data) {
                            const $ = cheerio.load(data);
                            return parseInt($(".pagination:first .page-item a").eq(-2).html());
                        }
                        //eine seite mit der angegebenen seitennummer abrufen
                        async function readPage(page) {
                          try {
                            const response = await axios.get(baseUrl + page,{
                                headers: {
                                    userAgent: userAgent
                                }
                            });
                        console.log("page "+page); 
                        console.log("status "+response.status); 
                         
                            return response.data;
                          } catch (error) {
                            console.error('Fehler Abruf Seite: '+page, error);
                            return 0;
                          }
                        
                        }
                        
                        main();
                        
                        
                        David G.D Online
                        David G.D Online
                        David G.
                        schrieb am zuletzt editiert von
                        #18

                        @oliverio

                        Das möchte auch nicht.
                        Am Stück in ein JS Skript kopiert und wie es ist abgespeichert.

                        Mehr kommt nicht:

                        14:32:14.564	info	javascript.0 (23527) Stop script script.js.Eigene_Scripte.trauertest
                        14:32:14.569	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                        14:32:14.579	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                        14:32:14.959	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                        

                        Zeigt eure Lovelace-Visualisierung klick
                        (Auch ideal um sich Anregungen zu holen)

                        Meine Tabellen für eure Visualisierung klick

                        OliverIOO 1 Antwort Letzte Antwort
                        0
                        • David G.D David G.

                          @oliverio

                          Das möchte auch nicht.
                          Am Stück in ein JS Skript kopiert und wie es ist abgespeichert.

                          Mehr kommt nicht:

                          14:32:14.564	info	javascript.0 (23527) Stop script script.js.Eigene_Scripte.trauertest
                          14:32:14.569	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                          14:32:14.579	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                          14:32:14.959	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                          
                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von OliverIO
                          #19

                          @david-g

                          das was du da kopierst, sieht immer so aus, als ob du es aus dem iobroker-log nimmst.
                          kannst du bitte mal hier schauen?
                          www_screencapture_com_2023-9-14_14_49.mp4

                          mit dem original skript wird dann am ende in dem log, das array ausgegeben.

                          ich habe oben mal noch eine debug-zeile eingefügt, bitte script nochmal aktualisieren

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

                          David G.D 1 Antwort Letzte Antwort
                          0
                          • OliverIOO OliverIO

                            @david-g

                            das was du da kopierst, sieht immer so aus, als ob du es aus dem iobroker-log nimmst.
                            kannst du bitte mal hier schauen?
                            www_screencapture_com_2023-9-14_14_49.mp4

                            mit dem original skript wird dann am ende in dem log, das array ausgegeben.

                            ich habe oben mal noch eine debug-zeile eingefügt, bitte script nochmal aktualisieren

                            David G.D Online
                            David G.D Online
                            David G.
                            schrieb am zuletzt editiert von
                            #20

                            @oliverio

                            So ist es bei mir:

                            drop.gif

                            Zeigt eure Lovelace-Visualisierung klick
                            (Auch ideal um sich Anregungen zu holen)

                            Meine Tabellen für eure Visualisierung klick

                            OliverIOO 1 Antwort Letzte Antwort
                            0
                            • David G.D David G.

                              @oliverio

                              So ist es bei mir:

                              drop.gif

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              schrieb am zuletzt editiert von OliverIO
                              #21

                              @david-g

                              ok,
                              und axios und cheerio ist auch in den Einstellungen des javascript adapters als zusätzliche module eingetragen?

                              es sieht so aus, wie wenn der seitenabruf von axios nicht geht, allerdings ohne eine fehlermeldung zu werfen.
                              ich habe hier nochmal ein paar mehr debug outputs reingemacht.

                              const axios = require('axios');
                              const cheerio = require('cheerio');
                               
                              const domain = 'https://www.57trauer.de';   // domain für die bilder
                              const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                              const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                              let info=[]; //array in dem  alle infos gesammelt werden
                              
                              async function main() {
                              console.log("F main "); 
                              
                                  let p1 = await readPage(1); //lesen der ersten seite
                              console.log(p1);  //ausgabe aller ergebnisse
                                  let px = await countPages(p1); // ermitteln wieviele seiten
                                  console.log("Anzahl Seiten "+px)
                                  let p=p1;
                                  for (var i=2;i<=px;i++) {
                                      getInformations(p,info); //informationen je seite einsammeln
                                      p=await readPage(i); //nächste seite lesen
                                  }
                              console.log(info);  //ausgabe aller ergebnisse
                              }
                              
                              //alle informationen einer seite einsammeln
                              async function getInformations(data,info) {
                                  const $ = cheerio.load(data);
                                  //alle anzeigen einer seite ermitteln und abklappern
                                  $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                                      let obj={}; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                                      obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                                      obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                                      obj.birth = getBirth(el)||""; //geburtsdatum
                                      obj.death = getDeath(el)||""; //sterbedatum
                                      info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                                  });
                              }
                              //geburtsdatum ermitteln
                              function getBirth(data) {
                                  const $ = cheerio.load(data);
                                  let html=$(".c-blockitem-subtitle").html();
                                  if (!html) return "";
                                  let match = html.match(/\* ([\d\.]+)/);
                                  if (match) {
                                      return match[1];
                                  } else {
                                      return "";
                                  }
                              }
                              //sterbedatum ermitteln
                              function getDeath(data) {
                                  const $ = cheerio.load(data);
                                  let html=$(".c-blockitem-subtitle").html();
                                  if (!html) return "";
                                  let match = html.match(/ - † ([\d\.]+)/);
                                  if (match) {
                                      return match[1];
                                  } else {
                                      return "";
                                  }
                              }
                              //alle anzeigenbilder ermitteln und als array zurückgeben
                              function getImages(data) {
                                  const $ = cheerio.load(data);
                                  return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                              }
                              //den namen ermitteln und zurückgeben
                              function getTitle(data) {
                                  const $ = cheerio.load(data);
                                  let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                                  if (title) {
                                      return title[1];
                                  } else {
                                      return "";
                                  }
                              
                              }
                              //die anzahl aller seiten ermitteln
                              async function countPages(data) {
                                  const $ = cheerio.load(data);
                                  return parseInt($(".pagination:first .page-item a").eq(-2).html());
                              }
                              //eine seite mit der angegebenen seitennummer abrufen
                              async function readPage(page) {
                              console.log("F readPage "); 
                                try {
                                  const response = await axios.get(baseUrl + page,{
                                      headers: {
                                          userAgent: userAgent
                                      }
                                  });
                              console.log("page "+page); 
                              console.log("status "+response.status); 
                               
                                  return response.data;
                                } catch (error) {
                                  console.error('Fehler Abruf Seite: '+page, error);
                                  return 0;
                                }
                              
                              }
                              
                              main();
                              
                              

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

                              David G.D 1 Antwort Letzte Antwort
                              0
                              • OliverIOO OliverIO

                                @david-g

                                ok,
                                und axios und cheerio ist auch in den Einstellungen des javascript adapters als zusätzliche module eingetragen?

                                es sieht so aus, wie wenn der seitenabruf von axios nicht geht, allerdings ohne eine fehlermeldung zu werfen.
                                ich habe hier nochmal ein paar mehr debug outputs reingemacht.

                                const axios = require('axios');
                                const cheerio = require('cheerio');
                                 
                                const domain = 'https://www.57trauer.de';   // domain für die bilder
                                const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                                const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                                let info=[]; //array in dem  alle infos gesammelt werden
                                
                                async function main() {
                                console.log("F main "); 
                                
                                    let p1 = await readPage(1); //lesen der ersten seite
                                console.log(p1);  //ausgabe aller ergebnisse
                                    let px = await countPages(p1); // ermitteln wieviele seiten
                                    console.log("Anzahl Seiten "+px)
                                    let p=p1;
                                    for (var i=2;i<=px;i++) {
                                        getInformations(p,info); //informationen je seite einsammeln
                                        p=await readPage(i); //nächste seite lesen
                                    }
                                console.log(info);  //ausgabe aller ergebnisse
                                }
                                
                                //alle informationen einer seite einsammeln
                                async function getInformations(data,info) {
                                    const $ = cheerio.load(data);
                                    //alle anzeigen einer seite ermitteln und abklappern
                                    $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                                        let obj={}; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                                        obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                                        obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                                        obj.birth = getBirth(el)||""; //geburtsdatum
                                        obj.death = getDeath(el)||""; //sterbedatum
                                        info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                                    });
                                }
                                //geburtsdatum ermitteln
                                function getBirth(data) {
                                    const $ = cheerio.load(data);
                                    let html=$(".c-blockitem-subtitle").html();
                                    if (!html) return "";
                                    let match = html.match(/\* ([\d\.]+)/);
                                    if (match) {
                                        return match[1];
                                    } else {
                                        return "";
                                    }
                                }
                                //sterbedatum ermitteln
                                function getDeath(data) {
                                    const $ = cheerio.load(data);
                                    let html=$(".c-blockitem-subtitle").html();
                                    if (!html) return "";
                                    let match = html.match(/ - † ([\d\.]+)/);
                                    if (match) {
                                        return match[1];
                                    } else {
                                        return "";
                                    }
                                }
                                //alle anzeigenbilder ermitteln und als array zurückgeben
                                function getImages(data) {
                                    const $ = cheerio.load(data);
                                    return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                                }
                                //den namen ermitteln und zurückgeben
                                function getTitle(data) {
                                    const $ = cheerio.load(data);
                                    let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                                    if (title) {
                                        return title[1];
                                    } else {
                                        return "";
                                    }
                                
                                }
                                //die anzahl aller seiten ermitteln
                                async function countPages(data) {
                                    const $ = cheerio.load(data);
                                    return parseInt($(".pagination:first .page-item a").eq(-2).html());
                                }
                                //eine seite mit der angegebenen seitennummer abrufen
                                async function readPage(page) {
                                console.log("F readPage "); 
                                  try {
                                    const response = await axios.get(baseUrl + page,{
                                        headers: {
                                            userAgent: userAgent
                                        }
                                    });
                                console.log("page "+page); 
                                console.log("status "+response.status); 
                                 
                                    return response.data;
                                  } catch (error) {
                                    console.error('Fehler Abruf Seite: '+page, error);
                                    return 0;
                                  }
                                
                                }
                                
                                main();
                                
                                
                                David G.D Online
                                David G.D Online
                                David G.
                                schrieb am zuletzt editiert von David G.
                                #22

                                @oliverio

                                Jetzt kommt im Log:

                                9:51:07.191	info	javascript.0 (23527) Stop script script.js.Eigene_Scripte.trauertest
                                09:51:07.243	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                                09:51:07.252	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F main
                                09:51:07.252	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F readPage
                                09:51:07.254	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                09:51:08.633	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: page 1
                                09:51:08.633	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: status 200
                                09:51:08.633	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: <!DOCTYPE html> <html lang="de" dir="ltr"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="Lesen Sie aktuelle Traueranzeigen und Todesanzeigen der letzten 14 Tage aus Ihrer Tageszeitung und gedenken Sie Ihren Verstorbenen." /> <link rel="canonical" href="https://www.57trauer.de/traueranzeigen-suche/letzte-14-tage/seite-1" /> <meta property="og:title" content="Traueranzeigen der letzten 14 Tage | 57trauer.de" /> <meta property="og:description" content="..............
                                09:51:08.680	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: Anzahl Seiten NaN
                                09:51:08.680	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                                

                                (Zeile 11 steht nicht im Log, macht das Forum irgendwie da hin ....)
                                axios und cheeriosind aktiv. "Mein" Skript lauft ja durch und braucht auch beides.

                                Zeigt eure Lovelace-Visualisierung klick
                                (Auch ideal um sich Anregungen zu holen)

                                Meine Tabellen für eure Visualisierung klick

                                OliverIOO 1 Antwort Letzte Antwort
                                0
                                • David G.D David G.

                                  @oliverio

                                  Jetzt kommt im Log:

                                  9:51:07.191	info	javascript.0 (23527) Stop script script.js.Eigene_Scripte.trauertest
                                  09:51:07.243	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                                  09:51:07.252	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F main
                                  09:51:07.252	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F readPage
                                  09:51:07.254	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                  09:51:08.633	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: page 1
                                  09:51:08.633	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: status 200
                                  09:51:08.633	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: <!DOCTYPE html> <html lang="de" dir="ltr"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="Lesen Sie aktuelle Traueranzeigen und Todesanzeigen der letzten 14 Tage aus Ihrer Tageszeitung und gedenken Sie Ihren Verstorbenen." /> <link rel="canonical" href="https://www.57trauer.de/traueranzeigen-suche/letzte-14-tage/seite-1" /> <meta property="og:title" content="Traueranzeigen der letzten 14 Tage | 57trauer.de" /> <meta property="og:description" content="..............
                                  09:51:08.680	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: Anzahl Seiten NaN
                                  09:51:08.680	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                                  

                                  (Zeile 11 steht nicht im Log, macht das Forum irgendwie da hin ....)
                                  axios und cheeriosind aktiv. "Mein" Skript lauft ja durch und braucht auch beides.

                                  OliverIOO Offline
                                  OliverIOO Offline
                                  OliverIO
                                  schrieb am zuletzt editiert von
                                  #23

                                  @david-g said in Funktion gibt kein result aus und JS Funktion erweitern:

                                  t: <!DOCTYPE html> <html lang="de" dir="ltr"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="Lesen Sie aktuelle Traueranzeigen und Todesanzeigen der letzten 14 Tage aus Ihrer Tageszeitung und gedenken Sie Ihren Verstorbenen." /> <link rel="canonical" href="https://www.57trauer.de/traueranzeigen-suche/letzte-14-tage/seite-1" /> <meta property="og:title" content="Traueranzeigen der letzten 14 Tage | 57trauer.

                                  ok,
                                  also seite 1 wird abgerufen,
                                  aber die Anzahl der Seiten kann nicht ermittelt werden.
                                  Bist du mit einem Account dort angemeldet?
                                  Irgendwie ist da die Seite anders aufgebaut, so das er die Zahl nicht findet
                                  Hab gerade bei mir nochmal probiert. Da klappt es jedes mal.
                                  Kannst du das ausgegebenen HTML, welches nur gekürzt angezeigt wird, hier posten? Dann kann ich schauen warum er die Zahl nicht findet.

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

                                  David G.D 1 Antwort Letzte Antwort
                                  0
                                  • OliverIOO OliverIO

                                    @david-g said in Funktion gibt kein result aus und JS Funktion erweitern:

                                    t: <!DOCTYPE html> <html lang="de" dir="ltr"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="Lesen Sie aktuelle Traueranzeigen und Todesanzeigen der letzten 14 Tage aus Ihrer Tageszeitung und gedenken Sie Ihren Verstorbenen." /> <link rel="canonical" href="https://www.57trauer.de/traueranzeigen-suche/letzte-14-tage/seite-1" /> <meta property="og:title" content="Traueranzeigen der letzten 14 Tage | 57trauer.

                                    ok,
                                    also seite 1 wird abgerufen,
                                    aber die Anzahl der Seiten kann nicht ermittelt werden.
                                    Bist du mit einem Account dort angemeldet?
                                    Irgendwie ist da die Seite anders aufgebaut, so das er die Zahl nicht findet
                                    Hab gerade bei mir nochmal probiert. Da klappt es jedes mal.
                                    Kannst du das ausgegebenen HTML, welches nur gekürzt angezeigt wird, hier posten? Dann kann ich schauen warum er die Zahl nicht findet.

                                    David G.D Online
                                    David G.D Online
                                    David G.
                                    schrieb am zuletzt editiert von
                                    #24

                                    @oliverio

                                    Anbei das ganze Log mit Quellcode:
                                    log.txt

                                    Hier der Bereich mit den Seitenzahlen:

                                                         <ul class="pagination">
                                    
                                                                                              <li class="page-item active"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-1">1</a></li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-2">2</a></li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-3">3</a></li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-4">4</a></li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-5">5</a></li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-6">6</a></li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-7">7</a></li>
                                                                     <li class="page-item">...</li>
                                                                     <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-24">24</a></li>
                                    
                                                                 <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-2">></a></li>
                                                         </ul>
                                    

                                    Zeigt eure Lovelace-Visualisierung klick
                                    (Auch ideal um sich Anregungen zu holen)

                                    Meine Tabellen für eure Visualisierung klick

                                    OliverIOO 1 Antwort Letzte Antwort
                                    0
                                    • David G.D David G.

                                      @oliverio

                                      Anbei das ganze Log mit Quellcode:
                                      log.txt

                                      Hier der Bereich mit den Seitenzahlen:

                                                           <ul class="pagination">
                                      
                                                                                                <li class="page-item active"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-1">1</a></li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-2">2</a></li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-3">3</a></li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-4">4</a></li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-5">5</a></li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-6">6</a></li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-7">7</a></li>
                                                                       <li class="page-item">...</li>
                                                                       <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-24">24</a></li>
                                      
                                                                   <li class="page-item"><a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-2">></a></li>
                                                           </ul>
                                      
                                      OliverIOO Offline
                                      OliverIOO Offline
                                      OliverIO
                                      schrieb am zuletzt editiert von
                                      #25

                                      @david-g

                                      leider sieht das normal aus.
                                      das folgende skript nochmal mit weiteren debug ausgaben
                                      Interessant wäre die Seite mit der folgenden Ausgabe oder so ähnlich:

                                      Element Anzahl Seiten:<a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-24">24</a>
                                      
                                      
                                      const axios = require('axios');
                                      const cheerio = require('cheerio');
                                       
                                      const domain = 'https://www.57trauer.de';   // domain für die bilder
                                      const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                                      const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                                      let info=[]; //array in dem  alle infos gesammelt werden
                                      
                                      async function main() {
                                      console.log("F main "); 
                                      
                                          let p1 = await readPage(1); //lesen der ersten seite
                                          let px = await countPages(p1); // ermitteln wieviele seiten
                                          console.log("Anzahl Seiten "+px)
                                          let p=p1;
                                          for (var i=2;i<=px;i++) {
                                              getInformations(p,info); //informationen je seite einsammeln
                                              p=await readPage(i); //nächste seite lesen
                                          }
                                      console.log(info);  //ausgabe aller ergebnisse
                                      }
                                      
                                      //alle informationen einer seite einsammeln
                                      async function getInformations(data,info) {
                                          const $ = cheerio.load(data);
                                          //alle anzeigen einer seite ermitteln und abklappern
                                          $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                                              let obj={}; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                                              obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                                              obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                                              obj.birth = getBirth(el)||""; //geburtsdatum
                                              obj.death = getDeath(el)||""; //sterbedatum
                                              info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                                          });
                                      }
                                      //geburtsdatum ermitteln
                                      function getBirth(data) {
                                          const $ = cheerio.load(data);
                                          let html=$(".c-blockitem-subtitle").html();
                                          if (!html) return "";
                                          let match = html.match(/\* ([\d\.]+)/);
                                          if (match) {
                                              return match[1];
                                          } else {
                                              return "";
                                          }
                                      }
                                      //sterbedatum ermitteln
                                      function getDeath(data) {
                                          const $ = cheerio.load(data);
                                          let html=$(".c-blockitem-subtitle").html();
                                          if (!html) return "";
                                          let match = html.match(/ - † ([\d\.]+)/);
                                          if (match) {
                                              return match[1];
                                          } else {
                                              return "";
                                          }
                                      }
                                      //alle anzeigenbilder ermitteln und als array zurückgeben
                                      function getImages(data) {
                                          const $ = cheerio.load(data);
                                          return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                                      }
                                      //den namen ermitteln und zurückgeben
                                      function getTitle(data) {
                                          const $ = cheerio.load(data);
                                          let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                                          if (title) {
                                              return title[1];
                                          } else {
                                              return "";
                                          }
                                      
                                      }
                                      //die anzahl aller seiten ermitteln
                                      async function countPages(data) {
                                          const $ = cheerio.load(data);
                                          console.log($(".pagination:first .page-item a").eq(-2).prop("outerHTML"));
                                          return parseInt($(".pagination:first .page-item a").eq(-2).html());
                                      }
                                      //eine seite mit der angegebenen seitennummer abrufen
                                      async function readPage(page) {
                                      console.log("F readPage "); 
                                        try {
                                          const response = await axios.get(baseUrl + page,{
                                              headers: {
                                                  userAgent: userAgent
                                              }
                                          });
                                      console.log("page "+page); 
                                      console.log("status "+response.status); 
                                       
                                          return response.data;
                                        } catch (error) {
                                          console.error('Fehler Abruf Seite: '+page, error);
                                          return 0;
                                        }
                                      
                                      }
                                      
                                      main();
                                      
                                      
                                      

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

                                      David G.D 1 Antwort Letzte Antwort
                                      0
                                      • OliverIOO OliverIO

                                        @david-g

                                        leider sieht das normal aus.
                                        das folgende skript nochmal mit weiteren debug ausgaben
                                        Interessant wäre die Seite mit der folgenden Ausgabe oder so ähnlich:

                                        Element Anzahl Seiten:<a class="page-link" href="/traueranzeigen-suche/letzte-14-Tage/seite-24">24</a>
                                        
                                        
                                        const axios = require('axios');
                                        const cheerio = require('cheerio');
                                         
                                        const domain = 'https://www.57trauer.de';   // domain für die bilder
                                        const baseUrl = 'https://www.57trauer.de/traueranzeigen-suche/letzte-14-Tage/seite-'; //abruf url
                                        const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"; //user agent, so das der abruf wie von einem browser aussieht, ansonsten verwendet axios seinen eigenen ua-string
                                        let info=[]; //array in dem  alle infos gesammelt werden
                                        
                                        async function main() {
                                        console.log("F main "); 
                                        
                                            let p1 = await readPage(1); //lesen der ersten seite
                                            let px = await countPages(p1); // ermitteln wieviele seiten
                                            console.log("Anzahl Seiten "+px)
                                            let p=p1;
                                            for (var i=2;i<=px;i++) {
                                                getInformations(p,info); //informationen je seite einsammeln
                                                p=await readPage(i); //nächste seite lesen
                                            }
                                        console.log(info);  //ausgabe aller ergebnisse
                                        }
                                        
                                        //alle informationen einer seite einsammeln
                                        async function getInformations(data,info) {
                                            const $ = cheerio.load(data);
                                            //alle anzeigen einer seite ermitteln und abklappern
                                            $('.col-12.d-flex.align-items-stretch').each((index, el) => {
                                                let obj={}; //objekt zum einsammeln der informationen zu einer anzeige erzeugen
                                                obj.images=getImages(el)||[]; //alle bilder einer anzeige lesen
                                                obj.title = getTitle(el)||""; //den namen einer anzeige lesen
                                                obj.birth = getBirth(el)||""; //geburtsdatum
                                                obj.death = getDeath(el)||""; //sterbedatum
                                                info.push(obj);  //alle infos einer anzeige dem array hinzufügen
                                            });
                                        }
                                        //geburtsdatum ermitteln
                                        function getBirth(data) {
                                            const $ = cheerio.load(data);
                                            let html=$(".c-blockitem-subtitle").html();
                                            if (!html) return "";
                                            let match = html.match(/\* ([\d\.]+)/);
                                            if (match) {
                                                return match[1];
                                            } else {
                                                return "";
                                            }
                                        }
                                        //sterbedatum ermitteln
                                        function getDeath(data) {
                                            const $ = cheerio.load(data);
                                            let html=$(".c-blockitem-subtitle").html();
                                            if (!html) return "";
                                            let match = html.match(/ - † ([\d\.]+)/);
                                            if (match) {
                                                return match[1];
                                            } else {
                                                return "";
                                            }
                                        }
                                        //alle anzeigenbilder ermitteln und als array zurückgeben
                                        function getImages(data) {
                                            const $ = cheerio.load(data);
                                            return $("img").map((i,el)=>domain+$(el).attr("src")).toArray();
                                        }
                                        //den namen ermitteln und zurückgeben
                                        function getTitle(data) {
                                            const $ = cheerio.load(data);
                                            let title = $("a:first").attr("title").match(/Anzeige (.+)/);
                                            if (title) {
                                                return title[1];
                                            } else {
                                                return "";
                                            }
                                        
                                        }
                                        //die anzahl aller seiten ermitteln
                                        async function countPages(data) {
                                            const $ = cheerio.load(data);
                                            console.log($(".pagination:first .page-item a").eq(-2).prop("outerHTML"));
                                            return parseInt($(".pagination:first .page-item a").eq(-2).html());
                                        }
                                        //eine seite mit der angegebenen seitennummer abrufen
                                        async function readPage(page) {
                                        console.log("F readPage "); 
                                          try {
                                            const response = await axios.get(baseUrl + page,{
                                                headers: {
                                                    userAgent: userAgent
                                                }
                                            });
                                        console.log("page "+page); 
                                        console.log("status "+response.status); 
                                         
                                            return response.data;
                                          } catch (error) {
                                            console.error('Fehler Abruf Seite: '+page, error);
                                            return 0;
                                          }
                                        
                                        }
                                        
                                        main();
                                        
                                        
                                        
                                        David G.D Online
                                        David G.D Online
                                        David G.
                                        schrieb am zuletzt editiert von
                                        #26

                                        @oliverio

                                        Komische Sache, dass es bei dir geht und bei mir nicht.
                                        Hab eben ganz vergessen drauf zu Antworten. Ich habe dort keinen Account oder ähnliches.

                                        Anbei das Log der neuen Version:

                                        15:53:54.279	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                                        15:53:54.287	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F main
                                        15:53:54.287	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F readPage
                                        15:53:54.289	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                        15:53:54.590	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: page 1
                                        15:53:54.590	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: status 200
                                        15:53:54.641	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: null
                                        15:53:54.642	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: Anzahl Seiten NaN
                                        15:53:54.642	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                                        

                                        Zeigt eure Lovelace-Visualisierung klick
                                        (Auch ideal um sich Anregungen zu holen)

                                        Meine Tabellen für eure Visualisierung klick

                                        OliverIOO 1 Antwort Letzte Antwort
                                        0
                                        • David G.D David G.

                                          @oliverio

                                          Komische Sache, dass es bei dir geht und bei mir nicht.
                                          Hab eben ganz vergessen drauf zu Antworten. Ich habe dort keinen Account oder ähnliches.

                                          Anbei das Log der neuen Version:

                                          15:53:54.279	info	javascript.0 (23527) Start javascript script.js.Eigene_Scripte.trauertest
                                          15:53:54.287	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F main
                                          15:53:54.287	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: F readPage
                                          15:53:54.289	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                          15:53:54.590	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: page 1
                                          15:53:54.590	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: status 200
                                          15:53:54.641	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: null
                                          15:53:54.642	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: Anzahl Seiten NaN
                                          15:53:54.642	info	javascript.0 (23527) script.js.Eigene_Scripte.trauertest: []
                                          
                                          OliverIOO Offline
                                          OliverIOO Offline
                                          OliverIO
                                          schrieb am zuletzt editiert von
                                          #27

                                          @david-g
                                          Also sehr seltsam.
                                          Ich habe die Seite die im log enthalten ist untersucht. Von der Struktur passt alles und die letzte Seite ist auffindbar.
                                          Das Ergebnis des letzten logs sagt mir das er aber das Element wo das drin steht nicht findet (null) und dann daher auch keine Zahl daraus extrahieren kann.
                                          Bei mir klappt das. Hier können auch keine Browser Unterschiede wirken da die Daten ja nur technisch abgerufen werden ohne das da noch ein Browser dazwischenfummelt
                                          Mir würde jetzt noch versionsstände von axios oder besser noch cheerio interessieren
                                          Um den genauen Unterschied ausmachen zu können.
                                          Das einfachste aber dürfte sein deine suchmethode zu nehmen die ja die Seriennummer wohl findet

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

                                          David G.D 1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          365

                                          Online

                                          32.8k

                                          Benutzer

                                          82.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe