Hauptmenü

Hilfe Regex für HTTPMOD

Begonnen von neyzen, 04 Oktober 2019, 12:18:37

Vorheriges Thema - Nächstes Thema

neyzen

#15
Hallo,
die letzte Antwort von "amenomade" war damals meine Lösung. Seitdem hat mein Regex für das Abfragen der Zeiten immer sehr zuverlässig funktioniert.
Jetzt hatten wir heute die Zeitumstellung und dabei habe ich bemerkt das mein HTTPMOD das letzte mal vor 3 Tagen aktualisiert hatte obwohl ich ein Intervall von 14400sek (4Stunden) habe. Ein set reload bewirkt keine änderung. Der link zur webseite ist immer noch indentisch.
Wenn ich auf der seite https://regex101.com/ die html seite reinkopiere und meinen bisherigen regex
(?s)tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+)
test bekomme ich eine Meldung "catastrophic backtracking"

Könnte mir jemand hier behilflich sein

Mein Device sieht so aus
Internals:
   BUSY       0
   DEF        https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart 14400
   FUUID      5d988092-f33f-2b39-c917-64b07be0229c5630
   Interval   14400
   MainURL    https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart
   ModuleVersion 4.0.16 - 5.12.2020
   NAME       Namaz
   NOTIFYDEV  global
   NR         113
   NTFY_ORDER 50-Namaz
   STATE      ???
   TYPE       HTTPMOD
   value     
   CompiledRegexes:
   HTTPCookieHash:
     TSe78d6aab029;:
       Name       TSe78d6aab029
       Options    Max-Age=30;Path=/
       Path       
       Value      083d721e09ab28000d2a855827412f673ae386e047889c09e4eadd89f043fe0a85d322c2bfa1a060a46849e20e8279aa
   HttpUtils:
     NAME       
     addr       https://namazvakitleri.diyanet.gov.tr:443
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart
     header     Cookie: TSe78d6aab029=083d721e09ab2800289a80bc7c0a3e87fb65b92d17717aabc3bab99c465ba9739d21e82d97d2f66c54a7a915f7f095d3
     host       namazvakitleri.diyanet.gov.tr
     httpheader HTTP/1.1 200 OK
P3P: CP="{}"
Set-Cookie: TSe78d6aab029=083d721e09ab28000d2a855827412f673ae386e047889c09e4eadd89f043fe0a85d322c2bfa1a060a46849e20e8279aa; Max-Age=30;Path=/
P3P: CP="{}"
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Content-Type: text/html
Content-Length: 46625
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /de-DE/11027/gebetszeit-fur-stuttgart
     protocol   https
     redirects  0
     timeout    2
     url        https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart
     sslargs:
   QUEUE:
   READINGS:
     2021-10-28 22:00:56   01_Morgengebet  06:17
     2021-10-28 22:00:56   02_Sonnenaufgang 07:56
     2021-10-28 22:00:56   03_Mittagsgebet 13:12
     2021-10-28 22:00:56   04_Nachmittagsgebet 15:47
     2021-10-28 22:00:56   05_Abendgebet   18:18
     2021-10-28 22:00:56   06_Nachtgebet   19:38
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        0
     retryCount 0
     type       update
     url        https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart
Attributes:
   enableControlSet 1
   icon       3d_printer
   reading01-1Name 01_Morgengebet
   reading01-2Name 02_Sonnenaufgang
   reading01-3Name 03_Mittagsgebet
   reading01-4Name 04_Nachmittagsgebet
   reading01-5Name 05_Abendgebet
   reading01-6Name 06_Nachtgebet
   reading01Regex (?s)tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+)
   room       Namaz

neyzen

Hi,
ich hab wieder einmal das selbe Problem wie oben beschrieben.
Komisch ist, das es eine ganze Zeit ganz gut gelaufen ist.
Jetzt habe ich gemerkt das es seit 1 Woche nicht mehr aktualisiert.
Kann mir jemand helfen?

betateilchen

#17
Warum um alles in der Welt machst Du sowas über HTTPMOD?

define gebete Calendar ical url https://salati.de/ics/de/stuttgart_(baden-wurttemberg).ics

Damit hast Du den Kalender für das gesamte Jahr in FHEM verfügbar.


get gebete events limit:when=today

28.10.2022 06:17  Fadjr 2 Rabii(2) 1444
28.10.2022 07:58  Shuruk
28.10.2022 13:12  Zuhr
28.10.2022 15:45  Assr
28.10.2022 18:16  Magreb
28.10.2022 19:51  Ishaa


Was den Charme hat, dass Du zu jedem der genannten Zeitpunkte einen event in FHEM bekommst und sogar noch eine Vorlaufzeit (Hinweiszeit) z.B. 10 Minuten vorher konfigurieren kannst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

neyzen

Das Problem ist, das es verschiedene Zeiten gibt. Diese weichen teilweise um einige Minuten.

betateilchen

Zitat von: neyzen am 28 Oktober 2022, 21:59:20
Das Problem ist

