You are on page 1of 38

Elementos

Facebook Application Programming Interface (API)


Api para el consumo de servicios ofrecidos por
facebook
Facebook Query Language (FQL)
Alterntiva a la API para consultar informacin a
facebook
Facebook Markup Language (FBML)
Permite representar la aplicacin en el canvas de
facebook
Facebook Javascript
Se basa en la metfora de callback
Conjunto de servicios web que definen una
interfaz de usuario para acceder a
los servicios del ncleo de facebook
Perfil
Amigos
Grupos
Eventos
Foto
Funcionalidades del portal
Login
Redireccin
Actualizacin de la vista
Etc.
Arquitectura REST
Ejemplo de acceso a la api de facebook
$user_data = array(name, pic, activities);
$current = $facebook->api_client->users_getInfo($user,
$user_data);
echo <p>Your name is {$current[0][name]} </p>;
echo <p>Here is what you look like: <img src={$current[0]
[pic]} /></p>;
Lenguaje parecido al HTML utilizado para
renderizar pginas dentro del canvas de
facebook
Subconjunto de HTML
Soporte para los elementos de script y style. Tiene
que ser Facebook Javascript.
Incluye varias extensiones propietarias para
desarrollar tareas especficas de una aplicacin
facebook.
Interfaz de facebook basada en SQL para
recuperar informacin de la red social.
Permite acceder a varias tablas de la base de
datos de facebook:
User
Friend
Group
Group_member
Event
Event_member
Photo
Album
Photo_tag
Restricciones:
Las sentencias SELECT slo pueden afectar a una tabla al
mismo tiempo
No se permiten JOINs
La consulta debe ser indexable
Prcticamente se puede hacer lo mismo mediante
FQL que con la API, pero con ciertas ventajas
Se reduce el ancho de banda necesario
La sobrecarga debida a la interpretacin del script.
Ejemplo:
$friends = $facebook->api_client->fql_query(SELECT uid, name
FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE
uid1=$user));
Lenguaje prximo al Javascript con
diferencias:
En lugar de usar un DOM estndar, tiene su propia
implementacin del DOM
Presenta algunas diferencias en la implementacin
de objetos.
Facebook interviene la ejecucin del script para
limitar el scope del script, por seguridad.
Vamos a crearnos un usuario todos en:
Google gmail (necesario para crear cuenta facebook)
Facebook
El login, que sea <nombre><inicial
ap1><inicial ap2>PAA
Ejemplo: DanielFLPAA@gmail.com

Nota: Facebook controla que slo exista una cuenta


por persona, y por lo tanto, por email tambin.
Agregamos todos como amigo al de al lado y
al profesor.
El primer paso ser registrar la aplicacin en
facebook
Con ello se obtiene:

API key
Secret key
Para ello, vamos a
www.facebook.com/developers.
y pinchamos en Configurar una nueva
aplicacin.
La llamamos LaprimeraaplicaciondeXXXXX y
aceptamos.
La aplicacin est generada, y nos habr

facilitado:
ApplicationId
Clave para la API
Clave secreta
Completamos la descripcin y guardamos los
cambios.
Ya tenemos la aplicacin dada de alta, ahora
hay que preparar el entorno donde la vamos a
desplegar.
Debemos tener un servidor de aplicaciones en
el que desplegaremos la aplicacin y ser
facebook el que redirija las peticiones al
mismo.
Para ello necesitaremos:
Servidor web com PHP (en nuestro caso, AppServer)
Las APIs de facebook que se pueden bajar de la
pgina de desarrollo y que nos permitirn consumir
la API remotar mediante servicios web.
Dentro de la carpeta c:/AppServ/www crear una
carpeta miprimeraapp
Descargar www.dflanvin.com/facebook-platform.zip
(esta versin de la API est modificada para poder
acceder a facebook desde detrs del proxy uniovi),
descomprimirlo en la carpeta recin creada de tal
forma que nos quede la siguiente estructura de
directorios.
C:/AppServ
www
miprimerapp
facebook-platform
Ahora vamos a desplegar la aplicacin de prueba de
facebook. Copiar el siguiente cdigo en un nuevo archivo
index.php, sustituyendo los cdigos por los adecuados.
<?php
error_reporting(E_ALL);
require_once './facebook-platform/client/facebook.php';

