NEWS

Split is not a Function;Ölpreisskript


  • Hi!
    bekomme leider den Fehler,beim Ölpreisskript. Weiß jemand rat?

    javascript.0	2020-08-25 06:59:03.898	error	(15747) Error in request callback: TypeError: body.split is not a function
    javascript.0	2020-08-25 06:59:03.898	error	(15747) script.js.common.oelpreis: Fehler beim Ausschneiden
    
    /* Ö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);
            zwischenspeicher = zwischenspeicher.trim();
            if (logging) log(zwischenspeicher);
            return(zwischenspeicher);
        } else {
            zwischenspeicher = 'Fehler beim Ausschneiden';
            log(zwischenspeicher, 'error');
            return(0);
        }
    }
    
    //ok
    function findPrice (body) {   
        var text1 = 'class="middle">', // erstes Auftauchen
            text2 = '<span class="currency">€</span>';  // erstes Auftauchen
        var price = extractText(body,text1,text2); // 50,54 
        var price_array = price.split(',');
        price = price_array[0] + '.' + price_array[1];
        price = parseFloat(price);
        if (logging) log('Heizöl Preis: ' + price + ' EUR');
        setState(idPrice, parseFloat(price,)); // Wert in Objekt schreiben
    }
    
    function findPercent (body) {   
        var text1 = '<span class="lower"><span class=" red">', // erstes Auftauchen
            text2 = '%</span> zum Vortag</span>';  // erstes Auftauchen
        var percent = extractText(body,text1,text2); // 50,54 
        var percent_array = percent.split(',');
        percent = percent_array[0] + '.' + percent_array[1];
        percent = parseFloat(percent);
        if (logging) log('Heizöl Prozent: ' + percent.toFixed(2) + '%');
        setState(idPercent, percent); // Wert in Objekt schreiben
    }
    
    function findDate (body) {   
        var text1 = 'class="upper">', // erstes Auftauchen
            text2 = 'class="middle">'; // erstes Auftauchen
        var day = extractText(body,text1,text2); // &empty; 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('.'); // &empty; 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(); // &empty; 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);
    

    Danke!


  • @Adnim wenn du das Logging aktivierst siehst du das es daran liegt, dass das Datum nicht korrekt ermittelt werden kann (Zeile 89).

Suggested Topics

  • 5
  • 3
  • 9
  • 2
  • 14
  • 106
  • 3
  • 3

1.1k
Online

38.4k
Users

43.8k
Topics

612.8k
Posts