Pronóstico del clima con Python y Yahoo

imagen / Silvia Sala
  
6 de Febrero de 2016   0  

Hola amigos! El día de hoy les platicaré de una librería que desarrollé hace unos meses atrás. Se trata de pyql-weather, librería que utiliza los servicios de Yahoo para consultar el clima, así como información extra como continentes, países, ciudades, entre otros. Conozcamos un poco de ella!

Pyql-weather es un wrapper (escrito totalmente en Python y liberada bajo la licencia MIT) que permite realizar consultar YQL y obtener información de los servidores de Yahoo. Gracias a que utiliza las librerías estándar de Python, pyql-weather no necesita de ninguna otra dependencia más que el lenguaje Python instalado en el equipo que será ejecutado.

¿Que tantos módulos tiene esta librería?

pyql-weather cuenta con 2 módulos muy importantes:

  1. pyql.geo
  2. pyql.weather

El primer módulo, pyql.geo, nos permite enlistar elementos geográficos tales como:

  • Continentes
  • Océanos
  • Países
  • Estados
  • Ciudades
  • PlaceFinder (Localizador de lugares según latitude-longitude)
  • entre otros.

El segundo módulo, pyql.weather, ofrece información referente al estado del clima actual:

  • Location
  • Astronomía
  • Atmósfera
  • Viento
  • Unidades de medidas
  • Condición actual del clima
  • Pronóstico del clima de los siguientes 5 días

Como podemos observar, es información muy útil si necesitamos integrar elementos de clima en alguno de nuestros proyectos web.

¿Cómo la instalo?

La manera fácil de instalar la librería es a través de la herramienta pip:

pip install pyql-weather


o de igual manera se puede descargar directamente desde el repositorio de Github:

https://github.com/alexdzul/pyql-weather

y ejecutar el siguiente comando:

python setup.py install

 

Ejemplos de uso / Módulo pyql.geo

 
Consultar continentes.

Si necesitamos realizar una consulta de todos los continentes, basta con realizar lo siguiente:

from pyql.geo.continents import Continent
continents = Continent.filter()
for cont in continents:
    print(cont.name)

El resultado será el siguiente:

Africa
Europe
South America
Antarctic
Asia
North America
Australia

Consultar información de un lugar.

Ahora veamos un ejemplo para poder identificar un lugar según la latitude y longitude que enviemos.

from pyql.geo.placefinder import PlaceFinder
latitude = "20.632784"
longitude = "-103.359375"
lat_long = "{0},{1}".format(latitude, longitude)

finder = PlaceFinder.get(text=lat_long, gflags="R")
place_info = "{0}, {1} ZIP: {2} | WOEID:{3}".format(finder.city,
                                                    finder.country,
                                                    finder.uzip,
                                                    finder.woeid)
print(place_info)

El resultado que nos dará será el siguiente:

Guadalajara, Mexico ZIP: 44940 | WOEID:24553135
Consultar estados de México.

Ahora veamos cómo podemos obtener el listado completo de los estados del país México.

from pyql.geo.states import State
states = State.filter(place="Mexico")
for state in states:
    print(state.name)

El resultado será algo similar a lo siguiente:

Zacatecas
Aguascalientes
San Luis Potosi
Nuevo Leon
Durango
Guanajuato
Nayarit
Jalisco
Tamaulipas
Queretaro de Arteaga
Coahuila de Zaragoza
Hidalgo
Michoacan de Ocampo
Mexico
Colima
Distrito Federal
Sinaloa
Tlaxcala
Morelos
Puebla
Veracruz-Llave
Chihuahua
Guerrero
Oaxaca
Baja California Sur
Tabasco
Sonora
Chiapas
Campeche
Yucatan
Baja California
Quintana Roo

Ejemplos de uso / Módulo pyql.weather

Este es el módulo por el cual inicié esta librería, veamos algunos ejemplos de uso :)

Información del clima utilizando WOEID.

Debemos instanciar un objeto del tipo Forecast utilizando la función get pasándole el parámetro woeid y u:

from pyql.weather.forecast import Forecast
my_woeid = 24553135
forecast = Forecast.get(woeid=my_woeid, u="c")

Ya que tenemos este objeto en memoria ahora podemos utilizarlo para conocer todos los detalles del pronóstico del clima:

print(forecast.location.city)
print(forecast.location.region)
print(forecast.location.country)

El resultado será el siguiente:

