Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Gelöst: Schedule einer Funktion

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Gelöst: Schedule einer Funktion

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

      Hallo zusammen,

      ich versuche alle 15 Minuten mir den neuen RSS Feed der Tagesschau zu laden. Manuell klappt dies, aber nicht zeit gesteuert. Kann mir hier jemand einen Tip geben, was ich falsch mache. Folgend mein Code in Javascript. Es tauchen auch keine Meldungen im Protokoll auf.

      VG Holger

      
      schedule('*/15 * * * *', function () {getTagesschauRssFeed();})
      
      const fetch = require("node-fetch");
      const { parseString } = require("xml2js");
      
      async function getTagesschauRssFeed() {
        const response = await fetch("https://www.tagesschau.de/xml/rss2");
        const xmlText = await response.text();
        return xmlText;
      }
      
      
      
      
      getTagesschauRssFeed()
        .then((xmlText) => {
          parseString(xmlText, (err, result) => {
            if (err) {
              console.error(err);
              return;
            }
            const items = result.rss.channel[0].item;
            // Create datapoints
            var datapoint_Timestamp = '0_userdata.0.RSS.general.timestamp';
            createState(datapoint_Timestamp);
            
            // Set datapoints
            //const currDate = require("javascript.0.scriptEnabled.common.Date-Functions.currDate");
            setState(datapoint_Timestamp, currLocalDate());    /*scriptEnabled common Date-Functions currDate*/
              console.log (currLocalDate());
      
            for (let i = 0; i < 10; i++) {
              const content = items[i]["content:encoded"][0];
              var content_Enc;
              const imgRegex = /<img.*?src="(.*?)"/;
              const imgMatch = content.match(imgRegex);
              const counter = i +1;
      
              var RSSItemLink = items[i].link[0];
              var RSSItemTitle = items[i].title[0];
              var RSSItemImage = imgMatch[1] ;
              var RSSItemDescription = items[i].description[0];
      
              // Create datapoints;
              var datapoint_Title = '0_userdata.0.RSS.' + counter + '.Title';
              var datapoint_Image = '0_userdata.0.RSS.' + counter + '.Image';
              var datapoint_Description = '0_userdata.0.RSS.' + counter + '.Description';
              var datapoint_ContentEnc = '0_userdata.0.RSS.' + counter + '.ContentEnc';
              
      
              // Set datapoints; 
              //console.log(`Item ${counter} title: ${items[i].title[0]}`);
              createState(datapoint_Title);
              setState(datapoint_Title, RSSItemTitle);
      
              //console.log(`Item ${i + 1} image URL: ${imgMatch ? imgMatch[1] : "None"}`);
              createState(datapoint_Image);
              setState(datapoint_Image, RSSItemImage);
              
              //console.log(`Item ${i + 1} description: ${RSSItemDescription}`);
              createState(datapoint_Description);
              setState(datapoint_Description, RSSItemDescription);
      
              //console.log(`Item ${i + 1} description: ${content}`);
              createState(datapoint_ContentEnc);
              content_Enc = "<p><a target='_blank' href='"  + RSSItemLink + "'>" + RSSItemTitle + "</a><br>" + RSSItemDescription + "</p>";
              setState(datapoint_ContentEnc, content_Enc);
            }
          });
        })
        .catch((err) => console.error(err));
      
      
      liv-in-sky 1 Reply Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @Butschek last edited by

        @butschek

        probier mal (axios muss in den javascript settings angegeben worden sein:

        
        const axios=require('axios');
        const { parseString } = require("xml2js");
        //const { parseString } = require("xml2json");
        for (let i = 0; i < 10; i++) {
           let counter = i +1;
               let datapoint_Title = '0_userdata.0.RSS.' + counter + '.Title';
               let datapoint_Image = '0_userdata.0.RSS.' + counter + '.Image';
               let datapoint_Description = '0_userdata.0.RSS.' + counter + '.Description';
               let datapoint_ContentEnc = '0_userdata.0.RSS.' + counter + '.ContentEnc';
            makedp(datapoint_Image)
            makedp(datapoint_Description)
            makedp(datapoint_ContentEnc)
            makedp(datapoint_Title)
           
        }
        var datapoint_Timestamp = '0_userdata.0.RSS.general.timestamp';
        makedp(datapoint_Timestamp)
        
        schedule('*/15 * * * *', async function () { getTagesschauRssFeed()})
        
        
        
        
        async function getTagesschauRssFeed() {
         axios.get('https://www.tagesschau.de/xml/rss2', {
                           headers: { 'User-Agent':`Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36` }
        }).then( async function(response) { //fetch("https://www.tagesschau.de/xml/rss2");
         const xmlText =  response.data; //log(response.data)
        
         
        
        
        
        parseString(xmlText, {explicitArray: true,  mergeAttrs: true, normalize: true, compact: true, spaces: 2 }, (err, result) => { //log(result)
             if (err) {
               console.error(err);
               return;} 
         //log(result.rss.channel[0])
        
             const items = result.rss.channel[0].item;
             
             // Create datapoints
          
             
             // Set datapoints
             //const currDate = require("javascript.0.scriptEnabled.common.Date-Functions.currDate");
             setState(datapoint_Timestamp,formatDate(getDateObject((new Date().getTime())), "JJJJ.MM.TT SS:mm:ss.sss"));    /*scriptEnabled common Date-Functions currDate*/
               //console.log (currLocalDate());
        
             for (let i = 0; i < 10; i++) {
               const content = items[i]["content:encoded"][0];
               var content_Enc;
               const imgRegex = /<img.*?src="(.*?)"/;
               const imgMatch = content.match(imgRegex);
               const counter = i +1;
        
               var RSSItemLink = items[i].link[0];
               var RSSItemTitle = items[i].title[0];
               var RSSItemImage = imgMatch[1] ;
               var RSSItemDescription = items[i].description[0];
        
               // Create datapoints;
               var datapoint_Title = '0_userdata.0.RSS.' + counter + '.Title';
               var datapoint_Image = '0_userdata.0.RSS.' + counter + '.Image';
               var datapoint_Description = '0_userdata.0.RSS.' + counter + '.Description';
               var datapoint_ContentEnc = '0_userdata.0.RSS.' + counter + '.ContentEnc';
               
        
               // Set datapoints; 
               //console.log(`Item ${counter} title: ${items[i].title[0]}`);
               setState(datapoint_Title, RSSItemTitle);
           
        
               //console.log(`Item ${i + 1} image URL: ${imgMatch ? imgMatch[1] : "None"}`);
              
               setState(datapoint_Image, RSSItemImage);
               
               //console.log(`Item ${i + 1} description: ${RSSItemDescription}`);
              
              setState(datapoint_Description, RSSItemDescription);
        
               //console.log(`Item ${i + 1} description: ${content}`);
             //  createState(datapoint_ContentEnc);
               content_Enc = "<p><a target='_blank' href='"  + RSSItemLink + "'>" + RSSItemTitle + "</a><br>" + RSSItemDescription + "</p>";
              setState(datapoint_ContentEnc, content_Enc);
           
             
         } //schleife
           }); //parsing
        
        })
        
        } // async func
         
        
        
        async function makedp(point){
            if (!await existsStateAsync(point)) {
               await createStateAsync(point, "",{type: "string", role: "value", read: true, write: true, } ); } 
        
        }
        
        

        B 1 Reply Last reply Reply Quote 0
        • B
          Butschek @liv-in-sky last edited by

          Die Klammersetzung ist natürlich falsch.
          Habe nun des gesamte Slript quasi in die Schedule Funktion aufgenommen. Dann klappt es auch problemlos.

          VG
          Holger

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

          Support us

          ioBroker
          Community Adapters
          Donate

          887
          Online

          31.7k
          Users

          79.8k
          Topics

          1.3m
          Posts

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