{"id":228,"date":"2015-01-05T21:12:33","date_gmt":"2015-01-05T20:12:33","guid":{"rendered":"http:\/\/chriskrz.selfhost.bz\/?p=228"},"modified":"2020-03-22T15:10:18","modified_gmt":"2020-03-22T14:10:18","slug":"wetterbericht-und-astrodaten-auslesen-und-mit-json-verarbeiten","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/wetterbericht-und-astrodaten-auslesen-und-mit-json-verarbeiten\/","title":{"rendered":"Wetterbericht und Astrodaten als JSON auslesen und verarbeiten"},"content":{"rendered":"<h6 class=\"\"><span style=\"color: #ff0000;\"><em>Dieser Artikel ist in Bezug auf Weather Unterground leider \u00fcberholt. Die Firma bietet keinen kostenlosen Webservice mehr an. <\/em><\/span><\/h6>\n<p><span style=\"color: #800000;\"><em><strong><a style=\"color: #800000;\" href=\"https:\/\/www.rustimation.eu\/index.php\/wettervorhersage-im-json-format-auslesen-und-interpretieren\/\">Hier geht es zu einer Alternative mit einer anderen kostenfreien API<\/a>.<\/strong><\/em><\/span><\/p>\n<p>In meine <a title=\"rusticam Le Fasse - Lago di Garda\" href=\"http:\/\/rusticam.eu\" target=\"_blank\" rel=\"noopener noreferrer\">Webcam <\/a>m\u00f6chte ich einen Wetterbericht einblenden. Au\u00dferdem will ich das Pi Camera Modul so aussteuern, dass Aufnahmen nachts mit l\u00e4ngerer Belichtung durchgef\u00fchrt werden. Die normale Kameraautomatik liefert sonst nur tr\u00fcbe oder schwarze Bilder.<\/p>\n<p>Einen Weg, sich kostenlos mit korrekten Wetter und Astrodaten zu Sonnenaufgang und Untergang zu versorgen, zeige ich euch hier:<\/p>\n<p><!--more--><\/p>\n<p>Es gibt eine ganze Reihe von Webdiensten, die einem die Wetterdaten etc. zur Verf\u00fcgung stellen. Manchmal auch kostenlos. Ich verwende hier den amerikanischen Webservice <a title=\"Weather Underground\" href=\"http:\/\/wunderground.com\" target=\"_blank\" rel=\"noopener noreferrer\">Weather Underground,<\/a> der bei gem\u00e4\u00dfigter Nutzung kostenlos ist und tats\u00e4chlich ein weltumspannendes Netzwerk an Wetterstationen betreibt. Zudem kann deren API sowohl XML als auch JSON. Ich habe mich f\u00fcr JSON entschieden, da das deutlich flexibler ist, als XML. Englischkenntnisse sind hilfreich, aber davon kann man wohl ausgehen, wenn sich jemand mit Raspberry Pi, Debian Linux und Python besch\u00e4ftigt.<a href=\"http:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2015\/01\/wundergroundLogo_4c1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-289\" src=\"http:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2015\/01\/wundergroundLogo_4c1-300x179.png\" alt=\"wundergroundLogo_4c[1]\" width=\"300\" height=\"179\" \/><\/a><\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #808080;\"><strong>Anmerkung<\/strong>: In letzter Zeit war der Service eher unzuver\u00e4ssig und oft nicht erreichbar. Jetzt hat sich ergeben: Weather Unterground schickt seine API in den Ruhestand. Das hei\u00dft, ab dem 31.12.2018 wird diese Anleitung und alle Anwendungen, die auf der API basieren, nicht mehr funktionieren.<\/span><span style=\"color: #808080;\"> Neue Accounts kann man seit ca. Mai 2018 nicht mehr anlegen. Angeblich will Weather Underground ein Angebot an alle Entwickler machen. Lassen wir uns \u00fcberraschen&#8230; Ich bin jetzt dabei, meine Webcam auf eine andere API umzustellen. Anschlie\u00dfend werde ich dar\u00fcber einen neuen Artikel schreiben.<\/span><\/p>\n<h2>Schritt 1: Account anlegen<\/h2>\n<p>Surft zu <a title=\"Weather Underground API Sign In\" href=\"http:\/\/www.wunderground.com\/weather\/api\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.wunderground.com\/weather\/api\/<\/a> und klickt den Button \"Sign up for free\" an.<\/p>\n<p>Geht durch den Registrierungsdialog und tragt die abgefragten Daten ein. Beim \"Pricing\" Schema reicht f\u00fcrs Erste der \"Stratus Plan\" und die Option \"Developer\" &#8211; die ist kostenlos, wenn man nicht mehr als 500 Abfragen pro Tag macht. Am Ende erhaltet ihr einen Schl\u00fcssel [key] der Art <em>e5ed74b1ac3758b1<\/em> mit dem ihr euch bei k\u00fcnftigen Abfragen ausweist.<\/p>\n<h2>Schritt 2: Webservice ansprechen<\/h2>\n<p>Irgendwie m\u00fcssen die Daten aus dem Webservice in Python eingelesen werden. Daf\u00fcr gibt es in Python Standardmethoden. Mit der standardm\u00e4\u00dfig vorhandenen urllib2 Library habe ich mich allerdings etwas schwer getan. Die neuere\u00a0 Library \"Requests\" ist meines Erachtens leichter zu bedienen, enth\u00e4lt netterweise auch die ben\u00f6tigten JSON Funktionen, muss aber erst noch installiert werden. Doch keine Angst, die Installation ist unkompliziert:<\/p>\n<blockquote>\n<p style=\"padding-left: 30px;\"><em>Requests is an elegant and simple HTTP library for Python, built for human beings.<\/em><\/p>\n<\/blockquote>\n<p>Der Entwickler empfiehlt, das Paket mit\u00a0 <code>pip <\/code>zu installieren:<\/p>\n<pre class=\"lang:sh decode:1 inline:1 \" >sudo pip install requests<\/pre>\n<p style=\"padding-left: 30px;\"><span style=\"color: #808080;\">Wenn es zu einer Fehlermeldung kommt, weil <code>pip <\/code>noch nicht installiert ist, dann muss das <code>pip <\/code>Paket ebenfalls installiert werden &#8211; am besten gleich noch sicherstellen, dass ein weiteres wichtiges Entwicklerpakets mit installiert wird:<\/span><\/p>\n<p style=\"padding-left: 30px;\">\n<pre class=\"lang:sh decode:1 inline:1 style:color: #808080; \" >sudo apt-get install python-pip python-dev<\/pre>\n<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #808080;\">anschlie\u00dfend <code>requests <\/code>wie oben dargestellt installieren.<\/span><\/p>\n<p>Wer tiefer einsteigen will: weitere Info gibts bei <a title=\"Requests\" href=\"http:\/\/docs.python-requests.org\/en\/latest\/user\/install\/\" target=\"_blank\" rel=\"noopener noreferrer\">Python Requests.<\/a><\/p>\n<p>Damit ist euer Pi f\u00fcr die folgenden Schritte ger\u00fcstet.<\/p>\n<h2>Schritt 3: JSON verarbeiten<\/h2>\n<p>Bez\u00fcglich der Weather Underground angebotenen Daten und deren Struktur gibt es eine gute Dokumentation auf deren Site\u00a0\u00a0<a href=\"http:\/\/www.wunderground.com\/weather\/api\/d\/docs\">http:\/\/www.wunderground.com\/weather\/api\/d\/docs. <\/a><\/p>\n<h4>a: Das JSON Format anschauen<\/h4>\n<p>Um das Prinzip zu verdeutlichen, nehmen wir uns f\u00fcr den Anfang die Astronomy Daten vor, das ist eine etwas kleinere Datei.<\/p>\n<p>Gebt zuerst einmal folgende Zeile in euren Browser ein:<\/p>\n<pre class=\"expand:true lang:sh decode:true \">http:\/\/api.wunderground.com\/api\/DeinWundergroundKey\/astronomy\/lang:DL\/q\/48.140508,11.556856.json<\/pre>\n<p>anstatt <em>DeinWundergroundKey<\/em> nehmt ihr nat\u00fcrlich euren eigenen, vorhin generierten Key. Die Zahlen am Ende sind die Geokoordinaten f\u00fcr den Ort, f\u00fcr den ihr die heutigen Astrodaten wissen wollt &#8211; in diesem Beispiel ist es der Hauptbahnhof M\u00fcnchen.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #808080;\"><strong>Hinweis<\/strong>: Geokoordinaten bekommt ihr heraus, indem ihr bei Google Maps die gew\u00fcnschte Gegend anzeigt und dann einen Rechtsklick auf die Stelle macht, deren Koordinaten ihr wissen wollt. Dann \"was ist hier\" ausw\u00e4hlen. Oben links werden dann die Geokoordinaten schon im richtigen Format angezeigt. Diese einfach mit Cut&amp;Paste \u00fcbernehmen und in die Codezeile eintragen. Dabei nicht vergessen, das Leerzeichen nach dem Komma zu entfernen.<\/span><\/p>\n<p>Mehrsprachig ist der Dienst auch. Die <a title=\"Sprachen in Weather Underground\" href=\"http:\/\/www.wunderground.com\/weather\/api\/d\/docs?d=language-support&amp;MR=1\" target=\"_blank\" rel=\"noopener noreferrer\">Sprachk\u00fcrzel <\/a>sind allerdings deren Eigensch\u00f6pfung, anstatt der ISO Norm z.B. DE f\u00fcr Deutschland wird DL verwendet.\u00a0 F\u00fcr M\u00fcnchen s\u00e4he der String z.B. so aus:<\/p>\n<pre class=\"expand:true lang:sh decode:true\">http:\/\/api.wunderground.com\/api\/DeinWundergroundKey\/astronomy\/lang:DL\/q\/48.140508,11.5568562.json<\/pre>\n<p>Das Ergebnis f\u00fcr den 3. Januar 2015 ist dann wie folgt:<\/p>\n<pre class=\"lang:sh decode:true\">{\r\n  \"response\": {\r\n  \"version\":\"0.1\",\r\n  \"termsofService\":\"http:\/\/www.wunderground.com\/weather\/api\/d\/terms.html\",\r\n  \"features\": {\r\n  \"astronomy\": 1\r\n  }\r\n\t}\r\n\t\t,\t\"moon_phase\": {\r\n\t\t\"percentIlluminated\":\"98\",\r\n\t\t\"ageOfMoon\":\"13\",\r\n\t\t\"phaseofMoon\":\"Zweites Viertel\",\r\n\t\t\"hemisphere\":\"North\",\r\n\t\t\"current_time\": {\r\n\t\t\"hour\":\"18\",\r\n\t\t\"minute\":\"28\"\r\n\t\t},\r\n\t\t\"sunrise\": {\r\n\t\t\"hour\":\"8\",\r\n\t\t\"minute\":\"04\"\r\n\t\t},\r\n\t\t\"sunset\": {\r\n\t\t\"hour\":\"16\",\r\n\t\t\"minute\":\"30\"\r\n\t\t}\r\n\t},\r\n\t\"sun_phase\": {\r\n\t\t\"sunrise\": {\r\n\t\t\"hour\":\"8\",\r\n\t\t\"minute\":\"04\"\r\n\t\t},\r\n\t\t\"sunset\": {\r\n\t\t\"hour\":\"16\",\r\n\t\t\"minute\":\"30\"\r\n\t\t}\r\n\t}\r\n}<\/pre>\n<p>Diese wundersch\u00f6n strukturierten Informationen k\u00f6nnen wir in Python jetzt ganz elegant verarbeiten.<\/p>\n<p style=\"padding-left: 30px;\"><strong>Exkurs<\/strong>: <span style=\"color: #808080;\">Eine noch besser lesbare Struktur erhaltet ihr mit meinem Lieblingseditor Notepad++, der allerdings noch \u00fcber den Plugin Manager die Erweiterung \"JSON Viewer\" bekommen muss. Notepad++ gibts kostenlos im Internet. Tante Google fragen.<\/span><br \/>\n<span style=\"color: #808080;\"> Dazu den Men\u00fcpunkt <em>Erweiterungen<\/em> ausw\u00e4hlen und dann auf <em>Plugin Manager<\/em> gehen. Dort dann unter dem Tab <em>Available<\/em> den JSON Viewer ausw\u00e4hlen und auf <em>Install<\/em> klicken.<\/span><br \/>\n<span style=\"color: #808080;\"> Zum Ansehen, den JSON String aus dem Browser in ein Bearbeitungsfenster von Notepad++ reinkopieren, mit der Maus komplett markieren und dann unter <em>Erweiterungen<\/em> &#8211; <em>JSON Viewer<\/em> &#8211; <em>Format JSON<\/em> anklicken. Et voil\u00e0, JSON ist so noch besser anzusehen.<br \/>\nGanz toll ist auch der Online JSON Editor bei <a href=\"http:\/\/jsoneditoronline.org\/\">http:\/\/jsoneditoronline.org\/<\/a><br \/>\nFirefox Quantum (Version 57 und h\u00f6her) kann ebenfalls eine wundersch\u00f6ne JSON Darstellung.<br \/>\n<\/span><\/p>\n<h3>b: Ein JSON Ojekt erzeugen<\/h3>\n<p>In die erste Zeile unseres Progr\u00e4mmchens kommt das \"<a title=\"Shebang! Oder wie man Python wegl\u00e4sst\" href=\"http:\/\/www.rustimation.eu\/index.php\/shebang-oder-wie-man-python-weglaesst\/\">Shebang<\/a>\" f\u00fcr Python. Dann noch die Codierung f\u00fcr UTF-8<\/p>\n<pre class=\"lang:python decode:true\">!\/usr\/bin\/python\r\n#coding=UTF-8<\/pre>\n<p>Anschlie\u00dfend wird die soeben installierte Requests Bibliothek importiert<\/p>\n<pre class=\"lang:python decode:true\">import requests<\/pre>\n<p>Zun\u00e4chst einmal m\u00fcssen wir den Webservice mit dem oben ausprobierten Aufruf ansprechen und den gelieferten Output einem Python Objekt [hier: r] zuweisen.<\/p>\n<pre class=\"expand:true lang:python decode:true\">r = requests.get(\"http:\/\/api.wunderground.com\/api\/DeinWundergroundKey\/astronomy\/lang:DL\/q\/48.140508,11.5568562.json\")<\/pre>\n<p>Damit kann man allerdings herzlich wenig anfangen. Das Objekt muss noch als JSON String geparsed (d.h. zergliedert) werden:<\/p>\n<pre class=\"lang:python decode:1 inline:1 \" >data = r.json()<\/pre>\n<p><code>data <\/code>ist ein Python Dictionary Objekt und enth\u00e4lt den ganzen JSON String , nicht besonders sch\u00f6n anzusehen, aber komplett.<\/p>\n<p>Hier noch das ganze Code Snippet:<\/p>\n<pre class=\"expand:true lang:python decode:true\">#!\/usr\/bin\/python\r\n#coding=UTF-8\r\n\r\nimport requests\r\n\r\n# get astro data from location as JSON\r\nr = requests.get(\"http:\/\/api.wunderground.com\/api\/DeinWondergroundKey\/astronomy\/lang:DL\/q\/48.140508,11.556856.json\")\r\ndata = r.json() # data contains the parsed JSON string\r\nprint data      # just to check that it worked\r\nr.close()       # good practice to close files after use   \r\n<\/pre>\n<p>und hier der Output davon:<\/p>\n<pre class=\"lang:sh decode:true\">{u'moon_phase': {u'current_time': {u'minute': u'09', u'hour': u'17'}, u'phaseofMoon': u'Vollmond', u'ageOfMoon': u'15', u'hemisphere': u'North', u'sunset': {u'minute': u'34', u'hour': u'16'}, u'percentIlluminated': u'100', u'sunrise': {u'minute': u'03', u'hour': u'8'}}, u'sun_phase': {u'sunset': {u'minute': u'34', u'hour': u'16'}, u'sunrise': {u'minute': u'03', u'hour': u'8'}}, u'response': {u'termsofService': u'http:\/\/www.wunderground.com\/weather\/api\/d\/terms.html', u'version': u'0.1', u'features': {u'astronomy': 1}}}\r\n<\/pre>\n<h3>c: Einzelne JSON Elemente ansprechen<\/h3>\n<p>Um beispielsweise direkt die Stunde des Sonnenaufgangs anzusprechen und in eine Variable hineinzuschreiben, muss man sich ganz einfach durch die Hierarchie des Directory Elements hangeln. An oberster Stelle kommt <code>sun_phase<\/code> dann <code>sunrise<\/code> dann <code>hour<\/code>.<br \/>\nIn Python ausgedr\u00fcckt sieht das so aus:<\/p>\n<pre class=\"lang:python decode:1 inline:1 \" >sunrise_hour = data['sun_phase']['sunrise']['hour'] #Sunrise Hour<\/pre>\n<p>Analog kann man alle anderen Werte einlesen. z.B. die Mondphase<\/p>\n<pre class=\"lang:python decode:1 inline:1 \" >mphase = data['moon_phase']['phaseofMoon'] #Moonphase<\/pre>\n<p>Der Astronomy Webservice hat eine ganz flache Struktur, d.h. genau einen Sonnenauf- und Untergang etc. Bei iterativen Daten, z.B. der Wettervorhersage f\u00fcr die n\u00e4chsten 4 Tage kann man das nat\u00fcrlich auch per Schleife auslesen.<\/p>\n<h4>d: Iteration<\/h4>\n<p>nehmt hierzu z.B. den \"Forecast\" Webservice:<\/p>\n<pre class=\"expand:true lang:python decode:true \">http:\/\/api.wunderground.com\/DeinWundergroundKey\/forecast\/astronomy\/lang:DL\/q\/48.140188,11.5585369.json<\/pre>\n<p>Zum Lesen der Wetterdaten hangelt man sich bis zum Knoten forecast-simpleforecast-forecastday vor und l\u00e4sst dann die Schleife \u00fcber den Tag [day] laufen.<\/p>\n<pre class=\"expand:true lang:python mark:15 decode:true\">#!\/usr\/bin\/python\r\n#coding=UTF-8\r\n\r\nimport requests\r\n\r\n# inits\r\nfcast = []\r\ndegreeChar = u'\\N{DEGREE SIGN}'\r\n\r\n#get webservice data\r\nr = requests.get(\"http:\/\/api.wunderground.com\/MeinWundergroundKey\/forecast\/astronomy\/lang:DL\/q\/48.140188,11.5585369.json\")\r\ndata=r.json() # data contains the parsed JSON string\r\nr.close()\r\ni=0\r\nfor day in data['forecast']['simpleforecast']['forecastday']:\r\n   x=day['date']['weekday_short'] + \":\"\r\n   y=day['conditions']\r\n   z = day['high']['celsius'] + degreeChar+\"C\/\" + day['low']['celsius'] + degreeChar+\"C\"\r\n   fcast.append(x + \" \" + y + \" \" + z)\r\n   print fcast[i]\r\n   i=i+1\r\n<\/pre>\n<p>Der Array <code>fcst[x]<\/code> enth\u00e4lt die Wettervorhersage f\u00fcr den Tag 0 bis 3, also vier Tage. Diese Daten k\u00f6nnt ihr nach Belieben in euren Programmen weiterverwenden. Bei \u00f6ffentlich sichbarer Verwendung von Weather Underground Informationen muss gem\u00e4\u00df Lizenzbedingungen ein Hinweis auf Weather Underground gezeigt werden.<\/p>\n<p>Das Gradzeichen ist im normalen Zeichensatz nicht vorhanden und wird \u00fcber <code>degreeChar = u'\\N{DEGREE SIGN}'<\/code> erzeugt.<\/p>\n<p>Der Output sieht dann hoffentlich so \u00e4hnlich wie hier aus.<\/p>\n<pre class=\"lang:sh decode:true\">Mo: Teils Wolkig 2\u00b0C\/-3\u00b0C \r\nDi: Heiter 2\u00b0C\/-3\u00b0C \r\nMi: Wolkig 3\u00b0C\/-1\u00b0C \r\nDo: Teils Wolkig 5\u00b0C\/2\u00b0C<\/pre>\n<p>Bei Interesse einfach tiefer bei Weather Underground graben, es gibt da alle m\u00f6glichen Wetter-Informationen. Die <a href=\"http:\/\/api.wunderground.com\/weather\/api\/d\/docs\">Doku <\/a>ist interaktiv und gut gemacht.<\/p>\n<p>Dieser Beitrag wurde inspiriert von der wirklich gut gemachten Site <a href=\"http:\/\/www.pythonforbeginners.com\/scraping\/scraping-wunderground\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.pythonforbeginners.com\/scraping\/scraping-wunderground<\/a><\/p>\n<p>In weiteren Beitr\u00e4gen zeige ich, wie man mit der Kamera gemachte Bilder mit den gerade gewonnenen Informationen beschriftet, beschneidet, in der Gr\u00f6\u00dfe \u00e4ndert, auf den eigenen Webspace hochl\u00e4dt und dann noch eine Javascript Slideshow f\u00fcr die gemachten Webcam Aufnahmen erstellt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Artikel ist in Bezug auf Weather Unterground leider \u00fcberholt. Die Firma bietet keinen kostenlosen Webservice mehr an. Hier geht es zu einer Alternative mit einer anderen kostenfreien API. In meine Webcam m\u00f6chte ich einen Wetterbericht einblenden. Au\u00dferdem will ich das Pi Camera Modul so aussteuern, dass Aufnahmen nachts mit l\u00e4ngerer Belichtung durchgef\u00fchrt werden. Die &hellip; <a href=\"https:\/\/www.rustimation.eu\/index.php\/wetterbericht-und-astrodaten-auslesen-und-mit-json-verarbeiten\/\" class=\"more-link\"><span class=\"screen-reader-text\">Wetterbericht und Astrodaten als JSON auslesen und verarbeiten<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,9,10],"tags":[27,30,31,34,36,37,44,45,49,50,51,52],"class_list":["post-228","post","type-post","status-publish","format-standard","hentry","category-json","category-python","category-raspberry-pi","tag-json","tag-mondphasen","tag-notepad","tag-python-2","tag-raspberry-pi","tag-requests","tag-sonnenaufgang","tag-sonnenuntergang","tag-weather-underground","tag-webservice","tag-wetterbericht","tag-xml"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/comments?post=228"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions"}],"predecessor-version":[{"id":1252,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions\/1252"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}