Weather script realmente simple con PHP

Weather script realmente simple con PHP

Weather script realmente simple con PHP
Weather script realmente simple con PHP

Todo portal, website informativo, diario digital, blog temático, booking engine, etc. todo sitio web que maneje información dinámica y que provea algún sistema que permita utilizar servicios como materia prima debe contar con un sistema que muestre el clima o estado del tiempo. Hoy día es muy importante, dado que los tiempos de hoy requieren que las personas se trasladen de una ciudad a otra para ejercer sus funciones.

En la Internet existen muchos scripts y sistemas que permiten proveer el estado del tiempo en tiempo real. Desde sencillos botones, pasando por widgets prediseñados, clientes soap o parseadores de webservices o rss feeds, hasta complejos sistemas que utilizan base de datos. Sin embargo, en ocasiones solo necesitamos algo sencillo que no requiera de muchas tecnologías o artimañas para cumplir su cometido.

Hoy voy a mostrarles como hacer un sencillo script que nos permita desplegar el estado del tiempo de cualquier ciudad del mundo con unas pocas lineas de código y sin necesidad de complejos scripts para parsear rss ni muchos menos el uso de base de datos.

Existen muchos sistemas, la mayoría basados en yahoo weather. Sin embargo Google permite crear un pequeño escript para presentar no solo el estado del tiempo en tiempo real, sino, que nos permite desplegar el pronostico para varios días subsecuentes.

Lo primero es tener a mano la principal herramienta, la función simplexml_load_file(); de PHP.

Por defecto casi todos los servidores web (hosting) tienen esta funcion previamente activada. de lo contrario haga una visita a php.net para documentación.

Entonces, lo segundo es definir y crear el objeto que alimentaremos con la función simplexml_load_file(), que no es mas que un parser precompilado de las nuevas versiones de php. Y vamos a definir nuestras fuentes de datos:

Creamos la instancia para nuestro objeto utilizando como fuente XML el API de google para el clima

$xml = simplexml_load_file(‘http://www.google.com/ig/api?weather=Puerto Plata‘);

Luego procedemos a identificar nuestro arreglo de datos según el response previamente encapsulado en nuestro objeto $xml con la información que provee el API de Google.

$information = $xml->xpath(“/xml_api_reply/weather/forecast_information”);

Conociendo la estructura del API rss de Google, procedemos a identificar los diferentes bloques de información, primero la situación actual del estado del tiempo de la ciudad especificada. Para ver esta estructura solo hay que visitar la fuente de nuestro simplexml, que no es mas que la url previamente indicada: http://www.google.com/ig/api?weather=Puerto Plata

Teniendo como resultado el primer nodo o rama del arbol del archivo xml del API de Google identificada como current_conditions:

$current = $xml->xpath(“/xml_api_reply/weather/current_conditions”);

Y una segunda estructura con varios items llamados forecast_conditions, identificando la predicción para lso próximos 4 días.

$forecast_list = $xml->xpath(“/xml_api_reply/weather/forecast_conditions”);

Teniendo esta información podemos entonces proceder a mostrar nuestro arreglo de datos obtenidos por el simplexml_load_file();, llamando cada valor por su nombre en el archivo XML del API de Googl. Por ejemplo:

$information[0]->city[‘data’] llamando la etiqueta de datos <city data=”Puerto Plata, Puerto Plata”/> siendo city la etiqueta o subnodo deseado y presentando su valor, en este caso data.

o también, $current[0]->temp_f[‘data’] llamando la etiqueta de datos <temp_f data=”79″/>.

Noten que en la definición de los objetos llamamos a $information[0]  y $current[0] con el indice (cero), indicando que queremos el primer valor o arreglo de valores de nuestros objetos previamente definidos que no son otra cosa que una matriz multidimensional.

De la misma manera se utiliza el arreglo o matriz para forecast_conditions. a diferencia de que como posee varios nodos o grupo de etiquetas utilizaremos un loop para leer todos ellos dentro de su arreglo o matriz como veremos mas adelante.

Ahora vamos a presentar los datos almacenados en nuestros objeto $xml:

<html>

<head>

<title>Weather realmente simple</title>

</head>

<body>

<h1><?php echo $information[0]->city[‘data’]; ?></h1>

<h2>Estado del Tiempo</h2>

<div>

<img src=”<?php echo ‘http://www.google.com‘ . $current[0]->icon[‘data’]?>” alt=”weather”?>

<span>

<?php echo $current[0]->temp_f[‘data’] ?>&deg; F,

<?php echo $current[0]->condition[‘data’] ?>

</span>

</div>

<h2>Pronóstico</h2>

<?php foreach ($forecast_list as $forecast) : ?>

<div>

<img src=”<?php echo ‘http://www.google.com‘ . $forecast->icon[‘data’]?>” alt=”weather”?>

<div><?php echo $forecast->day_of_week[‘data’]; ?></div>

<span>

<?php echo $forecast->low[‘data’] ?>&deg; F – <?php echo $forecast->high[‘data’] ?>&deg; F,

<?php echo $forecast->condition[‘data’] ?>

</span>

</div>

<?php endforeach ?>

</body>

</html>

Una vez que tenemos todo, podemos proceder a presentar los datos estructurados como una archivo con extensión php. Para nuestro ejemplo vamos a crear el archivo weather.php. y tendriamos algo asi:

<?php

$xml = simplexml_load_file(‘http://www.google.com/ig/api?weather=jakarta’);

$information = $xml->xpath(“/xml_api_reply/weather/forecast_information”);

$current = $xml->xpath(“/xml_api_reply/weather/current_conditions”);

$forecast_list = $xml->xpath(“/xml_api_reply/weather/forecast_conditions”);

?>

<html>

<head>

<title>Weather realmente simple</title>

</head>

<body>

<h1><?php echo $information[0]->city[‘data’]; ?></h1>

<h2>Estado del Tiempo</h2>

<div>

<img src=”<?php echo ‘http://www.google.com‘ . $current[0]->icon[‘data’]?>” alt=”weather”?>

<span>

<?php echo $current[0]->temp_f[‘data’] ?>&deg; F,

<?php echo $current[0]->condition[‘data’] ?>

</span>

</div>

<h2>Pronóstico</h2>

<?php foreach ($forecast_list as $forecast) : ?>

<div>

<img src=”<?php echo ‘http://www.google.com‘ . $forecast->icon[‘data’]?>” alt=”weather”?>

<div><?php echo $forecast->day_of_week[‘data’]; ?></div>

<span>

<?php echo $forecast->low[‘data’] ?>&deg; F – <?php echo $forecast->high[‘data’] ?>&deg; F,

<?php echo $forecast->condition[‘data’] ?>

</span>

</div>

<?php endforeach ?>

</body>

</html>

Listo, probamos nuestro escript, bastante sencillo por cierto, para conocer el estado del tiempo de la ciudad especificada. En este Ejemplo, Puerto Plata. hermosa ciudad de la República Dominicana. Podemos cambiarla por el nombre de cualquier ciudad literal. Por Ejemplo:  Santiago o Santo Domingo. Así de simple.

Espero les sea de utilidad.

Y recuerden CODE IS POETRY!