//Datos de la aplicacion
$appapikey = xxxxxxxxxxxxxxxxxxxxxxxxxx';
$appsecret = xxxxxxxxxxxxxxxxxxxxxxxxxx';

//Inicializamos la API
$facebook = new Facebook($appapikey, $appsecret);

echo Hola! Bienvenido a mi primer programa facebook!;


Ya tenemos nuestra primera aplicacin
preparada. Vamos a intentar acceder a ella
mediante
http://localhost/miprimeraapp

Qu ha sucedido?
Ha funcionado?
Por qu? No estamos necesitando nada que
requiera acceso a facebook.
Las aplicaciones facebook se han de acceder
siempre desde facebook, dado que si no se
encuentran fuera de su entorno de ejecucin
Al acceder directamente, la aplicacin no est

en sesin y por lo tanto no puede acceder a la


informacin que necesita.
Tenemos que decirle a facebook en qu url

debe delegar las peticiones que le lleguen


para la aplicacin que estamos desarrollando.
Para ello, nos vamos a la pgina de la
aplicacin y pinchamos en lienzo.
Los datos imprescindibles que tenemos que

aportar son:
URL Pgina Base
http://apps.facebook.com/<nombre>
Canvas Callback URL
http://xxx.xxx.xxx.xxx/miprimerapp
Mtodo render: FBML (nos permite utilizar las
etiquetas <fb/>)
Ya estamos listos para acceder por primera
vez a nuestra aplicacin facebook.
La url estar compuesta por la cadena que

comparten todas las apps facebook ms el


nombre que le hayamos puesto en el campo
URL Base
Accedemos a

http://apps.facebook.com/<nombre>/
Hasta ahora nuestra aplicacin se encuentra
abierta a todos los usuarios, se encuentren o
no logueados en facebook.
Para probarlo, abrir un navegador diferente y

acceder a la url de la aplicacin


Vamos a extender la aplicacin para que exija

que el usuario que la ejecute est logueado, y


podamos as acceder a su perfl y dems
informacin.
En primer lugar, vamos a obligar a que el
usuario est logueado. Para ello:
$user_id = $facebook->require_login();
Intenamos de nuevo acceder a la aplicacin
sin loguearnos. Qu sucede?
Realizamos ahora la siguiente modificacin y

probamos:
echo "Hola <fb:name uid=\"$user_id\" useyou=\"false\" />!
Bienvenidos a mi primer programa facebook!";
En la wiki de desarrolladores facebook
(http://wiki.developers.facebook.com/index.
php/Main_Page) tenemos las referencias a
todas las funciones de la API que podemos
utilizar:

http://wiki.developers.facebook.com/index.p
hp/API
Estn con una nomenclatura genrica puesto

que se ofrecen en distintos lenguajes.


Vamos a utilizar algunas de las funciones del
grupo friends de la API.
La funcin friends.get devuelve los

identificadores de los amigos del usuario


acutal de facebook.
Pasado a php, la forma de invocarla sera:
$facebook->api_client->friends_get();
Que devuelve un array con los identificadores
de cada uno de los amigos del usuario actual.
Vamos a listar los identificadores de todos los
amigos del usuario actual de facebook. Para
eso:
$friends = $facebook->api_client->friends_get();
Y luego, para cada uno, mostramos su
identificador con un salto de lnea.
echo "Estos son tus amigos:<br>";
foreach ($friends as $friend)
{
echo "$friend<br>";
}
Modificar el script anterior para que, adems
de los identificadores de tus amigos, se
muestre a continuacin su nombre.

(Resuelto en versin 1.0)


Mediante users.getInfo podemos acceder a
los datos del perfil de un usario.
$facebook->api_client->users_getInfo($uids, $fields)
El primer parmetro es un array de
identificadores de usuario
El segundo, es una array en el que pasamos

los identificadores de los campos del perfil


