String aus Web verschluckt < und > - Zeichen?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
MartinMatic
Beiträge: 99
Registriert: 19.10.2020, 18:34
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 29 Mal

String aus Web verschluckt < und > - Zeichen?

Beitrag von MartinMatic » 20.06.2021, 12:37

Hallo in die Runde,

wieder mal ne blöde Frage:
Ich versuch mich gerade daran, HTML-Code einer Webseite zu zerlegen, um bestimmte Informationen herauszufiltern (jaja ich weiss: Wetterinfos die 100ertste :roll: ).
Dazu hab ich mir erstmal ein bisschen ganz einfachen Code zusammengeklaut, um den HTML-Code der Webseite in einen String zu schreiben:

Code: Alles auswählen

WriteLine("Getting Weather");
var url_heute = "https://www.wetter.de/deutschland/wetter-frankfurt-18221009/wetterbericht-aktuell.html"; !- Wetter.de Reiter "heute"
string CUXD_Device = "CUxD.CUX2801001:1";
string weathertext_today;
integer SkipPtr; !- Zeiger zum Sting-Schneiden

dom.GetObject(CUXD_Device#".CMD_SETS").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L " # url_heute);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
weathertext_today = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
if(!weathertext_today)
  {
  (dom.GetObject(ID_DATAPOINTS)).Get(CUXD_Device#".CMD_EXEC").State("logger -t script -p user.debug [Script WetterDE: keine Antwort vom Wetter-Server!]");
  WriteLine("Script WetterDE: keine Antwort vom Wetter-Server!");
  quit;
  }

weathertext_today = weathertext_today.ToLatin();
SkipPtr = weathertext_today.Find("section class=\"weather-daysummary"); !- Anfang Vorhersage suchen
weathertext_today = weathertext_today.Substr(SkipPtr);
  
WriteLine(weathertext_today);
WriteLine("done");
Funkioniert soweit auch halbwegs, ABER: Im String fehlen alle < und > Zeichen (bzw. werden durch Leerzeichen ersetzt):

Code: Alles auswählen

Getting Weather
section class="weather-daysummary"  div class="weather-daysummary__header"  h2 datetime="2021-06-20" class="weather-daysummary__date"  div class="weather-daysummary__date__weekday" Sonntag 
[...]
statt:

Code: Alles auswählen

weather-daysummary"><div class="weather-daysummary__header"><h2 datetime="2021-06-18" class="weather-daysummary__date"><div class="weather-daysummary__date__weekday"> Sonntag
Das ist ein bisschen blöd, weil man damit super nach HTML-Tags suchen könnte.
Ich versteh' aber grad nicht so, warum das so ist :?:

Grüße

Martin

MichaelN
Beiträge: 9649
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: String aus Web verschluckt < und > - Zeichen?

Beitrag von MichaelN » 20.06.2021, 13:03

Ab welchem Schritt und wie prüfst du das?
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

MartinMatic
Beiträge: 99
Registriert: 19.10.2020, 18:34
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 29 Mal

Re: String aus Web verschluckt < und > - Zeichen?

Beitrag von MartinMatic » 20.06.2021, 13:27

Ich sehe das schon direkt vor der ToLatin - Konvertierung, wenn ich mir den Text mit WriteLine ausgeben lasse (Skript testen).
Aufgefallen ist mir das, weil die Suche mit .Find nach "<section class=\"weather-daysummary" erfolglos blieb.

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: String aus Web verschluckt < und > - Zeichen?

Beitrag von jp112sdl » 20.06.2021, 13:50

Scheint irgendwas mit CUxD zu sein.

Wenn man die URL mit

Code: Alles auswählen

string out;
string err;
system.Exec("curl -s -k -L "#url_heute, &out, &err);
abruft, steht in out der Text inkl. der < > drin.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Benutzeravatar
Rosagallica
Beiträge: 81
Registriert: 22.07.2018, 15:54
System: CCU
Hat sich bedankt: 14 Mal
Danksagung erhalten: 6 Mal

Re: String aus Web verschluckt < und > - Zeichen?

Beitrag von Rosagallica » 21.06.2021, 19:43

Scheint irgendwas mit CUxD zu sein.
Genau:
5.8.2 System.Exec
...
CMD_RETS
string lesend Befehl ausführen (kurzer Tastendruck) mit Rückgabe von STDOUT, popen(). Es werden alle '<' und '>'-Zeichen durch Leerzeichen ersetzt.
CMD_RETL
string lesend Befehl ausführen (langer Tastendruck) mit Rückgabe von STDOUT, popen(). Es werden alle '<' und '>'-Zeichen durch Leerzeichen ersetzt.
@MartinMatic: Probier dich lieber an JSON-fähigen Wetter-API aus ;) Die HM-Skriptsprache ist nicht so das "ideale" Umfeld, um einen HTML- oder XML-Parser zu bauen.

MartinMatic
Beiträge: 99
Registriert: 19.10.2020, 18:34
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 29 Mal

Re: String aus Web verschluckt < und > - Zeichen?

Beitrag von MartinMatic » 25.06.2021, 14:39

Dankeschön für die Aufklärung :D
@MartinMatic: Probier dich lieber an JSON-fähigen Wetter-API aus ;) Die HM-Skriptsprache ist nicht so das "ideale" Umfeld, um einen HTML- oder XML-Parser zu bauen.
Ja, wär' mir tendenziell auch lieber (vor allem, weil's hier schon ein paar fertige gibt...).
Problem ist, dass ich für meine Solarthermie gerne eine Vorhersage der solaren Leistung hätte, um Verbraucher entsprechend des zu erwartenden Solarertrags steuern zu können.
Die JSON- (oder wenigstens XML-) tauglichen Wetterdienste (OpenWeatherMap und Co.) liefern leider nur die Bewölkung (die nicht unbedingt gut mit der Solarleistung korreliert) oder sind für meine Region unzuverlässig. Die Angabe der "Sonnenstunden" ist bisher der beste Match zur Aufgabenstellung, den ich gefunden habe.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“