NEWS
Web-Abfrage funktioniert nicht (Parser/Blockly)
-
Hallo zusammen,
ich möchte auf einer Seite wie https://dlr-web-daten1.aspdienste.de/cgi-bin/wetter.min5.pl?c=9 &sid=3&t=1,2,6,9,7,8&hh=1 verschiedene Wetterdaten abfragen. Leider gelingt das nicht. Die Bedeutung der Parameter in der Url sind mir bekannt. Erst dachte ich, mein RegEx sei fehlerhaft, aber das Problem besteht hier wohl darin, dass der Webserver einen "403 Forbidden"-Fehler ausliefert, wenn die Seite nicht im Browser aufgerufen wird - ich vermute, es fehlt an User-Agent & Co.
Deshalb scheitern meine Versuche sowohl mit dem Parser, als auch mit z.B. der Request-Funktion in Blockly.
Hat jemand eine Idee?
Danke!
-
Hallo zusammen,
ich möchte auf einer Seite wie https://dlr-web-daten1.aspdienste.de/cgi-bin/wetter.min5.pl?c=9 &sid=3&t=1,2,6,9,7,8&hh=1 verschiedene Wetterdaten abfragen. Leider gelingt das nicht. Die Bedeutung der Parameter in der Url sind mir bekannt. Erst dachte ich, mein RegEx sei fehlerhaft, aber das Problem besteht hier wohl darin, dass der Webserver einen "403 Forbidden"-Fehler ausliefert, wenn die Seite nicht im Browser aufgerufen wird - ich vermute, es fehlt an User-Agent & Co.
Deshalb scheitern meine Versuche sowohl mit dem Parser, als auch mit z.B. der Request-Funktion in Blockly.
Hat jemand eine Idee?
Danke!
@iobaer Zwei Versionen, eine welche dir nur das HTML liefert, die andere baut aus dem Html eine JSON, dafür musst du aber in der JS-Instanz cheerio installieren. Die zweite Tabelle(Summen) wird hier aber nicht behandelt, das kannst du selbst rauspfriemeln :-)


