FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Panik am 16 Mai 2016, 08:57:29

Titel: HTTPMod und Regex bei Wetterbericht
Beitrag von: Panik am 16 Mai 2016, 08:57:29
Hallo,

ich tue mich sehr schwer, den Wetterbericht mit HTTPMod und Regex von http://www.wetter.com/deutschland/berlin/DE0001020.html  herauszufiltern.
Einen betreffenden Auszug aus dem Seitenquelltext habe ich schon erfolgreich(?) unter
https://regex101.com/   mit dem Ausdruck  "<p>(.*?)<\/p>"  getestet.

<div class="clearfix">
    <h3>Dieses Wetter erwartet Sie im Tagesverlauf</h3>

   
    <p>
        In Berlin usw.
                                                </p>

   
        <div class="[ location-warnings cursor--normal layout__item one-half pl0 relative ][ portable-one-whole  mb ]">


Bei HTTPMod in FHEM bekomme ich aber kein Ergebnis (ich möchte mir das später vorlesen lassen)
das ist das gekürzte List:


Internals:
   BUSY       0
   CHANGED
   DEF        http://www.wetter.com/deutschland/berlin/DE0001020.html 60
   Interval   60
   LASTSEND   1463381480.65371
   MainURL    http://www.wetter.com/deutschland/berlin/DE0001020.html
   NAME       Wettervorhersage
   NR         688
   STATE      ???
   TRIGGERTIME 1463381540.65162
   TRIGGERTIME_FMT 2016-05-16 08:52:20
   TYPE       HTTPMOD
   addr       http://www.wetter.com:80
   buf        HTTP/1.1 200 OK

[hier der Seitenquelltext]

Attributes:
   reading01Name Tagesverlauf
   reading01Regex /<p>(.*?)<\/p>/s     
   timeout    5
   userattr   reading01Name reading01Regex stateFormat timeout


Hat das irgendwie mit den Zeilenumbrüchen zu tun oder muss man noch irgendwo "s modifier: single line" angeben?

Titel: Antw:HTTPMod und Regex bei Wetterbericht
Beitrag von: frank am 16 Mai 2016, 12:54:44
reading01Regex /<p>(.*?)<\/p>/s
so wird das nichts. den modifier kannst du so eingeben:

reading01Regex (?s)<p>(.*?)<\/p>
Titel: Antw:HTTPMod und Regex bei Wetterbericht
Beitrag von: Panik am 17 Mai 2016, 05:39:58
Aha.Ok.
Das klappt!
Danke!!!
Titel: Antw:HTTPMod und Regex bei Wetterbericht
Beitrag von: Panik am 24 Januar 2017, 18:06:27
Hallo,

da sich am Seitenquelltext etwas geändert hat und ich das mit dem Regex nicht voll hinbekomme frage ich nach Hilfe in die Runde:
Quelltextauszug:

<div class="[ app-layout ]" id="furtherDetails">

    <h2>Weitere Details zum Wetter in Berlin und Umgebung</h2>

    <div class="[ layout ]">

        <div class="[ layout__item desk-one-third portable-one-whole ] [ portable-mb ]">
                        <h3>Wetter heute, 24.01.2017</h3>
           
            In Berlin kommt es am Morgen zu Schneefällen bei Temperaturen von -2°C. Am Mittag überwiegt dichte Bewölkung aber es bleibt trocken und das Thermometer klettert auf 0°C. Am Abend ist in Berlin der Himmel bedeckt bei Werten von -1 bis zu 0°C. Nachts ist der Himmel bedeckt bei Tiefsttemperaturen von -1°C. <br /><br /> Die Wahrscheinlichkeit für Niederschläge liegt bei 90% und es ist mit einer maximalen Niederschlagsmenge von 0.4 l/m² zu rechnen. Gefühlt liegt die Temperatur bei maximal -1°C.
            <a data-event="" data-label="VHSZeitraum_ZumTrend" href="http://www.wetter.com/wetter_aktuell/wettervorhersage/14_tagesvorhersage/deutschland/berlin/DE0001020.html" class="[ btn--text ] [ absolute--bottom ] [ mt mb ]">
                <span>Zum 14 Tage Ausblick</span><span class="[ icon-arrow_link icon--large ][ pl-- ]"></span>
            </a>
            <hr class="mb0 desk-hide lap-hide">


mein Versuchs-Pattern bis jetzt:

(?s)</h3>.*(.*?)<a data.*?>


Irgendwie muss ich mittels LookBehind und LookAhead die umschließenden Tags wegbekommen
und auch solche Umbruch-Tags: <br />

Kann mir da jemand weiterhelfen?
Danke!
Titel: Antw:HTTPMod und Regex bei Wetterbericht
Beitrag von: JoeALLb am 24 Januar 2017, 21:41:02
Was ist mit
(?s)</h3>[\n\s]*(.*?)[\n\s]*<a\sdata
?
den unteren Satz verstehe ich nicht ganz, aber ich denke, das obere sollte ausreichen.

Ansonsten könnte man noch mit reading01OExpr oder reading01RecombineExpr spielen.
Titel: Antw:HTTPMod und Regex bei Wetterbericht
Beitrag von: Panik am 25 Januar 2017, 17:35:23
Hallo JoeALLb,

danke für deine Hilfe!
Inzwischen hab ich es:


defmod Wettervorhersage HTTPMOD http://www.wetter.com/deutschland/berlin/DE0001020.html 3600
attr Wettervorhersage userattr reading01Name reading01Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex stateFormat timeout
attr Wettervorhersage reading01Name Wetterbericht
attr Wettervorhersage reading01Regex (?s)Wetter heute,.*?</h3>[\n\s]*(.*?)[\n\s]*<a\sdata
attr Wettervorhersage room EG_Balkon
attr Wettervorhersage timeout 10
attr Wettervorhersage userReadings reading01User {my $v = ReadingsVal('Wettervorhersage','Wetterbericht','');; $v =~ s/<br \/>/ /g;; return $v;;}


Mal sehen bis wann das klappt (bis zur nächsten Seitenänderung).

Witzig ist, daß der gewonnene Inhalt ca. im Minutentakt beim Aufbau der Sätze und Wortstellungen wechselt.
Der Betreiber will wohl suggerieren, daß der Inhalt regelmäßig gepflegt wird  ;)