Webseitenabfrage mit JSON

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

cmjay
Beiträge: 2373
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 250 Mal
Danksagung erhalten: 348 Mal

Webseitenabfrage mit JSON

Beitrag von cmjay » 13.05.2021, 21:17

Moin zusammen,
ich habe hier ein kleines Problem, bei dem ich eure Hilfe benötige, weil ich bei der Interpretation der Ergebnisse meiner bisherigen Versuche ziemlich im Wald stehe, in welche Richtung der Fehler zu suchen ist.

Systemvoraussetzungen:
Jungfräuliches RaspberryMatic Testsystem auf RPi2 mit aktueller Firmware 3.57.5, CuXD 2.6 mit eingerichtetem Exec-Gerät CUX2801001 und installiertem ScriptParser 1.9 Addon.

Anwendung:
Ich möchte automatisiert eine Webseite abfragen, über die kurzfristig frei gewordene Termine für die Corona-Impfung in den Impfzentren meines Bundeslandes gebucht werden können. Wenn ich mir den Seitenaufruf mit den Web Developer Tools im Firefox anschaue, dann sieht das z.B. folgendermassen aus

Code: Alles auswählen

https://www.impfen-saarland.de/service/api/left_over/availabilities.json?event_category_id=85042
Die 5-stellige ID repräsentiert dabei das jeweilige Impfzentrum. Als Antwort im Browser kommt (leider :cry: ) "BlaBla....Keine Termine verfügbar....BlaBla".
Die Seite scheint aber jedenfalls erreichbar zu sein.

Jetzt habe ich versucht, den Seitenaufruf in ein Script zu packen. Als ersten Schritt wollte ich mithilfe von Alchy's Script(en) aus nachfolgendem Thread
viewtopic.php?f=26&t=59598&p=590559&hil ... ge#p590559
erst mal testen ob und was ich mit besagtem Aufruf von der Webseite als Antwort bekomme.
Die Ausführung der System.exec- Variante des Testscriptes im ScriptParser funktioniert auch:

Code: Alles auswählen