-
@fastfoot Erstmal vielen, vielen herzlichen Dank. Wow! Gerade auf Cheerio wäre ich selbst nicht gekommen, dazu findet man hier im Forum auch nur wenig.
Ich habe "cheerio" im JS-Adapter hinterlegt und es über die Befehlszeile installieren wollen. Da kam als Fehler:
npm WARN saveError ENOENT: no such file or directory, open '/home/pi/package.json' npm WARN enoent ENOENT: no such file or directory, open '/home/pi/package.json'Trat unter verschiedenen Usern auf, auch mit su.
Habe anschließend npm init durchgeführt (alles mit Eingabetaste bestätigt - war dies richtig?) und seither läuft es.
Allerdings gab mir das ioBroker-Log bei Skriptausführung stets diesen Fehler aus:
(3169) Error in request callback: TypeError: cheerio is not a functionNach Google-Suche kam ich dann auf einen Beitrag (https://stackoverflow.com/questions/67904881/cheerio-is-not-a-function-on-the-server-with-same-node-js-version-as-locally), mit Hilfe dessen ich
const cheerio = require('cheerio');in
const cheerio = require('cheerio').default;geändert habe - seither funktioniert es.
Hat möglicherweise etwas damit zu tun? https://github.com/cheeriojs/cheerio/releases/tag/v1.0.0-rc.9
Habe ich mir da weitere Probleme eingebaut oder passt das so?
Danke :)
-
@fastfoot Erstmal vielen, vielen herzlichen Dank. Wow! Gerade auf Cheerio wäre ich selbst nicht gekommen, dazu findet man hier im Forum auch nur wenig.
Ich habe "cheerio" im JS-Adapter hinterlegt und es über die Befehlszeile installieren wollen. Da kam als Fehler:
npm WARN saveError ENOENT: no such file or directory, open '/home/pi/package.json' npm WARN enoent ENOENT: no such file or directory, open '/home/pi/package.json'Trat unter verschiedenen Usern auf, auch mit su.
Habe anschließend npm init durchgeführt (alles mit Eingabetaste bestätigt - war dies richtig?) und seither läuft es.
Allerdings gab mir das ioBroker-Log bei Skriptausführung stets diesen Fehler aus:
(3169) Error in request callback: TypeError: cheerio is not a functionNach Google-Suche kam ich dann auf einen Beitrag (https://stackoverflow.com/questions/67904881/cheerio-is-not-a-function-on-the-server-with-same-node-js-version-as-locally), mit Hilfe dessen ich
const cheerio = require('cheerio');in
const cheerio = require('cheerio').default;geändert habe - seither funktioniert es.
Hat möglicherweise etwas damit zu tun? https://github.com/cheeriojs/cheerio/releases/tag/v1.0.0-rc.9
Habe ich mir da weitere Probleme eingebaut oder passt das so?
Danke :)
@iobaer sagte in Web-Abfrage funktioniert nicht (Parser/Blockly):
Ich habe "cheerio" im JS-Adapter hinterlegt und es über die Befehlszeile installieren wollen. Da kam als Fehler:
Wie genau? Das ist mit Sicherheit mit dem falschen User / im falschen Verzeichnis ausgeführt worden. Sonst wäre nicht nach /home/pi/package.json gesucht worden.
-
@fastfoot Erstmal vielen, vielen herzlichen Dank. Wow! Gerade auf Cheerio wäre ich selbst nicht gekommen, dazu findet man hier im Forum auch nur wenig.
Ich habe "cheerio" im JS-Adapter hinterlegt und es über die Befehlszeile installieren wollen. Da kam als Fehler:
npm WARN saveError ENOENT: no such file or directory, open '/home/pi/package.json' npm WARN enoent ENOENT: no such file or directory, open '/home/pi/package.json'Trat unter verschiedenen Usern auf, auch mit su.
Habe anschließend npm init durchgeführt (alles mit Eingabetaste bestätigt - war dies richtig?) und seither läuft es.
Allerdings gab mir das ioBroker-Log bei Skriptausführung stets diesen Fehler aus:
(3169) Error in request callback: TypeError: cheerio is not a functionNach Google-Suche kam ich dann auf einen Beitrag (https://stackoverflow.com/questions/67904881/cheerio-is-not-a-function-on-the-server-with-same-node-js-version-as-locally), mit Hilfe dessen ich
const cheerio = require('cheerio');in
const cheerio = require('cheerio').default;geändert habe - seither funktioniert es.
Hat möglicherweise etwas damit zu tun? https://github.com/cheeriojs/cheerio/releases/tag/v1.0.0-rc.9
Habe ich mir da weitere Probleme eingebaut oder passt das so?
Danke :)
@iobaer also cheerio wird nach Eintrag in der JS-Instanz vom JS-Adapter installiert, da gibt es meiner Erfahrung nach nichts weiter zu beachten oder von der Konsole zu installieren. Wenn es aber jetzt läuft würde ich erstmal nichts weiter unternehmen. Das Parsen der HTML mit RegEx habe ich mir schwierig vorgestellt, deshalb halt cheerio. Zu deinem ursprünglichen Problem mit 403-Forbidden, das war wohl der fehlende User-Agent. Mit dem herkömmlichen Block ist das nicht zu realisieren, deshalb die Funktion
-
@iobaer also cheerio wird nach Eintrag in der JS-Instanz vom JS-Adapter installiert, da gibt es meiner Erfahrung nach nichts weiter zu beachten oder von der Konsole zu installieren. Wenn es aber jetzt läuft würde ich erstmal nichts weiter unternehmen. Das Parsen der HTML mit RegEx habe ich mir schwierig vorgestellt, deshalb halt cheerio. Zu deinem ursprünglichen Problem mit 403-Forbidden, das war wohl der fehlende User-Agent. Mit dem herkömmlichen Block ist das nicht zu realisieren, deshalb die Funktion
-
@iobaer sagte in Web-Abfrage funktioniert nicht (Parser/Blockly):
@fastfoot Danke nochmal! Kannst Du Dir das mit dem .default erklären?
nein, liegt evtl. an der Version. Wenn ich das so probiere dann funktioniert es bei mir nicht. Habe das mal so bei axios gesehen, aber kenne mich da nicht wirklich aus
Edit: Ich hatte noch 1.0.0-rc6 installiert, nach Update auf 1.0.0-rc10 braucht es auch hier das
const cheerio = require('cheerio').default. Man kann es auch so einbindenconst {default:cheerio} = require('cheerio'); -
@iobaer sagte in Web-Abfrage funktioniert nicht (Parser/Blockly):
@fastfoot Danke nochmal! Kannst Du Dir das mit dem .default erklären?
nein, liegt evtl. an der Version. Wenn ich das so probiere dann funktioniert es bei mir nicht. Habe das mal so bei axios gesehen, aber kenne mich da nicht wirklich aus
Edit: Ich hatte noch 1.0.0-rc6 installiert, nach Update auf 1.0.0-rc10 braucht es auch hier das
const cheerio = require('cheerio').default. Man kann es auch so einbindenconst {default:cheerio} = require('cheerio');