Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. JavaScript
  5. RSS feed formatierung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    834

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

RSS feed formatierung

Geplant Angeheftet Gesperrt Verschoben Ungelöst JavaScript
8 Beiträge 4 Kommentatoren 734 Aufrufe 4 Watching
  • Ä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.
  • WebrangerW Offline
    WebrangerW Offline
    Webranger
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    habe diese script am laufen aber die formatierung ist fürn ars..

    /* VIS Bild Newsfeed
    
    Bringt einen RSS-Feed als Tabelle in ioBroker
    setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
    
    
    erstellt: 11.05.2017 von Torsten (auf Basis von Bluefox Code und Pix) 
    */
    
    
    createState('RSS-Feed.Bild.Tabelle', {write: true, read: true, name: 'RSS Feed Bild Tabelle', type: 'string', desc: 'Bild 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.nw.de/_export/nw/rss/lokal/ml_bad_oeynhausen/index.rss';
    
    var idOptin = 'RSS-Feed.Optin',
        optin_beschreibung = 'RSS Feed',
        idFeedTabelle = 'RSS-Feed.Bild.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>NW news</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>';
                        }
                        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');
        }
    });
    


    Kann mir einer helfen und mir sagen was ich tun kann das es in der VIS ordentlich zu lesen ist.

    Bildschirmfoto 2019-10-18 um 18.34.07.png

    Also Titel - Absatz - Text usw

    Danke für eure Hilfe

    Intel NUC Celeron, Xiaomi Gateway, Fritzbox 7590, XS1

    1 Antwort Letzte Antwort
    0
    • WebrangerW Offline
      WebrangerW Offline
      Webranger
      schrieb am zuletzt editiert von
      #2

      Keiner eine Idee?

      Intel NUC Celeron, Xiaomi Gateway, Fritzbox 7590, XS1

      1 Antwort Letzte Antwort
      0
      • sigi234S Online
        sigi234S Online
        sigi234
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #3

        Was nimmst du für ein Widget?

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        1 Antwort Letzte Antwort
        0
        • WebrangerW Offline
          WebrangerW Offline
          Webranger
          schrieb am zuletzt editiert von
          #4

          Müsste ganz normales html widget sein.

          [{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"<br>{javascript.1.RSS-Feed.Bild.Tabelle}","visibility-groups-action":"hide","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,"name":"NWnews feed"},"style":{"left":"10px","top":"9px","z-index":"20","width":"1270px","height":"750px","color":"#0000000","font-family":"RobotoCondensed-Light","font-size":"xx-large","font-weight":"bold","background-color":"#ffffff","opacity":"0.7","border-radius":"15px","box-shadow":"5px 5px 5px black"},"widgetSet":"basic"}]
          

          Intel NUC Celeron, Xiaomi Gateway, Fritzbox 7590, XS1

          sigi234S 1 Antwort Letzte Antwort
          0
          • WebrangerW Webranger

            Müsste ganz normales html widget sein.

            [{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"<br>{javascript.1.RSS-Feed.Bild.Tabelle}","visibility-groups-action":"hide","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,"name":"NWnews feed"},"style":{"left":"10px","top":"9px","z-index":"20","width":"1270px","height":"750px","color":"#0000000","font-family":"RobotoCondensed-Light","font-size":"xx-large","font-weight":"bold","background-color":"#ffffff","opacity":"0.7","border-radius":"15px","box-shadow":"5px 5px 5px black"},"widgetSet":"basic"}]
            
            sigi234S Online
            sigi234S Online
            sigi234
            Forum Testing Most Active
            schrieb am zuletzt editiert von sigi234
            #5

            @Webranger

            Da gibt es viele Möglichkeiten, alles in den Rechten Einstellungen! ZB.:

            [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":true,"g_css_border":true,"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.0.RSS-Feed.Bild.Tabelle}"},"style":{"left":"12px","top":"11px","width":"1353px","height":"800px","z-index":"2","color":"#d7cec1","border-width":"","border-style":"","border-radius":"","font-family":"RobotoCondensed-Light","line-height":"200%","text-align":"left","font-size":"medium","padding":"10px"},"widgetSet":"basic"},{"tpl":"tplFrame","data":{"visibility-cond":"==","visibility-val":1,"title":"","title_color":"#d7cec1","title_top":"-30","title_left":"0","header_height":"0","header_color":"","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/icons-mfd-svg/control_ok.svg","signals-icon-size-0":"72","signals-blink-0":false,"signals-horz-0":"90","signals-vert-0":"81","signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":"false","signals-icon-1":"/icons-mfd-svg/control_ok.svg","signals-icon-size-1":"72","signals-blink-1":false,"signals-horz-1":"90","signals-vert-1":"81","signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis.0/main/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide","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,"signals-oid-0":"","signals-oid-1":"","signals-icon-style-1":"","g_css_border":false},"style":{"left":"3px","top":"3px","width":"1403px","height":"836px","font-family":"RobotoCondensed-Light","font-style":"normal","font-variant":"normal","font-weight":"","font-size":"large","z-index":"1","background":"","box-shadow":"2px 2px 3px rgba(20, 20, 20, 50)","background-color":"#474747"},"widgetSet":"basic"}]
            

            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
            Immer Daten sichern!

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              senger1985
              schrieb am zuletzt editiert von
              #6

              Ich reihe mich hier mal ein.

              Ich habe das Script für meine Bedürfnisse umgeschrieben, habe aber ein "kleines" Problem, mit der Ausgabe von "vbb-name"

              Wenn ich es vbb/-name schreibe, bekomme ich "NaN" ausgegeben, wenn ich es ohne / schreibe, bekomme ich gar keinen Wert ausgegeben:

              /* 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');
                  }
              });
              

              Hat da jemand eine Idee, wie ich das ausgeben kann?

              liv-in-skyL 1 Antwort Letzte Antwort
              0
              • S senger1985

                Ich reihe mich hier mal ein.

                Ich habe das Script für meine Bedürfnisse umgeschrieben, habe aber ein "kleines" Problem, mit der Ausgabe von "vbb-name"

                Wenn ich es vbb/-name schreibe, bekomme ich "NaN" ausgegeben, wenn ich es ohne / schreibe, bekomme ich gar keinen Wert ausgegeben:

                /* 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');
                    }
                });
                

                Hat da jemand eine Idee, wie ich das ausgeben kann?

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #7

                @senger1985

                hier ein beispiel aus meinem script - der bindestrich wird wohl als minus verstanden

                respa.data[0]["speedtest-status"]
                

                hier wird der bindestrich umgangen

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                S 1 Antwort Letzte Antwort
                0
                • liv-in-skyL liv-in-sky

                  @senger1985

                  hier ein beispiel aus meinem script - der bindestrich wird wohl als minus verstanden

                  respa.data[0]["speedtest-status"]
                  

                  hier wird der bindestrich umgangen

                  S Offline
                  S Offline
                  senger1985
                  schrieb am zuletzt editiert von senger1985
                  #8

                  @liv-in-sky habe ich ausprobiert, gab mir ne Reihe von "NAN..." aus.
                  Hier wurde die Lösung gepostet:
                  https://forum.iobroker.net/topic/1402/rss-parser/38

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  696

                  Online

                  32.6k

                  Benutzer

                  82.1k

                  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