Guadalajara
JA
Mexico

Podemos consultar los datos de la salida y puesta del sol de una manera muy sencilla:

print("Salida del sol: {0}".format(forecast.astronomy.sunrise))
print("Puesta del sol: {0}".format(forecast.astronomy.sunset))

El resultado será:

Salida del sol: 7:24 am
Puesta del sol: 8:14 pm

Para identificar la condición actual del clima, utilizamos el mismo objeto forecast de la siguiente manera:

print(forecast.item.condition.code)
print(forecast.item.condition.date)
print(forecast.item.condition.temp)
print(forecast.item.condition.text)

El resultado es:

28
Tue, 28 Apr 2015 12:53 pm CDT
26
Mostly Cloudy

Yahoo Weather nos permite conocer el pronóstico del clima de 5 fechas continuas (incluyendo la fecha de consulta).

Por ejemplo: Si consultamos el clima el día de hoy 28-04-2015 (día 1), Yahoo nos ofrecerá el pronóstico para los días 29-04-2015 (día 2), 30-04-2015 (día 3), 01-05-2015 (día 4) y 02-05-2015 (día 5).
A continuación veremos un ejemplo básico para extraer el pronóstico para la ciudad de Mérida, Yuc, México:

woeid = 133327
forecast = Forecast.get(woeid=woeid, u="c")
for day in forecast.item.forecast:
    print(day)

El resultado es:

{u'code': u'30', u'text': u'Partly Cloudy', u'high': u'41', u'low': u'26', u'date': u'28 Apr 2015', u'day': u'Tue'}
{u'code': u'38', u'text': u'AM Thunderstorms', u'high': u'31', u'low': u'23', u'date': u'29 Apr 2015', u'day': u'Wed'}
{u'code': u'39', u'text': u'AM Showers', u'high': u'28', u'low': u'21', u'date': u'30 Apr 2015', u'day': u'Thu'}
{u'code': u'30', u'text': u'Partly Cloudy', u'high': u'32', u'low': u'19', u'date': u'1 May 2015', u'day': u'Fri'}
{u'code': u'34', u'text': u'Mostly Sunny', u'high': u'33', u'low': u'19', u'date': u'2 May 2015', u'day': u'Sat'}

Podemos observar que el resultado que pyql-weather retorna es un arreglo de objetos en formato json los cuales podemos manipular para formatear la información de la siguiente manera:

woeid = 133327
forecast = Forecast.get(woeid=woeid, u="c")
ciudad = forecast.location.city
region = forecast.location.region
pais = forecast.location.country
print("Condiciones del clima para la ciudad de {0}, {1}, {2}: \n".format(ciudad, region, pais))
for day in forecast.item.forecast:
    print("Fecha: {0} {1}".format(day['day'], day['date']))
    print("Pronóstico: {0} ({1})".format(day['text'], day['code']))
    print("Temperatura Mínima: {0}º {1}".format(day['low'], forecast.units.temperature))
    print("Temperatura Máxima: {0}º {1}".format(day['high'], forecast.units.temperature))
    print("*****************************************************************************")

Y tendremos un resultado más entendible:

 

Condiciones del clima para la ciudad de Merida, YU, Mexico:

Fecha: Tue 28 Apr 2015
Pronóstico: Partly Cloudy (30)
Temperatura Mínima: 26º C
Temperatura Máxima: 41º C
*****************************************************************************
Fecha: Wed 29 Apr 2015
Pronóstico: AM Thunderstorms (38)
Temperatura Mínima: 23º C
Temperatura Máxima: 31º C
*****************************************************************************
Fecha: Thu 30 Apr 2015
Pronóstico: AM Showers (39)
Temperatura Mínima: 21º C
Temperatura Máxima: 28º C
*****************************************************************************
Fecha: Fri 1 May 2015
Pronóstico: Partly Cloudy (30)
Temperatura Mínima: 19º C
Temperatura Máxima: 32º C
*****************************************************************************
Fecha: Sat 2 May 2015
Pronóstico: Mostly Sunny (34)
Temperatura Mínima: 19º C
Temperatura Máxima: 33º C
*****************************************************************************

¿Te parece interesante? Puedes consultar la información completa en: http://pyql-weather.readthedocs.org/ para ver más de este tipo de ejemplos :)



Alex Dzul

FullStack Python / Django Developer. #jslove

Etiquetas

Temas relacionados