Reporte del Clima con PHP y Google

En el artículo Showing the weather with PHP and Google Weather API en donde explican la forma de obtener los datos del clima utilizando Google. Para ello acceden a un URL utilizado en iGoogle el cual devuelve un XML con los datos del clima actual para la ciudad seleccionada y el pronostico para los siguientes tres días.

gweather

Obteniendo los datos de Google
Para obtener los datos del clima (condición, temperatura, humedad, vientos) de una ciudad determinada podemos acceder al siguiente URL.

  1. http://www.google.com/ig/api?weather=city

Estos datos son devueltos en idioma ingles, podemos agregarle un parámetro adicional hl para indicar el idioma de la respuesta, por ejemplo para español.

  1. http://www.google.com/ig/api?weather=city&hl=es

Utilizando PHP para mostrar los datos
Ahora que ya sabes de donde obtener los datos los cargamos con PHP utilizando la función file_get_contents y posteriormente los convertimos en un array utilizando xml2array.

  1. require("xml2array.php");
  2.  
  3. $url = "http://www.google.com/ig/api?weather=lima&hl=es";
  4. $contents = file_get_contents($url);
  5. $data = xml2array($contents);
  6.  
  7. $weather_info = $data['xml_api_reply']['weather']['forecast_information'];
  8. $weather_current = $data['xml_api_reply']['weather']['current_conditions'];
  9. $weather_forecast = $data['xml_api_reply']['weather']['forecast_conditions'];

Como se puede ver, hemos obtenido los datos de los nodos forecast_information, current_conditions, forecast_conditions en tres variables. Estos nodos contienen los datos de la ciudad consultada, los datos actuales clima y la predicción del clima para los siguientes tres días.

El siguiente paso es imprimir los datos que hemos obtenido de las respectivas variables. Si mostramos los datos del clima actual tendríamos el siguiente código:

  1. <h3>Google Weather Demo </h3>
  2. <div id="current">
  3.     <strong><?php echo utf8_encode($weather_info['city']['attr']['data']); ?></strong><br />
  4.     <img src="http://www.google.com<?php echo $weather_current['icon']['attr']['data']; ?>" />
  5.     Condición: <?php echo $weather_current['condition']['attr']['data']; ?><br />
  6.     Temperatura: <?php echo $weather_current['temp_c']['attr']['data']; ?> &deg;C<br />
  7.     <?php echo $weather_current['humidity']['attr']['data']; ?><br />
  8. </div>

Nótese que mostramos el icono con el clima actual, los datos de la condición, temperatura y humedad. Pueden ver el ejemplo funcionando en http://samples.unijimpe.net/gweather/basic.php

También podemos mostrar las predicciones del clima para los siguientes días utilizando la variable $weather_forecast que contiene un array para ello escribimos:

  1. <div id="forecast">
  2.     <?php for ($i=0; $i<sizeof($weather_forecast); $i++) { ?>
  3.     <?php $foreday = $weather_forecast[$i]; ?>
  4.     <div id="item">
  5.     <?php echo utf8_encode($foreday['day_of_week']['attr']['data']); ?><br />
  6.     <img src="http://www.google.com<?php echo $foreday['icon']['attr']['data']; ?>" /><br />
  7.     <?php echo $foreday['low']['attr']['data']; ?>&deg;C |
  8.     <?php echo $foreday['high']['attr']['data']; ?>&deg;C
  9.     <?php } ?>
  10. </div>

Agregando CSS y un formulario de búsqueda podemos obtener excelentes resultados, solo depende de nuestra imaginación. Pueden ver ejemplo final funcionando en http://samples.unijimpe.net/gweather/.

Comentarios Total 19 comentarios


Christian
Publicado: 20/10/2009 5:53 am

Muy buen artículo, sólo que en el demo que publicaste, genera un error cuando se quiere buscar una ciudad como por ej. “Buenos Aires”
Además sería interesante poder agregar un filtro adicional cosa de poder diferenciar algunas ciudades con el mismo nombre, por ej. Córdoba , que existe en Argentina y España
Saludos

Tincho
Publicado: 20/10/2009 7:31 am

Iba a decir exactamente lo mismo que Christian. Yo por ejemplo vivo en Córdoba, Argentina… y no puedo ver los datos del tiempo de mi ciudad.

Me encanta la web, y estoy sacando mucha info que hay aca, y estoy rediseñando mi web ahora gracias a toda la info que pones, y a mucha otra que complementa que encontre en google.
Gracias, te felicito.

