viernes, 5 de marzo de 2010

Información meteorológica en Python, ¡hoy hará sol!

Hola a todos (si es que alguien me lee, y si lo hace, por favor, algún comentario, ¡¡¡para darme ánimos a seguir escribiendo!!!). Esta vez vamos a crear un programita para obtener información meteorológica en España. y esta vez lo vamos a hacer con Python, ¡que hacía tiempo que no hablaba de este lenguaje de programación!.

Esta cuestión la voy a explicar desde cero, para que nadie se pierda y podamos todos seguirlo paso a paso. El módulo que nos da acceso a la información metereológica no tiene nada de particular, es más, es muy fácil, pero me gustaría hacer una aplicación, aunque sea en modo texto, sencilla, para que el lector (mucho más listo y con gran destreza, ¡y no lo digo en broma!) pueda mejorarlo, implementándolo en wxPython, ó en una página web.

Empezamos...

Lo primero de todo es cómo vamos a obtener información del tiempo (clima) y de donde vamos a obtenerla. Para ello nos ayuda el módulo pymetar.py, escrito por el señor Tobias Klausmann.
PyMETAR obtiene informes del tiempo a partir de un identificador de estación, decodifica el informe (report) y da, mediante una serie de métodos, un fácil acceso a todos los datos del informe.

La librería la podemos descargar desde http://schwarzvogel.de/software-pymetar.shtml. El fichero que me he descargado es pymetar-0.16.tar. Lo descomprimes en el directorio donde tengas instalado Python (en mi caso Python25). Te aparece un directorio, llamado pymetar-0.16. Si has llegado hasta aquí, estamos a punto de terminar la instalación. A ver, esto que voy a hacer es para plataformas Windows, no para Linux. Quiero instalar el módulo, y para eso, hay que cambiar en el setup.py que viene en el directorio una cosa, porque de lo contrario la instalación no se hará bien (podría hacerse a capón, pero las cosas, si se hacen bien, mejor). Darse cuenta que este módulo es para instalarlo tal cual en Linux.

En este fichero hay que cambiar , en data_files, la ruta en donde se quiere que se instale la documentación. En mi caso, yo tengo instalado Python en d:\python25, por lo tanto quedará tal como sigue (dependiendo de donde tengas instalado Python tendrás que poner una ruta u otra. Ten en cuenta las barras, que en Linux es / y en Windows es \\).

Ejecutamos python setup.py install en el CMD, y nuestro módulo PyMETAR se queda completamente instalado. Para ver que efectivamente se ha instalado todo puedes probar en el intérprete de Python, haciendo un import pymetar, y para ver si se ha generado la documentación correctamente, en el Module Docs de Python:

