HTTPMOD erzeugt kein "buf"

Begonnen von T3mplate, 20 März 2017, 00:28:59

Vorheriges Thema - Nächstes Thema

Torben80

Das galt eigentlich eher Viegener.

Ich hatte das Problem, dass ich den Zustand meiner Alarmanlage auslesen wollte und ich immer (wie du) nichts zurück bekommen habe.
Es landet immer im reading, das man dann mit RegEx verarbeiten muss.

mit CURL kann man aber Daten abfangen die vom Device kommen (wenn ich das so richtig ausdrücke).
CURL ist hierbei aber ein Linux befehl, der schon in HTTPMOD integriert ist und mittels HTTPMOD schon genutzt wird.

Das bringt dich hier also nur bedingt weiter.

Die Frage die Viegener aber gestellt hat, die Stelle ich dir jetzt auch.
Warum willst du kramphaft den "Internal buf" befüllen, wenn es doch eh per reading01Name u. reading01Regex dann im Reading steht?

mfg Torben

T3mplate

Hier noch meine Regex, vielleicht hilft es ja jemandem:
Grundsätzlich wollte ich die Termine dieser Seite auslesen:
http://stadtplan.dresden.de/(S(amwqgeycotb5opqbwdtc3fup))/project/cardo3Apps/IDU_DDStadtplan/abfall/detailpage.aspx?POS-ADR=Winterbergstraße%7C6
Der Quelltext dahinter ist folgender:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head xml:lang="de" lang="de">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta name="generator" content="" />
<meta name="keywords" content="" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>Themenstadtplan-Dresden - Detailauskunft</title>
<style type="text/css">
body
{
font-family:Verdana;
font-size:10pt;
margin:12px;
font-family: Arial, Helvetica, sans-serif;
}
td
{
vertical-align:top;
}
.fett
{
font-weight:bold;
}
.orange
{
color:#CDA424;
}
.headline
{
font-weight:bold;
font-size:11pt;
}
.foot
{
font-size:8pt;
color:#8D8D8D;
}
hr
{
height:3px;
color:#EBEBEB;
}
</style>
</head>
<body onload="self.focus();">
<span class="headline orange">Abfallbehälter: Standplätze und Abfuhr</span>
<div class="contentblock">
<br />
<table width="100%" cellspacing="2" cellpadding="0" style="margin:0;">
<tr>
<td id="ux_standort_details"><table style='width:100%;' cellspacing='2' cellpadding='0'>
<colgroup>
<col width = '150'></col>
<col width = '*'></col>
</ colgroup >
<tr>
<td class='headline' colspan='2'>Winterbergstraße 6</td>
</tr>
<tr>
<td colspan='2' style='font - size:8px;'>&nbsp;</td>
</tr>
<tr class='fett'>
<td>Blaue Tonne</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Ihr Abfuhrtag:</td>
<td>dienstags alle 2 Wochen</ td>
</tr>
<tr>
<td>nächste Abfuhr:</td>
<td>Dienstag, 21.03.2017 (12. KW)</td>
</tr>
<tr>
<td>Ihr Entsorger:</td>
<td>Fehr Umwelt Ost GmbH, Kontakt: (0351) 207610</td>
</tr>
<tr>
<td colspan='2' style='font - size:8px;'>&nbsp;</td>
</tr>
<tr class='fett'>
<td>Gelbe Tonne</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Ihr Abfuhrtag:</td>
<td>montags alle 2 Wochen</ td>
</tr>
<tr>
<td>nächste Abfuhr:</td>
<td>Montag, 27.03.2017 (13. KW)</td>
</tr>
<tr>
<td>Ihr Entsorger:</td>
<td>Stadtreinigung Dresden, Kontakt: (0351) 44 55 116</td>
</tr>
<tr>
<td colspan='2' style='font - size:8px;'>&nbsp;</td>
</tr>
<tr class='fett'>
<td>Restabfall</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Ihr Abfuhrtag:</td>
<td>mittwochs alle 2 Wochen</ td>
</tr>
<tr>
<td>nächste Abfuhr:</td>
<td>Mittwoch, 29.03.2017 (13. KW)</td>
</tr>
<tr>
<td>Ihr Entsorger:</td>
<td>Stadtreinigung Dresden, Kontakt: (0351) 44 55 116</td>
</tr>
<tr>
<td colspan='2'><hr /></td>
</tr>
<tr>
<td colspan='2'>
Bitte beachten Sie: In Ausnahmefällen (z.B.an Feiertagen) kann es zu Terminveränderungen kommen.<br />
   Diese werden Ihnen jeweils aktuell im Abfuhrkalender angezeigt:
