NEWS
[gelöst] Bild von Webseite parsen und in VIS darstellen.
-
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?
-
-
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. -
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.
-
Ich habe jetzt herausgefunden, dass es an den neuen Regeln liegt.
Danke appolon! https://github.com/ioBroker/ioBroker.vis/issues/267Aber 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? -
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")) }); }); });