Jython

15. Wetterdaten

Das Modul weather stellt Befehle zur Verfügung, mit welchen Browserabfragen von Wetterdaten auf dem Wetterdatenserver https://openweathermap.com durchgeführt werden können. Der Wetterdatenserver sammelt die Wetterdaten in über 200 000 Städten der ganzen Welt und aktualisiert sie jede Stunde. Folgende Daten können abgefragt werden:

"temp"

Temperatur in °C

"pressure"

Luftdruck in hPa

"humidity"

Luftfeuchtigkeit in %

"temp_min"

Tagesminimum der Temperatur

"temp_max"

Tagesmaximum der Temperatur

"description"

Wetterlage in Worten

"sunrise"

Sonnenaufgang in Ortszeit

"sunset"

Sonnenuntergang in Ortszeit

"datetime"

Datum und Zeit des Ortes

Die Informationen aus dem Internet können angezeigt oder grafisch dargestellt werden.

Beispiel 1: Temperatur und Feuchtigkeit anzeigen
Der Befehlt weather.request(city, key) macht einen Wetterdaten-Request bei http://openweathermap.org für den gegebenen Ort. Dabei wird ein Authorisierungsschlüssel verwendet. Diesen kann man kostenfrei auf diesem Host beziehen. Wird der Parameter key weggelassen, so wird der Standardschlüssel (defaultKey) verwendet, der maximal 60 Anfragen pro Minute erlaubt.

Im ersten Beispiel wird alle 5 Sekunden die aktuelle Temperatur und Luftfeuchtigkeit in Bern (und beliebigen anderen Städten) abgefragt und im Ausgabefenster angezeigt. Dabei wird der defaultKey verwendet.

import weather
from time import sleep

city = "Bern, CH"
#city = "Zuerich, CH"
#city = "Lugano, CH"
#city = "Geneve, CH"
#city = "Paris, FR"
#city = "London, GB"
#city = "Rome, IT"
#city = "Athens, GR"

while True:
     info = weather.request(city)
     print("temp =", info["temp"], "   humidity =", info["humidity"], "%")
     sleep(5)
► In Zwischenablage kopieren

Erklärungen zum Programmcode:

import weather: Importiert das Modul weather

weather.request(city): Wetterabfrage mit dem Standardschlüssel

sleep(5): Die Abfrage erfolgt alle 5 Sekunden, wobei die Daten auf dem Wetterserver in der Regel nur einmal pro Stunde aktualisiert werden.

Beispiel 2: Daten vom Wetterserver mit GPanel grafisch darstellen
Mit Hilfe der Funktion drawGrid() (siehe Kapitel Grafen und Diagramme) kann man die Daten aus dem Internet mit einigen wenigen Programmzeilen grafisch darstellen. Um die Funktionalität des Programms zu testen, wird die Temperaturwert jede Sekunde abgefragt. Da die Umgebungstemperatur nicht so schnell ändert, genügt es, den aktuellen Wert nur einmal pro Stunde abzufragen (delay(360000)). Im Grafikfenster werden jeweils 50 Werte angezeigt, danach wird die Grafik gelöscht und die Anzeigen beim Wert x = 0 fortgesetzt.

import weather
from gpanel import *

makeGPanel(-5, 53, -3, 52)
drawGrid(0, 50, 0, 50, "gray")
setColor("blue")
lineWidth(2)

x = 0
while True:
     info = weather.request("Bern, CH")
     #info = weather.request("Paris, FR")
     temp = info["temp"]
     if x == 0:
         pos(x, temp)
     else:
         draw(x, temp)          
     print(temp)
     x = x + 1 
     if x == 50:
         x = 0  
         clear()
         drawGrid(0, 50, 0, 50, "gray")              
     delay(1000)
► In Zwischenablage kopieren
 



Erklärungen zum Programmcode:

weather.request("Bern, CH"): Aktuelle Daten für Bern werden mit einem defaultKey abgefragt
if x == 50: Nach 50 Werten beginnt die Aufzeichnung wieder am linken Rand des Grafikfensters
delay(1000): Entspricht sleep(1) aus dem Modul time. Das Programm wartet eine Sekunde.


Beispiel 3: Alle Wetterserver-Daten abfragen
Im Ausgabefenster werden alle Daten vom Wetterserver für die gegebene Stadt angezeigt.

import weather
    
city = "London"
info = weather.request(city)
print("Aktuelle Wetterdaten:", city, "\n"
      "---------------------------------------", "\n"
      "Temperatur =      ", info["temp"], "°C" "\n"
      "Luftdruck =       ", info["pressure"], "hPa", "\n"
      "Feuchtigkeit =    ", info["humidity"], "%", "\n"
      "Temeratur min =   ", info["temp_min"], "°C", "\n"
      "Temeratur max =   ", info["temp_max"], "°C", "\n"
      "Wetterlage =      ", info["description"], "\n"
      "Sonnenaufgang =   ", info["sunrise"], "\n"
      "Sonnenuntergang = ", info["sunset"], "\n"
      "-----------------------------------------") 
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

print("Aktuelle Wetterdaten", "\n"): Um eine Zeilenschaltung im Print-Befehl hinzufügen, verwendet man "\n". Diese Zeichenfolge wird jeweils am Ende der Zeile hinzugefügt.


 


Aufgaben: Serie 15

1)

Öffne mit einem beliebigen Browser die Website https://openweathermap.com. Erstelle einen kostenfreien Authorisierungsschlüssel. Falls es geklappt hat, gib diesen Schlüssel im Abfragebefehl in Anführungszeichen ein
(z.B.: weather.request("city", "babc785da854bb3d758e1f26ed837768")
und erstelle eine Abfrage für dei Temparatur, Luftdruck und die Wetterlage in Paris.

 

2)

Stelle die Luftfeuchtigkeit in einer beliebigen Stadt mit GPanel grafisch dar. Verwende das Beispiel 2 als Vorlage und passe die y-Achse entsprechend an.

 

3)

Ergänze das Beispiel 3 mit einer Input-Dialog Box, in der abgefragt wird, ob man die Daten aktualisieren soll. Falls der Benutzer eine Aktualisierung wünscht, werden die Daten erneut angezeigt, sonst wird das Programm beendet.