martes, 28 de diciembre de 2010

Social Graph Facebook: Acceso a datos de usuarios

Esta última semana he estado trabajando con el Social Graph de Facebook para agregar alguna funcionalidad de Facebook a la web en la que trabajo. Voy a postear un pequeño resumen de lo que he encontrado, dividido en varios post.

El core de Facebook es el social graph. La API graph presenta una vista sobre el social graph de Facebook, donde se representan los objetos del graph (ej. gente, fotos, eventos y páginas), y las conexiones entre ellos (ej. relaciones entre amigos, contenido compartido, y tags de fotos).

Cada objeto en el social graph tiene un ID único. Se puede acceder a las propiedades de cada objeto mediante ese ID.

Por ejemplo, si accedemos al muro de nuestro facebook y observamos la url, podemos encontrar nuestro propio id:

http://www.facebook.com/profile.php?id=100000602488758&sk=wall

Si hacemos la petición siguiente obtenemos nuestra información pública con el ID que tenemos:

https://graph.facebook.com/100000602488758

{
"id": "100000602488758",
"name": "Inma Tecnico Mxm",
"first_name": "Inma",
"last_name": "Tecnico Mxm",
"link": "http://www.facebook.com/people/Inma-Tecnico-Mxm/100000602488758",
"gender": "female",
"locale": "es_ES"
}

La foto del usuario es información pública y podemos obtenerla con la siguiente petición:

https://graph.facebook.com/100000602488758/picture/

Podemos inlcuir el parámetro type, para elegir el tamaño:

https://graph.facebook.com/100000602488758/picture/?type=small

Los posibles valores son: square (50x50), small (50x?) y large (200x?).

Para acceder al resto de la información pública necesitamos un access_token y autorización del usuario.

Si necesitamos otra información específica de un usuario, como su dirección de correo o el historial de trabajo, se requiere una autorización con “extended permissions”.

Permisos

Existen tres niveles de permisos: acceso a la información básica del usuario, acceso a datos privados del usuario, y acceso a los amigos del usuario.

Acceso a la información básica

Con la autorización para el acceso a la información básica del usuario tenemos el nombre, la foto de perfil, el sexo y la lista de amigos de este usuario.

Para solicitar permisos a un usuario para acceder a su información pública necesitamos una aplicación en facebook, y una página web donde redirigirnos una vez haya obtenido el permiso.

En los settings de la aplicación obtenemos el id de la aplicación, y le indicaremos la página de redirección (Apartado Facebook Integration -> Canvas URL).

La canvas url es una url del tipo http://www.ImmaDeveloper.com/callbackFacebook/, que redirecciona al archivo que hayamos creado en nuestro servidor, para la vuelta de la request de los permisos.

Con estos datos podemos solicitar permiso a los datos públicos con la siguiente url:

http://graph.facebook.com/oauth/authorize?client_id=1740266092710&redirect_uri=http://www.InmaDeveloper.com/callbackFacebook/

Si el usuario nos concede el permiso nos llegará la variable code con un valor:

http://www.ImmaDeveloper.com/callbackFacebook?code=2.zQNpk1ahT30YbHWTQ__.3600.92940000-707637371%257CD4Gey5ISqUGacG2JWvo4

Si el usuario no nos lo concede, nos llegan parámetros con el error.

http://www. ImmaDeveloper.com/callbackFacebook?error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request.

Si tenemos permiso del usuario podemos obtener el access_token con la siguiente url (el client secret lo tenemos en las settings de la aplicación, junto al id de la aplicación):

https://graph.facebook.com/oauth/access_token?client_id=1740266092710&redirect_uri=http://www. ImmaDeveloper.com/callbackFacebook/&client_secret=31111f39c0bd86a34affdc6&code=2.zQNpk1ahT30YbHWTQ__.3600.92940000-707637371%257CD4Gey5ISqUGacG2JWvo4

Con el access_token que nos devuelve esta petición, podemos acceder a la información pública del usuario de la siguiente forma:

https://graph.facebook.com/100000602488758?access_token=17402282710|2.zQNpmlaX1ahT30YbHWTQ__.3600.140000-707637371|fGOfoWV5j5CF70NWzjiI8&expires=6470

Y el resultado sería el siguiente:

{
"id": "707637371",
"name": "Inma Tecnico Mxm",
"first_name": "Inma",
"last_name": "Tecnico Mxm",
"link": "http://www.facebook.com/profile.php?id=100000602488758",
"hometown":
{
"id": "106287062743373",
"name": "Barcelona, Spain"
},
"timezone": 1,
"locale": "en_US",
"verified": true,
"updated_time": "2010-12-05T12:36:08+0000"
}

(En este punto debo explicar que el dominio y los valores de los parámetros están modificados para proteger mi propio perfil, así que las url no funcionan. Se debe probar con un usuario y una aplicación propias :P).

Acceso a la información privada

Para conseguir el acceso a datos privados del usuario tenemos que hacer una petición de autorización al usuario con la lista de los permisos requeridos.

Por ejemplo, si necesitamos el email del usuario, la ventana de autorización sería:


En el caso de que solicitaramos más permisos, se vería la lista completa en la ventana.

Se le añade a la url de solicitud de permisos el parámetro scope, y como valor la lista de permisos que queramos solicitar separados por comas.

En el ejemplo solicitamos el email del usuario. La url sería:

https://graph.facebook.com/oauth/authorize?client_id=1740266092710&redirect_uri=http://www. ImmaDeveloper.com/callbackFacebook/&scope=email

Si el usuario nos autoriza nos devolvería un valor en la variable code, y conseguiríamos el access_token como lo hemos hecho para los permisos de la información básica.

Y en el resultado obtendríamos incluido el email:

{
"id": "707637371",
"name": "Inma Tecnico Mxm",
"first_name": "Inma",
"last_name": "Tecnico Mxm",
"link": "http://www.facebook.com/profile.php?id=100000602488758",
"hometown":
{
"id": "106287062743373",
"name": "Barcelona, Spain"
},
"email": "inmaTecnico@gmail.com",
"timezone": 1,
"locale": "en_US",
"verified": true,
"updated_time": "2010-12-05T12:36:08+0000"
}

Las tablas con las extended permissions están en http://developers.facebook.com/docs/authentication/permissions

Debemos tener en cuenta que las aplicaciones que más permisos solicitan, tienden a tener un menor rate de clicks en la ventana de autorización. Es por esto, que es conveniente solicitar solo los permisos necesarios para ese momento, siempre se pueden pedir otros permisos más tarde.


En este post he explicado como obtener información pública y privada de un usuario, muy útil si queremos incorporar datos en nuestra web de usuarios. Por ejemplo, yo lo utilizaré para incorporar la foto de facebook en el alta de nuestros usuarios.

En la siguiente entrada explicaré como solicitar permiso para hacer un post en el muro de un usuario desde nuestra web (con su permiso, claro ;)), y como utilizar los datos de facebook para el alta en nuestra web.

Link relacionado: http://developers.facebook.com/docs/authentication

miércoles, 15 de diciembre de 2010

Inicio Blog Desarrollo Web

Hola,

Empiezo este blog con la idea de escribir sobre proyectos, ideas y noticias que me surjan en el trabajo.

Soy ingeniera superior informática, y trabajo como programadora en una web de Grupo Intercom.

A priori puede parecer que una web no tiene mucho trabajo, al final es mostrar datos guardados en una BD, no? Pero nada más lejos de la realidad. En este momento en el que Internet es uno de los medios de comunicación más usados hay que estar a la última, y eso requiere investigación y desarrollo.

=)