que deseamos recuperar. La siguiente tabla
muestra los atributos a los que se puede
acceder mediante esta funcin.
uid is_app_user profile_update_time
about_me last_name quotes
activities meeting_for relationship_status
affiliations meeting_sex religion
birthday movies sex
books music significant_other_id
current_location name status
education_history notes_count timezone
first_name pic tv
has_added_app pic_big wall_count
hometown_location pic_small work_history
hs_info pic_square
interests political
Para recuperar el nombre y el estatus del
usuario:
//Recuperamos informacin del perfil del
usuario
$desired_details = array('first_name',
'last_name', 'status');
$user_details = $facebook->api_client-
>users_getInfo($user_id, $desired_details);

$status = $user_details[0]['status']
['message'];
$first_name = $user_details[0]['first_name'];
$name=$user_details[0]['name'];
$last_name = $user_details[0]['last_name'];
Modificar la versin actual del piloto para que
el acceso a la informacin de los amigos se
realice mediante users.getInfo y se muestre:
Nombre
Apellidos
Status
Cumpleaos

(Resuelto en piloto 2.0)


Vamos a ver ahora como recuperar los eventos a los
que est vinculado un usuario.
La funcin events.get retorna la relacin de eventos
relacionados a un usuario:
$facebook->api_client->events_get($uid, $eids,
$start_time, $end_time, $rsvp_status)
$uid: Id de usuario. Si es nulo, se toma el autentificado
$eids: lista separa por comas de ids de eventos
$start_time y $end_time permite acotar la bsqueda por fechas
El status indica la relacin del usuario con el evento
(attending, unsure, declined, o not_replied )
Modificamos la versin actual para que recupere los
eventos del usuario actual, y nos los muestre en una lista.
echo "<br><br>Eventos del usuario actual:";
//Gestin de eventos.
($myEvents= $facebook->api_client->events_get(null, null,
null, null, null));

if ( $myEvents )
{
foreach( $myEvents as $event )
{
echo "{$event['name']} - {$event['location']}:
{$event['eid']}<br>";
}
}

Probamos la aplicacin
Vamos a extender la aplicacin para que nos
muestre todos los asistentes de cada evento al que
estemos suscritos.
Para ello, utilizar events_getMembers(<ide del
evento>) que retorna un array con cuatro campos:
attending: contiene un array con los ids de los asistentes.
unsure: array con los que no estn seguros
declined: array con los que no asistirn
not_replied: array con los que no han contestado
(Resuelto en version 3.0)
El texto resultante debera ser:
Asistentes al evento : Concierto de U2 en Estadio Camp
Nou, Barcelona
Va a asistir : Mireya Masclans
Va a asistir : Lluis Blues
Va a asistir : Imanol Egido Egaa
Va a asistir : Anrocknio Ruiz
Va a asistir : Peggy Van Ham
Va a asistir : Dani Cobo Meroo
Va a asistir : Joanjo Rubio
Va a asistir : Julian Beaudet
Va a asistir : Daniel Fernndez Lanvin

(Resuelto en version 3.0)


Podemos cambiar el estatus del usuario desde
nuestra aplicacin.
Para ello,
$facebook->api_client->
call_method( 'facebook.users.setStatus, array(
'api_key' => $appapikey,
'status' => 'estoy haciendo el gamba con la api del
feisbuc!'));

Vamos a probar a aadirlo. Funciona? Por qu?


Para poder cambiar el estatus del usuario
desde una aplicacin se requiere que sta
tenga permisos extendidos.
Los permisos pueden obtenerse:
El usuario directamente los otorga editando la
configuracin de su aplicacin (men
aplicaciones/Editar Aplicaciones/Editar configuracin)
Ofrecer al usuario la posibilidad de otorgarlos
explcitamente desde la propia aplicacin.
Para ello:
try{
$facebook->api_client-
>call_method('facebook.users.setStatus',
array('api_key' => $appapikey, 'status' =>
'estoy haciendo el gamba con la api del feisbuc!'));
}
catch (Exception $e) {
echo "No te puedo cambiar el estatus sin permiso.
Pincha <fb:prompt-permission
perms=\"status_update\">aqu</fb:prompt-permission>
para obtenerlo<br>";
}