Weather APIs |
Thursday, 24. September 2015 | ||||||||||||||||||||||
Wetter APIsÜberblick und VergleichUm in einer App oder Webseite Wetterdaten verarbeiten zu können, stellt sich zunächst die Frage nach der Quelle der Daten. Dazu konkurrieren einige API-Anbieter miteinander, einige davon kostenlos. In diesem Artikel lege ich den Schwerpunkt auf die kostenlos verfügbaren APIs. Verglichen werden (bisher)... OpenWeather Metwit Weather Wunderground Wetter.com Wetter-Api.de Angeregt zu dieser Gegenüberstellung hatte mich mein Vorhaben, in meiner Foto-Filter-App Kleckrica 44 Filter anzubieten, die Informationen zum aktuellen Wetter in den Fotos anzeigen. Ergo stand ich vor genau diesem Problem. Was nehmen? Wie geht das? Was kostet das? Gibt's da auch etwas Kostenloses? Open WeatherOpenWeatherMap.org war eigentlich die zweite Alternative nach Yahoo. Allerdings war es die erste, die ich vollständig implementiert hatte. Deshalb stelle ich es hier als erstes vor. Angeobten wird das aktuelle Wetter, Vorhersagen für 5 Tage per 3 Stunden, 16 Tage täglich sowie historische Wetterdaten und Daten einzelner Stationen. Ausserdem werden diverse Wetterkarten angeboten. Insgesamt, finde ich, ist es das umfassenste Angebot der verglichenen Dienste. Die Wetterdaten können unmittelbar wahlweise per Geo-Koordinaten, Name einer Stadt oder PLZ abgerufen werden. Zur eindeutigen Identifizierung einer Stadt steht ebenfalls ein City-Code zur Verfügung, wie das bei vielen anderen Diensten (s.u.) auch der Fall ist. Die Abfrage kann für mehrere Orte gleichzeitig erfolgen, wobei diesbezüglich das Preismodell zu beachten ist. Dieser Service steht nicht kostenfrei zur Verfügung. Das Ergebnis steht wahlweise in XML oder JSON zur Verfügung. Die API ist mulilingual. Literale können in mehrern Sprachen angefordert und dann direkt verwendet werden. Als optionale Einheiten stehen Celsius und Farenheit zur Verfügung. Default ist Kevin. Ausserdem ist die API auf der Webseite ausgesprochen gut dokumentiert. (Englisch) Beispielsweise führt die Abfrage mit Geo-Koordinaten von Achill Island http://api.openweathermap.org/data/2.5/weather?lat=53.9667&lon=-10&appid=MyAPIKey (Testweise kann der API-Key scheinbar auch weggelassen werden. http://api.openweathermap.org/data/2.5/weather?lat=53.9667&lon=-10 ) zu diesem beispielhaften Ergebnis in JSON. { Weiterführende Links Weather Conditions und Icons: http://openweathermap.org/weather-conditions Angaben zu den Kosten: http://openweathermap.org/price
Yahoo WeatherYahoo war eigentlich meine erste Wahl, als ich mich nach Wetter-APIs umschaute. Es gibt reichlich Tutorials und ist auch gar nicht so wahnsinnig schwierig. Die API wird als RSS in XML angeboten. Das Resultat kann auch in JSON angefordert werden. Der Knackpunkt bei Yahoo ist, dass man das Wetter nicht direkt zu Geo-Koordinaten abfragen kann. Man muß zunächst als regionale Referenz eine sog. WOEID anfordern und kann dann die Wetterdaten zu dieser WOEID anfordern. Allerdings wurde die kostenlose API zur Abfrage der WOEID zu Geokoordinaten (oder auch Ortsnamen) vor einiger Zeit eingestellt. Der Dienst wurde durch Yahoo Boss ersetzt. Boss ist allerdings kostenpflichtig bzw. bietet für nicht-gewerbliche Projekte eine kostenfreie Nutzung bis zu 2000 Requests pro Tag an. Wer also auf etwas Erfolg mit seiner App hofft, auch wenn sie keinen gewerblichen Hintergrund hat, riskiert, seine Kreditkarte nicht unerheblich belasten zu müssen. Damit keine Mißverständnisse auftreten: Die Yahoos Wetter-API steht weiterhin kostenlos zur Verfügung, allerdings setzt sie die WOEID voraus. Und die Suche nach der WOEID ausgehend von Geo-Daten ist kostenpflichtig. Um Wetterdaten für einen bestimmten Ort anzuzeigen, wäre die API immer noch eine gute alternative. Auch für Vohersagen bei denen der Anwender einen Ortsnahmen als Suchbegriff eingibt, ist die API sicher gut einsetzbar. Deshalb möchte ich dennoch das Vorgehen kurz erläutern. Umweg über yahoo searchUm der kostenpflichtigen bzw. begrenzten BOSS API aus dem Weg zu gehen, bietet sich für Mobile Apps der Umweg über das integrierte Geo-Coding an. Die SDK für iOS, Android und Windows Phone bieten native Reverse-Geo-Coding APIs, deren Verwendung kostenfrei und unlimitiert ist. (Für Google/Android könnte es Begrenzungen geben, falls die App zu einem kostenpflichtigen Dienst gehört, nicht aber falls die App etwas Geld kostet.) Ermittelt man auf diesem Weg den Ort zu einer Geo-Location, dann kann man den Ort über die Search-API suchen und bekommt im Ergebnis u.a. die woeid zurück. Dazu ein Code-Beispiel für iOS/Objective-C bzw. Cocoa Touch CLGeocoder *geocoder = [[CLGeocoder alloc] init];So resultiert die GET-Abfrage an https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=Dortmund für Dortmund: { Mit der WOEID für Dortmund 645458 ließe sich dann das Wetter erfragen.Die URI http://weather.yahooapis.com/forecastrss?w=23424829&u=c füht zu folgendem beispielhaften Ergebnis: Dabei ist 23424829 die woied für Dortmund (siehe obige response) und c gibt an, dass das Ergebnis in Celsius ausgegeben werden soll. Default ist Fahrenheit, wenn man &u= nicht mit angibt. { (Die Antwort enthält fünf Vorhersage-Elemente im entsprechenden JSON-Array. Die Antwort wurde zugunten der Lesbarkeit des Artikels dort gekürzt. Weiterführende Links
https://developer.yahoo.com/boss/geo/ https://developer.yahoo.com/yql/guide/usage_info_limits.html (Limits for Endpoints; Additional Limitations to the Table apply) https://developer.yahoo.com/weather/documentation.html (Doku inkl. weather condition codes) Metwit WeatherAuf Metwit wurde ich aufmerksam, als ich nach Alternativen suchte für Yahoo's nicht mehr kostenfrei verfügbaren Yahoo Placefinder API. Nun, ihre Hompepage http://www.metwit.com scheint aktuell (3.10.2015) nicht richtig funktionieren zu wollen. Weiterführende Linkshttp://soup.metwit.com/post/47181933854/an-alternative-to-yahoo-weather-api Wunderground (weather.com)Kostenlos ist die Verwendung scheinbar ausschließlich für Entwickler mit für die Produktion unbrauchbaren Limitierungen. http://www.wunderground.com/weather/api?apiref=3be21450e864dc6e Weiterführende Linkshttp://www.chrisge.org/blog/2013-03-09/wundergound_api
Wetter.comBei Wetter.com gliedert sich die Suche wieder in zwei Bereiche. Zunächst steht die Suche nach einem City-Code zu einem Ort. Leider gibt es wohl keine Möglichkeit, nach Geo-Koordinaten zu suchen. Den aktuellen Standort zu finden dürfte sich genauso fehleranfällig gestalten wie bei Yahoo.com. Die API kann grundsätzlich kostenlos verwendet werden. Dazu müssen zwei der drei Verweise auf Wetter.com implementiert werden: API Key erhaltenNach der Registrierung bei wetter.com legt man ein Projekt an und erhält für dieses Projekt einen API-Key. Ortsname ermittelnUm vom den Geo-Koordnaten des aktuellen Standorts auf den Ortsnamen kommen, kann zunächst analog wie beim Workaround für YahooWeather vorgegangen werden. D.h. man kann das im mobilen OS nativ angebotene Reverse-Geocoding verwenden. City-Code ermittelnMit dem Ortsnamen läßt sich nun die URL ermitteln um zum Ort u.a. den City-Code zu erhalten. In das URL-Schema (s. Dokumentation) fließen der Ortsname, der Projektname und ein aus Projektname, API-Key und Ortsname bzw. Suchbegriff (in dieser Reihenfolge ohne Trennzeichen) ermittelten MD5-Hash ein. Am Beispiel Mettmann ergibt sich daraus aus dieser Anfrage http://api.wetter.com/location/index/search/Mettmann/project/my-very-own-project/cs/0413c766560897be194720cb02d43f2b folgende Antwort <?xml version="1.0" encoding="UTF-8"?> Falls mehr als ein Ergebnis zurück gegeben wurde, bietet es sich an, weiteren Daten zu jedem Ort wie PLZ oder andere administrative Einheiten mit den Daten abzugleichen, die das Reverse-Geocoding ergeben hat, um eine möglichst den richtigen Ort zu erhalten. (Je nach Usecase könnte auch der Anwender dazu befragt werden, was in meinem Fall kein gutes Benutzererlebnis zur Folge hätte.) Wetter abfragenNun können wir daraus den City-Code extrahieren und mit diesem endlich die Wetter-Anfrage bauen. Der Request http://api.wetter.com/forecast/weather/city/DE0006935/project/my-very-own-project/cs/4098a47c35b72fb4fdbd5c898e9fa596 ergibt die Antwort: <?xml version="1.0" encoding="UTF-8"?><city> <city_code>DE0006935</city_code> <name>Mettmann</name> <url>deutschland/mettmann/DE0006935.html</url> <post_code>40822</post_code> <credit> <!--In order to use the free weather data from wetter.com you HAVE TO display at least two out of three of the following possibilities: text, link, logo--> <text>Powered by wetter.com</text> <link>http://www.wetter.com</link> <logo>Download at http://www.wetter.com/api/downloads/#logos</logo> </credit> <forecast> <date value="2015-10-06"> <wd>180</wd> <w>61</w> <tx>19</tx> <time value="06:00"> <wd>180</wd> <w>61</w> <tx>16</tx> <tn>14</tn> <p>5</p> <ws>12</ws> <d>1444111200</d> <wd_txt>S</wd_txt> <w_txt>leichter Regen</w_txt> </time> <time value="11:00"> <wd>180</wd> <w>61</w> <tx>19</tx> <tn>16</tn> <p>6</p> <ws>14</ws> <d>1444129200</d> <wd_txt>S</wd_txt> <w_txt>leichter Regen</w_txt> </time> <time value="17:00"> <wd>135</wd> <w>61</w> <tx>19</tx> <tn>16</tn> <p>6</p> <ws>12</ws> <d>1444150800</d> <wd_txt>SO</wd_txt> <w_txt>leichter Regen</w_txt> </time> <time value="23:00"> <wd>135</wd> <w>3</w> <tx>16</tx> <tn>15</tn> <p>6</p> <ws>11</ws> <d>1444172400</d> <wd_txt>SO</wd_txt> <w_txt>bedeckt</w_txt> </time> <d>1444111200</d> <tn>14</tn> <p>24</p> <ws>12</ws> <wd_txt>S</wd_txt> <w_txt>leichter Regen</w_txt> </date> </forecast> </city> Das XML der Antwort enthält eine Vorhersage, wobei der Tag in 4 Teile aufgeteilt wird und es für jeden eine Vorhersage gibt. Neben dem Wettrcode ("w") 61 enthält es ein Literal ("w_txt") "leichter Regen", die Höchst- und Tiefst-Temperatur für diesen Tagesabschnitt ("tx", "tn") in °C, die Windrichtung ("wd") in ° und die Windstärke ("ws") in km/h sowie die lokale Zeit als Unix-Timestamp ("d"), u.a. Weiterführende Linkshttp://www.wetter.com/apps_und_mehr/website/api/dokumentation/ http://api.wetter.com/files/wetter.com_openweather_api.pdf Logos (Enthält auch Icons) Wetter-Api.deKostenlos bis 250 Zugriffe pro Tag. Stellt Wetterdaten nur für Deutschland bereit. Anekdote am Rande: Direkt nach der ersten Anmeldung nach Registrierung wird angezeigt, man habe das maximale Limit für den laufenden Tag bereits erreicht. :-) Die Abfrage geschieht über die Postleitzahl des Ortes. Gut ist daran, dass die PLZ über die Reverse-Geocoding APIs in Android und iOS recht gut und zuverlässig ermittelt werden können. So führt die Abfrage http://www.wetter-api.de/wetter-MyKey-85737.xml (wobei MyKey durch den jeweiligen API-Key ersetzt werden muss) zu der Antwort: <?xml version="1.0" encoding="UTF-8"?> (Die Antwort enthält 9 Vorhersagetage, von denen 8 zur besseren Lesbarkeit des Artikels ausgeblendet wurden.) Weiterführende LinksFonts und Icon-SammlungenZu guter letzt muss das Wetter noch dargestellt werden. Dazu habe ich ein paar Icon-Sammlungen und Fonts entdeckt.
|
||||||||||||||||||||||
Letzte Aktualisierung ( Tuesday, 20. October 2015 ) |