string url = "https://www.impfen-saarland.de/service/api/left_over/availabilities.json?event_category_id=87534";
! +++++++++++ Finger weg ++++++++++++
string srueck;string error;
system.Exec("wget --no-check-certificate -O - '"#url#"'" , &srueck, &error);
if (!srueck == "") {WriteLine("Abfrage in Ordnung \n");
WriteLine(srueck);
}else{WriteLine("keine Rueckgabe");}
liefert aber das für mich überraschende Ergebnis:

Code: Alles auswählen

{
  "srueck": "",
  "sessionId": "",
  "error": "--2021-05-13 20:58:08--  https:\/\/www.impfen-saarland.de\/service\/api\/left_over\/availabilities.json?event_category_id=87534\nResolving www.impfen-saarland.de... 172.65.232.160, 2606:4700:90:0:f695:61c7:f30f:c69c\nConnecting to www.impfen-saarland.de|172.65.232.160|:443... connected.\nHTTP request sent, awaiting response... 503 Service Temporarily Unavailable\n2021-05-13 20:58:09 ERROR 503: Service Temporarily Unavailable.",
  "httpUserAgent": "",
  "url": "https:\/\/www.impfen-saarland.de\/service\/api\/left_over\/availabilities.json?event_category_id=87534",
  "STDOUT": "keine Rueckgabe\r\n"
}
Ich interpretiere das "503 Service Temporarily Unavailable" so, dass die Webseite nicht erreichbar ist. Laut "172.65.232.160|:443... connected" hat die Verbindung doch aber eigentlich geklappt. Oder heisst das, dass auf die Datenbank gerade nicht zugegriffen werden kann?
Wenn ich über das Webinterface im Browser die Verfügbarkeit prüfe, kommt folgende Antwort:
Keine Termine.png
Keine Termine.png (12.43 KiB) 889 mal betrachtet
Also scheint die Seite doch erreichbar zu sein. :shock:

Kann mir jemand auf die Sprünge helfen, was da schiefgeht bzw. wo ich den Denkfehler habe?
Danke.

P.S.: Gerne nachfragen, wenn ich aus Unwissenheit notwendige Zusatzinformationen unterschlagen haben sollte.
Zuletzt geändert von cmjay am 13.05.2021, 23:02, insgesamt 1-mal geändert.
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Webseitenabfrage mit JSON

Beitrag von Fonzo » 13.05.2021, 21:32

cmjay hat geschrieben:
13.05.2021, 21:17
Anwendung:
Ich möchte automatisiert eine Webseite abfragen, über die kurzfristig frei gewordene Termine für die Corona-Impfung in den Impfzentren meines Bundeslandes gebucht werden können.
Was hat das ganze mit Homematic zu tun bzw. warum brauchst Du für so ein Konstrukt eine CCU bzw. RaspberryMatic und machst das nicht gleich auf dem Webserver, der dann auch das Formular zur Buchung zur Verfügung stellen soll?

cmjay
Beiträge: 2373
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 250 Mal
Danksagung erhalten: 348 Mal

Re: Webseitenabfrage mit JSON

Beitrag von cmjay » 13.05.2021, 21:39

Was hat das ganze mit Homematic zu tun bzw. warum brauchst Du für so ein Konstrukt eine CCU bzw. RaspberryMatic und machst das nicht gleich auf dem Webserver, der dann auch das Formular zur Buchung zur Verfügung stellen soll?
Weil ich nicht weiss, wie ich sonst die Abfrage automatisieren soll. Sinn der Sache ist letztendlich, dass ein Script auf der RaspberryMatic in regelmässigen Abständen prüft, ob zu diesem Zeitpunkt Nachrückertermine zur Verfügung stehen und mir gegebenenfalls eine Pushnachricht schickt.
Es geht also um eine Benachrichtigungsfunktion um solche Optionen nicht zu verpassen.
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Webseitenabfrage mit JSON

Beitrag von Fonzo » 13.05.2021, 21:44

cmjay hat geschrieben:
13.05.2021, 21:39
Sinn der Sache ist letztendlich, dass ein Script auf der RaspberryMatic in regelmässigen Abständen prüft, ob zu diesem Zeitpunkt Nachrückertermine zur Verfügung stehen und mir gegebenenfalls eine Pushnachricht schickt.
Ah dann ist klarer was Du genau machen willst, ich dachte Du willst die Daten seinerseits wieder als Webseite zur Verfügung stellen, dann hatte ich Dein Vorhaben falsch verstanden.

cmjay
Beiträge: 2373
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 250 Mal
Danksagung erhalten: 348 Mal

Re: Webseitenabfrage mit JSON

Beitrag von cmjay » 14.05.2021, 00:50

Ich glaube ich hab das System verstanden. It's not a bug, it's a feature!
Wahrscheinlich ist "503 Service Temporarily Unavailable" die Rückgabe des Datenbankservers, die die Auslieferung der Webseite "Keine Termine verfügbar" triggert. Wenn der Service nicht verfügbar ist, sind also keine Termine frei.
Kann das sein?

Ich könnte demnach die Serverantwort auf Vorhandensein der Fehlermeldung "503 Service Temporarily Unavailable" prüfen und wenn dieser String fehlt (in meiner Logik also gleichbedeutend mit Nachrückertermine sind gerade verfügbar) eine Pushnachricht an mich versenden.

Aber auf welche Weise werte ich diese Error 503 Message aus?
Oder ist das alles Käse, was ich mir da zu nachtschlafender Stunde zusammengereimt habe :?:
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Webseitenabfrage mit JSON

Beitrag von jp112sdl » 14.05.2021, 06:31

cmjay hat geschrieben:
14.05.2021, 00:50
Oder ist das alles Käse, was ich mir da zu nachtschlafender Stunde zusammengereimt habe
Ich würde sagen: Ja.

Wenn ich die Seite mit wget abrufe, kommt sofort der Fehler 503

Wenn ich die Seite mit curl abrufe, bekomme ich eine saubere HTML zurück.
Es ist aber auch nur die "Checking your browser..."
Bildschirmfoto 2021-05-14 um 06.17.17.png
Ich bin auch nicht fit, was Web betrifft.
In der HTML-Rückgabe steht zumindest ">Please turn JavaScript on and reload the page." drin.
Da wird also noch clientseitig irgendwas verarbeitet.

VG,
Jérôme ☕️

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

cmjay
Beiträge: 2373
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 250 Mal
Danksagung erhalten: 348 Mal

Re: Webseitenabfrage mit JSON

Beitrag von cmjay » 14.05.2021, 07:58

Ich würde sagen: Ja.
Danke für die Rückmeldung. :lol:
Mich hat verwirrt, dass ja erst ein "172.65.232.160|:443... connected" kommt. Deshalb dachte ich ganz naiv, dass die Kommunikation schon mal prinzipiell funktioniert.
Wenn ich dich richtig verstehe, dann liegt die Misere also daran, dass die RaspberryMatic kein JavaScript beherrscht?
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Webseitenabfrage mit JSON

Beitrag von jp112sdl » 14.05.2021, 08:08

cmjay hat geschrieben:
14.05.2021, 07:58
dass die RaspberryMatic kein JavaScript beherrscht?
Das hat nix speziell mit RM zu tun.
Weder "curl" noch "wget" können JS clientseitig ausführen.
Es gibt sowas wie "domcurl" https://github.com/PaulKinlan/domcurl , aber das schleppt einen kompletten Chromium mit sich und benötigt NodeJS (was du evtl. schon hast wenn du Redmatic installiert hast).

VG,
Jérôme ☕️

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

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Webseitenabfrage mit JSON

Beitrag von Fonzo » 14.05.2021, 08:26

cmjay hat geschrieben:
14.05.2021, 07:58
Wenn ich dich richtig verstehe, dann liegt die Misere also daran, dass die RaspberryMatic kein JavaScript beherrscht?
Nicht ganz, das hängt davon ab wie RaspberryMatic konfiguriert ist, aber da ist zunächst genauso wie auf der CCU3 auch der NEO Server installiert und dieser nutzt als Sprache JavaScript, damit könntest Du also ganz normal JavaScript nutzten, wenn Du das willst, ohne etwas zusätzlich nach installieren zu müssen.
Sieht dann als Basis so aus

Code: Alles auswählen

var url = 'http://example.org';

// Benutze das HTTP- oder HTTPS-Modul je nach URL.
var httpx = (url.indexOf('https://') === 0) ? require('https') : require('http');

var req = httpx.get(url, function(response) {
    console.log('Antwort erhalten.', response.statusCode);
    response.resume();
});
req.on('error', function(err) {
    console.error(err);
});
Dann kannst Du JavaScript auch die Antwort auswerten und das JSON zerlegen und den gesuchten Wert in eine Variable ablegen.

cmjay
Beiträge: 2373
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 250 Mal
Danksagung erhalten: 348 Mal

Re: Webseitenabfrage mit JSON

Beitrag von cmjay » 14.05.2021, 08:34

Das hat nix speziell mit RM zu tun.
Weder "curl" noch "wget" können JS clientseitig ausführen.
Es gibt sowas wie "domcurl" https://github.com/PaulKinlan/domcurl , aber das schleppt einen kompletten Chromium mit sich und benötigt NodeJS (was du evtl. schon hast wenn du Redmatic installiert hast).
Mit anderen Worten: hier endet dann das Experiment für mich (jedenfalls per Homematic), weil ich für die Abfrage einen Browser benötige? (Ich bezweifle, dass ich den nicht-trivialen Lösungsansatz über domcurl mit meinen offensichtlich sehr beschränkten Kenntnissen und Fähigkeiten hinbekomme ...).

[OT]
Da fällt mir ein:
Es gab früher mal eine Browsererweiterung für Firefox, mit der konnte man Nutzerinteraktionen aufnehmen und dann automatisiert abspielen. Damit habe ich mal den Support eines Mobilfunkproviders über deren Webinterface zur Kontaktaufnahme in den Wahnsinn getrieben, bis die sich endlich mal telefonisch meines Problems angenommen haben. Ich glaube ich habe damit massgeblich zur flächendeckenden Einführung von Captchas beigetragen. :lol: Ich erinnere mich noch genau an die ersten Worte der Leiterin des Call-Service bei ihrem Rückruf nach 3 Tagen "Nachrichtenbombardement" mit täglich ansteigender Frequenz: "Meine Mitarbeiter kommen hier langsam in einen Blutrausch ..." :mrgreen: :mrgreen: :mrgreen:

Gute alte Zeit ... Aber nur eine nette Anekdote, die mir gerade einfiel. Würde mir - selbst wenn es (noch) funktionierte - natürlich nichts bei meinem vorliegenden Problem helfen.
[/OT]

EDIT: Meine Anekdote hat mich zu lange beschäftigt, daher zeitliche Überschneidung mit @Fonzo. Danke für den Hinweis und die Bereitstellung eines Lösungsansatzes! Da keimt wieder etwas Hoffnung auf. Werde es heute Abend nach der Arbeit mal ausprobieren und dann berichten.
Zuletzt geändert von cmjay am 14.05.2021, 18:57, insgesamt 3-mal geändert.
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

Antworten

Zurück zu „RaspberryMatic“