Maestros del Web


Estás en Inicio / Editorial / Desarrollo Web

10.04.2008

Trabajando con la API de Facebook y JavaScript

En el Facebook Developer Garage de Madrid presentamos Demini y Searchmedia la aplicación de eDreams para Facebook Meet Your Friends. Queremos compartir aquí parte del desarrollo, para que le pueda ser útil a quien quiera desarrollar para Facebook.

Descripción

Meet Your Friends es una aplicación para compartir viajes entre amigos. Permite, por ejemplo:

  • Añadir un viaje que se va a hacer
  • Ver los viajes de tus amigos
  • Quedar con tus amigos en algún viaje
  • Intercambiar viajes
  • Reservar un vuelo o un hotel

Componentes

La aplicación se compone de tres puntos principales:

  • La red social de Facebook
  • Nuestro gestor de contenidos
  • Los mapas de google

Mediante Facebook obteníamos todas la gestión de usuarios y sus relaciones. Nuestro gestor de contenidos nos permite guardar de forma sencilla viajes, mensajes y citas. Y la API de google maps nos permite presentar de forma visualmente atractiva al usuario toda esta información.

Facebook

La red social de Facebook

Facebook aporta la siguiente funcionalidad básica para la aplicación:

  • Gestión de usuarios
  • Relaciones de amistad entre usuarios

Además, nos permite notificar a usuarios de la red de amigos los próximos viajes que vamos a realizar. Podemos hacerlo escribiendo en el feed y en el minifeed del usuario, donde escribimos una entrada cada vez que el usuario crea un viaje. También, tenemos la parte de la aplicación en el perfil del usuario. Ahí presentamos un mapa con el próximo viaje que realizará el usuario.

Facebook

Gestor de contenidos Inmedia

Nuestro gestor de contenidos nos permite tipos de contenidos estructurados. En esta aplicación definimos viajes, citas y mensajes.

Mediante una API AJAX, podemos realizar el almacenamiento, recuperación y cambio de estado de los contenidos de un usuarios. Por ejemplo, para el caso de los viajes:

  • Guardar un viaje
  • Recuperar viajes del usuario
  • Recuperar viajes de los amigos

Todo el almacenamiento de datos se hace mediante llamadas a Inmedia.

Los mapas de Google

En lo relativo a los mapas, necesitábamos una API que nos permitiese:

Elección de la API

Para realizar aplicaciones para Facebook, es necesario poder acceder a su API REST de algún modo. Esta API ofrece los métodos necesarios para obtener toda la información de la red social del usuario que está ejecutando la aplicación. En nuestro caso nos interesaba acceder a su información personal, su red de amigos y a su perfil.

En la zona de recursos de Facebook se ofrecen dos APIs oficiales para el desarrollo, una en PHP y otra en java. En nuestro caso decidimos optamos por una solución alternativa, que era utilizar la API javascript.

Queríamos obtener una aplicación muy dinámica, en la que mediante AJAX pudiésemos cargar tanto la información de la red social del usuario, como aquella relativa a sus viajes (que guarda nuestro gestor de contenidos).

Utilizando la API Javascript

Para poder utilizar esta API, es necesario añadir la referencia al fichero javascript FacebookApi.debug.js. Además, en el directorio donde se aloje la página web es necesario copiar el fichero xd_receiver.htm.

La primera sentencia a incluir, es la inicialización del objeto api. Se hace con el siguiente código:

var api;
api = new FB.ApiClient('CLAVE DE LA APLICACION', '/xd_receiver.htm', null);

Como segundo paso, es necesario asegurar que el cliente ha hecho login, y que se cargue su identificador de sesión:

api.requireLogin(function(exception) {
		// Código javascript a ejecutar a continuación
	});

En todas las llamadas a la API, se puede pasar una función, que es llamada después de la ejecución del método de la API. Es necesario ir apilando así las llamadas javascript, si queremos asegurarnos de que su ejecución será correcta (existe la posibilidad de hacerlo mediante secuenciadores, pero en nuestro caso no la utilizamos).

Una vez hecho el login, ya podemos acceder al resto de funciones de la API. Por ejemplo, para recuperar la información del usuario:

api.users_getInfo(api.get_session().uid, ['first_name', 'last_name'], function(oUserInfo, exception){
		// Nombre: oUserInfo[0]. first_name
	});

Y para recoger los amigos del usuario que tienen la aplicación y sus datos:

api.friends_getAppUsers(function(result, exception) {
	api.users_getInfo(result, ['first_name', 'last_name', 'pic_square'], function(result2, exception) {
		for (var i = 0; i < result2.length; i++) {
			// Nombre: result2[0].first_name
		}
	});
});

Utilizando la api de este modo, nos hemos encontrado con dos problemas principales. Por una parte, la escasez de documentación. Hay que basarse mucho en la prueba y error (inestimable la ayuda del firebug).

Y por otra parte, las llamadas suelen ser costosas temporalmente para una aplicación web. Es muy recomendable plantearse siempre si realmente es necesaria una llamada, intentando realizar las mínimas posibles.