PyMETAR accede al servicio nacional de tiempo climático de Estados Unidos (NOAA's National Weather Service). Los datos meterológicos de esta página se nutren de localizaciones específicas. Dichas localizaciones son zonas de observación, estaciones de observación o simplemente estaciones. Estos sitios se identifican por un identificador numérico y/o un indicador de localización. Por tanto, lo que vamos a hacer a continuación es obtener estos identificadores de estaciones, en España, para poder obtener a partir de ellos la información del tiempo, yéndonos a esta página: http://www.nws.noaa.gov/tg/siteloc.shtml.


Si estamos en Estados Unidos, buscamos por "Display All Stations In a State." Yo, que estoy en Murcia, me voy más abajo, a buscar España.

Hacemos click en "Display all stations in" (Mostrar todas las estaciones en). Seleccionamos todos los ID (selección y copy):

Abrimos un fichero de texto con Notepad (o el que mas os guste), y le dais el nombre que querais (yo le he llamado id_zonas.txt), y pegáis todos los id.

Bien, ya tenemos una parte importante, esto es, todos los identificadores de estaciones repartidos por España. ¿Fácil, no? Esto no es Python, pero ¡hay que hacer de todo!. Decir que el fichero que hemos generado lo guardamos en la misma carpeta donde vamos a poner los ficheros con el código fuente.

Una vez tenemos descargado e instalado el PyMETAR y un fichero con todos los identificadores de estaciones de España, ¡vamos a programar!.

Según la documentacon de PyMETAR tenemos 3 clases principales ReportFetcher, ReportParser y WeatherReport. La primera clase (ReportFetcher) sirve para obener un informe "crudo", esto es, sin formatear, de los datos metereológicos (toda la información). La segunda clase (ReportParser) (utilizando la tercera [WeatherReport]) da formato a los datos del informe sin formatear, devolviendo los datos formateados. Una vez instanciada la clase, mediante los método apropiados podremos recuperar la información ya formateada. Es por ello que si queremos recuperar información tenemos que utilizar los método de WeatherReport, ya que esta clase se utiliza en ReportParser. Esto es lo más complicado que hay que entender. Lo demás lo vemos en el ejemplo.

Vamos a crear una aplicación, compuesta por 2 ficheros, tiempo.py y tiempo_auxiliar.py. El primer fichero será el ejecutable, el segundo el "cajón de sastre" de nuestra aplicación. ¡Hay que ser ordenados!

Veamos primero tiempo_auxiliar.py, que es en donde están las funciones principales.

Cabecera de toda la vida, y función para visualizar una los datos del tiempo que se exportan a una página web (aunque no he llegado a llamar a esta función en el programa, ¡tiene que funcionar a la fuerza!)

Función estrella de la aplicación. Aquí vemos como obtener datos del servidor del tiempo climático. Como puede apreciarse en el código no es difícil de implementar. (Quizás si hubiera creado un post sólo con esta función me hubiera ahorrado mucha escritura, pero es que me gusta explicar como me gustaría que a mi me explicasen).

Función para crear un fichero html a partir de los datos climáticos. Esta es la manera más rápida que he encontrado (si hay otra, por favor, comunícamelo). Y la función de continuar.

La función que carga el fichero con los identificadores de posicionamiento de la estaciones. Si lees el código no debes de tener problemas. Este tipo de función ya la he usado en algún que otro post.

Y finalmente, la función del menú principal.

Y el módulo que hace que "esto" funcione, tiempo.py, te lo muestro tal que así:

Como se puede observar, no es muy complicado (Python no lo es, por eso me gusta tanto) la creación de la aplicación. Veamos los resultados. Ejecutamos python tiempo.py.

Pulsamos 1, y Enter.

Y nos va mostrando, de 10 en 10, los posicionamientos. Pulsamos cero y se para.

Vamos a ver la temperatura que hace en Córdoba. Vamos a la opción 2, y escribimos el ID de Córdoba, tal como aparece en el resultado de la opción 1.

Como se puede observar, vemos los resultados que nos envía el servidor (temperatura, humedad, etc.) Esto es un ejemplo, hay mucha más información.

¡¡¡¡Vamos a llevar estos datos a la WEB!!!! Opción 3.

Esta vez, he escogido Barajas (Madrid), para ver el tiempo que hace.

Y por supuesto, San Javier, Murcia, mi tierra.

CONCLUSIONES

En este post hemos visto varias cosas. Primero, poder crear una aplicación (o prototipo) de recuperación de información, esta vez, meteorológica. PyMETAR nos ofrece una herramienta de acceso a información de tiempo climático sencilla y fácil de utilizar. Segundo, llevar esos datos a un fichero html para poder ser publicado en una web. Y último, la utilización del tipo de dato lista para poder manejar datos que vienen de ficheros externos, formateando su información como más nos convenga.

4 comentarios:

  1. Gracias Ángel! Me estoy iniciando en Python y aprecio mucho tus aportes. El tema de las clases no lo termino de entender, me cuesta todavia estoy muy verde. Saludos

    ResponderEliminar
  2. muy buen articulo, muchas gracias!!!!

    ResponderEliminar
  3. Buen aporte, el dato que obtiene solo es de una temperatura, se podrían obtener los datos de las 24 temperaturas y de que pagina se obtiene los datos, realizo un sistema de recuperación de información meteorológica automático con java.. gracias por el aporte

    ResponderEliminar