6.7.07

Python: Información meteorológica fácil con pymetar

Necesitaba escribir un script que me capturase la información meteorológica para mostrar en pantalla los resultados. Dándole unas vueltas a Google, he visto que con pymetar es una tontería, ya que nos da todo hecho para que podamos atacar a una estación meteorológica de las que hay instaladas en los aereopuertos. Para conseguir el código correspondiente a la estación que nos interesa, debemos mirar en http://www.nws.noaa.gov/tg/siteloc.shtml y cambiar el valor de la variable stationId.

En este ejemplo simple, utilizo dos diccionarios, uno para traducir a español el resultado y otro para cargar un gráfico según el estado del cielo. El módulo pymetar nos prevee de más métodos, que pueden consultarse en la documentación del módulo.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pymetar
import sys

# Global vars
stationId = 'LEPA' # Codigo de la estacion meteorologica
equivalencias = {'N':'Norte','S':'Sur','E':'Este', \
'W':'Oeste','NW':'Noroeste','NE':'Noreste','SSW':'Sur/Suroeste',
'SSE':'Sur/Sureste','NNE':'Norte/Noreste','NNW':'Norte/Noroeste','SE':'Sureste', \
'SW':'Suroeste','ENE':'Este/Noreste','WNW':'Oeste/Noroeste', \
'ESE':'Este/Sureste','WSW':'Oeste/Suroeste'}

iconos = {'sun':'sol.png','suncloud':'solnube.png','cloud':'nubes.png','rain':'lluvia.png', \
'snow':'nieve.png','storm':'tormenta.png','fog':'niebla.png'}

rf=pymetar.ReportFetcher(stationId)
rep=rf.FetchReport()
rp=pymetar.ReportParser()
wData=rp.ParseReport(rep)

if wData == None:
print 'Icono: --'
else:
print 'Icono: ' + iconos[wData.getPixmap()]
#print wData.getPixmap()
print 'Temperatura: ' + str(int(wData.getTemperatureCelsius())) + 'ºC'
print 'Humedad: ' + str(int(wData.getHumidity())) + '%'
print 'Visibilidad: ' + str(int(wData.getVisibilityKilometers())) + ' Km'
print 'Punto de condensacion: ' + str(int(wData.getDewPointCelsius())) + 'ºC'
print 'Viento: ' + equivalencias[str(wData.getWindCompass())] + ' a ' + str(int(wData.getWindSpeed())) + ' Km/h'
print 'Presion: ' + str(int(wData.getPressure())) + ' ba'


No hay comentarios: