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.
    • 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
                              • Bostil
                                Bostil last edited by Bostil

                                Danke dir @senger1985 erstmal. Ich vermute, ich übersehe bloß eine "Kleinigkeit". Ich werde mal konkreter:

                                1. Das ist nun mein Script (zu 100% das von @pix, bloß den RSS-Feed mal angepasst) und unter common > RSS-Feed abgespeichert und gestartet


                                /* VIS VBB Tabelle
                                {1}
                                Bringt einen RSS-Feed als Tabelle in ioBroker
                                setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
                                {1}
                                für http://forum.iobroker.net/viewtopic.php?f=21&t=1683
                                {1}
                                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")
                                {1}
                                */
                                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.computerbase.de/rss/news.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');
                                }
                                });

                                1. weiterhin habe ich sein Widget einfach kopiert, aber den Pfad auf meinen (siehe unterhalb) angepasst:

                                Objekte:
                                Anmerkung 2019-12-29 203025.png

                                Widget im View:
                                Anmerkung 2019-12-29 203410.png

                                1. den Javascript Adapter habe ich um "request" + "xml2js" ergänzt und den Adapter neu gestartet

                                Erhalte bereits im Script folgende Warnung:


                                20:25:53.036 info javascript.0 (16616) Start javascript script.js.common.RSS-Feed
                                %(#c91616)[20:25:53.101 warn javascript.0 (16616) at RSS_einlesen (script.js.common.RSS-Feed:32:16)
                                20:25:53.102 warn javascript.0 (16616) at script.js.common.RSS-Feed:66:1]
                                20:25:53.103 info javascript.0 (16616) script.js.common.RSS-Feed: RSS-Feed https://www.computerbase.de/rss/news.xml eingelesen
                                20:25:53.104 info javascript.0 (16616) script.js.common.RSS-Feed: registered 6 subscriptions and 1 schedule
                                20:30:00.021 warn javascript.0 (16616) at Object.RSS_einlesen (script.js.common.RSS-Feed:32:16)
                                20:30:00.026 info javascript.0 (16616) script.js.common.RSS-Feed: RSS-Feed https://www.computerbase.de/rss/news.xml eingelesen

                                S P 2 Replies Last reply Reply Quote 0
                                • S
                                  senger1985 @Bostil last edited by

                                  @Bostil habe gerade selbst etwas getestet und umgeschrieben, aber leider auch keine Lösung gefunden.

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

                                    @Bostil Frohes Neues! Du hast immer noch die VBB spezifischen Abfragen im Skript. Das Skript fragt die computerbase-Seite ab und versucht dann die gesperrten Rolltreppen zu finden. Kann ja nicht gehen.

                                    Schau mal hier, ob du einen besseren Ansatz findest:

                                    Altes RSS Parser Skript

                                    Gruß
                                    Pix

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

                                      Hallo @pix vielen Dank für deine Hilfe.

                                      Habe jetzt mal deinen Beitrag vom 05.11.2015 hier rausgekramt und erstmal alles (Script, CSS, Widget) eins zu eins übernommen, leider schlägt es noch fehl. Hast du noch im Kopf, welche Dinge im Script noch korrigiert werden mussten aufgrund zwischenzeitlichen Anpassungen ?

                                      Dankeschön.

                                      1 Reply Last reply Reply Quote 0
                                      • I
                                        IOT last edited by IOT

                                        Hallo RRS Community
                                        spiele gerade mit dem Scripts um die aktuellen Verkehrsmeldungen aus meiner Gegen anzuzeigen. Im original "https://www.vbb.de/broken_lifts.xml" läufts super aber wenn ich es mit "https://www.oeamtc.at/feeds/verkehr/a9.xml" versuche bekomme ich keine Daten in die Tabelle. Hatte wer von euch das gleiche Problem? DANKE

                                        1 Reply Last reply Reply Quote 1
                                        • I
                                          IOT last edited by

                                          Gefunden und gelöst. Wenn da nur ein item zurückkommt wird kein Array instanziert. Dann einfach ohne Index benutzen und schon gehts.

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

                                            Hallo @pix

                                            du hast mir ja 2019 super, bei meinem Script, für die BVG/VBB-Aufzugsstörungen geholfen und das Script lief auch jahrelang super.

                                            Nur haben die Betreiber jetzt die XML-Datei umgeschrieben und einfach eine "Wall-of-Text" hinterlegt.

                                            Kann man daraus auch, irgendwie an die Daten, zum parsen kommen?

                                            Hier nochmal die Seite: http://brokenlifts.org/rss

                                            Danke und frohe Ostern

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            658
                                            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