Wetter auslesen mit Python

Raspberry

mit diesem Python script kann das Wetter ausgelesen werden:

#!/usr/bin/env python
# Copyright by Kampis-Elektroecke
# Modified by Julian R.
# next Level Modification by Marcus B.

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('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20
(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22Merchingen%2C%20SL%22)&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys').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

# Atmosphere
Atmosphere = Baum.getElementsByTagName('yweather:atmosphere')[0]
Luftfeuchtigkeit = float(Atmosphere.attributes["humidity"].value)
Luftdruck = float(Atmosphere.attributes["pressure"].value)
Tendenz = float(Atmosphere.attributes["rising"].value)
Sichtweite = float(Atmosphere.attributes["visibility"].value)
#Sichtweite = round((Sichtweite*1.609),2)


# 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(4):

    # 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[0][2] = round((Wetter[0][2] - 32.0) * (5.0 / 9.0) , 2)
Wetter[0][3] = round((Wetter[0][3] - 32.0) * (5.0 / 9.0) , 2)
Wetter[1][2] = round((Wetter[1][2] - 32.0) * (5.0 / 9.0) , 2)
Wetter[1][3] = round((Wetter[1][3] - 32.0) * (5.0 / 9.0) , 2)
Wetter[2][2] = round((Wetter[2][2] - 32.0) * (5.0 / 9.0) , 2)
Wetter[2][3] = round((Wetter[2][3] - 32.0) * (5.0 / 9.0) , 2)
Wetter[3][2] = round((Wetter[3][2] - 32.0) * (5.0 / 9.0) , 2)
Wetter[3][3] = round((Wetter[3][3] - 32.0) * (5.0 / 9.0) , 2)

# Umrechung Windrichtung
if Richtung <= 22.5:
    Windrichtung = "Nord"
elif Richtung <= 67.5:
    Windrichtung = "Nord-Ost"
elif Richtung <= 112.5:
    Windrichtung = "Ost"
elif Richtung <= 157.5:
    Windrichtung = "Sued-Ost"
elif Richtung <= 202.5:
    Windrichtung = "Sued"
elif Richtung <= 247.5:
    Windrichtung = "Sued-West"
elif Richtung <= 292.5:
    Windrichtung = "West"
elif Richtung <= 337.5:
    Windrichtung = "Nord-West"
elif Richtung <= 360:
    Windrichtung = "Nord-West"
else:
    Windrichtung = "Fehler!"

#    &nbsp;

#    &nbsp;

# 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 "Atmosphere"
print "Luftfeuchtigkeit: " + str(Luftfeuchtigkeit) + "%"
print "Luftdruck " + str(Luftdruck) + " Millibar"
print "Tendenz " + str(Tendenz)
print "Sichtweite " + str(Sichtweite) + " km"
print ""

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

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

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

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

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