NEWS
(gelöst) javascript läuft nicht
-
Hallo,
habe jetzt nur mal schnell drüber gesehen über den Chaos Post :lol:
Bei mir wirft das Skript den gleichen Fehler aus. Vermutlich ist der Code der geparsten geparste Webseite vom Betreiber geändert worden.
Ich schaue mir das mal an. Kann ein paar Tage dauern. Hoffe, dein Tank ist nicht leer.
Gruß
Pix
-
Hab mir die Quellseite nochmal angesehen.
Wenn es reicht, werde ich dir Daten rausparsen, die auf Tafel angezeigt werden, welche der langhaarige Ire hält, okay?
Gruß
Pix
-
Jo, danke dir pix,
die Tanks sind voll der Winter kann kommen, also keinen Stress,
aber was meinst du mit Chaos Post, ich hab versucht alles richtig zu machen (… er war stets bemüht)
und was meinst du mit
@pix:Wenn es reicht, werde ich dir Daten rausparsen, die auf Tafel angezeigt werden, welche der langhaarige Ire hält, okay? `
aber ich freue mich das du mir hilfst, mochmals Danke
-
Hallo,
Sorry für das "Chaos Post", du bist bei den Code- und Spoiler Tags etwas durcheinander gekommen. Nicht schlimm.
Der langhaarige Ire ist Joey Kelly. Er ist auf der Hauptseite von heizoel24.de zu sehen. Er hält eine Tafel. Die Tafel zeigt einige Werte.
Gruß
Pix
-
@pix:Der langhaarige Ire ist Joey Kelly. Er ist auf der Hauptseite von heizoel24.de zu sehen. Er hält eine Tafel. Die Tafel zeigt einige Werte. `
So etwas hatte ich erwartet.Aber ich hatte nur einen fast Glatzköpfigen mit einer Tafel auf den Seiten gesehen
Gruß
Rainer
-
Tut mir leid,
ich konnte mich an beide nicht erinnern, liegt wohl an der Reizüberflutung
-
Habe mir das jetzt nochmal am Monitor angesehen.
Das ist tatsächlich Joey Kelly. :oops:
Am Tablet habe ich ihn echt nicht erkannt.
Gruß
Rainer
-
Hallo,
nochmal um sicherzugehen:
Das sind die Werte, die du brauchst, oder?
Preis, Datum, Prozent
Gruß
Pix
-
Hallo,
hier zeigt sich wieder, warum ein Adapter für das Einlesen diverser Informationen von einer Webseite ungünstig ist: Ein Änderung in der Struktur der Quellseite und das Skript/Adapter läuft nicht mehr und muss angepasst werden. Ein Skript können doch tendenziell mehr User anpassen, als einen Adapter.
Hier nun die neue Version:
<u>Änderungen</u>
-
Keine Prognose mehr, sondern Ist-Preise
-
Datenpunkt Text fällt weg
-
Pfad zu den drei Datenpunkten geändert (ggf. in VIS anpassen)
-
javascript.INSTANZ.Heizoel.Ist.Price
-
javascript.INSTANZ.Heizoel.Ist.Percent
-
javascript.INSTANZ.Heizoel.Ist.Date (ist Zeichenkette, kein Datumsformat)
-
Skript:
! ````
/* Ölpreis abfragen
Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
am 4.11.2016 getestet, nach Änderung der Webseite nun Fehler
Quelle: heizoel24.de
Basis: solar-wetter Skript
! erstellt: 03.08.2016 von pix
12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis.
Skript angepasst
*/
! var logging = false;
var link = 'http://www.heizoel24.de/heizoelpreise';
! // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
var request = require('request');
var idPrice = 'Heizoel.Ist.Price',
idPercent = 'Heizoel.Ist.Percent',
idDate = 'Heizoel.Ist.Date';createState(idPrice, {
name: 'HeizOel24.de Preis',
desc: 'Heizölpreis für heute',
type: 'number',
def: 0,
min: 0,
unit: '€/100l'
});
createState(idPercent, {
name: 'HeizOel24.de Änderung in Prozent zum Vortag',
desc: 'Heizölpreisänderung zum Vortag',
type: 'number',
def: 0,
min: 0,
max: 100,
unit: '%'
});
createState(idDate, {
name: 'HeizOel24.de Datum',
desc: 'Heizölpreis Zeitstempel (als String)',
type: 'string',
def: ''
});! function extractText(body,text1,text2) {
var start = body.indexOf(text1) + text1.length;
var ende = body.indexOf(text2,start);
if (logging) log('Startposition: ' + start);
if (logging) log('Endposition: ' + ende);
var zwischenspeicher;
if (((start != -1) && (ende != -1)) && (start <ende)) {/fehler/abfangen/zwischenspeicher="body.slice(start,ende);" if/(logging)/log(zwischenspeicher);/return(zwischenspeicher);/}/else/;/log(zwischenspeicher,/'error');/return(0);/ok/function/findprice/(body)/var/text1="class="middle">" ,/erstes/auftauchen/text2="<span class="currency">€</span>" price="extractText(body,text1,text2);" 50,54/price_array="price.split(',');" +/'.'/price_array[1];/log('heizöl/preis:/'/eur');/setstate(idprice,/parsefloat(price,10));/wert/in/objekt/schreiben/findpercent/percent="extractText(body,text1,text2);" percent_array="percent.split(',');" percent_array[1];/prozent:/percent.tofixed(2)/'%');/setstate(idpercent,/percent);/finddate/day="extractText(body,text1,text2);" ∅/100l,/12.11.2016</span="">if (logging) log('Heizöl Datum: ' + day);
var pdatum = findeDatum(day);
setState(idDate, pdatum); // Wert in Objekt schreiben
}
! function findeDatum (body) {
if (logging) log(body);
var stringdatum_array = body.split('.'); // ∅ 100l, 12.11.2016
var stringjahr = stringdatum_array[2].trim(); // 2016
var stringmonat = stringdatum_array[1].trim(); // 11
var stringtag_string = stringdatum_array[0].trim(); // ∅ 100l, 12
var stringtag_array = stringtag_string.split(','); // bei Komma trennen
var stringtag = stringtag_array[1].trim(); // 12
var stringdatum = stringtag + '.' + stringmonat + '.' + parseInt(stringjahr,10);
if (logging) log('Datum: ' + stringdatum);
return(stringdatum);
}
! function leseWebseite () {
try {
request(link, function (error, response, body) {
if (!error && response.statusCode == 200) { // kein Fehler, Inhalt in body
findPrice(body);
findPercent(body);
findDate(body);
log('Heizöl-Preis von heizoel24.de eingelesen');
} else log(error,'error'); // Error beim Einlesen
});
} catch (e) {
log('Fehler (try) leseWebseite: ' + e, 'error');
}
}
! // bei Skriptstart
leseWebseite();
! // Schedule
schedule("59 * * * *", leseWebseite);</ende))>Gruß Pix
-
-
Hallo Pix, genau das wollte ich, hab das aber schon im anderen Beitrag bestätigt, ich setze das mal auf gelöst, danke nochmals