El tiempo en tu web mediante el API Google Weather

Mediante Google Weather podemos mostrar un informe meteorológico para diferentes ciudades de manera personalizada del tiempo actual y una predicción de los días próximos.

La llamada a Google Weather es una simple llamada a una URL pasando el parámetro de ciudad, por ejemplo http://www.google.com/ig/api?weather=Madrid devolviéndonos un XML (podemos probar a poner esta dirección en un navegador web para hacernos una idea).

El siguiente paso sería procesar el XML devuelto y mostrar los datos que nos interesen. Por ejemplo vamos a mostrar un código en PHP para el API de Google Weather usando la librería SimpleXML:

<?php
	// Proceso
	$ciudad = "Barcelona";

	$xml = simplexml_load_file("http://www.google.com/ig/api?weather=".$ciudad);

	if($xml===false) { // Fallo al contactar con Google
			return null;
	}

	$current = $xml->xpath("/xml_api_reply/weather/current_conditions"); 
	if(count($current)==0) { // Ciudad errónea
			return null;
	}

	$temperatura_centigrados = $current[0]->temp_c["data"];
	$humedad = $current[0]->humidity["data"];
	$condiciones = $current[0]->condition["data"];
	$icono = $current[0]->icon["data"];
	
	// Vista
	echo 'Temperatura: '.$temperatura_centigrados.'&deg;<br/>';
	echo $humedad.'<br/>';
	echo 'Condiciones: '.$condiciones.'<br/>';
	echo '<img src="http://www.google.com/'.$icono.'" alt="'.$condiciones.'" title="'.$condiciones.'"/>"';
	
?>

Por último, para hacer nuestra aplicación resistente a fallos, recomendamos ejecutar este script desde una llamada AJAX, ya que si Google fallara o tardara en responder, nuestra página tardaría o fallaría al servirse.

Comentarios

Comentario de lucky - 30 de Agosto de 2011 - 18:59
Excelente tutorial! Me sirvio muchisimo. Se agradece el aporte!!
Comentario de Fernando - 21 de Octubre de 2011 - 09:43
Disculpar mi ignorancia, no se donde donde insertar la "simple llamada a URL" con el parametro de la ciudad. Lucky podrías mostrarme el ejmemplo funcionando. Gracias mil.
Comentario de andresverjan - 04 de Diciembre de 2011 - 01:03
excelente.!!! muy bna ayuda
Comentario de Daniel - 19 de Diciembre de 2011 - 22:10
¿Como se puede implementar lo mismo pero usando PHP4.x ? ... debe haber alguna forma me imagino... pero no la he podido encontrar. Te agradecería que me orientes un poco al respecto. Gracias y muy bueno el aporte, es excelente.
Comentario de Nonaoco - 21 de Diciembre de 2011 - 17:34
no se nada de estos lenguajes pero si soy bueno siguiendo tutoriales, sera que puedes hacer uno de como implementarlo en una web desde 0 hasta su resultado final si no es mucha molestia!!! Exitos con tu blog!!
Comentario de Imaginanet - 22 de Diciembre de 2011 - 07:02
Hola Daniel,nn PHP 4.x no tiene incluida la librería SimpleXML, por lo que deberás hacerlo a la vieja usanza: con XML Parser. Un ejemplo orientativo lo puedes encontrar en esta web http://www.tierra0.com/2007/08/01/de-xml-a-array-con-php4/ Por otro lado Nonaoco, simplemente copia el código y pégalo en un archivo .php y estará funcionando.
Comentario de Cris - 12 de Enero de 2012 - 06:17
Oye, me lo pone en inglés... ¿Cómo lo visualizo en español?
Comentario de Imaginanet - 12 de Enero de 2012 - 11:51
No existe documentación de la API y aún probando con parámetros GET del tipo &l=es o &lc=es-ES no funciona. Supongo que la diferencia está en el USER AGENT que le envías desde el fopen que PHP hace, así que o envías una cabecera especificando el idioma (por eso en el navegador aparece en español y desde PHP aparece en inglés) o traduces todos los textos de inglés y substituyes el texto por el correspondiente.
Comentario de Eduardo - 14 de Enero de 2012 - 15:03
Pero como se haria enviando una cabecera? Es que esa parte de PHP no la domino
Comentario de Imaginanet - Carlos - 16 de Enero de 2012 - 14:58
Podríamos usar por ejemplo la librería cURL: $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,'http://www.google.com/ig/api?weather=Cartagena'); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept-Language: es-es,es;q=0.8,en;q=0.5,en-us;q=0.3','Content-Type: text/xml;charset=utf-8')); $raw_xml = curl_exec($ch); curl_close($ch); $xml = simplexml_load_string(utf8_encode($raw_xml));
Ha habido un error en el envío
Comentario enviado. Será revisado por la moderación antes de ser publicado.

Deja tu comentario

Tu nombre:
Tu email:
Tu comentario: