Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. RSS Parser

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    RSS Parser

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

      Hallo,

      hab das http://forum.iobroker.net/viewtopic.php?f=21&t=1683#p14391 nochmal verbessert:

      • Benachrichtigung, ob Überflug, nun einmalig 0-30min vor Ereignis

      • Besserer Umgang mit Fehlern, falls XML keinen Überflug meldet

      Gruß

      Pix

      EDIT: 22.1.2018 Link zum Skript aktualisiert

      1 Reply Last reply Reply Quote 0
      • N
        nathan1312 last edited by

        Hallo,

        ich habe mir über die tolle Anleitung von pix erfolgreich den tagesschau-feed auf meine vis-oberfläche geholt. Ich möchte jedoch die Darstellung für meine Zwecke ein wenig anpassen. Im Moment werden alle Nachrichten untereinander (Schlagzeile und Nachricht abwechselnd) geschrieben. Das ist von der Aufteilung her gut so, nur hab ich leider nicht unbegrenzt Platz zur Verfügung. Ich möchte lieber anstatt allen Nachrichten gleichzeitig nur jeweils eine aus der Liste anzeigen lassen. Die Nachrichten sollen dann im 30 sek Rhythmus durchwechseln.

        Wie schaffe ich es also, aus der html-Tabelle im Datenpunkt auf die einzelnen Einträge zuzugreifen, und mir diese im Wechsel anzeigen zu lassen?

        Vielen Dank für jede Hilfe!

        Beste Grüße!

        1 Reply Last reply Reply Quote 0
        • C
          C1500 last edited by

          Servus Zusammen,

          genau das was nathan1312 gemacht hat, suche ich gerade.

          Bzw. genial wäre das durchwechseln der Nachrichten

          Entweder n-tv, N24 oder tagesschau Feed´s:

          n-tv: https://www.n-tv.de/rss

          N24: https://www.welt.de/feeds/topnews.rss

          Tagesschau: http://www.tagesschau.de/download/xml/rss2

          Bräuchte das für meine MagicMirror auf dem eine iob.vis läuft ;o)

          Gruß Peer

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo,

            hier kannst du ein Skript, das setInterval nutzt, finden. Damit lasse ich mir alle 10s eine andere Webcam/Regenradar/etc. anzeigen.

            http://forum.iobroker.net/viewtopic.php … 981#p17070

            Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • S
              senger1985 last edited by Jey Cee

              Hallo,

              ich habe nach der Anleitung von pix, das Script in eine zweite JS-Instanz eingepflegt und für meinen RSS-Feed, den ich auslesen lassen möchte umgeschrieben.

              Nur leider bekomme ich in der ersten Spalte "NaN…" angezeigt.

              Hier das Script:

              /* VIS TV Programm
              
              Bringt einen RSS-Feed als Tabelle in ioBroker
              setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
              
              für http://forum.iobroker.net/viewtopic.php?f=21&t=1683
              
              erstellt: 08.11.2015 von Pix (auf Basis von Bluefox Code) für Griesemer
              */
              
              createState('RSS-Feed.VBB.Tabelle', {write: true, read: true, name: 'RSS Feed VBB Tabelle', type: 'string', desc: 'VBB RSS Feed als HTML Tabelle'});
              createState('RSS-Feed.Optin', true, {write: true, read: true, name: 'Optin RSS Feeds abrufen', type: 'boolean', desc: 'Sollen RSS-Feeds abgerufen werden?'});
              
              var link = 'http://www.vbb.de/de/broken_lifts.xml';
              
              var idOptin = 'RSS-Feed.Optin',
                  optin_beschreibung = 'RSS Feed',
                  idFeedTabelle = 'RSS-Feed.VBB.Tabelle';
              
              function RSS_einlesen () { // alle 5 Minuten
                  var optin = getState(idOptin).val;
                  var parseString = require('xml2js').parseString;
                  var request = require('request');
              
                  if (optin) request(link, function (error, response, body) {
                      if (!error && response.statusCode == 200) {
              
                          parseString(body, {
                              explicitArray: false,
                              mergeAttrs: true
                          },
                          function (err, result) {
                              //log(JSON.stringify(result, null, 2));
                              if (err) {
                                  log("Fehler: " + err);
                              } else {                                                               
                                  var tabelle ='';
                                  for(var i = 0; i <result.rss.channel.item.length; i++)/{/tabelle/+="<tr><td>" result.rss.channel.item[i].vbb-name/'</td=""></result.rss.channel.item.length;>';
                                  }
                                  tabelle += '
              
              | Station | Status | Aktuelle Meldung |
              | --- | --- | --- |
              | ' + result.rss.channel.item[i].title + ' | ' + result.rss.channel.item[i].description + ' |
              
              ';  
                                  setState(idFeedTabelle, tabelle);
                              }
                          });
                      } else  {
                          log(error);
                      }
                  });   // Ende request 
                  log('RSS-Feed ' + link + ' eingelesen');
              }
              
              schedule("*/10 * * * *", RSS_einlesen); 
              RSS_einlesen();
              
              // Opt In setzen - Logging
              on( { 
                  id: idOptin,
                  change: 'ne'
              }, function (obj) {
                  if (obj.newState.val === false || obj.newState.val =='false') {
                      log('Opt in Variable <' + optin_beschreibung + ' Push> auf <aus '/+/obj.newstate.val="">gesetzt ', 'info');
                  } else if (obj.newState.val === true || obj.newState.val =='true') {
                      log('Opt in Variable <' + optin_beschreibung + ' Push> auf <ein '/+/obj.newstate.val="">gesetzt ', 'info');
                  }
              });
              

              Kann mir da vielleicht jemand sagen, warum "result.rss.channel.item_[i].vbb-name" dieses Resultat ausgibt?

              Vielen Dank

              1 Reply Last reply Reply Quote 0
              • L
                lalam last edited by

                Hallo @ *,

                bohre gerade meine LED Matrix Anzeige auf 2x (8x128) auf und würde gern in der unteren Zeile einen Newsfeed laufen lassen. Habe das Script auf einem separaten JS-Adapter installiert, finde jetzt aber die Daten nicht. Wo schreibt der das hin?????? Oder mache ich da einen Denkfehler?

                Danke und Grüße

                Lars

                Bin ich blöd! Habs gefunden 🙂

                Ich versuche es mal umzuschreiben dass jeweils die 5 aktuellsten Headlines in eine Variable geschrieben werden - das Matrix Display gibt nur eine Zeichenkette aus …

                1 Reply Last reply Reply Quote 0
                • marcuskl
                  marcuskl last edited by

                  Wo finde ich jetzt den aktuellen Skript ?

                  1 Reply Last reply Reply Quote 0
                  • Aphofis
                    Aphofis @pix last edited by

                    @pix
                    Wie und wo hast du das denn alles eingebunden!? Das sieht echt toll aus! Ich bin noch iobroker neuling und könnte eine wenig Griff unter die Flügel gebrauchen.
                    Gruß Gordon

                    P 1 Reply Last reply Reply Quote 0
                    • P
                      pix @Aphofis last edited by

                      @Aphofis Such mal nach "Mal zeigen will" oder so, da sind viele VIS Views vorgestellt.

                      Gruß
                      Pix

                      Aphofis 1 Reply Last reply Reply Quote 0
                      • Aphofis
                        Aphofis @pix last edited by

                        @pix OK Danke

                        1 Reply Last reply Reply Quote 0
                        • S
                          senger1985 last edited by

                          @pix könntest du mal bitte über mein Script (Post 27) schauen und mir sagen, warum er mir die Daten nicht ausgibt?

                          1 Reply Last reply Reply Quote 0
                          • P
                            pix last edited by

                            Hallo Senger1985,

                            das o.g. Skript ist ganz schön zerhauen (durch die Änderung der Forensoftware). Du müsstest eigentlich das Originalskript aus deiner Installation neu posten.

                            Kannst du dir aber sparen, denn es liegt nicht am Skript.
                            Der Link zur XML-Datei funktioniert nicht mehr bzw. die Information wird nicht mehr darin bereitgestellt:
                            Bildschirmfoto 2019-10-29 um 09.17.15.jpg

                            Gruß
                            Pix

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              senger1985 @pix last edited by

                              @pix danke, für eine Antwort.

                              Wenn ich Link Text aufrufe, bekomme ich aber noch die Daten angezeigt.

                              /* VIS VBB Newsfeed
                              {1}
                              Bringt einen RSS-Feed als Tabelle in ioBroker
                              setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
                              {1}
                              {1}
                              erstellt: 11.05.2017 von Torsten (auf Basis von Bluefox Code und Pix) 
                              */
                               
                               
                              createState('RSS-Feed.VBB.Tabelle', {write: true, read: true, name: 'RSS Feed VBB Tabelle', type: 'string', desc: 'VBB RSS Feed als HTML Tabelle'});
                              createState('RSS-Feed.Optin', true, {write: true, read: true, name: 'Optin RSS Feeds abrufen', type: 'boolean', desc: 'Sollen RSS-Feeds abgerufen werden?'});
                               
                              var link = 'https://www.vbb.de/broken_lifts.xml';
                              //var vbb = 'vbb-name';
                               
                              var idOptin = 'RSS-Feed.Optin',
                                  optin_beschreibung = 'RSS Feed',
                                  idFeedTabelle = 'RSS-Feed.VBB.Tabelle';
                               
                              function RSS_einlesen () { // alle 5 Minuten
                                  var optin = getState(idOptin).val;
                                  var parseString = require('xml2js').parseString;
                                  var request = require('request');
                               
                                  if (optin) request(link, function (error, response, body) {
                                      if (!error && response.statusCode == 200) {
                                  
                                          parseString(body, {
                                              explicitArray: false,
                                              mergeAttrs: true
                                          },
                                          function (err, result) {
                                              //log(JSON.stringify(result, null, 2));
                                              if (err) {
                                                  log("Fehler: " + err);
                                              } else {      
                                                  /*
                                                  // Titel links, Inhalt rechts
                                                  var tabelle ='<table class="rss_feed"><thead><tr><th>Titel</th><th>Beschreibung</th></tr></thead><tbody>';
                                                  for(var i = 0; i <result.rss.channel.item.length; i++) {
                                                      tabelle += '<tr><td>' + result.rss.channel.item[i].title + '</td>'</br>'<td>' + result.rss.channel.item[i].description + '</td></tr>';
                                                  }
                                                  */
                                                  
                                                  // Titel oben, INhalt darunter (wie in der Zeitung)
                                                  var tabelle ='<table class="rss_feed"><thead><tr><th>BVG Aufzugsstörung</p></th></tr></thead><tbody>';
                                                  for(var i = 0; i <result.rss.channel.item.length; i++) {
                                                      tabelle += '<tr><td>' + result.rss.channel.item[i].title + '</td></tr><tr><td>' + result.rss.channel.item[i].description + '</td></tr><tr><td>' + result.rss.channel.item[i].vbb/-name + '</td></tr>';
                                                  }
                                                  tabelle += '</tbody></table>';  
                                                  setState(idFeedTabelle, tabelle);
                               
                                              }
                                          });
                                      } else  {
                                          log(error);
                                      }
                                  });   // Ende request 
                                  log('RSS-Feed ' + link + ' eingelesen');
                              }
                               
                              schedule("*/10 * * * *", RSS_einlesen); 
                              RSS_einlesen();
                               
                               
                              // Opt In setzen - Logging
                              on( { 
                                  id: idOptin,
                                  change: 'ne'
                              }, function (obj) {
                                  if (obj.newState.val === false || obj.newState.val =='false') {
                                      log('Opt in Variable <' + optin_beschreibung + ' Push> auf <aus/' + obj.newState.val + '> gesetzt ', 'info');
                                  } else if (obj.newState.val === true || obj.newState.val =='true') {
                                      log('Opt in Variable <' + optin_beschreibung + ' Push> auf <ein/' + obj.newState.val + '> gesetzt ', 'info');
                                  }
                              });
                              
                              1 Reply Last reply Reply Quote 0
                              • S
                                senger1985 last edited by

                                Das sieht ja schon wieder so Kacke aus

                                P 1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  Ich schieße gleich mal nach:
                                  Der Link hat sich nur geändert: https://www.vbb.de/broken_lifts.xml

                                  Ich checke gerade das Skript ....

                                  S 1 Reply Last reply Reply Quote 0
                                  • S
                                    senger1985 @pix last edited by

                                    @pix danke dir.

                                    Bin aber jetzt erstmal bis heute Abend unterwegs.

                                    1 Reply Last reply Reply Quote 0
                                    • P
                                      pix last edited by pix

                                      So, habe mal das Skript etwas angepasst:

                                      /* VIS VBB Tabelle
                                      
                                      Bringt einen RSS-Feed als Tabelle in ioBroker
                                      setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
                                      
                                      für http://forum.iobroker.net/viewtopic.php?f=21&t=1683
                                      
                                      08.11.2015 erstellt von Pix (auf Basis von Bluefox Code) für Griesemer
                                      29.10.2019 angepasst von Pix (XML Element Namen mit Bindstrich (Hyphen) werden nkicht ausgelesen "vbb-name")
                                      
                                      */
                                      createState('RSS-Feed.VBB.Tabelle', "", {
                                         write: true,
                                         read: true,
                                         name: 'RSS Feed VBB Tabelle',
                                         type: 'string',
                                         desc: 'VBB RSS Feed als HTML Tabelle'
                                      });
                                      createState('RSS-Feed.VBB.Optin', true, {
                                         write: true,
                                         read: true,
                                         name: 'Optin RSS Feeds abrufen',
                                         type: 'boolean',
                                         desc: 'Sollen RSS-Feeds abgerufen werden?'
                                      });
                                      var link = 'https://www.vbb.de/broken_lifts.xml';
                                      var idOptin = 'RSS-Feed.Optin',
                                         optin_beschreibung = 'RSS Feed',
                                         idFeedTabelle = 'RSS-Feed.VBB.Tabelle';
                                      
                                      function RSS_einlesen() { // alle 5 Minuten
                                         var optin = getState(idOptin).val;
                                         var parseString = require('xml2js').parseString;
                                         var request = require('request');
                                         if (optin) request(link, function (error, response, body) {
                                         	if (!error && response.statusCode == 200) {
                                         		// Unerlaubte Bindestriche ind en XML Element Namen ersetzen
                                         		body = body.replace(/vbb-name/g, "vbb_name");
                                         		body = body.replace(/hafas-nr/g, "hafas_nr");
                                         		body = body.replace(/aufzugs-id/g, "aufzugs_id");
                                         		parseString(body, {
                                         			explicitArray: false,
                                         			mergeAttrs: true
                                         		}, function (err, result) {
                                         			//log(JSON.stringify(result, null, 2)); // für debug Zwecke
                                         			var tabelle = '<table id="brokenlifts"><caption>Broken Lifts</caption><tbody>'; // Grundgerüst Tabelle, Caption kann ausgeblendet werden
                                         			if (err) {
                                         				log("Fehler: " + err);
                                         				tabelle += '<tr><td>Fehler beim Einlesen</td></tr>'; // neue Zeile und Fehlermeldung in Tabelle
                                         			} else {
                                         				tabelle += '<thead><tr><td>Station</td><td>Status</td><td>Aktuelle Meldung</td></tr></thead>'; // neue Titel-Zeile mit drei Datenfeldern (diese werden in VIS formatiert)
                                         				for (var i = 0; i < result.rss.channel.item.length; i++) {
                                         					tabelle += '<tr><td>' + result.rss.channel.item[i].vbb_name + '</td><td>' + result.rss.channel.item[i].title + '</td><td>' + result.rss.channel.item[i].description + '</td>'; // neue Tabellen-Zeile pro i 
                                         				}
                                         			}
                                         			tabelle += '</tbody></table>'; // HTML-Tabelle schließen (mit und ohne Fehler, aber Tabellen Gerüst steht)
                                         			setState(idFeedTabelle, tabelle);
                                         		});
                                         	} else {
                                         		log(error);
                                         	}
                                         }); // Ende request 
                                         log('RSS-Feed ' + link + ' eingelesen');
                                      }
                                      schedule("*/10 * * * *", RSS_einlesen);
                                      RSS_einlesen();
                                      // Opt In setzen - Logging
                                      on({
                                         id: idOptin,
                                         change: 'ne'
                                      }, function (obj) {
                                         if (obj.newState.val === false || obj.newState.val == 'false') {
                                         	log('Opt in Variable <' + optin_beschreibung + ' Push> auf <aus ' + obj.newstate.val + ' >gesetzt ', 'info');
                                         } else if (obj.newState.val === true || obj.newState.val == 'true') {
                                         	log('Opt in Variable <' + optin_beschreibung + ' Push> auf <ein ' + obj.newstate.val + ' >gesetzt ', 'info');
                                         }
                                      });
                                      


                                      Es gab noch ein Problem, ich musst edie unerlaubte XML Element Namen ersetzen. Einige hatten einen Bindestrich, dann streikt der Parser.

                                      Als Widget einfach ein HTML Widget nehmen und den Datenpunkt der TAbelle als Binding einfügen {javascript.2.RSS-Feed.VBB.Tabelle}

                                      Bildschirmfoto 2019-10-29 um 10.34.50.jpg

                                      [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"{javascript.2.RSS-Feed.VBB.Tabelle}"},"style":{"left":"156px","top":"326px","z-index":"20","background-color":"blue","width":"628px","height":"auto"},"widgetSet":"basic"}]
                                      

                                      Bildschirmfoto 2019-10-29 um 10.33.51.jpg

                                      Gruß
                                      Pix

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        senger1985 @pix last edited by

                                        @pix du bist einfach super.

                                        Vielen, vielen Dankt und ich habe mich dumm und dämlich gesucht, woran es gelegen hat.

                                        1 Reply Last reply Reply Quote 1
                                        • Bostil
                                          Bostil last edited by

                                          Hallo RSS-Freunde,

                                          würde auch gerne den RSS-Feed der Tagesschau z. B. über das Script von @pix einbinden, aber scheitere. Folgendermaßen bin ich vorgegangen:

                                          • Skript von @pix 1:1 kopiert
                                          • Link der Tagesschau entsprechend in Zeile 26 des Scrips ersetzt: http://www.tagesschau.de/xml/rss2
                                          • Script gestartet
                                          • Widget ebenfalls in meine View kopiert
                                          • allerdings erscheint im "Live"Modus der View in der HTML-Tabelle bloß "undefined"

                                          Habt ihr eine Idee, was ich falsch mache ggf. noch bedenken muss, wenn ich das Script / Widget von oben einfach in meine View kopiere ?

                                          Danke euch!

                                          S 1 Reply Last reply Reply Quote 0
                                          • S
                                            senger1985 @Bostil last edited by

                                            @Bostil siehe Post von Pix.

                                            Zitat:
                                            "Als Widget einfach ein HTML Widget nehmen und den Datenpunkt der TAbelle als Binding einfügen {javascript.2.RSS-Feed.VBB.Tabelle}"

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            745
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            11
                                            48
                                            10596
                                            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