</td>
</tr>
<tr>
<td colspan='2'>&nbsp;</td>
</tr>
<tr>
<td colspan='2'>
<a class='orange' target='_blank' href='kalender.ashx?STANDORT=101268&DUMMY=636256937031130008'>Abfuhrkalender für 3 Monate aufrufen&nbsp;(*.pdf, ca. 100 KB)</a>
</td>
</tr>
<tr>
<td colspan='2'><hr /></td>
</tr></table></td>

</tr>
<tr>
<td class="foot">
Stand: <span id="ux_zeitstempel">21.03.2017</span><br />
Bitte beachten Sie, dass sich kurzfristige Änderungen ergeben können. Alle Angaben ohne Gewähr! (KW = Kalenderwoche)
</td>
</tr>
</table>
</div>
</body>
</html>



An die Lösung des Problems habe ich mich langsam herangetastet.
Erst einmal lernen musste ich, dass der in Klammern beschriebene Inhalt derjenige ist, der im Regex ausgegeben werden soll.
"([\d\.]+)" steht dabei für einen Zahlenwert. Vor diese Klammer sollte man die Stelle aus dem Quellcode setzen, an welcher als nächstes die (in diesem Fall) gesuchte Zahl folgt.
In meinem Fall suche ich dieses Datum:
<td>nächste Abfuhr:</td>
<td>Dienstag, 21.03.2017 (12. KW)</td>

Da ich Dienstag nicht verwenden kann (wechselt ja mit der Zeit), muss ich "nächste" oder "Abfuhr" verwenden.
Folgendes hat dann zum gewünschten Ergebnis geführt:
attr httpmod reading01Regex nächste</td>([\d\.]+)

Da ich neben der blauen Tonne aber auch noch die Gelbe Tonnne und den Restmüll brauche, brauche ich noch eine Lösung für diese.
<tr class='fett'>
<td>Gelbe Tonne</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Ihr Abfuhrtag:</td>
<td>montags alle 2 Wochen</ td>
</tr>
<tr>
<td>nächste Abfuhr:</td>
<td>Montag, 27.03.2017 (13. KW)</td>

Um die Stelle eindeutig zu finden, muss ich nach der "Gelben Tonne" suchen.
Da ich nicht weiß, wie ich mit Leerzeichen im html zumgehen muss, habe ich es etwas einfacher gelöst:
attr httpmod reading02Regex <td>Gelb([\d\.]+).
Dadurch habe ich aber das Problem, dass die nächste Zahl nicht mein gewünschtes Datum, sondern die "2" aus "montags alle 2 Wochen" ist.
Ich musste also irgendwie die 2 überspringen. Irgendwie muss es möglich sein wie im ersten Beispiel bis zum "nächste" (nach "Gelbe Tonne") zu springen.
Das habe ich aber auch nach etlichen Versuchen nicht geschafft.

Ich habe mir deshalb folgende Lösung gebastelt:
attr httpmod reading02Regex <td>Gelb[^0-9]+[^\D]+[^0-9]+([\d\.]+)
Wenn ich alles richtig verstanden habe, dann passiert dadurch folgendes:
"[^0-9]+" -> Überspringe alles was nicht 0-9 ist (Dadurch kommt man bis zur 2)
"[^\D]+" -> Überspringe alles was kein Buchstabe ist (Dadurch kommt man hinter die 2)
"[^0-9]+" -> Überspringe alles was nicht 0-9 ist (Dadurch kommt man bis zum Datum)
([\d\.]+) -> Schreibt das Datum in meine regex

