Ejemplo de API Weatherbug con PHP

Valoración del artículo:
Ahora veremos un ejemplo de código para realizar una llamada al API y procesar su información para mostrarla en una página web, con programación PHP.
Publicado: 05/8/09
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Pasamos pues a la parte más interesante de este artículo, en la que veremos por fin un código para realizar una llamada al servicio web del API y luego su procesamiento para mostrar la información meteorológica en tu página web.

En este ejemplo utilizamos PHP para recibir el XML que nos devuelve el API Weatherbug. Procesaremos ese XML por medio de las funciones propias de PHP y una función de tratamiento de XML de un tercero, que nos facilitará mucho la vida para procesar la respuesta.

En nuestro ejemplo, vamos a crear un recuadro con la información meteorológica de la ciudad de Madrid, indicando su longitud y latitud. Recibiremos un achivo XML que contendrá los datos con el sistema métrico decimal. Para ello guardaremos en una variable los datos del archivo XML con la función file_get_contents() de la siguiente manera:

//clave-api-weatherbug
$api_code='AQUI-TU-CLAVE-API';
// obtener datos
$data = file_get_contents('http://'.$api_code.'.api.wxbug.net/getLiveWeatherRSS.aspx?ACode='.$api_code.'&lat=40.4165020941502&long=-3.70256423950195&UnitType=1&OutputType=1');

Después guardaremos la información del documento XML en un array asociativo multidimensional para poder acceder más fácilmente a los datos que luego necesitaremos. Para ello vamos a utilizar una función que hay en la página http://www.bin-co.com/php/scripts/xml2array/. Guardaremos el código de la función en un archivo a parte.

//incluimos el archivo con la funcion 'xml2array.php'
include('xml2array.php');
//guardo el archivo xml en un array
$result = xml2array($data);

Ya sólo nos queda buscar los datos del array que nos interese mostrar. Para ver la estructura del array podemos utilizar la siguiente función y así buscar los datos que nos interesan:

echo "<pre>";
print_r($result);
echo "</pre>";

Por ejemplo, vamos a buscar el tiempo actual, la temperatura, el día y la hora:

//fecha
$anio=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:year_attr']['number'];
$mes=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:month_attr']['number'];
$dia=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:day_attr']['number'];
//hora
$hora=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:hour_attr']['hour-24'];
$minuto=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:minute_attr']['number'];
//tiempo
$tiempo=$result['aws:weather']['aws:ob']['aws:current-condition'];
$tiempo_ico=$result['aws:weather']['aws:ob']['aws:current-condition_attr']['icon'];

Y creamos el recuadro con la información meteorológica actual de Madrid con los datos obtenidos del array.

<div style="margin: 0px 0px 10px; width: 140px;">
<div align="center" style="font-weight: bolder;">
   Tiempo de Madrid
</div>
<div >
   <div align="center" style=" width: 120px;">
      <?echo $dia.'/'.$mes.'/'.$anio.' '.$hora.':'.$minuto?>
      <p>
      <img src="<?echo $tiempo_ico?>" alt="" border="0">
      <p>
      <?echo $tiempo?>
      <p>
   <span style="font-size:28px;"><strong><?echo round($tem, 0).' '.$tem_unid?></strong></span>
   </div>

</div>
</div>

Para terminar vamos a mostrar el código del ejemplo completo.

<?
//clave-api-weatherbug
$api_code='AQUI-TU-CLAVE-API';
// obtener datos
$data = file_get_contents('http://'.$api_code.'.api.wxbug.net/getLiveWeatherRSS.aspx?ACode='.$api_code.'&lat=40.4165020941502&long=-3.70256423950195&UnitType=1&OutputType=1');

//incluimos el archivo con la funcion 'xml2array.php'
include('xml2array.php');
//guardo el archivo xml en un array
$result = xml2array($data);

//fecha
$anio=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:year_attr']['number'];
$mes=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:month_attr']['number'];
$dia=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:day_attr']['number'];
//hora
$hora=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:hour_attr']['hour-24'];
$minuto=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:minute_attr']['number'];
$segundo=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:second_attr']['number'];
//tiempo
$tiempo=$result['aws:weather']['aws:ob']['aws:current-condition'];
$tiempo_ico=$result['aws:weather']['aws:ob']['aws:current-condition_attr']['icon'];

?>
<div style="margin: 0px 0px 10px; width: 140px;">
<div align="center" style="font-weight: bolder;">
   Tiempo de Madrid
