Wettervorhersage mit Python

Beim Experimentieren mit meinem Raspberry Pi bin ich auf ein interessantes Skript von Kampis Elektroecke gestoßen. Es basiert auf der Programmiersprache Python und kann aus einer von
Yahoo bereitgestellten Wetter-XML Datei viele Werte auslesen und ausgeben.

Da mir der Originalcode schon sehr gut gefiel, habe ich meine Anpassungen implementiert
und an Funktion erweitert. In naher Zukunft ist geplant, die grundlegenden Wetterinfos
mit der Webcamaufnahme meines Raspberrys zu verschmelzen.

Sofern Ihr dieses Skript weiterverwenden möchtet und den Ort ändern wollt,
müsst ihr auf folgende Webseite gehen und den jeweiligen Ort suchen.

Dann kopiert Ihr die Ziffernkombination in der URL-Adresse hinter dem eingegebenen Ort
und überschreibt den Wert auf Zeile 13 mit eurem.

Hier ist meine modifizierte wetter.py Datei:


# Copyright by Kampis-Elektroecke
# Modified by Julian R.

from xml.dom.minidom import *
import urllib

# Liste fuer den Wetterbericht
# 1. Dimension = heute, 2. Dimension = naechster Tag
# 1. Element = Tag, 2. Element = Datum, 3. = Niedrigste Temperatur, 4. Element = Hoechste Temperatur, 5. Element = Wettersituation
Wetter = [["", "", "", "", ""] , ["", "", "", "", ""]]

# URL oeffnen und XML Daten einlesen
Baum = urllib.urlopen('http://weather.yahooapis.com/forecastrss?w=676288').read()
# XML Daten parsen und in Baumstruktur anordnen
Baum = parseString(Baum)

# Ort einlesen
Ort = Baum.getElementsByTagName('yweather:location')[0]
Stadt = Ort.attributes["city"].value
Land = Ort.attributes["country"].value

# Datum einlesen
Datum = Baum.getElementsByTagName('lastBuildDate')[0].firstChild.data

# Koordinaten auslesen
Geo_Lat = Baum.getElementsByTagName('geo:lat')[0].firstChild.data
Geo_Long = Baum.getElementsByTagName('geo:long')[0].firstChild.data

# Wetterdaten von heute einlesen
Today = Baum.getElementsByTagName('yweather:condition')[0]

# Wind einlesen
Wind = Baum.getElementsByTagName('yweather:wind')[0]
Richtung = float(Wind.attributes["direction"].value)
Speed = float(Wind.attributes["speed"].value)
Speed = round((Speed*1.609),2)

# Sonnenaufgang einlesen
Sonne = Baum.getElementsByTagName('yweather:astronomy')[0]
Aufgang = Sonne.attributes["sunrise"].value
Untergang = Sonne.attributes["sunset"].value

# Wettertext einlesen
Wetterlage = Today.attributes["text"].value

# Temperatur in Fahrenheit einlesen, umrechnen und runden
Temperatur = float(Today.attributes["temp"].value)
Temperatur = round((Temperatur - 32.0) * (5.0 / 9.0) , 2)

# Daten in einer Liste speichern
for Counter in range(2):

# Wetterdaten fuer die beiden Tage einlesen
# Daten einlesen
Future = Baum.getElementsByTagName('yweather:forecast')[Counter]

# Daten verarbeiten
Wetter[Counter][0] = Future.attributes["day"].value
Wetter[Counter][1] = Future.attributes["date"].value
Wetter[Counter][2] = float(Future.attributes["low"].value)
Wetter[Counter][3] = float(Future.attributes["high"].value)
Wetter[Counter][4] = Future.attributes["text"].value
# Umrechnen der Temperatur in Grad Celsius
Wetter[Counter][2] = round((Wetter[Counter][2] - 32.0) * (5.0 / 9.0) , 2)
Wetter[Counter][3] = round((Wetter[Counter][3] - 32.0) * (5.0 / 9.0) , 2)
# Umrechung Windrichtung
if Richtung <= 0:
Windrichtung = "Nord"
elif Richtung <=45:
Windrichtung = "Nord-Ost"
elif Richtung <= 90:
Windrichtung = "Ost"
elif Richtung <= 135:
Windrichtung = "Sued-Ost"
elif Richtung <= 180:
Windrichtung = "Sued"
elif Richtung <= 225:
Windrichtung = "Sued-West"
elif Richtung <= 270:
Windrichtung = "West"
elif Richtung <= 315:
Windrichtung = "Nord-Ost"
else:
Windrichtung = "Fehler!"

 

 

# Ausgabe
print ""
print "Wetterbericht fuer " + Stadt + " in " + Land
print "Datum: " + Datum
print ""

print "Koordinaten"
print "Breitengrad: " + Geo_Lat
print "Laengengrad: " + Geo_Long
print ""

print "Wetter heute"
print "Temperatur: " + str(Temperatur) + " C Celsius"
print "Max. Temperatur: " + str(Wetter[0][3]) + " C Celsius"
print "Min. Temperatur: " + str(Wetter[0][2]) + " C Celsius"
print "Wettersituation: " + Wetterlage
print ""

print "Windsituation"
print "Richtung: " + Windrichtung
print "Geschwindigkeit " + str(Speed) + " km/h"
print ""

print "Sonne"
print "Sonnenaufgang " + Aufgang
print "Sonnenuntergang " + Untergang
print ""

print "Wetter am naechsten Tag"
print "Tag: " + Wetter[1][0]
print "Datum: " + Wetter[1][1]
print "Max. Temperatur: " + str(Wetter[1][2]) + " C Celsius"
print "Min. Temperatur: " + str(Wetter[1][3]) + " C Celsius"
print "Wetter: " + Wetter[1][4]
print ""

# Quelle angeben
Quelle = Baum.getElementsByTagName('link')[1].firstChild.data
print "Alle Daten stammen von " + Quelle

3 Kommentare

  • Thomas Menke

    Hallo Julian
    Interessante Erweiterung.
    Als Python Anfänger konnte ich mir hier, als auch bei dem Skript vom Kampi einiges an Info holen.
    Allerdings konnte ich in den ersten Versuchen deinen Skript nicht an laufen bringen.
    Mittlerweile habe ich es raus.
    Die Fehlermeldung kam bei Future = Baum.getEle……., es fehlte natürlich das „Einrücken“.
    Eigentlich ganz simpel, habe aber den Fehler immer Code gesucht.
    Das nur als Tip für Einsteiger so wie ich.
    Aber Danke für die Seite und mehr davon.
    Thomas

    • Hallo Thomas,
      freut mich zu hören, dass du es selbständig hinbekommen hast.
      Ich habe aufgrund deiner Anmerkung das Code Plugin verändert,
      sodass Einrückungen etc. besser visualisiert werden.

  • Hey ich bekomme einen Fehler:
    [Errno socket Error] [Errno -2] Name or service not known
    und dazu noch ein paar andere Fehlermeldungen die aber mit dieser zusammenhängen.
    Würde mich freuen wenn mir jemand weiterhelfen könnte

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.