Ich hoffe das hilft irgendjemandem.

T3mplate

Zitat von: Torben80 am 21 März 2017, 11:48:26
Das galt eigentlich eher Viegener.

Ich hatte das Problem, dass ich den Zustand meiner Alarmanlage auslesen wollte und ich immer (wie du) nichts zurück bekommen habe.
Es landet immer im reading, das man dann mit RegEx verarbeiten muss.

mit CURL kann man aber Daten abfangen die vom Device kommen (wenn ich das so richtig ausdrücke).
CURL ist hierbei aber ein Linux befehl, der schon in HTTPMOD integriert ist und mittels HTTPMOD schon genutzt wird.

Das bringt dich hier also nur bedingt weiter.

Die Frage die Viegener aber gestellt hat, die Stelle ich dir jetzt auch.
Warum willst du kramphaft den "Internal buf" befüllen, wenn es doch eh per reading01Name u. reading01Regex dann im Reading steht?

mfg Torben

Meine Frage war doch ob du erklären kannst wie du den "buf" füllen konntest.
Erstens will ich das wissen weil es das Ziel dieses Threads ist (und damit allen späteren Lesern auch die Antwort gegeben werden kann) und zweitens, weil die Lösung von Viegener zumindest bei mir nicht funktioniert. Ist es nicht auch albern in einem Forum zu schreiben "Danke bei mir geht es jetzt"? Ziel sollte es doch sein eine Lösung für alle anzubieten ;)

Ich wollte(!) deshalb krampfhaft den buf verwenden, weil ich den aus allen c&p httpmods kenne. Mein Bauchgefühl sagt mir das meiner falsch ist, so lange dieser nicht gefüllt ist.
Ich will diesen aber deshalb nach wie vor verwenden, weil das reading (wie weiter oben geschrieben) von Viegener nicht funktioniert.

Torben80

Zitat von: T3mplate am 21 März 2017, 12:15:19
Meine Frage war doch ob du erklären kannst wie du den "buf" füllen konntest.

Ja, sorry... Da ich jetzt eine andere URL für den HTTPMOD nutze, und zwar eine die mir schon Variablem zurück gibt (so wie JSON oder XML), bei mir ist es per POST / GET, bekomme ich den Inhalt dierekt in dern Internal buf hinein.

Ich kann es mir aber auch nicht erklären, warum unserer anderer Weg der URL-Abfrage das Ergebnis nicht in den buf sondern nur in ein Reading bringt. :-( Bin ich wohl zu doof zu ;-)

gruß Torben

viegener

@Torben80: Fühle mich nicht gequält - schön dass es geht
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: T3mplate am 21 März 2017, 12:15:19
Meine Frage war doch ob du erklären kannst wie du den "buf" füllen konntest.
Erstens will ich das wissen weil es das Ziel dieses Threads ist (und damit allen späteren Lesern auch die Antwort gegeben werden kann) und zweitens, weil die Lösung von Viegener zumindest bei mir nicht funktioniert. Ist es nicht auch albern in einem Forum zu schreiben "Danke bei mir geht es jetzt"? Ziel sollte es doch sein eine Lösung für alle anzubieten ;)

Ich wollte(!) deshalb krampfhaft den buf verwenden, weil ich den aus allen c&p httpmods kenne. Mein Bauchgefühl sagt mir das meiner falsch ist, so lange dieser nicht gefüllt ist.
Ich will diesen aber deshalb nach wie vor verwenden, weil das reading (wie weiter oben geschrieben) von Viegener nicht funktioniert.

Ob das Ziel ist den buf zu füllen kann ich nicht sagen, aber dazu will ich mich nicht wiederholen.

Wenn das reading nicht funktioniert, dann ist bei Dir etwas anderes falsch und geht nicht ist da wenig hilfreich
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

T3mplate

Zitat von: viegener am 21 März 2017, 16:54:14
Ob das Ziel ist den buf zu füllen kann ich nicht sagen, aber dazu will ich mich nicht wiederholen.

