ShowMe

De Open movilforum wiki

Tabla de contenidos

[editar] ¿Qué es ShowMe?

ShowMe es una aplicación mashup que proporciona servicios orientados al ocio y turismo a usuarios de dispositivos móviles. La idea es que el usuario envíe en un mensaje con su localización actual y qué información quiere obtener, y la aplicación le contesta con un mensaje que contiene un mapa con los sitios que él ha solicitado ya marcados.

Actualmente, ShowMe proporciona los siguientes servicios:

  • Ocio: busca locales comerciales y de ocio (restaurantes, farmacias, etc).
  • Eventos: busca eventos que se van a celebrar, o se están celebrando ya, próximamente en el lugar indicado (conciertos, exposiciones, etc.)
  • Turismo: busca lugares de interés próximos al lugar indicado (monumentos, edificios históricos, playas, etc.

ShowMe emplea las siguientes APIs:

  • Recepción de SMSs de Open MovilForum
  • Envío HTTP de MMS de Open MovilForum
  • Geolocalización de Google
  • Static Maps de Google
  • Upcoming de Yahoo
  • Wikipedia Geocoding de Geonames
  • Búsqueda de sitios de 11870.com

A excepción de la librería para la API de 11870, todas las librerías para el manejo de estas APIs han sido desarrolladas para el proyecto.

[editar] ¿Cómo funciona?

El proceso es el siguiente:

  1. Se recibe un mensaje del usuario (ya sea SMS con la API de Recepción de SMS de Open Movilforum o un e-mail utilizando GMail).
  2. Se geolocaliza (con la API de Google Maps) la dirección postal indicada en el mensaje, para obtener sus coordenadas geográficas.
  3. Se produce una búsqueda para obtener una lista de localizaciones con las que formar el mapa. En función de la palabra clave indicada en el mensaje, se selecciona un servicio u otro:
    • Ocio: se llama a la API de 11870.
    • Eventos: se llama a la API de Yahoo! Upcoming.
    • Turismo: se llama a la API de GeoNames.
  4. Con la lista de localizaciones, se construye un mapa gracias a la API de Google Maps.
  5. Se le envía de vuelta un mensaje al usuario con una imagen adjunta del mapa. Este mensaje puede ser un MMS (API de Envío HTTP de MMS de Open Movilforum) o un e-mail (librería GMail), en función de si el usuario solicitó el servicio mediante SMS o e-mail.

La sintaxis de los mensajes enviados por el usuario debe ser la siguiente:

  • Ocio: OCIO locales: direccion (ej: OCIO restaurantes baratos: plaza de los luceros, alicante)
  • Turismo: TURISMO direccion (ej: TURISMO alicante)
  • Eventos: EVENTOS direccion (ej: EVENTOS barcelona)

[editar] Detalles de implementación

La aplicación está programada con Ruby, por ser un lenguaje orientado a objetos legible y conciso.

[editar] Sobre la recepción de mensajes

La recepción de mensajes se realiza mediante la API de recepción de SMSs de Open Movilforum. Esta API nos proporciona un número de móvil que va ligado a una dirección de e-mail a la que se envían los SMS. Por lo tanto, la API nos permite acceder a los SMS como si fuesen e-mails.

La técnica habitual para explotar esta API es monitorizar la cuenta de correo cada cierto tiempo para comprobar si hay mensajes que procesar. ShowMe sin embargo ofrece tres posibilidades para usar esta API:

  • Monitorizar una cuenta de GMail.
  • Monitorizar una cuenta de correo mediante POP3.
  • Arrancar en el puerto 25 un pequeño servidor SMTP.

Mientras que las dos primeras soluciones son muy buenas para hacer pruebas, no son una solución robusta de cara a montar servicios en producción. Es debido a esta inconveniencia que ShowMe funciona por defecto arrancando un pequeño servidor SMTP en el puerto 25 que se encarga de recibir los SMS en tiempo real en lugar de examinar una cuenta de correo cada cierto tiempo.

Además, el código dedicado a la recepción de está totalmente desligado de la aplicación ShowMe. Los servicios siguen un patrón Observador pudiendo suscribir cualquier observador al servicio de recogida de mensajes (en nuestro caso el motor de procesamiento de ShowMe).

[editar] Sobre el procesamiento

El procesamiento es el núcleo de la aplicación, y es la que se encarga de procesar el mensaje de entrada al sistema, y de generar el mensaje de salida.

Para ello, cada vez que llega un mensaje de entrada, un proxy analiza el texto de mensaje y extrae la palabra clave. En función de la palabra clave, se llama a un servicio con el mismo nombre. Por ejemplo, un mensaje recibido con el texto OCIO restaurantes: plaza luceros alicante identificaría la palabra clave OCIO y llamaría a ese servicio.

Todos los servicios tienen un modus operandi similar:

  • Geolocalizan la dirección
  • Llaman a la API correspondiente, a la que proporcionan las coordenadas obtenidas anteriormente, y reciben una lista con localizaciones relevantes.
  • Construyen un mapa con esas localizaciones y la API de Google Maps.
  • Proporcionan un mensaje al módulo de envío de mensajes.

[editar] Sobre el envío de mensajes

Los mensajes con el mapa se pueden enviar tanto por e-mail (utilizando una librería para GMail) como por MMS.

Dado que la API para envío HTTP de MMS de Open Movilforum ya no funciona (la web que proporciona el servicio ha cambiado), se ha optado por implementar una versión propia de esa API. Gracias a la librería Mechanize para Ruby, se automatiza el comportamiento de un visitante humano a la web y se realizan las mismas acciones (rellenar campos de formulario, clicks del ratón, etc.) para envíar un MMS con una imagen adjunta.

Sin embargo, dado que la nueva web de Movistar es reciente, parece que a día de hoy (11 de mayo de 2008) todavía están haciendo cambios (incluso el servidor estuvo caído por momentos), así que es posible que falle (en concreto, hace dos días funcionaba y ahora el mismo código en ocasiones da un Error 500)