</div>
<div >
   <div align="center" style=" width: 120px;">
      <?echo $dia.'/'.$mes.'/'.$anio.' '.$hora.':'.$minuto?>
      <p>
      <img src="<?echo $tiempo_ico?>" alt="" border="0">
      <p>
      <?echo $tiempo?>
      <p>
   <span style="font-size:28px;"><strong><?echo round($tem, 0).' '.$tem_unid?></strong></span>
   </div>

</div>

Comentarios
Fueron enviados 4 comentarios al artículo
3 comentarios no revisados
1 comentario revisado:

DjMiki
Una ayuda
18/9/09
Muy buena esta API, Gracias GEMA, y pues muchachos, yo hice unas modificaciones y estuve mirando las variables de la API, y pues les pude poner la TEMPERATURA(MAXIMA Y MINIMA) Y HUMEDAD(MAXIMA Y MINIMA) y ahm quice poner la velocidad del viento pero por falta de tiempo no lo hice, pero si esta interesante pero al igual que MANUEL tambien me interesa saber eso de los dias siguientes o anteriores, bueno aunque en el API te dice que se puede un dia despues, osea el tiempo mañana, y eso esta en las variables, tu solo imprime el"$result" y alli veras, y bueno tambien que sea en español, pero como el sitio esta en ingles pues que mas da, aunque se pueden hacer varios IF, en fin, suerte aqui mi codigo muchachos, espero les ayude.

<?
//Les dejo mi codigo API by DjMiki
$api_code='A5351868562';
$data = file_get_contents('http://'.$api_code.'.api.wxbug.net/getLiveWeatherRSS.aspx?ACode='.$api_code.'&lat=-8.112370&long=-79.030022&UnitType=1&OutputType=1');

//incluimos el archivo con la funcion 'xml2array.php'
include('admincp/includes/xml2array.php');
//guardo el archivo xml en un array
$result = xml2array($data);
/* echo "<pre>";
print_r($result);
echo "</pre>"; */

//fecha
$anio=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:year_attr']['number'];
$mes=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:month_attr']['number'];
$dia=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:day_attr']['number'];
//hora
$hora=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:hour_attr']['number'];
$minuto=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:minute_attr']['number'];
$segundo=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:second_attr']['number'];
$format=$result['aws:weather']['aws:ob']['aws:ob-date']['aws:am-pm_attr']['abbrv'];
//tiempo
$tiempo=$result['aws:weather']['aws:ob']['aws:current-condition'];
$tiempo_ico=$result['aws:weather']['aws:ob']['aws:current-condition_attr']['icon'];
//Temperatura
$temp=$result['aws:weather']['aws:ob']['aws:temp'];
$tempunid=$result['aws:weather']['aws:ob']['aws:temp_attr']['units'];
$tempmax=$result['aws:weather']['aws:ob']['aws:temp-high'];
$tempmin=$result['aws:weather']['aws:ob']['aws:temp-low'];

//Humedad
$hum=$result['aws:weather']['aws:ob']['aws:humidity'];
$humunid=$result['aws:weather']['aws:ob']['aws:humidity_attr']['units'];
$hummax=$result['aws:weather']['aws:ob']['aws:humidity-high'];
$hummin=$result['aws:weather']['aws:ob']['aws:humidity-low'];
?><style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
<p><strong>Tiempo en Trujillo</strong></p>
<p><strong>Actualizado Hoy <br />
a las <? echo $hora.':'.$minuto.':'.$segundo.' '.$format ?> </strong></p>
<strong>Condicion de Clima: </strong><br />
<div style="margin-left:10px"><img src="<? echo $tiempo_ico ?>" alt="" border="0"><br />
<? echo $tiempo?></div>
<br />
<strong>Temperatura: <? echo round($temp, 0).' '.$tempunid ?></strong><br />
<div style="margin-left:10px"><strong>Maxima: </strong><? echo round($tempmax, 0).' '.$tempunid ?><br />
<strong>Minima: </strong><? echo round($tempmin, 0).' '.$tempunid ?></div><br />
<strong>Humedad:</strong><? echo round($hum, 0).' '.$humunid ?><br />
<div style="margin-left:10px"><strong>Maxima:</strong> <? echo round($hummax, 0).' '.$humunid ?><br />
<strong>Minima:</strong> <? echo round($hummin, 0).' '.$humunid ?><br /></div>

Manuales relacionados
Categorias relacionadas
El autor
Últimas noticias
Alojados en el grupo