Más funciones javascript

Otras funciones que hemos utilizado son:

  • api.feed_publishStoryToUser: nos sirve para publicar en el News Feed del usuario. Publicamos allí los viajes que da de alta el usuario.
  • api.feed_publishActionOfUser: nos sirve para publicar en el Mini Feed del usuario. Publicamos allí los viajes que da de alta el usuario.
  • api.friends_get: permite recuperar un listado con todos los amigos del usuario, tengan o no la aplicación. La utilizamos para presentarle al usuario el listado con sus amigos para que los puedan invitar.
  • api.notifications_send:envía una notificación al usuario. La utilizamos para enviar las invitaciones

Estructura de la aplicación

La aplicación se compone de los siguientes ficheros:

  • fm_mapa.htm: es el fichero que se carga en el iframe de facebook. Contiene el layout básico de la aplicación. Los contenidos se cargan mediante llamadas a la API del gestor de contenidos, y accediendo al DOM de la página.
  • fb_fyf.js: fichero con las funciones javascript para integración con facebook, acceso a google maps y recuperación de datos desde Inmedia.
  • fb_fyf_forms.js: fichero con las funciones javascript para el pintado de formularios (mediante el DOM) y el almacenamiento de datos en Inmedia.
  • fb_social.js: encapsula las llamadas javascript a la API AJAX de Inmdia. Se utiliza desde el fb_fyf.js y el fb_fyf_forms.js.

Alojamiento

La aplicación se aloja en nuestros propios servidores (Windows 2003 Server, IIS 6.0). A la hora de crear una aplicación, podemos elegir si va a funcionar mediante FBML o mediante un iFrame. En nuestro caso optamos por el iFrame.

Por una parte, no utilizar el FBML nos perjudicaba a la hora de mostrar las pantallas típicas de Facebook. Pero por otra parte, trabajar con el iFrame nos daba más libertad a la hora de desarrollar, y accediendo a la API podíamos recoger toda la información que necesitábamos.

En la configuración, se le especifica también la url a la que tiene que llamar Facebook en el iFrame (callback url).

facebook

Resultado

Finalmente, queríamos mostraros el resultado, invitando a probarlo:

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 4.67 de 5)
Loading ... Loading ...
José Altava

Sobre el autor

José Altava
Arquitecto Software en Demini, especializado en el desarrollo de soluciones Web.

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

11 comentarios en total.

  1. InesBy 10.04.2008 - 05:03 - #

    Desde luego ver post de este tipo, puede hasta alegrarle a uno, más que el día la semana, ya que precisamente me interesaba un tema de este tipo y creo que con esto voy a dar por resuelto el problema.

    Muchas gracias,…¡¡¡¡
    Dpto. Comunicación

  2. Juan Manuel Lemus 10.04.2008 - 07:51 - #

    Felicitaciones. Muy buen artículo. Quedaría profundizar un poco más sobre el FBML para estar completos.

  3. Rodrigo Olave 10.04.2008 - 08:05 - #

    Exelente tema, bastaba ya un poco de informacion clara al respecto.

  4. cvander 10.04.2008 - 20:40 - #

    Jose, muchas gracias por compartirnos la experiencia de desarrollar para facebook, con esos pequeños detalles que sin duda ayudan a los que también queremos hacer cosas en dicha plataforma.

  5. phreakaholic 17.04.2008 - 07:53 - #

    muchas gracias… :D

  6. Luis Miguel Martín 25.04.2008 - 04:58 - #

    Un gran trabajo, José!
    Un placer haber trabajado a tu lado…

  7. Cesar 05.05.2008 - 10:05 - #

    Aqui podemos ver que existen bastantes maneras de poder desarrollar una aplicacion para facebook, pero tengo que un problema y no se si alguien puede ayudarme, deseo usar estas funciones feed_publishStoryToUser,feed_publishActionOfUser y las relacionadas a ellas, no logro que me realizen la funcion que deben realizar, si alguien tiene un ejemplo de codigo que use estas funciones, les agradeciria mucho si me la hacen conocer. gracias.

  8. osmanpun 11.05.2008 - 22:27 - #

    Orale cvander, gracias x leer mi blog. Sinceramente es un honor y vamos a seguir promoviendo la tecnologia en Guatemala

  9. Daniel Oscar Zamo 26.05.2008 - 05:28 - #

    He subido una aplicacion a facebook, funcional claro esta.
    El tema es que he realizado el submit para que se publique en el directorio de aplicaciones de facebook y no logro subirla, actualmente hacen 6 dias desde que le di a submit y no recibo contestacion.
    Gracias desde ya un saludo a todos

  10. luz gonzalez 10.08.2008 - 23:12 - #

    me encantarias que crearanuna manera de poder añadir layout a nuestras paginas de perfil, como lo hacemos en my space. me gustaria que me ayuden al respecto.
    gracias

  11. elQuique 13.08.2008 - 14:26 - #

    Excelente, muy buen aporte José sin dudas nos da un buen panorama de esta atractiva plataforma.

Deja tu Comentario


Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.


-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress