Wurfl y php: programando webs para dispositivos móviles

Ahora entiendo por qué dice mi padre que he conseguido hacer una web en la que no consigue entender nada… menudo titulito.

Hace poco recomendaba la web pc.dev.mobi como centro de recursos de gran interés para desarrolladores de webs para dispositivos móviles. Navegando por ella he ido extrayendo lo que explico en este post: como utilizar wurfl y php para hacer webs adaptadas a dispositivos móviles.

¿Wurfl?

Menudo palabro. Wurfl es un fichero xml sostenido por un proyecto de código abierto donde se detallan las características y capacidades de la gran mayoría de dispositivos móviles existentes en el mercado.

En este fichero se proporcionan características como, por ejemplo: características generales del dipositivo (modelo, marca…), características de la pantalla (ancho, alto, filas, columnas…), capacidad de procesamiento de imágenes (soporte para gif, flash lite, colores de pantalal…). Podemos saber cosas tan interesantes como el tamaño máximo de url que puede procesar ;).

En base a cualquiera de estas características podemos decidir qué mostrar en una web, redireccionar al usuario a una página específica o que lenguaje de marcado utilizar.

Al ser un fichero xml podemos trabajar desde distintos lenguajes de programación: java, php, ruby, perl, python, .net… etc.. Además existen ya librerías para muchos de estos lenguajes.

PHP es el lenguaje que yo suelo utilzar para desarrollar mis webs y el punto siguiente explica cómo utilizar wurfl con la librería que Andrea Trasatti ha desarrollado.

Utilizando Wurfl con php
La librería se compone de tres ficheros:

  • wurfl_parser.php: parsea el fichero xml y crea un Array para trabajar con todos los datos.
  • wurfl_class.php: permite generar un objeto php a partir del dispositivo deseado y proporciona métodos para acceder a cualquiera de sus características (ej.: $miDispositivo->getDeviceCapability(’gif’) devolverá true si es capaz de trabajar con ficheros gif )
  • wurfl_config.php: fichero de configuración. Rutas, sistema de cacheo, etc..

Un ejemplo muy simple

El presente ejemplo lo he extraido literalmente del artículo de Andrea Trasatti. No tiene nada de especial y se explica por si mismo aunque destacaré algunos detalles para neófitos.

<?
require_once('/my/path/to/wurfl_config.php');
require_once(WURFL_CLASS_FILE);
$wurflObj = new wurfl_class();

$wurflObj->GetDeviceCapabilitiesFromAgent($_SERVER["HTTP_USER_AGENT"]);

if (  $wurflObj->getDeviceCapability('is_wireless_device') ) {
header("Location:  http://desktop.example.mobi/");
} else {
header("Location:  http://mobile.example.mobi/");
}
?>

Primero incluimos el fichero de configuracion y el la clase:

require_once('/my/path/to/wurfl_config.php');
require_once(WURFL_CLASS_FILE);

creamos un nuevo objeto de la clase wurlf y lo llamamos wurlfObj:

$wurflObj = new wurfl_class();

Ya le podemos añadir al objeto las características del agente de usuario con el que el visitante esté accediendo. $_SERVER["HTTP_USER_AGENT"] detecta el agente de usuario en php, al pasárselo como
parámetro al método GetDeviceCapabilitiesFromAgent() le indicamos que tiene que obtener las características de ese dispositivo:

$wurflObj->GetDeviceCapabilitiesFromAgent($_SERVER["HTTP_USER_AGENT"]);

ya tenemos un objeto que además contiene todos las características del dispositivo con el que ha accedido el usuario. Ahora utilizamos el método getDeviceCapability() pasándole como parámetro la característica is_wireless_device’ que nos si el dispositivo es wireless… se considera que tanto PDAs como teléfonos móviles lo son.

con ese dato podemos hacer un condicional como en este es un ejemplo en el que redirige a versionesdistintas de una misma página, pero vamos… a partir de aquí todo queda en la imaginación del que programe

if (  $wurflObj->getDeviceCapability('is_wireless_device') ) {
header("Location:  http://desktop.example.mobi/");
} else {
header("Location:  http://mobile.example.mobi/");
}

Un ejemplo real

En http://www.sidin.es/wurlf.php he hecho un pequeño ejemplo. Lógicamente si accedes desde un navegador web no verás la versión para dispositivos móviles, pero se detallan algunas soluciones.

Recursos


3 comentarios a esta entrada

Muy interesante. Estos artículos se agradecen.

Genial la extension para Firefox, la he probado usando este agente:

Y la página de ejemplo lo detecta perfectamente dandome las caracteristicas de la BlackBerry 7520.

Vaya no han salido los datos del agente:

Description=”BlackBerry (Google WAP)” Useragent=”BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/5.0.3.3 UP.Link/5.1.2.12 (Google WAP Proxy/1.0)”
Appname=”"
Appversion=”"
Platform=”"
Vendor=”"
Vendorsub=”"

Hola.. muy buena la explicacion de como empezar a aplicar wurfl, pero tengo un problema… hago todo estos pasos pero cuando ingreso la url en mi emulador de celular me dice esto:
“the id generic is not present in wurfl_agents”
espero que sepas que puede ser.

Saludos!

Leave a Reply