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.

code
  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.

code
  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.

php
  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:

HTML4
  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="<?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:

HTML4
  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="<?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 54 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.

American
Publicado: 04/08/2010 9:31 am

Para lo que dicen, de Córdoba por ejemplo, deben poner, “Córdoba, Argentina” o “Córdoba, España” y listo.

American
Publicado: 04/08/2010 9:42 am

PD: Les aviso que el código así como está, le estoy haciendo algunos cambios, por ejemplo modifiqué el modo en que tiene que leer el nombre de la ciudad a esto

Una pregunta, saben si hay algo que se pueda añadir en la URL para que traiga la info en ºC o en ºF. Gracias…

American
Publicado: 04/08/2010 10:34 am

Perdón, ya vi las temp en C y F

Ojo con el urlencode, ya que daría como resultados algo así, http://www.google.com/ig/api?weather=C%F3rdoba&hl=es lo cual falla.

PD: Juliofer, gracias por tu aporte, me soluciono el hecho de que el código se rompía ni bien encontraba un acento.

miguelator
Publicado: 04/08/2010 12:25 pm

Hola.
Muchas gracias por el código, ya que es algo como lo que buscaba, poder manejar a mi manera los datos.
Eso sí, me surje una inquietud.
Existirá alguna forma de poder agregarle más info a la api, es decir personalizarla, como por ejemplo, mostrar la hora de la última actualización, estado de la luna, la radiación, etc.
gracias.

ariel
Publicado: 15/08/2010 4:05 pm

bajo el ejemplo pero no puedo mostrar la ultima imagen….

http://eminema.com.ar/clima/index.php

que podra ser???

gracias por su ayuda.

Saludos

unijimpe
Publicado: 15/08/2010 4:12 pm

Hola, es probable que la codificación del tu archivo PHP no se la correcta pues en tu ejemplo se muestran de forma errónea las tildes. Ahora si te fijas en el XML que estas leyendo (http://www.google.com/ig/api?weather=lima&hl=es) el error ocurre cuanto intentas leer un valor que tiene una tilde.

Prueba creando un archivo PHP en blanco y allí pega el código fuente que descargaste, lo subes a tu servidor y prueba nuevamente.

Mauro
Publicado: 14/02/2011 11:42 pm

Hola unijimpe. No tengo mucha experiencia en php, lo mio es curiosidad pura y prueba-error, y me preguntaba si es posible integrarlo de manera sencilla al header de un theme wordpress? Es que quisiera que saliera como si fuera el clima de los periodicos online. ¿se pueden personalizar las imagenes? Gracias

unijimpe
Publicado: 15/02/2011 12:10 am

Para integrarlo con tu theme, es necesario crear un plugin para wordpress, este theme debe tener una función que te imprima el reporte del clima. Luego desde el theme llamas a esa función creada dentro del plugin.

Respecto a personalizar las imágenes, puedes utilizar cualquier imagen que prefieras, para ello debes crear las imágenes con los mismos nombres que tienes las imágenes de Google Weather y cambiar la ruta desde donde se llaman las imágenes.

Mauro
Publicado: 15/02/2011 11:37 pm

Muchas gracias unijimpe, intentare y te comentare que tal me ha ido en este nuevo experimento para mi :)

Diego
Publicado: 16/03/2011 1:32 pm

queremos meter esta aplicacion e nuesra pagina pero no funciona, de hecho cuando le doy click tambien en tu ejemplo sale la siguiente informacion:

La información no está disponible temporalmente.

Me podrias decir donde esta el error.

SALUDOS

Diego

Octavio
Publicado: 18/04/2011 8:23 am

Hola, cuando salen los resultados en mi web, salen en Inglés…..
Puede ser porque mi servidor es americano?…tambien lo he intentado con lo de &hl=es en el php y nada.

Gracias

max
Publicado: 24/05/2011 1:47 am

los angeles, chile

da error ???

unijimpe
Publicado: 26/05/2011 9:50 pm

