Hallo zusammen,
die Idee dazu kam mir, als meine Tochter 1,5 Jahre alt war und zum ersten mal
eine gute Freundin auf sie aufgepasst hat, damit meine Frau und ich einen netten
Abend verbringen können.
Also hab ich mich ans dran gesetzt und für mein Tablet UI eine "SOS" Seite erstellt, wo
z.B. alle wichtigen Telefonnummern drauf stehen (Notruf Giftzentrale, usw.).
Neben den wichtigen Nummern, habe ich auch eine Anzeige für die nächstegelegene
Notdienst Apotheke hinzugefügt und diesen Codeschnipsel möchte ich nun mit euch teilen.
Ich möchte noch anmerken, dass ich kein Profi in Sachen RegEx bin.
Bei mir funktioniert das ganze allerdings ohne Probleme.
Die Daten werden von https://www.aponet.de (https://www.aponet.de) via HTTPMOD geholt.
Nun gibt es zwei Möglichkeiten:
Ihr wohnt in einem kleine Dorf/Gemeinte
Hier reicht die Eingabe der Postleitzahl eigentlich aus.
Ihr geht also auf https://www.aponet.de/ (https://www.aponet.de/) und gebt oben rechts
eure Postleitzahl ein. Den Link aus der Adresszeile kopiert ihr euch.
Der Link sollte so aussehen
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/EURE-PLZ.html
Ihr wohnt in einer Großstadt
Hier macht eine Adresseingabe Sinn, da ja die nächstgelegene Apotheke angezeigt
wird.
Ihr geht auf https://www.aponet.de/service/notdienstapotheke-finden/erweiterte_suche.html (https://www.aponet.de/service/notdienstapotheke-finden/erweiterte_suche.html)
und tragt unten eure Daten ein.
GANZ WICHTIG: In dem Feld Datum tragt ihr eine 0 ein! Dadurch wird immer die aktuelle Notdienst
Apotheke angezeigt.
Dann auf Suche klicken und den Link aus der Adresszeile kopieren.
Dieser sollte ungefähr so aussehen
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/EURE-PLZ/EURE-ADRESSE.html
Hier folgt nun meine Raw definition
defmod NotdienstApotheke HTTPMOD !!!HIER-MUSS-EUER-LINK-HIN!!! 0
attr NotdienstApotheke userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex
attr NotdienstApotheke enableControlSet 1
attr NotdienstApotheke reading01Name NotName
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9.;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading02Name NotdienstVon
attr NotdienstApotheke reading02Regex <p>Notdienst.*\n([ a-zA-Z0-9.:;_-]+)
attr NotdienstApotheke reading03Name NotdienstBis
attr NotdienstApotheke reading03Regex <span>([ a-zA-Z0-9.:;_-]+)<\/span>
attr NotdienstApotheke reading04Name NotdienstTelefon
attr NotdienstApotheke reading04Regex Tel.:.*\n([ 0-9.:;_-]+)<br
attr NotdienstApotheke reading05Name NotdienstAdresse
attr NotdienstApotheke reading05Regex <p class="adress">([ a-zA-Z0-9äöüÄÖÜß.;_-]+)<br\/>([0-9a-zA-ZäöüÄÖÜ ]+)
attr NotdienstApotheke stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse
Da der Notdienst in der Regel von 9:00 - 9:00 geht, habe ich noch ein AT definiert, welches
ein reread um 9:30 Uhr durchführt.
defmod AT.Apotheke at *09:30:00 set NotdienstApotheke reread
Ich hoffe der eine oder andere kann damit etwas anfangen.
Anbei noch zwei Screenshots, einmal die Anzeige in fhem und die Anzeige im Tablet UI.
Danke für's Teilen.
Gibt aktuell nur zwei Auffälligkeiten:
- aponet.de hat das Syntax Zertifikat nicht rechtzeitig ersetzt und HSTS aktiviert :(
- Die Ergebnisse werden beim Auftreten von Umlauten abgeschnitten (z.B. bei PLZ 32312 oder 32361)
Durch ein bißchen basteln am Regex scheint das aber korrigierbar zu sein (bin selbst regex Dilettant)
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9.;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading05Regex <p class="adress">([ a-zA-Z0-9äöüÄÖÜ.;_-]+)<br\/>([0-9a-zA-ZäöüÄÖÜ ]+)
Vielen Dank für die Korrekturen.
Ich war mal so frei und habe diese beiden Einträge in meinem obigen Beitrag
aktualisiert.
Hallo,
Irgendwie wird mir die falsche Apotheke angezeigt, wenn ich diesen Link in den Browser eingebe kommt das richtige.
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/oschatz/Schulstrasse.html
Nehme ich den Link in Fhem wird mir eine Apotheke ca 30 km entfernt angezeigt.
Musste den Ortsnamen nehmen und nicht die plz. Da es bei uns viele Ortsteile mit der selben plz und Straße gibt.
define NotdienstApotheke HTTPMOD https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/oschatz/Schulstrasse.html 0
attr NotdienstApotheke userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex
attr NotdienstApotheke enableControlSet 1
attr NotdienstApotheke reading01Name NotName
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9.&#;;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading02Name NotdienstVon
attr NotdienstApotheke reading02Regex <p>Notdienst.*\n([ a-zA-Z0-9.:&#;;_-]+)
attr NotdienstApotheke reading03Name NotdienstBis
attr NotdienstApotheke reading03Regex <span>([ a-zA-Z0-9.:&#;;_-]+)<\/span>
attr NotdienstApotheke reading04Name NotdienstTelefon
attr NotdienstApotheke reading04Regex Tel.:.*\n([ 0-9.:&#;;_-]+)<br
attr NotdienstApotheke reading05Name NotdienstAdresse
attr NotdienstApotheke reading05Regex <p class="adress">([ a-zA-Z0-9äöüÄÖÜ.&#;;_-]+)<br\/>([0-9a-zA-ZäöüÄÖÜ ]+)
attr NotdienstApotheke stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse
define AT.Apotheke at *17:20:00 set NotdienstApotheke reread[\CODE]
Gruß
Ronny
Gesendet von iPhone mit Tapatalk
Funktioniert bestens. Danke.
Hallo,
sieht schon fast gut aus, die Adresse wird richtig angezeigt aber die Telefonnummer leider von einer anderen Apotheke.
Kann mir bitte jemand einen Tipp zur Abhilfe geben.
Danke für die Umsetzung soweit und schön auf die Schnelle die richtige Apotheke zur Hand zu Haben.
Gruß
Hans-Jürgen
in die regex muss ein \s damit das Leerzeichen gefunden wird:
Habe noch die Entfernung ergänzt
defmod NotdienstApotheke HTTPMOD <url> 0
attr NotdienstApotheke userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex reading06Name reading06Regex
attr NotdienstApotheke alias Notdienst-Apotheke
attr NotdienstApotheke enableControlSet 1
attr NotdienstApotheke reading01Name NotName
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([\sa-zA-ZäöüÄÖÜ0-9.;_-]+)<\/h2><p class="distance">
attr NotdienstApotheke reading02Name NotdienstVon
attr NotdienstApotheke reading02Regex <p>Notdienst.*\n([\sa-zA-Z0-9.:;_-]+)
attr NotdienstApotheke reading03Name NotdienstBis
attr NotdienstApotheke reading03Regex <span>([\sa-zA-Z0-9.:;_-]+)<\/span>
attr NotdienstApotheke reading04Name NotdienstTelefon
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:;_-]+)<br
attr NotdienstApotheke reading05Name NotdienstAdresse
attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜ.;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜ]+)
attr NotdienstApotheke reading06Name NotdienstEntfernung
attr NotdienstApotheke reading06Regex <p class="distance">Entfernung:.*\n([\sa-zA-Z0-9,]+)
attr NotdienstApotheke room test
attr NotdienstApotheke stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2, NotdienstEntfernung
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse NotdienstEntfernung
Hallo knopf_piano,
habe Deinen geänderten Code soweit übernommen leider wird immer noch eine falsche Telefonnummer von einer anderen Apotheke
eingesetzt.
Was mir auffiel ist beim Codeimport sind nur jeweils ein Semikolon nach abspeichern,
anpassen hat aber auch nicht weiter etwas geändert am Problem der richtigen Telefonnummer Zuordnung.
Klappt es bei Euch wirklich richtig, irgendwie komisch wenn es nur bei mir nicht stimmig ist.
Gruß
Hans-Jürgen
Poste doch mal die von dir genutzte URL, dann kann
das jemand anderes mal testen und besser nachvollziehen.
Hallo,
hier mal die URL https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/17235.html 0
ergibt Notdienst-Apotheke
Apotheke am Markt, 03307 2207, Am Markt 9 in 17235 Neustrelitz, 1,87 km
Rückwärtssuche bringt für 03307 2207 Markt Apotheke Zehdenik Klosterstr. 1, 16792 Zehdenick
richtig wäre 03981 206522 für die Neustrelitzer Apotheke etwas verwundert bleibt ;)
Gruß
Hans-Jürgen
Hey, ersetze mal bitte
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:;_-]+)<br
durch
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:;_-]+)
Dann sollte es funktionieren.
Hallo Vaddi,
Perfekt haut jetzt hin.
Danke für Deine Mühe!
Hatte schon mal den Fall und den Notdienst der Apotheke benötigt und jetzt wo der kleine Enkel da ist, schön die
Information schnell zur Hand zu haben.
Gruß
Hans-Jürgen
Ich hab mal ein paar der Regexp bei Regex101 getestet.
attr NotdienstApotheke reading01Regex <div class="box_adress"><h2>([\sa-zA-ZäöüÄÖÜ0-9.;_-]+)<\/h2><p class="distance">
Könnte man durch <div class="box_adress"><h2>([^<]+)</h2><p class="distance"> vereinfachen. Gleicher Aufwand, aber kompakter zu lesen.
attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜ.;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜ]+)
Ich habe nur Adressen gefunden, in denen statt <br/> das Element <br> vorkam.
attr NotdienstApotheke reading06Regex <p class="distance">Entfernung:.*\n([\sa-zA-Z0-9,]+)
Hier müsste <p class="distance">Entfernung:\s*(.*) reichen.
attr NotdienstApotheke reading04Regex Tel.:.*\n([\s0-9.:;_-]+)<br
Matcht auch nicht. Da kommt im Resultset von ApoNet </p> bei mir, kein <br
Mit Tel\.:\s*([\s0-9.:;_-]+) funktioniert der bei mir aber ausreichend.
Aber Psst:
curl 'http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=33330' -H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6' -H 'User-Agent: whatever' -H 'Accept: */*' -H 'Referer: http://apothekenfinder.mobi/' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --compressed
Und man bekommt eine JSON-kodierte Liste aller gerade aktuellen Notdienstapotheken um 33330 Gütersloh (durch eigene Daten ersetzen), ganz ohne nervige tag soup.
Aponet bezieht die Daten bei der Abda, sind also identisch.
Bei mir gehts jetzt auch, es fehle noch bei reading05Regex das "ß". Darum konnte er die Adresse nicht auslesen.
attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜß.;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜß]+)
Doch noch was in der Suche kam jetzt das:
<div class="box_adress premium_search_result"><h2><a href="service/apotheke/loewen-apotheke-04758.html">Löwen-Apotheke</a></h2><p class="distance">Entfernung: 1,89 km
Also ist das reading01Regex damit wieder hinfällig.
Moin Vaddi
Vielen Dank hier für.
Hätte einen Vorschlag bzw brauche eure Hilfe. :o
Ich habe leider keine Ahnung von Regex.
Ich würde gern das von Datum und Uhrzeit sowie
das bis Datum und Uhrzeit in einzelne Readings haben.
Nur ich schaffe es nicht.
Könnt Ihr mir helfen.
Hey, folgendes sollte funktionieren.
attr NotdienstApotheke reading06Name DatumVon
attr NotdienstApotheke reading06Regex <p>Notdienst\n.*vom([ 0-9.:;_-]+)
attr NotdienstApotheke reading07Name UhrzeitVon
attr NotdienstApotheke reading07Regex <p>Notdienst\n.*vom.*um([ 0-9.:;_-]+)
attr NotdienstApotheke reading08Name DatumBis
attr NotdienstApotheke reading08Regex <span>([ a-zA-Z0-9.:;_-]+)um
attr NotdienstApotheke reading09Name UhrzeitBis
attr NotdienstApotheke reading09Regex <span>.*um([ 0-9:;_-]+)
attr NotdienstApotheke userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse DatumVon UhrzeitVon DatumBis UhrzeitBis
Wie ich bereits erwähnt habe, bin ich absolut kein Profi in Sachen Regex, der von mir gepostete
Code darf also gerne verbessert werden ;)
Zitat von: Christoph Morrison am 29 April 2018, 00:39:05
Und man bekommt eine JSON-kodierte Liste aller gerade aktuellen Notdienstapotheken um 33330 Gütersloh (durch eigene Daten ersetzen), ganz ohne nervige tag soup.
Besserwisser ;)
Finde ich gut...Motivation hat ausgereicht sich tiefergehend mit Httpmod zu beschäftigen.
defmod NotdienstApotheke2 HTTPMOD http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=32361 0
attr NotdienstApotheke2 userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL reading01Encode reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name reading07OExpr reading08JSON reading08Name reading08OExpr reading09JSON reading09Name reading10JSON reading10Name reading11JSON reading11Name readingEncode requestHeader requestHeader1 requestHeader2 requestHeader3 requestHeader4 requestHeader5 requestHeader6 requestHeader7
attr NotdienstApotheke2 enableControlSet 1
attr NotdienstApotheke2 reading01Encode UTF-8
attr NotdienstApotheke2 reading01JSON result_01_name
attr NotdienstApotheke2 reading01Name Name
attr NotdienstApotheke2 reading02JSON result_01_street
attr NotdienstApotheke2 reading02Name Strasse
attr NotdienstApotheke2 reading03JSON result_01_plz
attr NotdienstApotheke2 reading03Name Plz
attr NotdienstApotheke2 reading04JSON result_01_place
attr NotdienstApotheke2 reading04Name Ort
attr NotdienstApotheke2 reading05JSON result_01_number
attr NotdienstApotheke2 reading05Name Telefon
attr NotdienstApotheke2 reading06JSON result_01_fax
attr NotdienstApotheke2 reading06Name Telefax
attr NotdienstApotheke2 reading07JSON result_01_start
attr NotdienstApotheke2 reading07Name Beginn
attr NotdienstApotheke2 reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
attr NotdienstApotheke2 reading08JSON result_01_end
attr NotdienstApotheke2 reading08Name Ende
attr NotdienstApotheke2 reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
attr NotdienstApotheke2 reading09JSON result_01_lng
attr NotdienstApotheke2 reading09Name Längengrad
attr NotdienstApotheke2 reading10JSON result_01_lat
attr NotdienstApotheke2 reading10Name Breitengrad
attr NotdienstApotheke2 reading11JSON result_01_distance
attr NotdienstApotheke2 reading11Name Entfernung
attr NotdienstApotheke2 readingEncode UTF-8
attr NotdienstApotheke2 requestHeader2 Accept-Encoding: gzip, deflate
attr NotdienstApotheke2 requestHeader3 Accept-Language: de-DE,de;;q=0.9,en-US;;q=0.8,en;;q=0.7,fr;;q=0.6
attr NotdienstApotheke2 requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
attr NotdienstApotheke2 requestHeader5 Referer: http://apothekenfinder.mobi/
attr NotdienstApotheke2 requestHeader6 X-Requested-With: XMLHttpRequest
attr NotdienstApotheke2 requestHeader7 Connection: keep-alive
attr NotdienstApotheke2 showBody 0
attr NotdienstApotheke2 stateFormat Name, Telefon, Strasse in Plz Ort
attr NotdienstApotheke2 verbose 0
Macht doch mit JSON mehr Spaß.
Bin Aufruf der URL: http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=32361 bekomme ich keine Daten zurück. ich gehe mal davon aus, dass 32361 eine PLZ ist.
Ausgabe:
{"result":"","status":"0"}
Wie hast Du die URL herausgefunden?
Zitat von: MoneyBox76 am 03 Mai 2018, 17:08:12
Bin Aufruf der URL: http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=32361 bekomme ich keine Daten zurück. ich gehe mal davon aus, dass 32361 eine PLZ ist.
Ausgabe:
{"result":"","status":"0"}
Wie hast Du die URL herausgefunden?
Über die Chrome Entwicklertools. Für apothekenfinder muss das so aussehen, als würde man einen XHR-Request machen, deshalb auch die anderen Header.
Hallo,
vielen Dank für den Codeschnipsel. Ich habe ihn bei mir erfolgreich eingebaut. Naja, erfolgreich heißt von der grundsätzlichen Funktionalität her; jedoch habe ich bei der Darstellung ein kleines Problem.
Wenn ich die eigentliche Website aufrufe bekomme ich für heute die Notdienstapotheken angezeigt, die ich als Apo_Bild1 angefügt habe.
In FHEM wird mir das Ergebnis aber wie im angefügten Apo_Bild2 angezeigt.
Das heißt die erste Notdienstapotheke wird mir als Name und Telefonnummer angezeigt, die Adresse stammt aber von der zweiten Notdienstapotheke
Ich habe schon versucht im Quelltext der Seite etwas zu finden, an dem ich einen Unterschied feststellen kann. Aber die HTML-Tags sind beides mal die gleichen:
<div class="search_results"><div class="box_search_pharmacy"><div class="box_result_abstract"><h2>Wir haben 19 Notdienstapotheken im Umkreis gefunden.</h2><form method="post" action="/service/notdienstapotheke-finden/suchergebnis/0/Stuttgart/Friedrich-Ebert-Str%2B19.html"><fieldset><label>Suche verfeinern:</label><select name="location_alternative"><option value="32f89a4d89b275a673b0a99119e4fc28">70191, Stuttgart Mönchhalde Friedrich-Ebert-Straße</option><option value="c64350a1790d48d34a25aa8afc818453">70191, Stuttgart Stuttgart-Nord Friedrich-Ebert-Straße</option><option value="b86126f34351bc81dc4a5a33e8a059ab">70191, Stuttgart Weißenhof Friedrich-Ebert-Straße</option></select><input class="refresh" type="submit" value="" id="submit_refresh_data"/></fieldset></form><ul class="search_date"><li class="enhanced"><a href="/service/notdienstapotheke-finden/erweiterte_suche.html">erweiterte Suche</a></li><li class="date"><span style="color:#E2001A;">Jetzt</span><a class="tomorrow" href="/service/notdienstapotheke-finden/suchergebnis/26.05.2018/Stuttgart/Friedrich-Ebert-Str%2B19.html" title="Notdienstbeginn am 26.05.2018">26.05.2018</a></li><li class="new_search"><a href="/service/notdienstapotheke-finden/neue_suche.html">neue Suche</a></li></ul><div class="clearer"></div></div><div class="box_result_list teaser_list"><div id="map_canvas"><p style="text-align: center; padding-top: 160px;">Damit die Übersichtskarte angezeigt werden kann, aktivieren Sie bitte Javascript in Ihrem Browser!</p></div><div class="box_category_switcher"><div class="line"></div><div class="clearer"></div></div><div class="box_adress"><h2>Anemonen-Apotheke</h2><p class="distance">Entfernung:
2,40 km
</p><p>Notdienst
vom 26.05.2018 um 08:30 Uhr
bis <span>27.05.2018 um 08:30 Uhr.</span></p><h3>Kontakt</h3><p class="adress">Haußmannstr. 136<br/>70188 Stuttgart<br/><a href=" http://reiseauskunft.bahn.de/bin/query.exe/dn?Z=70188+Stuttgart+Hau%C3%9Fmannstr.+136&ZADR=1&dbkanal_004=L01_S01_D001_KPK0097_LZ01 " target="_blank" title="mit Bus / Bahn erreichen"><img style="vertical-align: middle;width: 18px;display: inline;margin-right: 5px;" alt="mit Bus / Bahn erreichen" src="https://cd6.aponet.de/fileadmin/aponet/mobile/img/layout/DB_Logobox_4c_50.jpg"/>
mit Bus / Bahn erreichen
</a></p><p class="contact">Tel.:
0711 2623814<br/>Fax:
0711 2868337</p><div class="line"></div></div><div class="box_adress"><h2>Apotheke am Berliner Platz</h2><p class="distance">Entfernung:
2,55 km
</p><p>Notdienst
vom 26.05.2018 um 08:30 Uhr
bis <span>27.05.2018 um 08:30 Uhr.</span></p><h3>Kontakt</h3><p class="adress">Fritz-Elsas-Str. 51<br/>70174 Stuttgart<br/><a href=" http://reiseauskunft.bahn.de/bin/query.exe/dn?Z=70174+Stuttgart+Fritz-Elsas-Str.+51&ZADR=1&dbkanal_004=L01_S01_D001_KPK0097_LZ01 " target="_blank" title="mit Bus / Bahn erreichen"><img style="vertical-align: middle;width: 18px;display: inline;margin-right: 5px;" alt="mit Bus / Bahn erreichen" src="https://cd6.aponet.de/fileadmin/aponet/mobile/img/layout/DB_Logobox_4c_50.jpg"/>
mit Bus / Bahn erreichen
</a></p><p class="contact">Tel.:
0711 6153707<br/>Fax:
0711 6153762</p><div class="line"></div></div><div class="box_adress"><h2>Freiberg-Apotheke</h2><p class="distance">Entfernung:
5,13 km
Kann mir das eventuell jemand erklären und mir einen Tip geben, wie ich die Daten der ersten (mit der kürzesten Entfernung) Apotheke angezeigt bekomme?
Danke und Gruß
Wolle
Moin,
eine gute Anwendung, habe ich sofort in den Test genommen ! Danke !
ZitatDas heißt die erste Notdienstapotheke wird mir als Name und Telefonnummer angezeigt, die Adresse stammt aber von der zweiten Notdienstapotheke
Das Problem hatte ich gestern auch, allerdings war die Adresse von der 3. Apotheke aus der Liste. Heute ist wieder alles ok !
Komisch - was kann das sein ? Es gab ja ein paar Code-Updates und ich habe vielleicht etwas übersehen ???
Die Version mit JSON hat keine Probleme gehabt.
Moin
Bernd
Hallo zusammen.
Das er bei dir, Wolle02, die Adresse von der zweiten Apotheke nimmt, liegt an dem ß
im Straßennamen. Hatte ich wohl im meinem Codeschnipsel nicht berücksichtigt.
Um den Fehler zu beheben, bitte attr NotdienstApotheke reading05Regex ändern in:
attr NotdienstApotheke reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜß.;_-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜ]+)
Dann sollte es funktionieren.
Hach, wenn man weiß wonach man suchen muss, kann es ja so einfach sein. Rückblickend betrachtet hätte ich da auch selber drauf kommen können. ;D
Vielen Dank Vaddi. Der Vaddi ist halt der Beste ;)
Gruß
Wolle
Nehmt wirklich lieber die JSON-Variante. Das Tag-Soup-Geparse ist doch nichts ordentliches.
Servus Zusammen,
habe mal ein bissl rumgespielt und das auf meinem Testsystem installiert- funzt aber nicht so.
habe hier siesen Code von User stenapf genommen....die http adresse gegen meine getauscht:
defmod NotdienstApotheke2 HTTPMOD http://meine PLZ
attr NotdienstApotheke2 userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL reading01Encode reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name reading07OExpr reading08JSON reading08Name reading08OExpr reading09JSON reading09Name reading10JSON reading10Name reading11JSON reading11Name readingEncode requestHeader requestHeader1 requestHeader2 requestHeader3 requestHeader4 requestHeader5 requestHeader6 requestHeader7
attr NotdienstApotheke2 enableControlSet 1
attr NotdienstApotheke2 reading01Encode UTF-8
attr NotdienstApotheke2 reading01JSON result_01_name
attr NotdienstApotheke2 reading01Name Name
attr NotdienstApotheke2 reading02JSON result_01_street
attr NotdienstApotheke2 reading02Name Strasse
attr NotdienstApotheke2 reading03JSON result_01_plz
attr NotdienstApotheke2 reading03Name Plz
attr NotdienstApotheke2 reading04JSON result_01_place
attr NotdienstApotheke2 reading04Name Ort
attr NotdienstApotheke2 reading05JSON result_01_number
attr NotdienstApotheke2 reading05Name Telefon
attr NotdienstApotheke2 reading06JSON result_01_fax
attr NotdienstApotheke2 reading06Name Telefax
attr NotdienstApotheke2 reading07JSON result_01_start
attr NotdienstApotheke2 reading07Name Beginn
attr NotdienstApotheke2 reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
attr NotdienstApotheke2 reading08JSON result_01_end
attr NotdienstApotheke2 reading08Name Ende
attr NotdienstApotheke2 reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
attr NotdienstApotheke2 reading09JSON result_01_lng
attr NotdienstApotheke2 reading09Name Längengrad
attr NotdienstApotheke2 reading10JSON result_01_lat
attr NotdienstApotheke2 reading10Name Breitengrad
attr NotdienstApotheke2 reading11JSON result_01_distance
attr NotdienstApotheke2 reading11Name Entfernung
attr NotdienstApotheke2 readingEncode UTF-8
attr NotdienstApotheke2 requestHeader2 Accept-Encoding: gzip, deflate
attr NotdienstApotheke2 requestHeader3 Accept-Language: de-DE,de;;q=0.9,en-US;;q=0.8,en;;q=0.7,fr;;q=0.6
attr NotdienstApotheke2 requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
attr NotdienstApotheke2 requestHeader5 Referer: http://apothekenfinder.mobi/
attr NotdienstApotheke2 requestHeader6 X-Requested-With: XMLHttpRequest
attr NotdienstApotheke2 requestHeader7 Connection: keep-alive
attr NotdienstApotheke2 showBody 0
attr NotdienstApotheke2 stateFormat Name, Telefon, Strasse in Plz Ort
attr NotdienstApotheke2 verbose 0
nach einem reload bzw. neustert habe ich nur Name, Telefon, Strasse in Plz Ort als Anzeige...
habs mal mit PLZ probiert und auch nur mit Ortsnamen....
Gruss
Hm, warum anonymisierts Du die url? So können wir Dir nicht helfen.
Grüße Jörg
Gesendet von iPhone mit Tapatalk
Grüße Jörg
Hallo Jo,
o.k. sorry..hier die URL:
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/69493.html
Gruss
Deine URL funktioniert so nicht, da sie kein JSON Format liefert.
So sollte deine Definition aussehen:
http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=69493 0
Ist auf jeden Fall zu empfehlen.
Zitat von: Vaddi am 08 Juni 2018, 17:19:19
Deine URL funktioniert so nicht, da sie kein JSON Format liefert.
So sollte deine Definition aussehen:
http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=69493 0
Danke Dir...so hats funktioniert !!
Gruss
Hallo
Ich habe mal beide Varianten regex und json ausprobiert.
Beide funktionieren und das Ergebnis ist identisch.
Kann mir jemand die Vor- bzw. Nachteile der beiden Varainten erklären?
Welche wird den weiter gepflegt?
Gruß
Daniel
Zitat von: WhyTea am 03 Juli 2018, 14:38:55
Kann mir jemand die Vor- bzw. Nachteile der beiden Varainten erklären?
Für dich als Endanwender ist die Version nur insofern wichtig, als dass die JSON-Version vermutlich langfristig zuverlässige Ergebnisse liefert. Allerdings können die auch morgen die JSON-API ändern und keiner wird es vermutlich mitbekommen, bis es irgendwo knallt.
Zitat von: WhyTea am 03 Juli 2018, 14:38:55
Welche wird den weiter gepflegt?
Keine der Versionen ist ein offizielles Modul oder so, sondern nur ein Codesnippet und es gibt auch keinen Maintainer. Also gibt es darauf keine Antwort, die dir helfen würde.
vielen Dank, bei mir funktioniert es auch wunderbar!
Ich finde die JSON-Version auch besser, aber
http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=69493
liefert kein Ergebnis mehr ab.
Hat jemand einen JSON-Link, der funktioniert und kann sagen wie man den "search=" Parameter genau befüllen muss?
Nun habe ich mal die Version aus dem ersten Post ausprobiert. Funktioniert für den Namen der Apotheke und die Adresse. Die gefundene Telefonnummer gehört aber nicht zu dieser Apotheke, sondern zur dritten in der Trefferliste.
https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/04.08.2018/13465/Am%2BEichenhain%2B74.html
Hat schon jemand diesen Fehler behoben oder muss ich mal selber reinwühlen? Wie bereits gesagt: bei JSON könnte das nicht passieren.
Also ich bekomme mit folgender Definition ein Ergebnis
http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=69493 0
Wenn ich den Link im Browser eingebe, dann bekomme ich auch kein Ergebnis. Das mag damit zusammenhängen, dass der Server nur selektiv auf bestimmte Browser antwortet. Daher vermute ich, dass mit einem meiner requestHeader-Parameter etwas nicht stimmt. Hier ein List meines Device:
Internals:
DEF http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=13465 0
Interval 0
JSONEnabled 1
MainURL http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=13465
ModuleVersion 3.5.1 - 5.7.2018
NAME NotdienstApotheke
NR 818
STATE Name, Telefon, Strasse in Plz Ort
TRIGGERTIME 0
TRIGGERTIME_FMT
TYPE HTTPMOD
Attributes:
DbLogExclude .*
enableControlSet 1
reading01Encode UTF-8
reading01JSON result_01_name
reading01Name Name
reading02JSON result_01_street
reading02Name Strasse
reading03JSON result_01_plz
reading03Name Plz
reading04JSON result_01_place
reading04Name Ort
reading05JSON result_01_number
reading05Name Telefon
reading06JSON result_01_fax
reading06Name Telefax
reading07JSON result_01_start
reading07Name Beginn
reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
reading08JSON result_01_end
reading08Name Ende
reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
reading09JSON result_01_lng
reading09Name Längengrad
reading10JSON result_01_lat
reading10Name Breitengrad
reading11JSON result_01_distance
reading11Name Entfernung
readingEncode UTF-8
requestHeader2 Accept-Encoding: gzip, deflate
requestHeader3 Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
requestHeader5 Referer: http://apothekenfinder.mobi/
requestHeader6 X-Requested-With: XMLHttpRequest
requestHeader7 Connection: keep-alive
room Gesundheit
showBody 0
stateFormat Name, Telefon, Strasse in Plz Ort
userattr reading01Encode reading01JSON reading01Name reading01Regex reading02JSON reading02Name reading02Regex reading03JSON reading03Name reading03Regex reading04JSON reading04Name reading04Regex reading05-1Name reading05-2Name reading05JSON reading05Name reading05Regex reading06JSON reading06Name reading07JSON reading07Name reading07OExpr reading08JSON reading08Name reading08OExpr reading09JSON reading09Name reading10JSON reading10Name reading11JSON reading11Name readingEncode requestHeader2 requestHeader3 requestHeader4 requestHeader5 requestHeader6 requestHeader7
verbose 0
Im normalen Browser bekomme ich auch nichts brauchbares angezeigt.
Ich habe deine requestHeader gerade mal mit meinen verglichen, stimmen 100%ig überein.
Deine letzte Definition mit der PLZ 13465 liefert bei mir auch ein Ergebnis in Fhem.
Ansonsten vllt ein mal das Device löschen neu anlegen und set reread nicht vergessen.
Ich möchte übrigens gesagt haben, dass Längengrad kein gültiger Reading-Name ist, da er einen Umlaut enthält.
Danke, jetzt geht die JSON-Variante (nach set reread). Also muss ich den Fehler wg. Telefonnummer in der alten Variante nicht mehr suchen.
Hallo Zusammen, ich muss immer in fhem erst auf "reread" klicken dann gehts.. woran liegt das?
Gruss
Gesendet von iPhone mit Tapatalk Pro
ZitatHallo Zusammen, ich muss immer in fhem erst auf "reread" klicken dann gehts.. woran liegt das?
Daran dass das Interval noch nicht erreicht ist. Gibst du z.B. als Intervall 600 ein, dann holt er erst nach 10 Minuten die Daten.
Danke Dir
Hi, habe den intervall jetzt mal mit set auf 86400sec. Gestellt..das wären 24h
Wenn ich nach der Zeit draufschaue hat sich aber nix geändert..muss erst wieder reread drücken...was mach ich falsch???
Gruss
Also, ich habe bei ein at erstellt, welches jeden Morgen um 9:30 uhr
ein reread ausführt, da sich um 9 Uhr die Notdienst Apotheke ändert.
Dito
Ok danke..
Nochwas..wer hat Notdienst Apo in Zabletui integriert und kann hier mal seinen Html code zur Verfügung stellen?
Vielen Dank
<div data-type="label" data-device="NotdienstApotheke" data-get="Name"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Beginn"></div> bis
<div data-type="label" data-device="NotdienstApotheke" data-get="Ende" class="inline"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Telefon"></div>
Das ganze einfach noch mit Adresse usw. erweitern.
Danke Dir...funzt einwandfrei auch mit dem "at" jetzt!!
Stelle jetzt mal meinen Code hier zur Verfügung :-*
<li data-row="3" data-col="6" data-sizex="3" data-sizey="2">
<header>
<div data-type="label" class="medium">Notdienst Apotheke</div>
</header>
<div data-type="label" data-device="NotdienstApotheke" data-get="Name"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Beginn"></div> bis
<div data-type="label" data-device="NotdienstApotheke" data-get="Ende" class="inline"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Telefon"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Strasse"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Plz"></div>
<div data-type="label" data-device="NotdienstApotheke" data-get="Ort"></div>
</li>
@ Vaddi
Danke für den Code. Funktioniert wirklich super :)
Bei mir wird seit Tagen nicht mehr aktualisiert. Wenn ich die URL aufrufe, erscheint das als Antwort:
{"result":"","status":"0"}
Geändert habe ich nichts.
Was könnte das Problem sein?
Vielen Dank.
Bei mir auch...
Gesendet von iPhone mit Tapatalk Pro
Bei mir momentan das gleiche.
Da müsst ihr wohl oder übel vorerst auf die HTTPMOD Variante ohne JSON umsteigen.
Es sieht so aus als wäre die Gegenstelle sehr langsam geworden. Ich habe meiner Abfrage einen längeren Timeout gegönnt: Standard ist 2, ich habe 60 gesetzt, und bekomme nun auch wieder JSON-Daten.
Super, vielen Dank.
Zitat von: Christoph Morrison am 10 September 2018, 09:01:07
Es sieht so aus als wäre die Gegenstelle sehr langsam geworden. Ich habe meiner Abfrage einen längeren Timeout gegönnt: Standard ist 2, ich habe 60 gesetzt, und bekomme nun auch wieder JSON-Daten.
gebe ich da im DEF Feld einfach hinten dran dann die zahl 60 ein?
Gruss
Zitat von: Kusselin am 26 Oktober 2018, 11:48:31
gebe ich da im DEF Feld einfach hinten dran dann die zahl 60 ein?
Nein, timeout ist ein Attribut. Die Zahl in der DEF ist der Interval in der die Seiten geholt werden und den kannst du ruhig auf einen hohen Wert stellen, da die Daten nur einmal morgens um ca. 9 Uhr aktualisiert werden.
Ich habe dort 24 Stunden drin, da ich den Abruf über ein
DOIF at jeden morgen um 9:05 Uhr explizit triggere.
Ich bekomme keine Daten mehr..... ???
Der JSON String scheint nicht mehr zu stimmen.
<br />
<b>Warning</b>: sizeof(): Parameter must be an array or an object that implements Countable in <b>/srv/aponet/docroot/include/class.conditionengine.php</b> on line <b>40</b><br />
{"result":"","status":"0"}
Offenbar funktioniert die Suche nach PLZ dort nicht mehr / zur Zeit nicht korrekt. Die Suche mit Positionsangaben liefert aber noch Daten. Die Auslieferung über HTTP wird übrigens auch nicht mehr unterstützt (wird weitergeleitet):
curl 'https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=33330' -H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6,lb;q=0.5' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' -H 'Accept: */*' -H 'Referer: https://apothekenfinder.mobi/' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --compressed
<br />
<b>Warning</b>: sizeof(): Parameter must be an array or an object that implements Countable in <b>/srv/aponet/docroot/interface/json.php</b> on line <b>85</b><br />
{"result":[{"id":"1074015","name":"Rosen-Apotheke","street":"Rhedaer Str. 12","plz":"33330","place":"G\u00fctersloh","distance":"2.19","start":1559458800,"end":1559545200,"number":"05241 531791","fax":"05241 531793","lng":"8.36682957","lat":"51.89590265"},{"id":"1024016","name":"Forum Apotheke","street":"Deckertstr. 52 - 54","plz":"33617","place":"Bielefeld","distance":"14.00","start":1559458800,"end":1559545200,"number":"0521 140443","fax":"0521 140445","lng":"8.5183635","lat":"52.0040985"},{"id":"1024006","name":"Amts-Apotheke","street":"Wertherstr. 434","plz":"33619","place":"Bielefeld","distance":"15.92","start":1559458800,"end":1559545200,"number":"0521 105330","fax":"0521 109124","lng":"8.45664","lat":"52.04878"},{"id":"1024084","name":"Apotheke am Vorwerk","street":"Engersche Str. 79","plz":"33611","place":"Bielefeld","distance":"19.21","start":1559458800,"end":1559545200,"number":"0521 84780","fax":"0521 4008769","lng":"8.549483","lat":"52.0497289"},{"id":"1210002","name":"B\u00e4ren-Apotheke","street":"Ravensberger Str. 18","plz":"33775","place":"Versmold","distance":"20.57","start":1559458800,"end":1559545200,"number":"05423 6667","fax":"05423 472865","lng":"8.15562","lat":"52.04157"},{"id":"1044005","name":"Rosen-Apotheke","street":"Auf der Bache 24","plz":"33129","place":"Delbr\u00fcck","distance":"21.28","start":1559458800,"end":1559545200,"number":"05250 52238","fax":"05250 933830","lng":"8.6119808","lat":"51.792556"},{"id":"1055009","name":"Maximilian-Apotheke","street":"Bahnhofstr. 4 c","plz":"59320","place":"Ennigerloh","distance":"25.53","start":1559458800,"end":1559545200,"number":"02524 3566","fax":"02524 262485","lng":"8.0252929","lat":"51.836435"},{"id":"1216013","name":"Apotheke im Gesundheitszentrum","street":"Am Krankenhaus 4","plz":"48231","place":"Warendorf","distance":"26.00","start":1559458800,"end":1559545200,"number":"02581 7899690","fax":"02581 7899691","lng":"8.0026526","lat":"51.9601923"},{"id":"1196002","name":"Barbara-Apotheke","street":"Lange Str. 32","plz":"32139","place":"Spenge","distance":"26.23","start":1559458800,"end":1559545200,"number":"05225 4646","fax":"05225 1019","lng":"8.4832389","lat":"52.1409065"},{"id":"1482083","name":"Eulen-Apotheke","street":"Beckumer Str. 27","plz":"59555","place":"Lippstadt","distance":"26.57","start":1559458800,"end":1559545200,"number":"02941 9795181","fax":"02941 9518007","lng":"8.3341811","lat":"51.6776294"},{"id":"1088023","name":"Vital-Apotheke im Marktkauf","street":"Deichkamp 13","plz":"32051","place":"Herford","distance":"29.39","start":1559458800,"end":1559545200,"number":"05221 178825","fax":"05221 178869","lng":"8.6586762","lat":"52.1127322"}],"search":{"latitude":51.909671,"longitude":8.369734900000001},"status":"1"}
curl 'https://apothekenfinder.mobi/interface/json.php?device=web&source=not&lat=51.929366699999996&long=8.377279000000044' -H 'DNT: 1' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6,lb;q=0.5' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' -H 'Accept: */*' -H 'Referer: https://apothekenfinder.mobi/' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --compressed |jq
{
"result": [
{
"id": "1074015",
"name": "Rosen-Apotheke",
"street": "Rhedaer Str. 12",
"plz": "33330",
"place": "Gütersloh",
"distance": "3.79",
"start": 1559458800,
"end": 1559545200,
"number": "05241 531791",
"fax": "05241 531793",
"lng": "8.36682957",
"lat": "51.89590265"
},
{
"id": "1024016",
"name": "Forum Apotheke",
"street": "Deckertstr. 52 - 54",
"plz": "33617",
"place": "Bielefeld",
"distance": "12.76",
"start": 1559458800,
"end": 1559545200,
"number": "0521 140443",
"fax": "0521 140445",
"lng": "8.5183635",
"lat": "52.0040985"
},
{
"id": "1024006",
"name": "Amts-Apotheke",
"street": "Wertherstr. 434",
"plz": "33619",
"place": "Bielefeld",
"distance": "14.36",
"start": 1559458800,
"end": 1559545200,
"number": "0521 105330",
"fax": "0521 109124",
"lng": "8.45664",
"lat": "52.04878"
},
{
"id": "1024084",
"name": "Apotheke am Vorwerk",
"street": "Engersche Str. 79",
"plz": "33611",
"place": "Bielefeld",
"distance": "17.86",
"start": 1559458800,
"end": 1559545200,
"number": "0521 84780",
"fax": "0521 4008769",
"lng": "8.549483",
"lat": "52.0497289"
},
{
"id": "1210002",
"name": "Bären-Apotheke",
"street": "Ravensberger Str. 18",
"plz": "33775",
"place": "Versmold",
"distance": "19.67",
"start": 1559458800,
"end": 1559545200,
"number": "05423 6667",
"fax": "05423 472865",
"lng": "8.15562",
"lat": "52.04157"
},
{
"id": "1044005",
"name": "Rosen-Apotheke",
"street": "Auf der Bache 24",
"plz": "33129",
"place": "Delbrück",
"distance": "22.19",
"start": 1559458800,
"end": 1559545200,
"number": "05250 52238",
"fax": "05250 933830",
"lng": "8.6119808",
"lat": "51.792556"
},
{
"id": "1196002",
"name": "Barbara-Apotheke",
"street": "Lange Str. 32",
"plz": "32139",
"place": "Spenge",
"distance": "24.64",
"start": 1559458800,
"end": 1559545200,
"number": "05225 4646",
"fax": "05225 1019",
"lng": "8.4832389",
"lat": "52.1409065"
},
{
"id": "1216013",
"name": "Apotheke im Gesundheitszentrum",
"street": "Am Krankenhaus 4",
"plz": "48231",
"place": "Warendorf",
"distance": "25.93",
"start": 1559458800,
"end": 1559545200,
"number": "02581 7899690",
"fax": "02581 7899691",
"lng": "8.0026526",
"lat": "51.9601923"
},
{
"id": "1055009",
"name": "Maximilian-Apotheke",
"street": "Bahnhofstr. 4 c",
"plz": "59320",
"place": "Ennigerloh",
"distance": "26.31",
"start": 1559458800,
"end": 1559545200,
"number": "02524 3566",
"fax": "02524 262485",
"lng": "8.0252929",
"lat": "51.836435"
},
{
"id": "1088023",
"name": "Vital-Apotheke im Marktkauf",
"street": "Deichkamp 13",
"plz": "32051",
"place": "Herford",
"distance": "28.08",
"start": 1559458800,
"end": 1559545200,
"number": "05221 178825",
"fax": "05221 178869",
"lng": "8.6586762",
"lat": "52.1127322"
},
{
"id": "1482083",
"name": "Eulen-Apotheke",
"street": "Beckumer Str. 27",
"plz": "59555",
"place": "Lippstadt",
"distance": "28.18",
"start": 1559458800,
"end": 1559545200,
"number": "02941 9795181",
"fax": "02941 9518007",
"lng": "8.3341811",
"lat": "51.6776294"
}
],
"status": "1"
}
(Wer sich die Mühe machen will: Meine Adresse steht auf meiner Website, die hier verlinkt ist, ihr braucht die Positionsdaten deshalb nicht bei Google Maps suchen ;-))
Hallo,
ich musste nun feststellen das hier über die URL http://apothekenfinder.mobi kein json mehr ausgeliefert wird.
Gibt es hier schon andere Lösungen ?
Viele Grüße
Sven
Zitat von: sven.scherf am 24 August 2020, 18:30:29
ich musste nun feststellen das hier über die URL http://apothekenfinder.mobi kein json mehr ausgeliefert wird.
Wie kommst du darauf? Hab eben noch mal getestet - alles wie beschrieben.
Hi Christoph,
ich bekomme kein Ergebnis zurück.
Dies ist meine Abfrage:
http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=64572
und dies bekomme ich zurück.
{"result":"","status":"0"}
Bei dir sieht dies anders aus ?
Viele Grüße
Sven
Hi,
done.
Vielen Dank es funktioniert nun wieder.
Im Browser bekommt man kein Ergebnis wie meine Vorgänger schon geschrieben hatten.
Vielleicht kann mir jemand erklären warum dem so ist und warum es in fhem funktioniert. ::)
mit set reread geht es wieder.
Ich habe mir einen AT Befehl angelegt welcher mit vormittags die Apotheke neu einliest.
Vielen Dank und Grüße
Sven
Zitat von: sven.scherf am 25 August 2020, 16:17:09
Im Browser bekommt man kein Ergebnis wie meine Vorgänger schon geschrieben hatten.
Vielleicht kann mir jemand erklären warum dem so ist und warum es in fhem funktioniert. ::)
Der Service will mehr als nur eine normale GET-Anfrage, wie man sie mit dem Browser üblicherweise macht. Deshalb liefert die API auch bei einem normalen Request nichts zurück.
Hallo,
seit heute scheint das Datum / Uhrzeit im Linuxformat (1603261800 = 21.10.2020 - 08:30:00) angegeben zu sein.
Kann das jemand bestätigen ?
Gruß
Hugo
Zitat von: Hugo Becker am 21 Oktober 2020, 13:32:47
seit heute scheint das Datum / Uhrzeit im Linuxformat (1603261800 = 21.10.2020 - 08:30:00) angegeben zu sein.
Kann das jemand bestätigen ?
Hm, ich glaube das war schon immer so. Poste mal ein
list deines Devices.
Hallo Christoph,
vielen Dank dafür, das Du einmal drüberschaust. Ich habe den Verdacht, das es an dem Modul HTTPMOD liegen könnte. Erst heute nach einem längeren Update, trat der Fehler auf.
Hier das List...
Internals:
.getList
.setList interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
.updateRequestHash 1
BUSY 0
DEF https://apothekenfinder.mobi/interface/json.php?device=web&source=not&lat=52.42863&long=9.466728
FUUID 5c4332a1-f33f-1f9d-9e53-841d4e6da88f8488
Interval 300
JSONEnabled 1
LASTSEND 1603282449.09014
MainURL https://apothekenfinder.mobi/interface/json.php?device=web&source=not&lat=52.42863&long=9.466728
ModuleVersion 3.5.22 - 7.2.2020
NAME NotApotheke
NOTIFYDEV global
NR 3618
NTFY_ORDER 50-NotApotheke
STATE Luther Apotheke, 05031 71222, Hauptstr. 38 a, 31515 Wunstorf
TRIGGERTIME 1603282749.08259
TRIGGERTIME_FMT 2020-10-21 14:19:09
TYPE HTTPMOD
addr https://apothekenfinder.mobi:443
auth 0
buf
code 200
data
displayurl https://apothekenfinder.mobi/interface/json.php?device=web&source=not&lat=52.42863&long=9.466728
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
host apothekenfinder.mobi
httpheader HTTP/1.1 200 OK
Date: Wed, 21 Oct 2020 12:08:51 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 893
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
httpversion 1.0
ignoreredirects 1
loglevel 4
path /interface/json.php?device=web&source=not&lat=52.42863&long=9.466728
protocol https
redirects 0
timeout 2
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&lat=52.42863&long=9.466728
value 0
.attraggr:
.attrminint:
.readingParseList:
01
02
03
04
05
06
07
08
09
10
11
.userReadings:
HASH(0x55fa160)
HASH(0x56495f8)
QUEUE:
READINGS:
2020-10-21 14:09:09 Beginn 1603261800
2020-10-21 14:09:09 Breitengrad 52.4267926504515
2020-10-21 14:09:09 Ende 1603348200
2020-10-21 14:09:09 Entfernung 0.38
2020-10-21 14:09:09 Längengrad 9.4714842932537
2020-10-21 14:09:09 Name Luther Apotheke
2020-10-21 14:09:09 Ort Wunstorf
2020-10-21 14:14:11 PLZort 31515 Wunstorf
2020-10-21 14:09:09 Plz 31515
2020-10-21 14:09:09 Strasse Hauptstr. 38 a
2020-10-21 14:09:09 Telefax 05031 74440
2020-10-21 14:09:09 Telefon 05031 71222
2020-10-21 14:14:11 VonBis Notdienst von 1603261800 bis 1603348200
REQUEST:
data
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
ignoreredirects 0
retryCount 0
type update
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&lat=52.42863&long=9.466728
value 0
defptr:
readingBase:
Beginn reading
Breitengrad reading
Ende reading
Entfernung reading
Längengrad reading
Name reading
Ort reading
Plz reading
Strasse reading
Telefax reading
Telefon reading
readingNum:
Beginn 07
Breitengrad 10
Ende 08
Entfernung 11
Längengrad 09
Name 01
Ort 04
Plz 03
Strasse 02
Telefax 06
Telefon 05
readingOutdated:
requestReadings:
update:
Beginn reading 07
Breitengrad reading 10
Ende reading 08
Entfernung reading 11
Längengrad reading 09
Name reading 01
Ort reading 04
Plz reading 03
Strasse reading 02
Telefax reading 06
Telefon reading 05
sslargs:
Attributes:
enableControlSet 1
icon apotheke
reading01Encode UTF-8
reading01JSON result_01_name
reading01Name Name
reading02JSON result_01_street
reading02Name Strasse
reading03JSON result_01_plz
reading03Name Plz
reading04JSON result_01_place
reading04Name Ort
reading05JSON result_01_number
reading05Name Telefon
reading06JSON result_01_fax
reading06Name Telefax
reading07JSON result_01_start
reading07Name Beginn
reading08JSON result_01_end
reading08Name Ende
reading09JSON result_01_lng
reading09Name Längengrad
reading10JSON result_01_lat
reading10Name Breitengrad
reading11JSON result_01_distance
reading11Name Entfernung
readingEncode UTF-8
requestHeader2 Accept-Encoding: gzip, deflate
requestHeader3 Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
requestHeader5 Referer: http://apothekenfinder.mobi/
requestHeader6 X-Requested-With: XMLHttpRequest
requestHeader7 Connection: keep-alive
room hidden
showBody 0
stateFormat Name, Telefon, Strasse, Plz Ort
userReadings PLZort { ReadingsVal("NotApotheke","Plz",0)." ".ReadingsVal("NotApotheke","Ort",0) },
VonBis { "Notdienst von ".ReadingsVal("NotApotheke","Beginn",0)." bis ".ReadingsVal("NotApotheke","Ende",0) }
userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL reading01Encode reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name reading07OExpr reading08JSON reading08Name reading08OExpr reading09JSON reading09Name reading10JSON reading10Name reading11JSON reading11Name readingEncode requestHeader requestHeader1 requestHeader2 requestHeader3 requestHeader4 requestHeader5 requestHeader6 requestHeader7
verbose 0
Gruß Hugo
Setze mal folgendes:
reading07JSON result_01_start
reading07Name Beginn
reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
reading08JSON result_01_end
reading08Name Ende
reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
Bei mir hat das schon immer funktioniert, weil ich, warum auch immer, die Zeiten schon auswerte.
strftime kannst du dir anpassen wie es beliebt. Die Formate findest du in der Dokumentation (https://metacpan.org/pod/POSIX::strftime::GNU).
Hallo Christoph,
nun funktioniert es einwandfrei !!! ;D
Vielen Dank noch einmal für die ultraschnelle Hilfe, KLASSE.
Gruß
Hugo
Moin,
ich kann Hilfe gebrauchen, komme nicht weiter :(
ZitatSetze mal folgendes:
Code: [Auswählen]
reading07JSON result_01_start
reading07Name Beginn
reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
reading08JSON result_01_end
reading08Name Ende
reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
geht nicht, kann beide Attribute reading..OExpr nicht setzen. Fehlermeldung bei der Eingabe:
Invalid Expression strftime "%a %e.%m.%Y %H:%M" , localtime($val)
Und im Log:
2020.10.23 00:32:31.972 3: NotdienstApotheke2: attr reading08OExpr with expresion my $timeDiff = $oRef->{'$timeDiff'};my @matchlist = @{$oRef->{'@matchlist'}};return undef;strftime "%a %e.%m.%Y %H:%M" , localtime($val) created warning: String found where operator expected at (eval 23557) line 1, near "strftime "%a %e.%m.%Y %H:%M""
2020.10.23 00:32:31.973 3: NotdienstApotheke2: attr reading08OExpr with expresion my $timeDiff = $oRef->{'$timeDiff'};my @matchlist = @{$oRef->{'@matchlist'}};return undef;strftime "%a %e.%m.%Y %H:%M" , localtime($val) created warning: (Do you need to predeclare strftime?)
2020.10.23 00:32:31.974 3: NotdienstApotheke2: attr reading08OExpr with expression my $timeDiff = $oRef->{'$timeDiff'};my @matchlist = @{$oRef->{'@matchlist'}};return undef;strftime "%a %e.%m.%Y %H:%M" , localtime($val) on created error: syntax error at (eval 23557) line 1, near "strftime "%a %e.%m.%Y %H:%M""
Test in einer Perl-Subrutine in der myUtils
my$hallo = strftime "%a %e.%m.%Y %H:%M", localtime(1603432800);
Log3 ($name, 4, "$name $sub_name: timestamp = $hallo ");
funktioniert strftime und bringt die gewünschte Formatierung.
Ich bin ratlos, hat jemand vielleicht eine Idee ?
Moin
Bernd
sorry, vergessen, list vom Entity:
Internals:
BUSY 0
CFGFN FHEM/myxx.cfg
DEF https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=24.... 3600
FUUID 5c4b88a9-f33f-5817-d4b4-730d180dcbcd262b
Interval 3600
MainURL https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=24...
ModuleVersion 4.0.09 - 16.10.2020
NAME NotdienstApotheke2
NOTIFYDEV global
NR 1141
NTFY_ORDER 50-NotdienstApotheke2
STATE Schloss-Apotheke.....
TYPE HTTPMOD
value
HttpUtils:
NAME
addr https://apothekenfinder.mobi:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=24...
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
host apothekenfinder.mobi
httpheader HTTP/1.1 200 OK
Date: Thu, 22 Oct 2020 22:26:47 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 924
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /interface/json.php?device=web&source=not&search=24...
protocol https
redirects 0
timeout 60
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=24...
sslargs:
QUEUE:
READINGS:
2020-10-23 00:27:07 Beginn Thu Oct 22 08:00:00 2020
2020-10-23 00:27:07 Breitengrad 54.15
2020-10-23 00:27:07 Ende
2020-10-23 00:27:07 Entfernung 11.77
2020-10-23 00:27:07 Längengrad 10.4
2020-10-23 00:27:07 Name Schloss-Apotheke
2020-10-23 00:27:07 Ort Büttenwarder
2020-10-23 00:27:07 Plz 12345
2020-10-23 00:27:07 Strasse Markt 15
2020-10-23 00:27:07 Telefax 04...
2020-10-23 00:27:07 Telefon 04...
2020-10-23 00:27:07 update 1603432800
REQUEST:
context reading
data
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
ignoreredirects 0
num 0
retryCount 0
type update
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=24601
defptr:
readingBase:
Beginn reading
Breitengrad reading
Ende reading
Entfernung reading
Längengrad reading
Name reading
Ort reading
Plz reading
Strasse reading
Telefax reading
Telefon reading
update reading
readingNum:
Beginn 07
Breitengrad 10
Ende 08
Entfernung 11
Längengrad 09
Name 01
Ort 04
Plz 03
Strasse 02
Telefax 06
Telefon 05
update 20
readingOutdated:
requestReadings:
update:
Beginn reading 07
Breitengrad reading 10
Ende reading 08
Entfernung reading 11
Längengrad reading 09
Name reading 01
Ort reading 04
Plz reading 03
Strasse reading 02
Telefax reading 06
Telefon reading 05
update reading 20
Attributes:
alias Apotheken Notdienst
enableControlSet 1
event-on-change-reading Name
event-on-update-reading update
group Info
reading01Encode UTF-8
reading01JSON result_01_name
reading01Name Name
reading02JSON result_01_street
reading02Name Strasse
reading03JSON result_01_plz
reading03Name Plz
reading04JSON result_01_place
reading04Name Ort
reading05JSON result_01_number
reading05Name Telefon
reading06JSON result_01_fax
reading06Name Telefax
reading07JSON result_01_start
reading07Name Beginn
reading07OExpr localtime($val)
reading08JSON result_01_end
reading08Name Ende
reading08OExpr strftime("%a %e.%m.%Y %H:%M", localtime($val))
reading09JSON result_01_lng
reading09Name Längengrad
reading10JSON result_01_lat
reading10Name Breitengrad
reading11JSON result_01_distance
reading11Name Entfernung
reading20JSON result_01_end
reading20Name update
readingEncode UTF-8
requestHeader2 Accept-Encoding: gzip, deflate
requestHeader3 Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
requestHeader5 Referer: http://apothekenfinder.mobi/
requestHeader6 X-Requested-With: XMLHttpRequest
requestHeader7 Connection: keep-alive
room -Notruf,Buero
showBody 0
stateFormat Name<br>Strasse<br>Plz Ort<br>Telefon<br><br>Beginn bis Ende
timeout 60
userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL reading01Encode reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name reading07OExpr reading08JSON reading08Name reading08OExpr reading09JSON reading09Name reading10JSON reading10Name reading11JSON reading11Name reading20JSON reading20Name reading20OExpr readingEncode requestHeader requestHeader1 requestHeader2 requestHeader3 requestHeader4 requestHeader5 requestHeader6 requestHeader7
verbose 3
Probiere mit
reading07OExpr strftime("%a %e.%m.%Y %H:%M", localtime($val))
moin,
leider auch nicht. Kann ich zwar eingeben, bei reread kommt aber kein Ergebnis und im Log:
2020.10.23 10:38:34.816 3: NotdienstApotheke2: perl expression eval with expression my $timeDiff = $oRef->{'$timeDiff'};strftime("%a %e.%m.%Y %H:%M", localtime($val)) on 1603519200 created error: Undefined subroutine &FHEM::HTTPMOD::Utils::strftime called at (eval 40600) line 1.
undefined subroutine ? Sehr komisch :(
Und wenn du POSIX::strftime absolut addressierst?
Moin,
ZitatUnd wenn du POSIX::strftime absolut addressierst?
JA das war es !
POSIX::strftime("%a %e.%m.%Y %H:%M", localtime($val))
und alles ist gut - jedenfalls bei mir. Wieso geht es bei anderen, fehlt mir irgendwo eine grundsätzliche Systemdefinition ?
... und schon habe ich als Linux-Depp wieder etwas zu lernen, Thema POSIX
Danke für Eure Hilfe ! und moin
Bernd
Nein, das ist normal, und das hätte meinen nächsten Vorschlag gewesen.
Das ist so, weil der POSIX Perl-Modul nicht vom HTTPMOD Modul geladen wird.
Es kann sein, dass es mit vorherigen Versionen von HTTPMOD funktioniert hat.
ok, das beruhigt.
Danke für Deine Info !
Moin
Bernd
Zitat von: amenomade am 23 Oktober 2020, 18:54:46
Es kann sein, dass es mit vorherigen Versionen von HTTPMOD funktioniert hat.
Ich lade
POSIX in den MyUtils (und importiere dort auch
strftime), deshalb kann ich das ohne absolute Adressierung aufrufen. Man sollte sich einfach die absolute Adressierung angewöhnen und immer verwenden.
Hallo,
seid dem 26.11 funktioniert es nicht mehr!
Hat jemand eine Lösung ?
Gruß
Wendelin
Zitat von: wendeling am 30 November 2020, 23:00:03
Hallo,
seid dem 26.11 funktioniert es nicht mehr!
Hat jemand eine Lösung ?
Ja. Ein
list auf dein Notdienst-Device. "Funktioniert nicht" ist keine echte Fehlerbeschreibung.
Internals:
.JSONEnabled 1
.LASTSEND 1606774902.92794
.LastUpdate 1606774901.82857
.TRIGGERTIME 1606775201.82857
.getList
.setList interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
.updateRequestHash 1
BUSY 0
DEF https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/91320.html
FUUID 5ed68268-f33f-8758-accf-80bd9627ef697450
Interval 300
MainURL https://www.aponet.de/service/notdienstapotheke-finden/suchergebnis/0/91320.html
ModuleVersion 4.0.12 - 24.10.2020
NAME NotdienstApotheke
NOTIFYDEV global
NR 92
NTFY_ORDER 50-NotdienstApotheke
STATE Stadt-Apotheke, Bamberger Str. 51 in 91301 Forchheim, vom 26.11.2020 um 08:00 Uhr bis 27.11.2020 um 08:00 Uhr., Tel.: 09191 65577
TYPE HTTPMOD
value
.attraggr:
.attrminint:
.readingParseList:
01
02
03
04
05
06
07
08
09
.userReadings:
CompiledRegexes:
HTTPCookieHash:
PHPSESSID;/:
Name PHPSESSID
Options path=/
Path /
Value m3bdp9srkcpi0u4usjsu4hnak5
fe_typo_user;/:
Name fe_typo_user
Options path=/
Path /
Value 0e2ea7c72d06ccffcd48cb6f88d1e12b
HttpUtils:
NAME
addr https://www.aponet.de:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://www.aponet.de/apotheke/notdienstsuche/91320
header Cookie: PHPSESSID=m3bdp9srkcpi0u4usjsu4hnak5; fe_typo_user=0e2ea7c72d06ccffcd48cb6f88d1e12b
host www.aponet.de
httpheader HTTP/1.1 200 OK
Date: Mon, 30 Nov 2020 22:21:42 GMT
Server: Apache/2.4.38 (Debian)
Content-Language: de
Upgrade: h2
Connection: Upgrade, close
Cache-Control: max-age=0
Expires: Mon, 30 Nov 2020 22:21:42 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
X-UA-Compatible: IE=edge
X-Content-Type-Options: nosniff
Content-Length: 8016
Content-Type: text/html; charset=utf-8
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /apotheke/notdienstsuche/91320
protocol https
redirects 0
timeout 2
url https://www.aponet.de/apotheke/notdienstsuche/91320
sslargs:
QUEUE:
READINGS:
2020-11-26 10:26:36 DatumBis 27.11.2020
2020-11-26 10:26:36 DatumVon 26.11.2020
2020-11-26 10:26:36 NotName Stadt-Apotheke
2020-11-26 10:26:36 NotdienstAdresse-1 Bamberger Str. 51
2020-11-26 10:26:36 NotdienstAdresse-2 91301 Forchheim
2020-11-26 10:26:36 NotdienstBis 27.11.2020 um 08:00 Uhr.
2020-11-26 10:26:36 NotdienstTelefon 09191 65577
2020-11-26 10:26:36 NotdienstVon vom 26.11.2020 um 08:00 Uhr
2020-11-26 10:26:36 UhrzeitBis 08:00
2020-11-26 10:26:36 UhrzeitVon 08:00
REQUEST:
context reading
data
header
ignoreredirects 0
num 0
priority 1
retryCount 0
type update
url https://www.aponet.de/apotheke/notdienstsuche/91320
defptr:
readingBase:
DatumBis reading
DatumVon reading
NotName reading
NotdienstAdresse-1 reading
NotdienstAdresse-2 reading
NotdienstBis reading
NotdienstTelefon reading
NotdienstVon reading
UhrzeitBis reading
UhrzeitVon reading
readingNum:
DatumBis 08
DatumVon 06
NotName 01
NotdienstAdresse-1 05
NotdienstAdresse-2 05
NotdienstBis 03
NotdienstTelefon 04
NotdienstVon 02
UhrzeitBis 09
UhrzeitVon 07
readingOutdated:
readingSubNum:
NotdienstAdresse-1 -1
NotdienstAdresse-2 -2
requestReadings:
update:
DatumBis reading 08
DatumVon reading 06
NotName reading 01
NotdienstAdresse-1 reading 05-1
NotdienstAdresse-2 reading 05-2
NotdienstBis reading 03
NotdienstTelefon reading 04
NotdienstVon reading 02
UhrzeitBis reading 09
UhrzeitVon reading 07
Attributes:
DbLogExclude .*
enableControlSet 1
group Außen
icon message_medicine@red
reading01Name NotName
reading01Regex <div class="box_adress"><h2>([a-zA-ZäöüÄÖÜ0-9._-]+)<\/h2><p class="distance">
reading02Name NotdienstVon
reading02Regex <p>Notdienst.*\n([ a-zA-Z0-9.:_-]+)
reading03Name NotdienstBis
reading03Regex <span>([ a-zA-Z0-9.:_-]+)<\/span>
reading04Name NotdienstTelefon
reading04Regex Tel.:.*\n([\s0-9.:_-]+)
reading05Name NotdienstAdresse
reading05Regex <p class="adress">([\sa-zA-Z0-9äöüÄÖÜß._-]+)<br\/>([\s0-9a-zA-ZäöüÄÖÜß]+)
reading06Name DatumVon
reading06Regex <p>Notdienst\n.*vom([ 0-9.:_-]+)
reading07JSON result_01_start
reading07Name Beginn
reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
reading07Regex <p>Notdienst\n.*vom.*um([ 0-9.:_-]+)
reading08JSON result_01_end
reading08Name Ende
reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
reading08Regex <span>([ a-zA-Z0-9.:_-]+)um
reading09Name UhrzeitBis
reading09Regex <span>.*um([ 0-9:_-]+)
room 0_Info_2
stateFormat NotName, NotdienstAdresse-1 in NotdienstAdresse-2, NotdienstVon bis NotdienstBis, Tel.: NotdienstTelefon
userReadings NotName NotdienstVon NotdienstBis NotdienstTelefon NotdienstAdresse DatumVon UhrzeitVon DatumBis UhrzeitBis
userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05-1Name reading05-2Name reading05Name reading05Regex reading06Name reading06Regex reading07JSON reading07Name reading07OExpr reading07Regex reading08JSON reading08Name reading08OExpr reading08Regex reading09Name reading09Regex
Besteht das Problem noch immer?
Moin,
habe gerade mal nachgesehen, letzter Eintrag vom 26.11.
War auf aponet.de, die haben umgebaut. Die URL hat sich geändert.
LG
Andreas
Gibt es eine Lösung ?
Zitat von: wendeling am 01 Dezember 2020, 21:30:06
Gibt es eine Lösung ?
Ja, auf apothenkenfinder wechseln, und das Template pharmacy_emergency_service_germany nutzen.
Ansonsten kann man mit folgender URL spielen:
https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=91320&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=&tx_aponetpharmacy_search[search][radius]=5&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=1982
Alle Regex müssen aber umgebaut werden
defmod apo3 HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=91320&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=&tx_aponetpharmacy_search[search][radius]=5&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=1982 0
attr apo3 userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading25Name reading25Regex
attr apo3 reading01Name NotName
attr apo3 reading01Regex class="name">(.*?)<\/h4>
attr apo3 reading02Name NotdienstVon
attr apo3 reading02Regex Notdienst vom(.*?Uhr)
attr apo3 reading03Name NotdienstBis
attr apo3 reading03Regex Notdienst vom.*?Uhr bis(.*?Uhr)
attr apo3 reading04Name NotdienstTelefon
attr apo3 reading04Regex href="tel:(.*?)"
attr apo3 reading05Name NotdienstAdresse
attr apo3 reading05Regex (?s)strasse">([\sa-zA-Z0-9äöüÄÖÜß.;_-]+).*?plz">(\d+)
attr apo3 reading06Name DatumVon
attr apo3 reading06Regex Notdienst vom ([ 0-9.:;_-]+)
Zitat von: amenomade am 01 Dezember 2020, 22:59:44
Ja, auf apothenkenfinder wechseln, und das Template pharmacy_emergency_service_germany nutzen.
ok, und wie muss ich das machen?
Zitat von: wendeling am 01 Dezember 2020, 23:56:42
ok, und wie muss ich das machen?
Wie in der Doku des Templates (erreichbar durch "set <httpmodName> attrTemplate ?") beschrieben
Zitatpharmacy_emergency_service_germany
Gets the current emergency service of a pharmacy closeby your postal code
Define a HTTPMOD device like
define DEVICE HTTPMOD http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=1337 0
Change the postalcode (1337 in this example) to yours
also
define NotdienstApotheke2 HTTPMOD http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=91320 3600
set NotdienstApotheke2 attrTemplate pharmacy_emergency_service_germany
Zitat von: amenomade am 01 Dezember 2020, 23:43:47
defmod apo3 HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=91320&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=&tx_aponetpharmacy_search[search][radius]=5&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=1982 0
attr apo3 userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading25Name reading25Regex
attr apo3 reading01Name NotName
attr apo3 reading01Regex class="name">(.*?)<\/h4>
attr apo3 reading02Name NotdienstVon
attr apo3 reading02Regex Notdienst vom(.*?Uhr)
attr apo3 reading03Name NotdienstBis
attr apo3 reading03Regex Notdienst vom.*?Uhr bis(.*?Uhr)
attr apo3 reading04Name NotdienstTelefon
attr apo3 reading04Regex href="tel:(.*?)"
attr apo3 reading05Name NotdienstAdresse
attr apo3 reading05Regex (?s)strasse">([\sa-zA-Z0-9äöüÄÖÜß.;_-]+).*?plz">(\d+)
attr apo3 reading06Name DatumVon
attr apo3 reading06Regex Notdienst vom ([ 0-9.:;_-]+)
Super damit geht es wieder!
Was muss ich noch machen , dass ich den Ort auch noch bekomme . Die PLZ ist ja schon da n
Gruß
Die entspr. Regex ergänzen
Hallo , habe es jetzt mit den Apothekenfinder gelöst .
Vielen Dank für die Hilfe
Gruß
Wendelin
Hi und guten Morgen,
hab mal ne Frage bezüglich dem Apotheken-Notdienst über das Template "pharmacy_emergency_service_germany".
Hab das soweit alles definiert und es läuft auch soweit, aktualisieren tue ich es jeden Morgen um 8:30 da um die Uhrzeit bei uns der Wechsel der Apotheken ist.
Ich bekomme aber immer einen Error-Eintrag im Log, dieser lautet:
2020.12.27 08:30:00.061 3: Notdienst_Apotheke: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE HTML PUBLI...") at lib/FHEM/HTTPMOD/Utils.pm line 668.
Ein List meines Devices:
Internals:
BUSY 0
DEF http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098 0
FUUID 5fe1b6e9-f33f-c2d2-80f0-0056be89f6c71fd9
FVERSION 98_HTTPMOD.pm:0.233300/2020-12-12
Interval 0
MainURL http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
ModuleVersion 4.0.16 - 5.12.2020
NAME Notdienst_Apotheke
NOTIFYDEV global
NR 247
NTFY_ORDER 50-Notdienst_Apotheke
STATE Rathaus-Apotheke, 06326 1535, Weinstr. 44 in 67146 Deidesheim
TYPE HTTPMOD
value
HttpUtils:
NAME
addr https://apothekenfinder.mobi:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;;q=0.9,en-US;;q=0.8,en;;q=0.7,fr;;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
host apothekenfinder.mobi
httpheader HTTP/1.1 200 OK
Date: Sun, 27 Dec 2020 07:30:12 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 884
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /interface/json.php?device=web&source=not&search=67098
protocol https
redirects 0
timeout 60
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
sslargs:
QUEUE:
READINGS:
2020-12-27 08:30:01 Beginn 2020-12-27 08:30:00
2020-12-27 08:30:01 Breitengrad 49.407193
2020-12-27 08:30:01 Ende 2020-12-28 08:30:00
2020-12-27 08:30:01 Entfernung 6.70
2020-12-27 08:30:01 Laengengrad 8.186982
2020-12-27 08:30:01 Name Rathaus-Apotheke
2020-12-27 08:30:01 Ort Deidesheim
2020-12-27 08:30:01 Plz 67146
2020-12-27 08:30:01 Strasse Weinstr. 44
2020-12-27 08:30:01 Telefax 06326 7437
2020-12-27 08:30:01 Telefon 06326 1535
2020-12-22 10:06:52 attrTemplateVersion 20201129
REQUEST:
context reading
data
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;;q=0.9,en-US;;q=0.8,en;;q=0.7,fr;;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
ignoreredirects 0
num 0
priority 1
retryCount 0
type update
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
defptr:
readingBase:
Beginn reading
Breitengrad reading
Ende reading
Entfernung reading
Laengengrad reading
Name reading
Ort reading
Plz reading
Strasse reading
Telefax reading
Telefon reading
readingNum:
Beginn 07
Breitengrad 10
Ende 08
Entfernung 11
Laengengrad 09
Name 01
Ort 04
Plz 03
Strasse 02
Telefax 06
Telefon 05
readingOutdated:
requestReadings:
update:
Beginn reading 07
Breitengrad reading 10
Ende reading 08
Entfernung reading 11
Laengengrad reading 09
Name reading 01
Ort reading 04
Plz reading 03
Strasse reading 02
Telefax reading 06
Telefon reading 05
Attributes:
model pharmacy_emergency_service_germany
reading01Encode UTF-8
reading01JSON result_01_name
reading01Name Name
reading02JSON result_01_street
reading02Name Strasse
reading03JSON result_01_plz
reading03Name Plz
reading04JSON result_01_place
reading04Name Ort
reading05JSON result_01_number
reading05Name Telefon
reading06JSON result_01_fax
reading06Name Telefax
reading07JSON result_01_start
reading07Name Beginn
reading07OExpr FmtDateTime($val)
reading08JSON result_01_end
reading08Name Ende
reading08OExpr FmtDateTime($val)
reading09JSON result_01_lng
reading09Name Laengengrad
reading10JSON result_01_lat
reading10Name Breitengrad
reading11JSON result_01_distance
reading11Name Entfernung
readingEncode UTF-8
requestHeader2 Accept-Encoding: gzip, deflate
requestHeader3 Accept-Language: de-DE,de;;q=0.9,en-US;;q=0.8,en;;q=0.7,fr;;q=0.6
requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
requestHeader5 Referer: http://apothekenfinder.mobi/
requestHeader6 X-Requested-With: XMLHttpRequest
requestHeader7 Connection: keep-alive
room Testbereich->Testdevices
showBody 0
stateFormat Name, Telefon, Strasse in Plz Ort
timeout 60
userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL requestHeader requestHeader1
Hat da jemand eine Idee?
Gruß Markus
Das kommt weil er ein redirect auf sich selbst zuerst macht:
2020.12.27 11:55:01 4: apotheke: Read callback: request type was update retry 0,
header: HTTP/1.1 301 Moved Permanently
Date: Sun, 27 Dec 2020 10:55:13 GMT
Server: Apache
Location: https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
Content-Length: 298
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1, body length 298
2020.12.27 11:55:01 5: apotheke: Read callback: body
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098">here</a>.</p>
</body></html>
Und dieses Zwischenergebnis kann er nicht parsen.
Ich weiss nicht, wie es zu vermeiden.
Zitat von: meier81 am 27 Dezember 2020, 09:23:16
Hat da jemand eine Idee?
Ja. Mach mal aus
http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
bitte
http
s://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098
(https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=67098)
Grüße aus OWL in meine Pälzer Heimad
Tatsächlich, das hatte ich übersehen! Ich muss das template auch anpassen. Danke.
EDIT: eingecheckt.
Ich bin gerade einigermaßen schockiert, dass HTTPMOD mit (standardkonformen) Redirects nicht richtig umgehen kann?!
Ja, eigentlich sollte er, wenn enabaleRedirects gesetzt ist, gar nicht versuchen das JSON der 301 Seite zu parsen. ABer gut...
Super, danke euch, hab ich eben mal geändert, ist ja morgen auch in den Templates dabei ;).
Gruß zurück nach Gütersloh aus der Pfalz ;D
Für alle, die den Standort der Apotheke auf einer Karte angezeigt haben wollen, können sich mit OSM (https://www.openstreetmap.org) einen Kartenlink generieren (raw):
attr DEVICE userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
erzeugt ein userReading OSMLink wie diesen:
2021-09-23 16:45:17 OSMLink https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891
Entspricht diesem link: https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891 (https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891)
Zitat von: yersinia am 23 September 2021, 16:47:22
Für alle, die den Standort der Apotheke auf einer Karte angezeigt haben wollen, können sich mit OSM (https://www.openstreetmap.org) einen Kartenlink generieren (raw):
attr DEVICE userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
erzeugt ein userReading OSMLink wie diesen:
2021-09-23 16:45:17 OSMLink https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891
Entspricht diesem link: https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891 (https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891)
.... und wer lieber GoogleMaps verwendet für den wäre hier der passende Code:
attr DEVICE userReadings GoogleLink {my $ret = "https:\/\/www.google.com\/maps\/search\/?api=1";;\
$ret .= "&query=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= ",".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
Alternativ:
attr DEVICE userReadings GoogleLink {my $ret = "https:\/\/www.google.com\/maps\/search\/";;\
$ret .= ReadingsVal($name,"Breitengrad","0");;\
$ret .= ",".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "\/\@".ReadingsVal($name,"Breitengrad","0");;\
$ret .= ",".ReadingsVal($name,"Laengengrad","0");;\
$ret .= ",18z";;\
return $ret;; }
Erzeugt diesen Link mit Zentrierung und Zoom: https://maps.google.com/maps/search/51.1873547,10.0575891/@51.1873547,10.0575891,18z (https://maps.google.com/maps/search/51.1873547,10.0575891/@51.1873547,10.0575891,18z)
Hallo,
ich habe den OSM-Link versucht, umzusetzen, jedoch kommt bei mir nur der folgende Fehler:
Error evaluating NotdienstApotheke userReading OSMLink: Can't modify single ref constructor in concatenation (.) or string at (eval 4505466) line 2, at EOF
Was übersehe ich da jetzt bloß?
Das Device:
Internals:
BUSY 0
DEF https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=49324 0
FUUID 5db338f9-f33f-378b-3622-385c1dfe29ce8674
FVERSION 98_HTTPMOD.pm:0.247080/2021-07-06
Interval 0
MainURL https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=49324
ModuleVersion 4.1.10 - 6.7.2021
NAME NotdienstApotheke
NOTIFYDEV global
NR 1228
NTFY_ORDER 50-NotdienstApotheke
STATE Neue Apotheke Bruchmühlen, 05226 982222, Kilverstraße 169 -173 in 32289 Rödinghausen
TYPE HTTPMOD
value
HttpUtils:
NAME
addr https://apothekenfinder.mobi:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=49324
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
host apothekenfinder.mobi
httpheader HTTP/1.1 200 OK
Date: Mon, 07 Feb 2022 09:47:52 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 922
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /interface/json.php?device=web&source=not&search=49324
protocol https
redirects 0
timeout 2
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=49324
sslargs:
QUEUE:
READINGS:
2022-02-07 10:47:39 Beginn 1644220800
2022-02-07 10:47:39 Breitengrad 52.20131
2022-02-07 10:47:39 Ende 1644307200
2022-02-07 10:47:39 Entfernung 8.56
2022-02-07 10:47:39 Laengengrad 8.45689
2022-02-07 10:38:59 Längengrad 8.45689
2022-02-07 10:47:39 Name Neue Apotheke Bruchmühlen
2022-02-07 10:47:39 OSMLink Error evaluating NotdienstApotheke userReading OSMLink: Can't modify single ref constructor in concatenation (.) or string at (eval 4505466) line 2, at EOF
2022-02-07 10:47:39 Ort Rödinghausen
2022-02-07 10:47:39 Plz 32289
2022-02-07 10:47:39 Strasse Kilverstraße 169 -173
2022-02-07 10:47:39 Telefax 05226 984749
2022-02-07 10:47:39 Telefon 05226 982222
REQUEST:
context reading
data
header Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
Referer: http://apothekenfinder.mobi/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
ignoreredirects 0
num unknown
retryCount 0
type update
url https://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=49324
defptr:
readingBase:
Beginn reading
Breitengrad reading
Ende reading
Entfernung reading
Laengengrad reading
Längengrad reading
Name reading
Ort reading
Plz reading
Strasse reading
Telefax reading
Telefon reading
readingNum:
Beginn 07
Breitengrad 10
Ende 08
Entfernung 11
Laengengrad 09
Längengrad 09
Name 01
Ort 04
Plz 03
Strasse 02
Telefax 06
Telefon 05
readingOutdated:
requestReadings:
update:
Beginn reading 07
Breitengrad reading 10
Ende reading 08
Entfernung reading 11
Laengengrad reading 09
Längengrad reading 09
Name reading 01
Ort reading 04
Plz reading 03
Strasse reading 02
Telefax reading 06
Telefon reading 05
Attributes:
DbLogExclude .*
enableControlSet 1
event-on-change-reading .*
group A_SOS
icon message_attention
reading01Encode UTF-8
reading01JSON result_01_name
reading01Name Name
reading02JSON result_01_street
reading02Name Strasse
reading03JSON result_01_plz
reading03Name Plz
reading04JSON result_01_place
reading04Name Ort
reading05JSON result_01_number
reading05Name Telefon
reading06JSON result_01_fax
reading06Name Telefax
reading07JSON result_01_start
reading07Name Beginn
reading08JSON result_01_end
reading08Name Ende
reading09JSON result_01_lng
reading09Name Laengengrad
reading10JSON result_01_lat
reading10Name Breitengrad
reading11JSON result_01_distance
reading11Name Entfernung
readingEncode UTF-8
requestHeader2 Accept-Encoding: gzip, deflate
requestHeader3 Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
requestHeader5 Referer: http://apothekenfinder.mobi/
requestHeader6 X-Requested-With: XMLHttpRequest
requestHeader7 Connection: keep-alive
room Flur
showBody 0
stateFormat Name, Telefon, Strasse in Plz Ort
userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL reading07OExpr reading08OExpr requestHeader requestHeader1
Gruß, Christoph
Da stimmt was mit deinem userReading nicht.
Das list(-Auszug) deines Devices ist
userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
versus welche ich nutze ohne Fehlermeldung (ebenfalls list-Auszug):
userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");
$ret .= "#map=18";
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");
return $ret; }
Hast du ggf das raw-Format als userReading kopiert? Wenn ja, probier mal die Version fürs Frontend (über Attribut userReading und dann einfach reinkopieren):
OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");
$ret .= "#map=18";
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");
return $ret; }
Danke,
manchmal ist man ja auch schlicht blind ::) Jetzt funktioniert es
Gruß, Christoph
Zitat von: yersinia am 23 September 2021, 16:47:22
Für alle, die den Standort der Apotheke auf einer Karte angezeigt haben wollen, können sich mit OSM (https://www.openstreetmap.org) einen Kartenlink generieren (raw):
attr DEVICE userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
erzeugt ein userReading OSMLink wie diesen:
2021-09-23 16:45:17 OSMLink https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891
Entspricht diesem link: https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891 (https://www.openstreetmap.org/?mlat=51.1873547&mlon=10.0575891#map=18/51.1873547/10.0575891)
Und für diejenigen, die auch noch eine Routenbeschreibung über OSM haben möchten und den eigenen Standord als lat/long im global Device gepflegt haben (bzw. irgendwo im FHEM gepflegt haben), können sich über ein weiteres userReading einen solchen Link generieren (raw zum Kopieren; der Vollständigkeit-halber ist das userReading OSMLink mit enthalten):
attr DEVICE userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "mlat=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "&mlon=".ReadingsVal($name,"Laengengrad","0");;\
$ret .= "#map=18";;\
$ret .= "\/".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "\/".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; },\
OSMRoute { my $ret = "https:\/\/www.openstreetmap.org\/directions?";;\
$ret .= "engine=graphhopper_car";;\
$ret .= "&from=".AttrVal("global","latitude","0");;\
$ret .= "%2C".AttrVal("global","longitude","0");;\
$ret .= "&to=".ReadingsVal($name,"Breitengrad","0");;\
$ret .= "%2C".ReadingsVal($name,"Laengengrad","0");;\
return $ret;; }
Generiert ein userReading OSMRoute mit einen Link wie https://www.openstreetmap.org/directions?engine=graphhopper_car&from=51.18668%2C10.00639&to=51.1873547%2C10.0575891 (https://www.openstreetmap.org/directions?engine=graphhopper_car&from=51.18668%2C10.00639&to=51.1873547%2C10.0575891).
Die engine kann beliebig gewechselt werden (einfach den Teil
$ret .= "engine=graphhopper_car";;\ entsprechend ersetzen):
Auto (GraphHopper) => graphhopper_car
Auto (OSRM) => fossgis_osrm_car
Fahrrad (GraphHopper) => graphhopper_bicycle
Fahrrad (OSRM) => fossgis_osrm_bike
Fuß (GraphHopper) => graphhopper_foot
Fuß (OSRM) => fossgis_osrm_foot
Mir düngt, dass seit dem 10.1.23 die Schnittstelle nicht mehr funktioniert. Hat schon jemand eine Alternative aufgetan?
Ja, die neue URL ist jetzt https://www.aponet.de/apotheke/notdienstsuche. Grundsätzlich funktioniert das alles schon noch wie vorher auch. Man müsste jetzt nur die Attribute entsprechend anpassen. Leider bin ich aufgrund der schlechten Bedienbarkeit des HTTPMOD-Moduls und der ausschließlich englischen Dokumentation völlig überfordert.
Ich habe ein Test-Device für den Apotheken-Notdienst angelegt - basierend auf attrTemplate "aponet_pharmacy_emergency_service_germany" (20201202).
Es liefert nach wie vor Daten und erzeugt die gewünschten Readings ...
War es nur ein temporäres Problem ?
Super Tip. Habe auch ein neues Device mit dem attr-Template angelegt. Damit funktionierts wieder. Nur die Koordinaten für den Google-Link kommen nicht. Mal schauen, ob man da noch was drehen kann.
Vielen Dank.
Zitat von: Wolle02 am 18 Januar 2023, 06:43:17
Nur die Koordinaten für den Google-Link kommen nicht. Mal schauen, ob man da noch was drehen kann.
Da hätte ich eine gute Nachricht für Dich
... "könnte man auf andere Datenbasis umbauen und hat dann auch Koordinaten"
aber auch eine schlechte
... "mit dem Wechsel der Datenbasis würden die von-bis-Zeiten verlorengehen"
oder
man versucht den auf der jetzigen Seite integrierten Kartenlink zu "zerlegen" ...
Zitat von: OdfFhem am 18 Januar 2023, 08:43:44
man versucht den auf der jetzigen Seite integrierten Kartenlink zu "zerlegen" ...
Das versuche ich grade schon seit einer Weile, aber ich scheitere mal wieder am Thema Regex, da ich es nicht schaffe einen Ausdruck zu kreieren, der die URL zurückgibt bzw. findet.
So, nach viel rumprobieren habe ich nun folgende Attribute bei mir noch eingefügt:
reading11Name Entfernung
reading11Regex Entfernung: </span>(.?)
reading12Name GoogleLink
reading12Regex href="(http:\/\/.*?)"
Damit wird die Entfernungsangabe noch anzeigt und der Link zu Google funktioniert auch wieder.
Zitat von: Wolle02 am 18 Januar 2023, 15:28:31
Damit wird die Entfernungsangabe noch anzeigt und der Link zu Google funktioniert auch wieder.
Angenommen, es geht um aponet.de ... dann kann ich Dein Ergebnis nicht nachvollziehen:
- die nächstgelegene Apotheke ist 12.36 km entfernt ... im Reading steht nur eine 1
- die nächstgelegene Apotheke hat auch eine Webseite ... im Reading steht nicht der Link zur Karte, sondern zur Webseite der Apotheke
Zitat von: OdfFhem am 18 Januar 2023, 18:02:11
Angenommen, es geht um aponet.de ... dann kann ich Dein Ergebnis nicht nachvollziehen:
- die nächstgelegene Apotheke ist 12.36 km entfernt ... im Reading steht nur eine 1
- die nächstgelegene Apotheke hat auch eine Webseite ... im Reading steht nicht der Link zur Karte, sondern zur Webseite der Apotheke
Probier mal:
reading11Name Entfernung
reading11Regex (\d{1,}\.?\d{1,2}?\skm)
reading12Name GoogleLink
reading12Regex "showapo".*?"(http:\/\/.*?)"
Gruß
Dan
Tja, da sieht man halt, dass ich von Regex nicht wirklich viel Ahnung habe und mit Try and Error mein Glück versuche.
Zitatdie nächstgelegene Apotheke ist 12.36 km entfernt ... im Reading steht nur eine 1
Das liegt daran, dass bei mir in der Stadt keine Apotheke mehr als 10 Kilometer weg ist. Deshalb wird nur nach einer Stelle gesucht. Bei mir hat das halt zum gewünschten Ergebnis geführt.
Aber diese leichte Modifikation gibt wohl auch 2 Stellen zurück. Mehr als 100 km wird wohl keiner zu einer Notdienstapotheke fahren müssen.
Entfernung: <\/span>(..?)
Zitatdie nächstgelegene Apotheke hat auch eine Webseite ... im Reading steht nicht der Link zur Karte, sondern zur Webseite der Apotheke
Ja, hab ich jetzt auch gesehen, dass manche Apotheken noch einen Link vor dem Googlelink haben. Das ist blöd. Weiß ich gerade nicht wie man da besser sucht. Ich probier mal weiter.
Wenn da aber jemand den entscheidenden Tip hat wär das toll.
EDIT:
Ahhh, da hat DeeSPe ein paar Sekunden vor mir gepostet. Ja das mit dem Googlelink sieht so wohl besser aus. Vielen Dank.
Hallo,
falls noch jemand direkt in Fhem auf den Link zur Route klicken möchte:
attr <DeviceName> userReadings GoogleMaps {return("<html><a href='" . ReadingsVal("<DeviceName>", "GoogleLink", ""). "/' target='_blank'>Route zur Apotheke</a></html>") }
Grüße Jörg
PS: Ich habe das Template mal testweise auf folgendes erweitert:
par:SEARCHZIPCODE;Zip code of the city you want to search around;
par:SEARCHCITY;city you want to search around;
par:SEARCHSTREET;Street in the city you want to search around;
par:SEARCHNUMBER;Building nummber you want to search around;
par:SEARCHRADIUS;Radius in km for the search;
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
defmod DEVICE HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=SEARCHZIPCODE%20SEARCHCITY&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=SEARCHSTREET%20SEARCHNUMBER&tx_aponetpharmacy_search[search][radius]=SEARCHRADIUS&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=1982 0
...
attr DEVICE reading07Name NotdienstEntfernung
attr DEVICE reading07Regex Entfernung:.<\/span>(\d{1,}\.?\d?\d?\skm)
attr DEVICE reading08Name GoogleLink
attr DEVICE reading08Regex href="(http:\/\/maps\.google\.de\/maps.*?)">Google Navigation
attr DEVICE stateFormat NotName, NotdienstTelefon, NotdienstAdresse-1 in NotdienstAdresse-2 NotdienstAdresse-3
attr DEVICE userReadings GoogleMaps {return("<html><a href='" . ReadingsVal("DEVICE", "GoogleLink", ""). "/' target='_blank'>Route zur Apotheke</a></html>") }
Bei Flächengemeinden ist die Straße schon wichtig. Da sind dann einige Kilometer relevant.
Zitat von: JoWiemann am 18 Januar 2023, 20:38:28
falls noch jemand direkt in Fhem auf den Link zur Route klicken möchte:
Ich habe das über stateFormat gelöst, inklusive anklickbarer Telefonnummer:
attr DEVICE stateFormat NotName (ca. Entfernung entfernt)<br>\
<a target="_blank" href="GoogleLink">NotdienstAdresse-1</a><br>\
NotdienstAdresse-2 NotdienstAdresse-3<br>\
Tel.: <a href="tel:NotdienstTelefon">NotdienstTelefon</a><br>\
<b>Bereitschaft</b><br>\
von NotdienstVon<br>\
bis NotdienstBis
Gruß
Dan
Hallo,
hier noch etwas "verfeinert"
GoogleMaps {
my $street = "Strasse";
my $number = "Hausnummer";
my $city = "Stadt";
my $plz = "PLZ";
my $oLink = ReadingsVal("NotdienstApotheke", "GoogleLink", "");
my $mLink .= "<html><a href='https://www.google.de/maps/dir/?api=1&origin=";
$mLink .= $street . "+" . $number . ",+" . $plz . "+" . $city . "&destination=" . substr($oLink,index($oLink, "?", 0) + 3);
$mLink .= "&travelmode=driving/' target='_blank'>Route zur Apotheke</a></html>";
return $mLink;;
}
... da war man wohl zu langsam, aber schicken kann man es trotzdem ...
Weiteres RegExp-Beispiel für Entfernung:
Entfernung:\s[^\d]*([\d.]*)\skm
Weiteres RegExp-Beispiel für Link:
<a\s[^>]*href="([^>]*)"[^>]*>Google Navigation<\/a>
Benötigt man nicht beide Readings (GoogleLink,GoogleMaps), könnte man bereits von HTTPMOD den "fertigen" Link generieren lassen:
attr DEVICE reading08OExpr "<html><a href='".$val."' target='_blank'>Karte für Apotheke</a></html>"
Danke an alle für die Tipps und Optimierungen. :)
Zitat von: JoWiemann am 18 Januar 2023, 20:38:28Bei Flächengemeinden ist die Straße schon wichtig. Da sind dann einige Kilometer relevant.
Der Suchlink akzeptiert auch Koordinaten. ;)
Ich würde noch reread hinzufügen und das interval auf täglich (43200s) mit aligntime 09:03 hinzufügen (die Notdienstzeiten sind imho immer von 9Uhr bis 9uhr).
Hier mein Beispiel für das erweiterte Template
aponet_pharmacy_emergency_service_germany:
defmod NotApo HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=%%PLZ%%&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=%%STREET%%&tx_aponetpharmacy_search[search][radius]=%%RADIUS%%&tx_aponetpharmacy_search[search][lat]=%%LAT%%&tx_aponetpharmacy_search[search][lng]=%%LONG%%&type=1982 43200
attr NotApo alignTime 09:03
attr NotApo model aponet_pharmacy_emergency_service_germany
attr NotApo reading01Name NotName
attr NotApo reading01Regex class="name">(.*?)<\/h4>
attr NotApo reading02Name NotdienstVon
attr NotApo reading02Regex Notdienst vom(.*?Uhr)
attr NotApo reading03Name NotdienstBis
attr NotApo reading03Regex Notdienst vom.*?Uhr bis(.*?Uhr)
attr NotApo reading04Name NotdienstTelefon
attr NotApo reading04Regex href="tel:(.*?)"
attr NotApo reading05Name NotdienstAdresse
attr NotApo reading05Regex (?s)strasse">([\sa-zA-Z0-9äöüÄÖÜß.;;;_-]+).*?plz">(\d+).*?ort">([\sa-zA-Z0-9äöüÄÖÜß.;;;_-]+)<
attr NotApo reading06Name DatumVon
attr NotApo reading06Regex Notdienst vom ([ 0-9.:;;;_-]+)
attr NotApo replacement01Mode text
attr NotApo replacement01Regex %%PLZ%%
attr NotApo replacement01Value %20
attr NotApo replacement02Mode text
attr NotApo replacement02Regex %%RADIUS%%
attr NotApo replacement02Value 10
attr NotApo replacement03Mode text
attr NotApo replacement03Regex %%STREET%%
attr NotApo replacement03Value %20
attr NotApo replacement04Mode expression
attr NotApo replacement04Regex %%LAT%%
attr NotApo replacement04Value AttrVal("global","latitude","")
attr NotApo replacement05Mode expression
attr NotApo replacement05Regex %%LONG%%
attr NotApo replacement05Value AttrVal("global","longitude","")
attr NotApo room CoViD-19
attr NotApo stateFormat { my $ret .= "<div style=\"display:table;;width:100%;;\">";; #table\
$ret .= "<div style=\"display:table-row;;width:100%;;\">";; #row\
$ret .= "<div style=\"display:table-cell;;padding:3pt;;width:50%;;text-align:left;;\">";; #cell\
$ret .= "<a href=\"".ReadingsVal($name,"OSMLink","https:\/\/www.osm.org");;\
$ret .= "\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">".ReadingsVal($name,"NotName","?")."</a><br \/>";;\
$ret .= ReadingsVal($name,"NotdienstAdresse-1","")."<br /\>";;\
$ret .= ReadingsVal($name,"NotdienstAdresse-2","")." ;".ReadingsVal($name,"NotdienstAdresse-3","");;\
$ret .= "</div>";; #/cell\
$ret .= "<div style=\"display:table-cell;;width:50%;;text-align:left;;\">";; #cell\
my $numberlink = ReadingsVal($name,"NotdienstTelefon","");;\
$numberlink =~ s/\s+//g;;\
$ret .= "Tel.: <a href=\"tel:+49".substr($numberlink, 1)."\">".ReadingsVal($name,"NotdienstTelefon","")."</a>";;\
$ret .= "</div>";; #/cell\
$ret .= "</div>";; #/row\
$ret .= "<div style=\"display:table-row;;width:100%;;\">";; #row\
$ret .= "<div style=\"display:table-cell;;padding:3pt;;width:50%;;text-align:left;;\">";; #cell\
$ret .= "Von ".ReadingsVal($name,"NotdienstVon","");;\
$ret .= "</div>";; #/cell\
$ret .= "<div style=\"display:table-cell;;width:50%;;text-align:left;;\">";; #cell\
$ret .= "Bis ".ReadingsVal($name,"NotdienstBis","");;\
$ret .= "</div>";; #/cell\
$ret .= "</div>";; #/row\
$ret .= "</div>";; #/table\
return $ret;;\
}
attr NotApo timeout 30
attr NotApo userReadings OSMLink { my $ret = "https:\/\/www.openstreetmap.org\/?";;\
$ret .= "query=".ReadingsVal($name,"NotdienstAdresse-1","0");;\
$ret .= ",%20".ReadingsVal($name,"NotdienstAdresse-2","0");;\
$ret .= "%20".ReadingsVal($name,"NotdienstAdresse-3","0");;\
return $ret;; }
attr NotApo webCmd reread
Da es keine Koordinaten der Apothekenadresse gibt, kann zumindest ich kein Routing bilden - aber man kann OSM nach der Adresse anfragen.
Die Koordinaten kommen aus dem global Device:
attr NotApo replacement04Mode expression
attr NotApo replacement04Regex %%LAT%%
attr NotApo replacement04Value AttrVal("global","latitude","")
attr NotApo replacement05Mode expression
attr NotApo replacement05Regex %%LONG%%
attr NotApo replacement05Value AttrVal("global","longitude","")
Alternativ kann man auch die Adresse angeben (radius ist mit 10(km) vorbelegt):
attr NotApo replacement01Mode text
attr NotApo replacement01Regex %%PLZ%%
attr NotApo replacement01Value %20
attr NotApo replacement02Mode text
attr NotApo replacement02Regex %%RADIUS%%
attr NotApo replacement02Value 10
attr NotApo replacement03Mode text
attr NotApo replacement03Regex %%STREET%%
attr NotApo replacement03Value %20
Anstelle der %20 (= Leerzeichen) einfach für PLZ die PLZ mit optionaler Stadt (12345 Musterstadt) und Straße inkl. bedarfsweise Hausnummer angeben (Musterweg 25).
Hallo,
ich habe jetzt eine Vorschlag für das attrTemplate:
#Pharmacy emergency service Germany - aponet, Forum https://forum.fhem.de/index.php/topic,87234.0.html
name:aponet_pharmacy_emergency_service_germany
filter:TYPE=HTTPMOD
desc: Gets the current emergency service of a pharmacy closeby your postal code from aponet.de<br />Define an empty HTTPMOD device with <br />define DEVICE HTTPMOD none 0<br /><a href="https://forum.fhem.de/index.php/topic,87234.0.html">Source: Forum</a><br />
order:DIV02
par:SEARCHZIPCODE;Zip code of the city you want to search around;
par:SEARCHCITY;city you want to search around;
par:SEARCHSTREET;Street in the city you want to search around;
par:SEARCHNUMBER;Building nummber you want to search around;
par:SEARCHRADIUS;Radius in km for the search;
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
defmod DEVICE HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=SEARCHZIPCODE%20SEARCHCITY&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=SEARCHSTREET%20SEARCHNUMBER&tx_aponetpharmacy_search[search][radius]=SEARCHRADIUS&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=1982 0
attr DEVICE reading01Name NotName
attr DEVICE reading01Regex class="name">(.*?)<\/h4>
attr DEVICE reading02Name NotdienstVon
attr DEVICE reading02Regex Notdienst vom(.*?Uhr)
attr DEVICE reading03Name NotdienstBis
attr DEVICE reading03Regex Notdienst vom.*?Uhr bis(.*?Uhr)
attr DEVICE reading04Name NotdienstTelefon
attr DEVICE reading04Regex href="tel:(.*?)"
attr DEVICE reading05Name NotdienstAdresse
attr DEVICE reading05Regex (?s)strasse">([\sa-zA-Z0-9äöüÃ,,ÖÜß.;_-]+).*?plz">(\d+).*?ort">([\sa-zA-Z0-9äöüÃ,,ÖÜß.;_-]+)<
attr DEVICE reading06Name DatumVon
attr DEVICE reading06Regex Notdienst vom ([ 0-9.:;_-]+)
attr DEVICE reading07Name NotdienstEntfernung
attr DEVICE reading07Regex Entfernung:.<\/span>(\d{1,}\.?\d?\d?\skm)
attr DEVICE reading08Name GoogleLink
attr DEVICE reading08Regex href="(http:\/\/maps\.google\.de\/maps.*?)">Google Navigation
attr DEVICE stateFormat {my $Apo = ReadingsVal("DEVICE", "NotName", "") . " (" . ReadingsVal("DEVICE", "NotdienstTelefon", "") . ") ";\
$Apo .= ReadingsVal("DEVICE", "NotdienstAdresse-1", "") . " in ";\
$Apo .= ReadingsVal("DEVICE", "NotdienstAdresse-2", "") . " " . ReadingsVal("DEVICE", "NotdienstAdresse-3", "");\
my $oLink = ReadingsVal("DEVICE", "GoogleLink", "");\
my $mLink .= "<html><a href='https://www.google.de/maps/dir/?api=1&origin=";\
$mLink .= "SEARCHSTREET" . "+" . "SEARCHNUMBER" . ",+" . "SEARCHZIPCODE" . "+" . "SEARCHCITY" . "&destination=" . substr($oLink,index($oLink, "?", 0) + 3);\
$mLink .= "&travelmode=driving/' target='_blank'>$Apo</a></html>";\
return $mLink;}
attr DEVICE model aponet_pharmacy_emergency_service_germany
setreading DEVICE attrTemplateVersion 20201202
Es wird nun eine stateFormat geniert, das für "Apotheke, Telefonnummer und Adresse" ein GoogleMaps Link hinterlegt.
Vielleicht findet die Änderung ja Zustimmung.
Grüße Jörg
Moin
Zitat von: yersinia am 19 Januar 2023, 09:22:47
Ich würde noch reread hinzufügen und das interval auf täglich (43200s) mit aligntime 09:03 hinzufügen (die Notdienstzeiten sind imho immer von 9Uhr bis 9uhr).
Bei uns steht immer von/bis 8:30 Uhr - da sollte man die Abfrage vlt. etwas flexibler gestalten ...
Gruß, Christoph
Zitat von: caldir65 am 19 Januar 2023, 10:48:19Bei uns steht immer von/bis 8:30 Uhr - da sollte man die Abfrage vlt. etwas flexibler gestalten ...
Interessant. Dann setz doch das Attribut (!) aligntime auf 8:33...
Am Wochenende habe ich mich ein wenig näher mit dem "offiziellen Gesundheitsportal der deutschen ApothekerInnen" beschäftigt und das vorhandene Template u.a. an die neuen Erkenntnisse angepasst.
- zwei Parameter zur Festlegung der "Basis" werden als Attribut abgelegt und bei wiederholter Anwendung des Templates ausgelesen
- alignTime und Interval werden ebenso wie room bei wiederholter Anwendung des Templates ausgelesen
- das bislang existierende FHEM-Device wird resettet ... Reading und Attribute
- FHEM-Device führt zwei Anfragen durch ... eine für die ständig wechselnden Daten (neu) ... eine für den Notdienst-Zeitraum (alt, aber jetzt nach Datum und Zeit getrennt)
- generiert je ein Karten- sowie Routing-Reading für OSM bzw. Google
- Statusanzeige enthält "viele" Informationen, aber trifft im Zweifel nicht jeden Geschmack
#Pharmacy emergency service Germany - aponet, Forum https://forum.fhem.de/index.php/topic,87234.0.html
name:aponet_pharmacy_emergency_service_germany
filter:TYPE=HTTPMOD
desc: Gets the current emergency service of a pharmacy closeby your postal code from aponet.de<br />Define an empty HTTPMOD device with <br />define DEVICE HTTPMOD none 0<br /><a href="https://forum.fhem.de/index.php/topic,87234.0.html">Source: Forum</a><br />
order:DIV02
par:SEARCHZIPCODE;Zip code of the city you want to search around; {AttrVal("DEVICE","parSearchZipCode",undef)}
par:SEARCHRADIUS;Radius in km for the search; {AttrVal("DEVICE","parSearchRadius",undef)}
par:ALIGNTIME;Aligns each periodic read request to this base time, defaults to 09:15; {AttrVal("DEVICE","alignTime","09:15")}
par:INTERVAL;Repeats the read request every interval seconds, defaults to 86400; {InternalVal("DEVICE","Interval",86400)}
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD")}
defmod DEVICE HTTPMOD none INTERVAL
deletereading -q DEVICE .*
deleteAttr DEVICE .*
attr DEVICE userattr parSearchRadius parSearchZipCode
attr DEVICE parSearchRadius SEARCHRADIUS
attr DEVICE parSearchZipCode SEARCHZIPCODE
attr DEVICE get100Name Notdienst1
attr DEVICE get100Poll 1
attr DEVICE get100URL %%base_url%%1982
attr DEVICE reading102Name NotdienstVonDatum
attr DEVICE reading102OExpr $val =~ s/(.*) um (.*) Uhr/$1/;; return $val;;
attr DEVICE reading102Regex Notdienst vom(.*?Uhr)
attr DEVICE reading103Name NotdienstVonZeit
attr DEVICE reading103OExpr $val =~ s/(.*) um (.*) Uhr/$2/;; return $val;;
attr DEVICE reading103Regex Notdienst vom(.*?Uhr)
attr DEVICE reading105Name NotdienstBisDatum
attr DEVICE reading105OExpr $val =~ s/(.*) um (.*) Uhr/$1/;; return $val;;
attr DEVICE reading105Regex Notdienst vom.*?Uhr bis(.*?Uhr)
attr DEVICE reading106Name NotdienstBisZeit
attr DEVICE reading106OExpr $val =~ s/(.*) um (.*) Uhr/$2/;; return $val;;
attr DEVICE reading106Regex Notdienst vom.*?Uhr bis(.*?Uhr)
attr DEVICE get200ExtractAllJSON 0
attr DEVICE get200Name Notdienst2
attr DEVICE get200Poll 1
attr DEVICE get200URL %%base_url%%1981
attr DEVICE reading201JSON features_01_properties_name
attr DEVICE reading201Name NotdienstName
attr DEVICE reading202JSON features_01_properties_strasse
attr DEVICE reading202Name NotdienstStrasse
attr DEVICE reading203JSON features_01_properties_plz
attr DEVICE reading203Name NotdienstPlz
attr DEVICE reading204JSON features_01_properties_ort
attr DEVICE reading204Name NotdienstOrt
attr DEVICE reading205JSON features_01_properties_telefon
attr DEVICE reading205Name NotdienstTelefon
attr DEVICE reading206JSON features_01_properties_fax
attr DEVICE reading206Name NotdienstTelefax
attr DEVICE reading207JSON features_01_geometry_coordinates_0
attr DEVICE reading207Name NotdienstLaengengrad
attr DEVICE reading208JSON features_01_geometry_coordinates_1
attr DEVICE reading208Name NotdienstBreitengrad
attr DEVICE reading209JSON features_01_properties_distanz
attr DEVICE reading209Name NotdienstEntfernung
attr DEVICE reading210JSON features_01_properties_email
attr DEVICE reading210Name NotdienstEmail
attr DEVICE readingMaxAge 60
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE replacement01Mode text
attr DEVICE replacement01Regex %%base_url%%
attr DEVICE replacement01Value https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[controller]=Search&tx_aponetpharmacy_search[search][plzort]=SEARCHZIPCODE&tx_aponetpharmacy_search[search][date]=&tx_aponetpharmacy_search[search][street]=&tx_aponetpharmacy_search[search][radius]=SEARCHRADIUS&tx_aponetpharmacy_search[search][lat]=&tx_aponetpharmacy_search[search][lng]=&type=
attr DEVICE alignTime ALIGNTIME
attr DEVICE room WHICHROOM
attr DEVICE showError 1
attr DEVICE webCmd reread
attr DEVICE stateFormat NotdienstName, NotdienstStrasse in NotdienstPlz NotdienstOrt\
<br>\
NotdienstVonDatum, NotdienstVonZeit - NotdienstBisDatum, NotdienstBisZeit ... Tel.: NotdienstTelefon\
<br>\
NotdienstGOOGLEmap NotdienstGOOGLEroute NotdienstEntfernung km NotdienstOSMmap NotdienstOSMroute
attr DEVICE userReadings \
NotdienstGOOGLEmap:(NotdienstBreitengrad|NotdienstLaengengrad):.* {\
my $link = "https:\/\/www.google.com\/maps\/search";;\
$link .= "\/".ReadingsVal($name,"NotdienstBreitengrad","0");;\
$link .= ",".ReadingsVal($name,"NotdienstLaengengrad","0");;\
return "<html><a href='".$link."' target='_blank'>Google-Karte</a></html>";;\
},\
NotdienstGOOGLEroute:(NotdienstBreitengrad|NotdienstLaengengrad):.* {\
my $link = "https:\/\/www.google.com\/maps\/dir";;\
$link .= "\/".AttrVal("global","latitude","0");;\
$link .= ",".AttrVal("global","longitude","0");;\
$link .= "\/".ReadingsVal($name,"NotdienstBreitengrad","0");;\
$link .= ",".ReadingsVal($name,"NotdienstLaengengrad","0");;\
return "<html><a href='".$link."' target='_blank'>Google-Route</a></html>";;\
},\
NotdienstOSMmap:(NotdienstBreitengrad|NotdienstLaengengrad):.* { \
my $link = "https:\/\/www.openstreetmap.org\/?";;\
$link .= "mlat=".ReadingsVal($name,"NotdienstBreitengrad","0");;\
$link .= "&mlon=".ReadingsVal($name,"NotdienstLaengengrad","0");;\
$link .= "#map=18";;\
$link .= "\/".ReadingsVal($name,"NotdienstBreitengrad","0");;\
$link .= "\/".ReadingsVal($name,"NotdienstLaengengrad","0");;\
return "<html><a href='".$link."' target='_blank'>OSM-Karte</a></html>";;\
},\
NotdienstOSMroute:(NotdienstBreitengrad|NotdienstLaengengrad):.* { \
my $link = "https:\/\/www.openstreetmap.org\/directions?";;\
$link .= "engine=graphhopper_car";;\
$link .= "&from=".AttrVal("global","latitude","0");;\
$link .= "%2C".AttrVal("global","longitude","0");;\
$link .= "&to=".ReadingsVal($name,"NotdienstBreitengrad","0");;\
$link .= "%2C".ReadingsVal($name,"NotdienstLaengengrad","0");;\
return "<html><a href='".$link."' target='_blank'>OSM-Route</a></html>";;\
}
attr DEVICE model aponet_pharmacy_emergency_service_germany
setreading DEVICE attrTemplateVersion 20230123
Moin Zusammen,
funktioniert bei euch noch die Abfrage der Notdienst Apotheke über aponet?
Ich habe sowohl das attrTemplate von Jörg als auch von OldFhem getestet. Jeweils ohne das Readings erstellt wurden.
DatumVon 10.03.20232023-03-10 08:33:00
VG Sebastian
Moin,
bei mir kommt auch nichts mehr seit dem 10.03.2023 ... bzw. der letzte Eintrag ist vom 10.03.
Gruß, Christoph
Das Template für den Notdienst der Apotheken muss komplett überarbeitet werden denn die abgefragte URL liefert nun JSON zurück und das klappt mit dem bisherigen Template nicht mehr.
Gruß
Dan
Zitat von: DeeSPe am 22 März 2023, 09:42:21Das Template für den Notdienst der Apotheken muss komplett überarbeitet werden denn die abgefragte URL liefert nun JSON zurück und das klappt mit dem bisherigen Template nicht mehr.
Gruß
Dan
Hi Dan,
das Template von OldFhem (mit JSON) hat ja immerhin bis zum 10.03. funktioniert. Anscheinend gabs da wieder eine Änderung...
VG Sebastian
Wenn ich das Attribut 'ExtractAllJSON' auf 1 setze, dann kommen wieder Daten rein. Die vielen Readings kann man mit dem Attribut 'ExtractAllJSONFilter' eingrenzen.
Jetzt müsste man nur noch die Userreadings für die Links und das stateFormat anpassen. Vielleicht komme ich heute Abend dazu.
StateFormat habe ich jetzt bei mir so umgestellt:
<hr />results_apotheken_apotheke_01_name, results_apotheken_apotheke_01_strasse in results_apotheken_apotheke_01_plz results_apotheken_apotheke_01_ort, Tel: results_apotheken_apotheke_01_telefon, von results_apotheken_apotheke_01_startdatum, results_apotheken_apotheke_01_startzeit Uhr bis results_apotheken_apotheke_01_enddatum, results_apotheken_apotheke_01_endzeit Uhr<br><a href="GoogleLink_UR" target="_blank">Map</a><hr />
Die Userreadings für die Links lauten bei mir jetzt so:
OSMLink_UR { my $ret = "https:\/\/www.openstreetmap.org\/?";
$ret .= "mlat=".ReadingsVal($name,"results_apotheken_apotheke_01_latitude","0");
$ret .= "&mlon=".ReadingsVal($name,"results_apotheken_apotheke_01_longitude","0");
$ret .= "#map=18";
$ret .= "\/".ReadingsVal($name,"results_apotheken_apotheke_01_latitude","0");
$ret .= "\/".ReadingsVal($name,"results_apotheken_apotheke_01_longitude","0");
return $ret; },
GoogleLink_UR {my $ret = "https:\/\/www.google.com\/maps\/search\/?api=1";
$ret .= "&query=".ReadingsVal($name,"results_apotheken_apotheke_01_latitude","0");
$ret .= ",".ReadingsVal($name,"results_apotheken_apotheke_01_longitude","0");
return $ret; }
Damit läuft es bei mir wieder wie vorher.
Zitat von: binford6000 am 22 März 2023, 10:00:02Hi Dan,
das Template von OldFhem (mit JSON) hat ja immerhin bis zum 10.03. funktioniert. Anscheinend gabs da wieder eine Änderung...
VG Sebastian
Hi Sebastian,
dass die auf JSON umgestellt haben hatte ich nicht mitbekommen.
Habe jetzt aber auch wieder eine lauffähige Version mittels HTTPMOD hinbekommen:
defmod NotAppo HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[search][plzort]=12345&tx_aponetpharmacy_search[search][radius]=2&type=1982 86400
attr NotAppo alias Apotheken-Notdienst
attr NotAppo alignTime 08:56
attr NotAppo bodyEncode utf8
attr NotAppo extractAllJSON 1
attr NotAppo extractAllJSONFilter results_apotheken_apotheke_01.*
attr NotAppo stateFormat results_apotheken_apotheke_01_name (ca. results_apotheken_apotheke_01_distanz km entfernt)<br>\
<a target="_blank" href="results_apotheken_apotheke_01_goo" title="zu Google Maps">results_apotheken_apotheke_01_strasse</a><br>\
<a target="_blank" href="results_apotheken_apotheke_01_osm" title="zu OpenStreet Maps">results_apotheken_apotheke_01_plz results_apotheken_apotheke_01_ort</a><br>\
Tel.: <a href="tel:results_apotheken_apotheke_01_telefon" title="results_apotheken_apotheke_01_name anrufen">results_apotheken_apotheke_01_telefon</a><br>\
<b>Notdienst im Zeitraum</b><br>\
vom results_apotheken_apotheke_01_startdatum results_apotheken_apotheke_01_startzeit<br>\
bis results_apotheken_apotheke_01_enddatum results_apotheken_apotheke_01_endzeit
attr NotAppo userReadings results_apotheken_apotheke_01_goo { my $ret = 'https://www.google.com/maps/place/';;\
$ret .= urlEncode(ReadingsVal($name,'results_apotheken_apotheke_01_strasse',''));;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_plz','');;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_ort','');;\
$ret },\
results_apotheken_apotheke_01_osm { my $ret = 'https://www.openstreetmap.org/search?query=';;\
$ret .= urlEncode(ReadingsVal($name,'results_apotheken_apotheke_01_strasse',''));;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_plz','');;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_ort','');;\
$ret }
Gruß
Dan
P.S. Mit gesetztem Attribut "bodyEncode utf8" klappt es auch mit den Umlauten und sonstigen Sonderzeichen.
ZitatP.S. Mit gesetztem Attribut "bodyEncode utf8" klappt es auch mit den Umlauten und sonstigen Sonderzeichen.
Hmmm, ich hatte nur mit bodyDecode utf8 erfolglos probiert... 🤔
Hab dann aber jetzt eh umgestellt auf JsonMod (https://forum.fhem.de/index.php?topic=132883.0).
VG Sebastian
Hallo,
leider funktioniert das bei mir nicht. Es kommen keine Daten.
Muss ich ein spezielles template verwenden ?
Gruß
Wendelin
Zitat von: DeeSPe am 27 März 2023, 16:28:31Zitat von: binford6000 am 22 März 2023, 10:00:02Hi Dan,
das Template von OldFhem (mit JSON) hat ja immerhin bis zum 10.03. funktioniert. Anscheinend gabs da wieder eine Änderung...
VG Sebastian
Hi Sebastian,
dass die auf JSON umgestellt haben hatte ich nicht mitbekommen.
Habe jetzt aber auch wieder eine lauffähige Version mittels HTTPMOD hinbekommen:
defmod NotAppo HTTPMOD https://www.aponet.de/apotheke/notdienstsuche?tx_aponetpharmacy_search[action]=result&tx_aponetpharmacy_search[search][plzort]=12345&tx_aponetpharmacy_search[search][radius]=2&type=1982 86400
attr NotAppo alias Apotheken-Notdienst
attr NotAppo alignTime 08:56
attr NotAppo bodyEncode utf8
attr NotAppo extractAllJSON 1
attr NotAppo extractAllJSONFilter results_apotheken_apotheke_01.*
attr NotAppo stateFormat results_apotheken_apotheke_01_name (ca. results_apotheken_apotheke_01_distanz km entfernt)<br>\
<a target="_blank" href="results_apotheken_apotheke_01_goo" title="zu Google Maps">results_apotheken_apotheke_01_strasse</a><br>\
<a target="_blank" href="results_apotheken_apotheke_01_osm" title="zu OpenStreet Maps">results_apotheken_apotheke_01_plz results_apotheken_apotheke_01_ort</a><br>\
Tel.: <a href="tel:results_apotheken_apotheke_01_telefon" title="results_apotheken_apotheke_01_name anrufen">results_apotheken_apotheke_01_telefon</a><br>\
<b>Notdienst im Zeitraum</b><br>\
vom results_apotheken_apotheke_01_startdatum results_apotheken_apotheke_01_startzeit<br>\
bis results_apotheken_apotheke_01_enddatum results_apotheken_apotheke_01_endzeit
attr NotAppo userReadings results_apotheken_apotheke_01_goo { my $ret = 'https://www.google.com/maps/place/';;\
$ret .= urlEncode(ReadingsVal($name,'results_apotheken_apotheke_01_strasse',''));;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_plz','');;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_ort','');;\
$ret },\
results_apotheken_apotheke_01_osm { my $ret = 'https://www.openstreetmap.org/search?query=';;\
$ret .= urlEncode(ReadingsVal($name,'results_apotheken_apotheke_01_strasse',''));;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_plz','');;\
$ret .= '%20'.ReadingsVal($name,'results_apotheken_apotheke_01_ort','');;\
$ret }
Gruß
Dan
P.S. Mit gesetztem Attribut "bodyEncode utf8" klappt es auch mit den Umlauten und sonstigen Sonderzeichen.
schau mal hier >> https://forum.fhem.de/index.php?topic=132883.0