Muss man denn wirklich aus allem ein "Problem" machen?

Zitat von: neyzen am 28 Oktober 2022, 21:59:20
verschiedene Zeiten gibt. Diese weichen teilweise um einige Minuten.

Nein, ich möchte jetzt gar nicht wissen, wer festlegt, welche der Zeiten die "richtigen" sind.
Eigentlich wollte ich nur einen alternativen, m.E. einfacheren, Lösungsweg aufzeigen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: neyzen am 28 Oktober 2022, 21:44:59
Jetzt habe ich gemerkt das es seit 1 Woche nicht mehr aktualisiert.
Kann mir jemand helfen?

Scheint so zu sein, dass der Webseitenbetreiber nun eine Prüfung auf "menschliche Besucher" eingebaut hat.
Im Seitenquellcode findet sich bei Abruf über FHEM folgendes:

<body>
This question is for testing whether you are a human visitor and to prevent automated spam submission.
<br>

(dann kommen Bilddaten)

<b>What code is in the image?</b>
<input type = "text" id="ans" name = "answer" value = "" />

<br>
<button id="jar" type="button">submit</button>

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

neyzen

Aktuell ist dieser link in mein HTTPMOD drin.
https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart
Beim aufrufen dieser Seite mit einem Browser bekomme ich aber keine Abfrage, ob ich ein Mensch bin.

neyzen

Wenn ich in dem HTTPMOD ein reread mache,müsste er doch von der Seite die neuen Zeiten wieder rausfischen, so wie er das ja schon seit Jahren gemacht hat. Aber da tut sich nichts. Letzte Aktualisierung war am 2022-10-22 14:00:40

betateilchen

#23
Zitat von: neyzen am 28 Oktober 2022, 22:12:54
Beim aufrufen dieser Seite mit einem Browser bekomme ich aber keine Abfrage, ob ich ein Mensch bin.

Ja, und weiter?  Was hat Dein Aufruf im Browser mit dem Aufruf einer URL aus FHEM zu tun?
Nix...

Wenn Du es nicht glaubst, schau in Deinem FHEM nach, was als Antwort von der URL kommt, wenn Du die Adresse über HTTPMOD aufrufst.
Und bevor Du jetzt nachfragst: Attribut showBody auf 1 setzen, dann siehst Du die Antwort in den Internals


<!DOCTYPE html>
<html><head>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="-1"/>
<meta http-equiv="CacheControl" content="no-cache"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" href="data:;base64,iVBORw0KGgo="/>

<script type="text/javascript">
(function(){
window["bobcmn"] = "...";

window["failureConfig"] = "...";
})();

</script>

<script type="text/javascript" src="/TSPD/083d721e09ab2000781c0b0c220a4851695ca7cbd677464d574b8c84789971b6dc95c2d5ca7580d6?type=5"></script>
<noscript>Please enable JavaScript to view the page content.<br/>Your support ID is:  3279287756213845572.<link rel="stylesheet" href="/TSPD/?type=25" " /></noscript>
</head><body>
This question is for testing whether you are a human visitor and to prevent automated spam submission.
<br>
<img src="data:image/png;base64, ... /> <a href="#" id="bottle">
<img src="data:image/png;base64, ... /></a>

<br>
<b>What code is in the image?</b>
<input type = "text" id="ans" name = "answer" value = "" />

<br>
<button id="jar" type="button">submit</button>

<br>
<br>
Your support ID is:  3279287756213845572.</body></html>



---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

neyzen

Hmm.
Ok sehe es. D.h. somit kann mein HTTMOD nicht auf die Webseite zugreifen und mir meine Zeiten rausfischen.

betateilchen

Vermutlich musst Du einen passenden Header für den http request mitgeben, damit die Webseite glaubt, der HTTPMOD Aufruf käme von einem richtigen Browser. Mit dem User-Agent würde ich da vielleicht mal anfangen.

Aber um das weiter erforschen zu wollen, fehlt mir tatsächlich das Interesse.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#26
Deine regex funktioniert einwandfrei, es fehlt wirklich nur der User-Agent.


define gebete2 HTTPMOD https://namazvakitleri.diyanet.gov.tr/de-DE/11027/gebetszeit-fur-stuttgart
attr gebete2 reading01Regex (?s)tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+).*?tpt-time">([\d:]+)
attr gebete2 requestHeader1 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1



setstate gebete2 2022-10-28 22:40:37 reading01-1 06:17
setstate gebete2 2022-10-28 22:40:37 reading01-2 07:56
setstate gebete2 2022-10-28 22:40:37 reading01-3 13:12
setstate gebete2 2022-10-28 22:40:37 reading01-4 15:47
setstate gebete2 2022-10-28 22:40:37 reading01-5 18:18
setstate gebete2 2022-10-28 22:40:37 reading01-6 19:38



---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

neyzen

Ich liebe dich man 8)
Vielen Vielen Dank. Hat funktioniert ;D