Gracias al comentario de nuestros visitantes hemos detectado que Google ha cambiado la ruta de las imágenes que utilizábamos en nuestro ejemplo. Para resolver este problema es necesario modificar la ruta de las imágenes.

Para ello modificamos la línea:

<img src="http://www.google.com<?php echo $foreday['icon']['attr']['data']; ?>" />

El cual hay que reemplazarlo por:

<img src="<?php echo $foreday['icon']['attr']['data']; ?>" />

He actualizado el código fuente de artículo y también los archivos para descargar.

Gerardo
Publicado: 27/05/2011 10:14 am

Anda perfecto gracias

Alex
Publicado: 02/06/2011 10:58 pm

Hola unijimpe exelente info, solo queria saber si es posible que se este actualizando automaticamente cada hora o algo asi, soy nuevo en el asunto pero esto esta de lujo, gracias

Juan
Publicado: 12/06/2011 3:44 pm

Las imagenes no se ven, alguna solucion facil ehhh
Gracias

unijimpe
Publicado: 12/06/2011 5:28 pm

Juan, según parece Google ha cambiado la ruta de donde están alojados los iconos, para corregir este problema hay que anteponerle a la ruta de las imágenes el dominio de Google.

Antes:
<img src="<?php echo $foreday['icon']['attr']['data']; ?>" />

Despues:
<img src="http://www.google.com<?php echo $foreday['icon']['attr']['data']; ?>" />

Juan
Publicado: 13/06/2011 8:08 am

Gracias por contestar tan rapido, funciona a medias, solo se ven las imagenes de los dias siguientes, pero no del dia principal (en el que estamos).
En tu ejemplo, funciona bien, pero si los descargas no van…
Me ayudas???
Gracias y saludos

Juan
Publicado: 13/06/2011 9:00 am

Ahhhhh… y solo aparecen 2 dias de predicciones, el dia de hoy y el de mañana.
saludos

unijimpe
Publicado: 13/06/2011 10:45 am

Para el icono del día actual hay que hacer la misma corrección, agregale el URL del dominio de Google para que pueda jalar correctamente la imagen.

edgar
Publicado: 21/06/2011 6:42 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);”

tengo este mismo problema y ya intente colocar esto pero no funciona, exactamente donde lo tengo que colocar.

gracias

oskar
Publicado: 11/07/2011 12:24 pm

y si quiero poner de ciudad a Tarapoto?
No me muestra nada… como seria para esta ciudad?

Gracias

Laboralis
Publicado: 07/08/2011 5:36 pm

¡Excelente!

¿Alguien pudo resolver el problema de ciudades? Tipo Córdoba, que puede referirse a España o Argentina.

http://www.google.com/ig/api?weather=cordoba,argentina

La API de GOOGLE lo registra pero simplemente no sé como llamar a ese archivo XML

¡Muchas gracias!

Pepe
Publicado: 13/12/2011 6:45 pm

Gracias por el código, funciona a la perfección.

Me interesaría saber ¿como capturar la información del pronóstico y guardarla en una base de datos?

He probado de varias formas, pero el array no me deja tomar la información completa. ¿Alguna idea?

Saludos.

Nonaoco
Publicado: 21/12/2011 1:06 pm

Me gustaria que crearas un widget para wordpress para mostrar el clima con este metodo! ya que ni con mis mil intentos logro imprimir la info en un widget de texto! :S ayuda please!!

Javier
Publicado: 07/01/2012 3:14 am

Excelente artículo, me funcionó a la perfección el código, pero quisiera consultar cómo puedo hacer para insertar los datos del tiempo en una página web realizada con HTML. Muchas gracias.

Gonzalo
Publicado: 08/04/2012 4:06 pm

En algunos casos solo muestra 3 de los 4 forecast. desconozco porque el 4to array aparece en blanco.

Como siempre aparecen 3 he reemplazado

