NEWS
Website auslesen/JSON parsen
-
@negalein sagte: muss es im Script mit ae sein?
Ich habe nur den Funktionsbezeichner geändert, da ich in Bezeichnern Umlaute vermeide. Es funktioniert wahrscheinlich auch mit "ä".
Der Stationsname muss mit "ä" geschrieben werden wie im JSON. -
-
habe es nun so
// Pegelonline script by ilovegym66 // var request = require('request'); var url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Schärding'; var sourceDate; // var trend; var value; // var stateMnwMhw; // var stateNswHsw; var idsourceDate = '0_userdata.0.Pegelalarm.Schaerding.sourceDate'; // var idtrend = '0_userdata.0.Pegelalarm.Schärding.trend'; var idvalue = '0_userdata.0.Pegelalarm.Schaerding.value'; // var idstateMnwMhw = '0_userdata.0.Pegelalarm.Schärding.stateMnwMhw'; // var idstateNswHsw = '0_userdata.0.Pegelalarm.Schärding.stateNswHsw'; createState('0_userdata.0.Pegelalarm.Schaerding.sourceDate', { name: 'sourceDate', }); createState('0_userdata.0.Pegelalarm.Schaerding.value', { name: 'value', }); // createState('0_userdata.0.Pegelalarm.Schärding.trend', { // name: 'trend', // }); // createState('0_userdata.0.Pegelalarm.Schärding.stateMnwMhw', { // name: 'stateMnwMhw', // }); // createState('0_userdata.0.Pegelalarm.Schärding.stateNswHsw', { // name: 'stateNswHsw', // }); function PegelSchaerding() { request(url, function ( err, state, body){ if (err) { log("Fehler aufgetreten: " + err); } else { var obj = JSON.parse(body); sourceDate = obj.sourceDate; value = obj.value; // trend = obj.trend; // stateMnwMhw = obj.stateMnwMhw; // stateNswHsw = obj.stateNswHsw; setState(idsourceDate, sourceDate); // setState(idtrend, trend); setState(idvalue, value); // setState(idstateMnwMhw, stateMnwMhw); // setState(idstateNswHsw, stateNswHsw); } }); } schedule('*/21 * * * *', PegelSchaerding);
Aber auch nach den 21 Minuten lt. Schedule steht nichts in den beiden DP
0_userdata.0.Pegelalarm.Schaerding.sourceDate
und0_userdata.0.Pegelalarm.Schaerding.value
.Könntest du es bei dir testen?
-
@negalein sagte: Könntest du es bei dir testen?
Ich habe es mit dieser URL erfolgreich getestet:
var url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding';
Mit log() anstelle von setState():
18:21:09.169 info javascript.0 (1916) script.js.common.Neuer_Test: 24.03.2021T17:30:00+0100 18:21:09.169 info javascript.0 (1916) script.js.common.Neuer_Test: 361
-
@paul53 sagte in Website auslesen/JSON parsen:
Ich habe es mit dieser URL erfolgreich getestet:
Ich bekomme keine Daten
Egal ob ich
https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding
oderhttps://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding
verwende.So schaut das Script aus.
// Pegelonline script by ilovegym66 // var request = require('request'); var url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding'; var sourceDate; // var trend; var value; // var stateMnwMhw; // var stateNswHsw; var idsourceDate = '0_userdata.0.Pegelalarm.Schaerding.sourceDate'; // var idtrend = '0_userdata.0.Pegelalarm.Schärding.trend'; var idvalue = '0_userdata.0.Pegelalarm.Schaerding.value'; // var idstateMnwMhw = '0_userdata.0.Pegelalarm.Schärding.stateMnwMhw'; // var idstateNswHsw = '0_userdata.0.Pegelalarm.Schärding.stateNswHsw'; createState('0_userdata.0.Pegelalarm.Schaerding.sourceDate', { name: 'sourceDate', }); createState('0_userdata.0.Pegelalarm.Schaerding.value', { name: 'value', }); // createState('0_userdata.0.Pegelalarm.Schärding.trend', { // name: 'trend', // }); // createState('0_userdata.0.Pegelalarm.Schärding.stateMnwMhw', { // name: 'stateMnwMhw', // }); // createState('0_userdata.0.Pegelalarm.Schärding.stateNswHsw', { // name: 'stateNswHsw', // }); function PegelSchaerding() { request(url, function ( err, state, body){ if (err) { log("Fehler aufgetreten: " + err); } else { var obj = JSON.parse(body); sourceDate = obj.sourceDate; value = obj.value; // trend = obj.trend; // stateMnwMhw = obj.stateMnwMhw; // stateNswHsw = obj.stateNswHsw; setState(idsourceDate, sourceDate); // setState(idtrend, trend); setState(idvalue, value); // setState(idstateMnwMhw, stateMnwMhw); // setState(idstateNswHsw, stateNswHsw); } }); } schedule('*/21 * * * *', PegelSchaerding);
Siehst du noch wo einen Fehler?
-
@negalein sagte: Siehst du noch wo einen Fehler?
Die Funktion, die ich gepostet habe, sieht ganz anders aus.
Versuche es damit:const url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding'; const idsourceDate = '0_userdata.0.Pegelalarm.Schaerding.sourceDate'; const idvalue = '0_userdata.0.Pegelalarm.Schaerding.value'; function PegelSchaerding() { request(url, function(err, state, body) { if (err) { log("Fehler aufgetreten: " + err); } else { let stations = JSON.parse(body).payload.stations; for(let i = 0; i < stations.length; i++) { if(stations[i].stationName == 'Schärding') { let sourceDate = stations[i].data[0].sourceDate; let value = stations[i].data[0].value; setState(idsourceDate, sourceDate, true); setState(idvalue, value, true); break; } } } }); } schedule('*/21 * * * *', PegelSchaerding);
-
-
@paul53 sagte in Website auslesen/JSON parsen:
Die Funktion, die ich gepostet habe,
Noch eine Frage.
Wenn ich mehrere Messstellen abfragen möchte, ist es dann besser für jede Messstelle ein eigenes Script, oder kann man in dem bestehendem mehrere einfügen?Es ginge noch um diese zusätzlichen Messstellen.
https://api.pegelalarm.at/api/station/1.0/list?qStationName=Pramerdorf
https://api.pegelalarm.at/api/station/1.0/list?qStationName=Passau%20Ingling
https://api.pegelalarm.at/api/station/1.0/list?qStationName=Passau%20Marienbr%C3%BCcke
-
@negalein sagte: kann man in dem bestehendem mehrere einfügen?
Man kann das Skript um mehrere Messstellen erweitern. Gibt es zeitliche Einschränkungen beim Zugriff auf die API?
-
@paul53 sagte in Website auslesen/JSON parsen:
Gibt es zeitliche Einschränkungen beim Zugriff auf die API?
Kann ich leider nicht sagen, da keine Doku zur 1.0 existiert.
Dann erstell ich besser getrennte Scripte mit unterschiedlichen Schedules.