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. Entwicklung
  4. [gelöst] Bild von Webseite parsen und in VIS darstellen.

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[gelöst] Bild von Webseite parsen und in VIS darstellen.

Geplant Angeheftet Gesperrt Verschoben Entwicklung
parsercheeriorequest
6 Beiträge 2 Kommentatoren 1.5k Aufrufe 3 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.
  • C Offline
    C Offline
    Creator
    schrieb am zuletzt editiert von Creator
    #1

    Hallo,

    ich versuche gerade ein Bild ( Vertretungsplan ) von der Webseite der Schule zu parsen.
    Bisher war das einfach nur ein Link den ich in einem Iframe dargestellt habe. Wegen dummen Ideen, ist das jetzt hinter einem Login versteckt und kein Pdf mehr, sondern wohl ein Bild.

    Das meiste habe ich fertig. Login geht und auch das Bild finde ich im Dom.
    Nur wie kann ich das am besten so auslesen, dass ich es im VIS darstellen kann?

    Eine Idee ist es, dass Bild zu speichern und den Link dazu dan in VIS zu verwenden.
    Eine andere Idee ist es, dass live zu machen. Also garnicht erst zwischenspeichern das BIld sondern irgendwie direkt ausgeben.

    Ich zeig euch mal was bisher klappt.

    const request = require('request');
    const cheerio = require('cheerio');
    
    var url          = 'https://.............................de/iserv/login_check';
    var link         = 'javascript.0.Status.agency.link',
        lastFileName = 'javascript.0.Status.agency.lastFileName'
    
    createState(link, {
        type: 'string',
        name: 'Link zum Vertretungsplan',
        desc: 'Vollständer Link zum Vertretungsplan inkl. googleApi',
        def: ' ',
        role: 'value'
    });
    
    createState(lastFileName, {
        type: 'string',
        name: 'lastFileName',
        desc: 'Letzte Datei',
        def: ' ',
        role: 'value'
    });
    
    // 
    function getAgency() {
        var cookieJar = request.jar();
        request.post({url, jar: cookieJar, form: {"_username":"geheim", "_password":"geheim"}}, function(error, response, body){
            request.get({
                url:"https://....................de/iserv/infodisplay/show/135",
                jar: cookieJar
                //header: response.headers
            },function(error, response, body){            
                console.log(body);
                const $ = cheerio.load(body);
                var fileName = $('.infodisplay-widget-content img').attr('src');
                console.log(fileName);
            });
        });
    }
    
    getAgency();
    
    schedule("0 */1 * * *", getAgency);
    

    In "fileName" steht jetzt: /iserv/infodisplay/pdf/147/1/0?1582451469

    Habt Ihr eine Idee wie ich das Ziel erreichen könnte?

    OliverIOO 1 Antwort Letzte Antwort
    0
    • C Creator

      Hallo,

      ich versuche gerade ein Bild ( Vertretungsplan ) von der Webseite der Schule zu parsen.
      Bisher war das einfach nur ein Link den ich in einem Iframe dargestellt habe. Wegen dummen Ideen, ist das jetzt hinter einem Login versteckt und kein Pdf mehr, sondern wohl ein Bild.

      Das meiste habe ich fertig. Login geht und auch das Bild finde ich im Dom.
      Nur wie kann ich das am besten so auslesen, dass ich es im VIS darstellen kann?

      Eine Idee ist es, dass Bild zu speichern und den Link dazu dan in VIS zu verwenden.
      Eine andere Idee ist es, dass live zu machen. Also garnicht erst zwischenspeichern das BIld sondern irgendwie direkt ausgeben.

      Ich zeig euch mal was bisher klappt.

      const request = require('request');
      const cheerio = require('cheerio');
      
      var url          = 'https://.............................de/iserv/login_check';
      var link         = 'javascript.0.Status.agency.link',
          lastFileName = 'javascript.0.Status.agency.lastFileName'
      
      createState(link, {
          type: 'string',
          name: 'Link zum Vertretungsplan',
          desc: 'Vollständer Link zum Vertretungsplan inkl. googleApi',
          def: ' ',
          role: 'value'
      });
      
      createState(lastFileName, {
          type: 'string',
          name: 'lastFileName',
          desc: 'Letzte Datei',
          def: ' ',
          role: 'value'
      });
      
      // 
      function getAgency() {
          var cookieJar = request.jar();
          request.post({url, jar: cookieJar, form: {"_username":"geheim", "_password":"geheim"}}, function(error, response, body){
              request.get({
                  url:"https://....................de/iserv/infodisplay/show/135",
                  jar: cookieJar
                  //header: response.headers
              },function(error, response, body){            
                  console.log(body);
                  const $ = cheerio.load(body);
                  var fileName = $('.infodisplay-widget-content img').attr('src');
                  console.log(fileName);
              });
          });
      }
      
      getAgency();
      
      schedule("0 */1 * * *", getAgency);
      

      In "fileName" steht jetzt: /iserv/infodisplay/pdf/147/1/0?1582451469

      Habt Ihr eine Idee wie ich das Ziel erreichen könnte?

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @Creator
      https://stackoverflow.com/questions/26734047/cannot-save-a-remote-image-with-node-js-and-request

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      0
      • C Offline
        C Offline
        Creator
        schrieb am zuletzt editiert von
        #3

        Danke, dass hat super geklappt. Das Bild wird gespeichert und es ist auch ein Bild :)
        Blöde Frage, aber warum findet der DateiManager von VIS das Bild nicht?
        Ich habe die Datei in den Ordner von meinen anderen Bildern gepackt aber im Vis ist die Datei nicht sichtbar.
        Die Rechte sind die selben.

        1 Antwort Letzte Antwort
        0
        • C Offline
          C Offline
          Creator
          schrieb am zuletzt editiert von Creator
          #4

          Hmm es klappt leider noch nicht mit VIS.
          VIS ignroiert Grundsätzlich das Bild was vom Script dort bereitgestellt wird.

          Geraten würde ich sagen, dass VIS das BIld irgendwo in der DB stehen haben muss, damit es klappt.
          Jemand eine Idee?

          Es klappt auch nicht mit einem HTML Widget und einfaches HTML:
          <img src="/vis.0/Tablet/test.png" >

          Es wird immer das alte BIld dargestellt nicht das aktuelle.

          1 Antwort Letzte Antwort
          0
          • C Offline
            C Offline
            Creator
            schrieb am zuletzt editiert von
            #5

            Ich habe jetzt herausgefunden, dass es an den neuen Regeln liegt.
            Danke appolon! https://github.com/ioBroker/ioBroker.vis/issues/267

            Aber das löst nur Teilweise das Problem, da ich der writeFile Methode nicht sagen kann, dass es ein binary ist, ist die Datei "kaputt" und kann nicht dargestellt werden.

            // Bild speichern
                        request(path, {jar: cookieJar, encoding: 'binary'}, function(error, response, body) {
                            //console.log(body);
                            //fs.writeFile('/tmp/agency.png', body, 'binary', function (err) {});
                            //var data = fs.readFileSync('/tmp/agency.png');
                            writeFile('vis.0', '/agency/agency.png', body, function (error) {
                                console.log('file written');
                            });
            
                            var date = new Date();                
                            setState(lastAgencyUpdate, formatDate(date, "TT.MM.JJJJ SS:mm"))
                        });
            

            writeFile speichert die Datei nicht richtig.
            Wer eine Idee?

            1 Antwort Letzte Antwort
            0
            • C Offline
              C Offline
              Creator
              schrieb am zuletzt editiert von
              #6

              Ich konnte es jetzt selber lösen. Was für ein Aufwand um ein Datei zu speichern...
              Das Problem war wohl, dass alles Asyncron läuft und somit das BIld Kaputt war, weil noch garnicht ganz da.

              So klappt es jetzt:

              request(path, {jar: cookieJar, encoding: 'binary'}, function(error, response, body) {
                              console.log(body);
                              fs.writeFile('/tmp/agency.png', body, 'binary', function (err) {
                                  var data = fs.readFileSync('/tmp/agency.png');
                                  writeFile('vis.0', '/agency/agency.png', data, function (error) {
                                      console.log('Agencyfile written');
                                      var date = new Date();                
                                      setState(lastAgencyUpdate, formatDate(date, "TT.MM.JJJJ SS:mm"))
                                  });                    
                              });                
                          });
              
              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

              495

              Online

              32.7k

              Benutzer

              82.3k

              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