Esto:
<?php for ($i=0; $i

Por esto:
<?php for ($i=0; $i

De esta forma solo se visualizaran 3.

Si alguien sabe porque no devuelve los 4 arrays que me lo diga plz porke no logro descubrirlo. Si ejecutais TEST.PHP vereis que solo devuelve 3 forecast en vez de 4, bueno el 4 lo da pero vacio.

JULIO
Publicado: 25/04/2012 6:42 pm

http://www.google.com/ig/api?weather=barcelona,ve&hl=es google lo reconoce pero no sirve en el script AYUUDA

johanso
Publicado: 22/05/2012 4:16 pm

Gracias,,esto era lo que estaba buscando,, ya comentare como me fue.

Larry
Publicado: 15/07/2012 1:43 pm

unijimpe:

Tengo el mismo problema de Diego, cuando ingreso otra ciudad o país me dice La información no está disponible temporalmente. Te agradecería indicarme como resolverlo, ya que me interesa sustituir este por otro código que dejó de funcionarme el cual funcionaba con weather.yahoo (http://www.weathertiempo.org/weatheres/index.htm).

De antemano, gracias por tu atención y felicitaciones por blog

Larry
Publicado: 15/07/2012 8:36 pm

unijimpe:

Ya encontré como funciona tu script, que por cierto está excelente.

Por ejemplo, en mi caso, si quiero ver las condiciones de mi país Guatemala, debo de escribir Guatemala, Guatemala; y si deseo ver una ciudad, en algunos casos es necesario escribir la ciudad y Guatemala.

Saludos cordiales

Héctor José
Publicado: 04/08/2012 4:05 pm

Disculpa, una consulta para alguien que sabe: Tengo un programa del clima que exporta este HTML a un soft de radio.

El problema es que su base de datos no tiene mi pueblo y hay mucha diferencia. Cómo podria hacerse que por ejemplo los datos fuesen extraidos de Google como haces tu , o de la página de accuweater. Si puedes haccerlo sería de muchisima utilidad para las radios comunitarias y otras que no manejamos presupuesto para contratar este servicio. Desde ya muchas gracias. mi correo hectorjoseper(arroba)yahoo.com.ar

Location: [STATION]
Condition: [CONDITION]
Temperature: [TEMP]
Feels Like: [FEELS]
Dew Point: [DEW]
Humidity: [HUMIDITY]
Wind: [WIND]
Barometer: [BAROMETER]
Sunrise: [SUNRISE AMPM]
Sunset: [SUNSET AMPM]

[UPDATED]

Héctor José
Publicado: 04/08/2012 4:18 pm

<HTML>
Location: [STATION]<BR />
Condition: [CONDITION]<BR />
Temperature: [TEMP]<BR />
Feels Like: [FEELS]<BR />
Dew Point: [DEW]<BR />
Humidity: [HUMIDITY]<BR />
Wind: [WIND]<BR />
Barometer: [BAROMETER]<BR />
Sunrise: [SUNRISE AMPM]<BR />
Sunset: [SUNSET AMPM]<BR />
<BR />

Gerardo
Publicado: 28/08/2012 7:20 am

Hola me tira este error (Hasta ayer funcionaba ok) :

Warning: file_get_contents(http://www.google.com/ig/api?weather=Cordoba+Argentina&hl=es) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable in /home/qu000034/public_html/Estructura/Clima/CordobaCapital.php on line 12

Linea 12: $contents = utf8_encode(file_get_contents($url));

Que hago? Gracias

Algenis
Publicado: 03/10/2012 7:53 am

Saludos,

Al igual que Gerardo tuve el mismo problema tratando de implementar el api para mostrar el clima de mi ciudad, pero buscando informacion llegue a la conclusion de que google ya no esta dando ese servicio, debido a que el api estaba contemplado con el proyecto iGoogle, el cual ya anunciaron que para el año proximo dejara de existir.

La informacion la optuve de este site: http://www.solucionesuno.com/blog/diseno-grafico/google-desactiva-de-su-api-el-clima/

Espero que les haya sido util esta informacion.

 

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>)