Saltar la navegación

4.3.- Aplicación web híbrida, tiempo y localización.

Vamos a crear una aplicación sencilla que utilice los dos servicios web que acabas de ver de Bing Maps y Yahoo! Weather. Se trata simplemente de ver cómo se pueden utilizar desde PHP. Al igual que en Yahoo! Weather, Bing Maps ofrece información de como recuperar los datos en PHP, esa información la tienes disponible en el enlace siguiente: Bing Maps y PHP.

Imagen de una captura de pantalla del navegador Firefox, en la que se muestra una parte de la aplicación web híbrida. La pantalla tiene dos cuadros de texto para introducir latitud y longitud, dos botones con el texto “Ver dirección” y “Ver Tiempo” respectivamente, y otros seis cuadros de texto para ver los datos de la dirección, ciudad, país, tiempo, temperatura y humedad.
Captura de pantalla Firefox (Elaboración propia)

El formulario está dividido en dos zonas. En la superior, el usuario podrá introducir unas coordenadas (latitud y longitud) y en la inferior los datos de una dirección y el tiempo en la misma. Se trata de utilizar los dos botones del formulario para realizar consultas a ambos servicios, de tal forma que:

  • Al utilizar el botón "Ver dirección", se realiza una consulta inversa al servicio "Find a Location by Point" de Bing Maps y se cubren los datos de la zona inferior del formulario relativos a Dirección Ciudad y País con la respuesta obtenida.
  • Al pulsar sobre el botón "Ver Tiempo" se lanza una petición a Yahoo! Weather y se cubren los campos de Tiempo, Temperatura y Humedad.

Para realizar las llamadas mediante Ajax utilizarás la librería Xajax, vista en la unidad anterior. En ambas peticiones hemos recuperado los datos en formato JSON, para eso hemos utilizado la función PHP : "json_decode($resp, true)"  (el parámetro "true" es para convertir los datos JSON en un array asociativo)

La función que se encarga de realizar la llamada a Yahoo! Weather incluye el siguiente código:

function getTiempo($la, $lo)
{
    $resp = new xajaxResponse();
    if (!validar($la, $lo)) {
        $resp->setReturnValue(false);
        return $resp;
    }
    $datos = new Weather($la, $lo);
    $tiempo = $datos->getTiempo();
    $temp = $tiempo['condition']['temperature'];
    $humedad = $tiempo['atmosphere']['humidity'];
    $tiem = $tiempo['condition']['text'];
    $resp->assign('tie', 'value', $tiem);
    $resp->assign('tem', 'value', $temp . "º");
    $resp->assign('hum', 'value', $humedad . "%");
    $resp->setReturnValue(true);
    return $resp;
}

Y la que utiliza Bing Maps para obtener la dirección de unas coordenadas (también en formato JSON):

function getLocalizacion($la, $lo)
{
    $resp = new xajaxResponse();
    if (!validar($la, $lo)) {
        $resp->setReturnValue(false);
        return $resp;
    }
    $datos = new Weather($la, $lo);
    $ubicacion = $datos->getLocalizacion();
    $dir = $ubicacion['addressLine'];
    $ciudad = $ubicacion['locality'];
    $pais = $ubicacion['countryRegion'];
    $resp->assign('dir', 'value', $dir);
    $resp->assign('ciu', 'value', $ciudad);
    $resp->assign('pai', 'value', $pais);
    $resp->setReturnValue(true);
    return $resp;
}

Ambas funciones se apoyan en la clase Weahter (que tendrás que implementar) y sus métodos que son los que se encargan de recuperar en formato JSON los datos pedidos. Para esta clase te puedes ayudar en la documentación de como trabajar con PHP en Bing Maps y Yahoo! Weather.

Examina el código completo de la aplicación que se incluye en el siguiente fichero. Asegúrate de ajustar la ruta a la librería Xajax y de configurar tus propias credenciales para que todo funcione:

Código de la aplicación. (zip - 0,19 MB) 

HTML5 incluye entre sus nuevas características una API de geolocalización, que permite a las aplicaciones web utilizar código JavaScript para obtener las coordenadas en que se encuentra el usuario. La aplicación del código anterior utiliza esa funcionalidad. Para conocer más detalles sobre el funcionamiento de la geolocalización en HTML5 y ver cómo se puede integrar con Google Maps, puedes consultar la siguiente página web.

Geolocalización con HTML5.