Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [gelöst] Bild von Webseite parsen und in VIS darstellen.

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      Creator last edited by 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?

      OliverIO 1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO @Creator last edited by

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

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

          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 Reply Last reply Reply Quote 0
          • C
            Creator last edited by Creator

            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 Reply Last reply Reply Quote 0
            • C
              Creator last edited by

              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?

              creator81 created this issue in ioBroker/ioBroker.vis

              closed Darstellen von Bildern nur Möglich, wenn Dateimanager genutzt wird. #267

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

                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 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                853
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                cheerio parser request
                2
                6
                1299
                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