Carlos G.
Publicado: 20/10/2009 8:47 am

Gracias por el post, me será de ayuda en mis proyectos.

Lo del espacio podrias solucionarlo reemplazando en el php que recibe el campo de la busqueda los espacios por el signo de +, para que el file_get_contents no contenga espacios y funcione sin problema!

Saludos.

Tom
Publicado: 20/10/2009 10:04 pm

El link de descarga del zip no anda.

unijimpe
Publicado: 20/10/2009 11:24 pm

Respecto a las ciudades con dos palabras como menciona Carlos pueden colocar el símbolo + como separador de ciudad, otra forma de hacerlo es que lo codifiques en formato url utilizando la función urlencode.

$url = "http://www.google.com/ig/api?weather=".urlencode($que)."&hl=es";

He corregido los URLs y ya esta funcionando nuevamente las descargas.

jsteban
Publicado: 21/10/2009 10:48 am

no em funciona tu codigo, sera problema del servidor ??
lo monto tal como lo tienes y no funciona, lo unico que modifique fue la ciudad (aunque original tampoco me funcionaba)

Lo tengo en esta web http://decamping.net/ClimaGoogle/basic.php

Que puede ser el problema ?? limitaciones del server gratuito ?

Miguel
Publicado: 29/10/2009 8:31 am

He probado el script y funciona a medias.
Guardé en un archivo de texto lo que me trae la función función file_get_contents y me di cuenta que el problema es que no me trae todo el archivo. Qué puede suceder?

Miguel
Publicado: 29/10/2009 9:11 am

Corrijo lo que dije, si trae el archivo, pero el xml2array solo me devuelve 2 días

leo
Publicado: 06/11/2009 12:30 pm

No funciona la descarga

fito
Publicado: 27/11/2009 11:47 am

Solo enseña el primer dia..

fito
Publicado: 27/11/2009 2:40 pm

Antes he posteado diciendo que solo enseñaba el primer dia y era por que hoy es viernes , y en el array el sabado lo pone con acento es decir sáb con lo cual la libreria no sigue leyendo.

pongan esto al principio !!

$contents = str_replace(“á”,”a”,$contents);
$contents = str_replace(“é”,”e”,$contents);
$contents = str_replace(“í”,”i”,$contents);
$contents = str_replace(“ó”,”o”,$contents);

Miguel
Publicado: 23/12/2009 3:57 pm

No lo puedo implentar solo funciona el basic. El index.php siempre me devuelve “La información no está disponible temporalmente.” podrán darme alguna idea porque me pasa esto.
Gracias
Miguel

gerardo
Publicado: 05/02/2010 3:52 pm

Hola hay manera de poner sustituir los iconos una vez obtenida la información ??

saludos

juliofer
Publicado: 01/04/2010 12:10 am

hola yo tube algunos de los problemas… con respecto a la tilde… y bueno lo solucione con el utf8_encode y utf8_decode… con esto solucione que se muestren los dias completos…..

$contents = utf8_encode(file_get_contents($url));

y cuando muestro la info

echo utf8_decode($weather_current['condition']['attr']['data']);

bueno ahora si alguien sabe como se diferenciar las ciudades que tienen el mismo nombre..en diferentes paises

luis
Publicado: 10/04/2010 12:38 pm

prueba en el basico pasar la variable cancun y marca error….porque sera?

segma
Publicado: 17/04/2010 10:05 am

Hola y como se puede hacer que sea automático por la IP de quien está visitando la página.

Quiero decir si visitan desde Barcelona, que salga el tiempo de Barcelona.

Un saludo!!

Daniel
Publicado: 18/05/2010 10:01 am

Segma: “Hola y como se puede hacer que sea automático por la IP de quien está visitando la página.”

Te sugiero buscar por Google la base de ips de http://www.maxmind.com/ hay una version free y otra de pago, eso debería resolver tu ingquietud. Via script podés autodetectar el país y formar una url de consulta.

Conrado
Publicado: 15/07/2010 12:52 pm

Hola quisiera saber si pueden subir el código corregido.. ya que este tiene muchos errores y me gustaría poder incluirlo en mi web.
Muchas gracias!
Saludos!

unijimpe
Publicado: 15/07/2010 10:41 pm

Conrado el script esta funcionando correctamente, puedes ver el demo funcionando en http://samples.unijimpe.net/gweather/. Descarga los archivos de ejemplo y pruebalos. Ten en cuenta que tienes que tener habilitada la librería cURL que sirve para cargar archivos externos.

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)