Wenn das reading nicht funktioniert, dann ist bei Dir etwas anderes falsch und geht nicht ist da wenig hilfreich

Wie bereits geschrieben brauche ich den buf nicht.
Hier nochmal der Post:
Zitat von: T3mplate am 21 März 2017, 11:37:23
Mir ging es wir Torben. Ich habe mich auch an der Umsetzung des SpritPreisMonitors festgehalten.
Um deine Frage zu beantworten: Es ist vollkommen ausreichend, wenn das in einem reading erscheint.
Wenn ich aber gemäß deiner Anleitung:
attr httpmod reading03Name alles
attr httpmod reading03Regex (.*)

verwende, dann erscheint als Ergebnis nur "HTTP/1.1 200 OK". Ich deute also, dass er nicht über die erste Zeile hinausgeht.
Welche Infos würden denn zur Problemanalyse helfen?

viegener

Zitat von: T3mplate am 21 März 2017, 12:15:19
Ich wollte(!) deshalb krampfhaft den buf verwenden, weil ich den aus allen c&p httpmods kenne. Mein Bauchgefühl sagt mir das meiner falsch ist, so lange dieser nicht gefüllt ist.
Ich will diesen aber deshalb nach wie vor verwenden, weil das reading (wie weiter oben geschrieben) von Viegener nicht funktioniert.

War mir nicht klar daraus, dass Du den buf jetzt doch nicht mehr haben wolltest.

Kannst Du regopt setzen wie in den anderen Posts beschrieben ?
attr reading03RegOpt s

Denn damit werden mehrere Zeilen im Ergebnis als eine behandelt.

Sorry, Ich kann leider nicht immer den ganzen Thread nochmal lesen.
Ich kann nur vermuten, dass "HTTP/1.1 200 OK" als Readingwert zurückkommt?

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

T3mplate

Zitat von: viegener am 21 März 2017, 18:26:34
War mir nicht klar daraus, dass Du den buf jetzt doch nicht mehr haben wolltest.

Kannst Du regopt setzen wie in den anderen Posts beschrieben ?
attr reading03RegOpt s

Denn damit werden mehrere Zeilen im Ergebnis als eine behandelt.

Sorry, Ich kann leider nicht immer den ganzen Thread nochmal lesen.
Ich kann nur vermuten, dass "HTTP/1.1 200 OK" als Readingwert zurückkommt?

Alles gut  ;D
Ja ich hatte "HTTP/1.1 200 OK" als Readingwert zurückbekommen.
Und basierend auf deiner Erklärung brachte
attr reading03RegOpt s
Auch die erhoffte Lösung.

Allerdings wird der html Code immer nur kurzzeitig angezeigt.
Direkt danach erscheint statt dem Code ein Bild der Website:

Torben80

Na siehste, dann gilt es doch jetzt nur noch das Reading nicht durch das "RegOpt s" sondern druch ein Regex laufen zu lassen.

Also "attr DeinDevice reading03Name JetztGehts" und "attr DeinDevice reading03Regex hierRegulärerAusdruck".

Für die RegulärenAusdrücke kann ich nur https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/ empfehlen.
Habe mir gestern ne Stunde genommen und das geleernt und heute meinen Erfolg gehabt, da ich mir den hier
no : "([0-9]*)".*?type : "([0-9a-zA-Z_ ]*)".*?name : "([0-9a-zA-Z_ ]*)".*?cond : "([a-zA-Z]*)" selber geschrieben habe... (Krasse Scheiße) ;-)

Ich würde dir auch gerne weiter helfen :-(





viegener

Zitat von: T3mplate am 21 März 2017, 20:33:06
Alles gut  ;D
Ja ich hatte "HTTP/1.1 200 OK" als Readingwert zurückbekommen.
Und basierend auf deiner Erklärung brachte
attr reading03RegOpt s
Auch die erhoffte Lösung.

Allerdings wird der html Code immer nur kurzzeitig angezeigt.
Direkt danach erscheint statt dem Code ein Bild der Website:

Versuche dann einfach die Seite mit dem Device nochmals zu refreshen im Browser - wird dann immer noch das HTML angezeigt?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können