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
    945

[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 Online
    David G.D Online
    David G.
    schrieb am zuletzt editiert von David G.
    #1

    Ich habe diesen kleine Miniblockly mit einer Funktion.

    60b87502-e81e-45cc-b58d-7c10abd4463c-image.png

    Leider bekomme ich mein result nicht als Debug ausgegeben.
    Wo habe ich den Fehler?

    Im Log landet das result aus Zeile 80.
    Reicht Zeile 89 nicht aus, damit mir die Funktion das result liefert?

    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
          const result = JSON.stringify(alleErgebnisse, null, 2);
    
          // Die Informationen aus der Variable "result" über die Konsole ausgeben
          console.log(result);
    
        } 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

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

      Ich habe diesen kleine Miniblockly mit einer Funktion.

      60b87502-e81e-45cc-b58d-7c10abd4463c-image.png

      Leider bekomme ich mein result nicht als Debug ausgegeben.
      Wo habe ich den Fehler?

      Im Log landet das result aus Zeile 80.
      Reicht Zeile 89 nicht aus, damit mir die Funktion das result liefert?

      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
            const result = JSON.stringify(alleErgebnisse, null, 2);
      
            // Die Informationen aus der Variable "result" über die Konsole ausgeben
            console.log(result);
      
          } else {
            console.log('Keine Seiten gefunden.');
          }
        })
        .catch((error) => {
          console.error('Fehler:', error);
        });
      return result
      
      Marc BergM Online
      Marc BergM Online
      Marc Berg
      Most Active
      schrieb am zuletzt editiert von Marc Berg
      #2

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

      // Die gesamten Ergebnisse in die Variable "result" speichern const result = JSON.stringify(alleErgebnisse, null, 2);

      "result" ist außerhalb der Funktion, in der die Variable deklariert wurde, nicht gültig.

      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 sagte in Funktion gibt kein result aus:

        // Die gesamten Ergebnisse in die Variable "result" speichern const result = JSON.stringify(alleErgebnisse, null, 2);

        "result" ist außerhalb der Funktion, in der die Variable deklariert wurde, nicht gültig.

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

        @marc-berg

        Habe ich das hier nicht auch so?
        Da klappt es:

        // Erfordert die axios-Bibliothek
        const axios = require('axios');
         
        // axios soll bei keiner Antwort nach 3 Sekunden einen Fehler auswerfen und nicht ewig weiter warten 
        axios.defaults.timeout = 3000
        // Usergant fuer Die Webanfrage festlegen
        const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';
        
        const headers = {
          'User-Agent': userAgent,
          // Weitere benutzerdefinierte Header, falls erforderlich
        };
        
         // Erfordert die cheerio-Bibliothek
        const cheerio = require('cheerio');
         
        let result = ''
        // URL der Webseite
        const nr = Telefonnummer;
        const linkprefix = 'https://www.dastelefonbuch.de/R%C3%BCckw%C3%A4rts-Suche/'
        const url = linkprefix + nr;
         
        try {
            // HTTP-Anfrage an die Webseite senden
            const response = await axios.get(url, { headers });
            // Den HTML-Inhalt der Antwort erhalten
            const html = response.data;
         
            // Die HTML-Inhalte mit Cheerio parsen
            const $ = cheerio.load(html);
            // Das gewünschte Element mit der Klasse 'name' auswählen und den Titelwert auslesen
            const title = $('.name').attr('title');
         
            // Das Ergebnis in der Variable "result" speichern
            result = title;
         
            // Den Titelwert ausgeben
            log(result);
        } catch(error) { 
            result = Fehler;
        
        };
        return result
        

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

        Meine Tabellen für eure Visualisierung klick

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

          @marc-berg

          Habe ich das hier nicht auch so?
          Da klappt es:

          // Erfordert die axios-Bibliothek
          const axios = require('axios');
           
          // axios soll bei keiner Antwort nach 3 Sekunden einen Fehler auswerfen und nicht ewig weiter warten 
          axios.defaults.timeout = 3000
          // Usergant fuer Die Webanfrage festlegen
          const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36';
          
          const headers = {
            'User-Agent': userAgent,
            // Weitere benutzerdefinierte Header, falls erforderlich
          };
          
           // Erfordert die cheerio-Bibliothek
          const cheerio = require('cheerio');
           
          let result = ''
          // URL der Webseite
          const nr = Telefonnummer;
          const linkprefix = 'https://www.dastelefonbuch.de/R%C3%BCckw%C3%A4rts-Suche/'
          const url = linkprefix + nr;
           
          try {
              // HTTP-Anfrage an die Webseite senden
              const response = await axios.get(url, { headers });
              // Den HTML-Inhalt der Antwort erhalten
              const html = response.data;
           
              // Die HTML-Inhalte mit Cheerio parsen
              const $ = cheerio.load(html);
              // Das gewünschte Element mit der Klasse 'name' auswählen und den Titelwert auslesen
              const title = $('.name').attr('title');
           
              // Das Ergebnis in der Variable "result" speichern
              result = title;
           
              // Den Titelwert ausgeben
              log(result);
          } catch(error) { 
              result = Fehler;
          
          };
          return result
          
          Marc BergM Online
          Marc BergM Online
          Marc Berg
          Most Active
          schrieb am zuletzt editiert von
          #4

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

          Habe ich das hier nicht auch so?

          Nö, da hast Du "result" NICHT deklariert.

          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 sagte in Funktion gibt kein result aus:

            Habe ich das hier nicht auch so?

            Nö, da hast Du "result" NICHT deklariert.

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

            @marc-berg

            Wie müsste es denn dann sein damit es klappt?
            Habe mir das in einem langen "Gespräch" mit chatGPT erarbeitet......

            EDIT
            Mache grad noch eine Änderung am Jacascript, falls die Anpassung aufwendig ist ....

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

            Meine Tabellen für eure Visualisierung klick

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

              @marc-berg

              Wie müsste es denn dann sein damit es klappt?
              Habe mir das in einem langen "Gespräch" mit chatGPT erarbeitet......

              EDIT
              Mache grad noch eine Änderung am Jacascript, falls die Anpassung aufwendig ist ....

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

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

              Wie müsste es denn dann sein damit es klappt?

              Wenn du eine Variable nicht mit let oder const deklarierst, wird sie automatisch zur globalen Variable (dein zweites Beispiel). Mit der Deklaration im ersten Beispiel wird der Scope auf innerhalb der Funktion begrenzt. Eine schnelle (wenn auch nicht ganz saubere) Lösung wäre also, die Deklaration per "const" wegzulassen.

              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 sagte in Funktion gibt kein result aus:

                Wie müsste es denn dann sein damit es klappt?

                Wenn du eine Variable nicht mit let oder const deklarierst, wird sie automatisch zur globalen Variable (dein zweites Beispiel). Mit der Deklaration im ersten Beispiel wird der Scope auf innerhalb der Funktion begrenzt. Eine schnelle (wenn auch nicht ganz saubere) Lösung wäre also, die Deklaration per "const" wegzulassen.

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

                @marc-berg

                Also die Zeile

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

                zu

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

                abändern?

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

                Meine Tabellen für eure Visualisierung klick

                Marc BergM 1 Antwort Letzte Antwort
                0
                • 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

                                          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

                                          430

                                          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