Conociendo el PHP SDK de Facebook

Facebook provee a los desarrolladores un kit de desarrollo para poder trabajar con su API de una manera más sencilla, dentro de estas herramientas se encuentran el JavaScript SDK, PHP SDK, iOS SDK (iPhone & iPad) y el Android SDK. Para este caso veremos el funcionamiento del PHP SDK de Facebook, trabajaremos algunos de sus métodos más usados, eso si, es primordial haber leído antes el funcionamiento de la Graph API de Facebook para entender lo que se hace en el código.

Puedes descargar el archivo facebook.php que necesitamos desde github. La versión actual es la 3.1.1, muy importante en tener en cuenta esto para las personas que ya habían desarrollado aplicaciones antes, ya que algunos métodos no funcionan en las nuevas versiones del SDK, como es el caso de getSession() que hacía parte de la Rest API, así que si ven un Fatal error: Call to undefined method Facebook::getSession() ya saben la razón.

Autenticación

El siguiente código siempre será necesario usarlo para poder autenticar el usuario con una aplicación (obtener un token, pedir permisos), si buscas por la red te podrás encontrar con múltiples formas para hacer este paso, hay personas que hacen varios tipos de validaciones (recomiendo que tu también lo hagas) para evitar errores; en este caso para ahorrar código y para que se entienda mejor he puesto lo estrictamente necesario:

<?php
/*
	Código de ejemplo para obtener datos del usuario en Facebook
	www.BrianUR.info
*/
// URL de la aplicación
$urlApp = "http://apps.facebook.com/brianur/";
// ID y Secret ID de la aplicación
$appId = "0000000000000";
$secret = "00000000000000000000000000000000";
//Llamada al Facebook SDK
include_once "facebook.php";
// Instanciamos el objeto Facebook
$facebook = new Facebook(array('appId' => $appId,
							   'secret' => $secret,
							   'cookie' => true));
// Obtenemos una session
$user = $facebook->getUser();
if (!$user){
// Si el usuario no está autentificado crea una URL para hacerlo.
// Se usa 'scope' para pedir permisos separados por coma.
// Se usa 'redirect_uri' para redireccionar a esa URL despues de la acción del usuario
$loginUrl = $facebook->getLoginUrl(
            array(
                'scope' => 'user_about_me',
                'redirect_uri' => $urlApp
            )
    );
echo "<script type=\"text/javascript\">top.location.href = '$loginUrl';</script>";
} else {
	// Hasta aquí el usuario tendría que estar autentificado con la aplicación.
	$yo = $facebook->api('/me');
	print_r($yo);
}
?>

El anterior código retorna varios datos del usuario, para ver datos ocultos se requiere el uso de permisos extendidos.

Métodos

Nombre Uso
api Llamadas a la conexiones y objetos disponibles en la Graph API. Tambien puede realizar consultas FQL.
getAccessToken Obtiene un token de acceso que puede ser usado posteriormente con otros métodos.
getApiSecret Obtiene la secret ID de la aplicación
getAppId Obtiene la App ID de la aplicación
getLoginStatusUrl Devuelve la URL con el estado de la autentificación actual del usuario
getLoginUrl Devuelve una URL para que el usuario se pueda autenticar y luego redirecciona a la aplicación
getLogoutUrl Devuelve una URL para que termine la sesión del usuario en la aplicación y luego redirecciona a la misma
getSignedRequest Obtiene una solicitud firmada que utiliza el SDK
getUser Devuelve el ID del usuario, sino está autenticado devuelve un 0.
setAccessToken Fija el token de acceso actual que se este usando
setApiSecret Fija la secret ID de la aplicación que se este usando
setAppId Fija la App ID de la aplicación que se este usando
setFileUploadSupport Sirve para subir archivos para trabajar luego con ellos, el servidor debe permitir la carga de los mismos.
useFileUploadSupport Permite verificar si la carga de archivos está disponible en el servidor

Ejemplos útiles

Mostrar todos los amigos de un usuario:

<?php
$amigos=$facebook->api('/me/friends');
foreach($amigos['data'] as $amigo){
echo "Nombre: ".$amigo['name']." ID: ".$amigo['id'];
}
?>

Mostrar los primeros 10 amigos por ID y Nombre:

<?php
$amigos=$facebook->api('/me/friends?limit=10&fields=id,name');
foreach($amigos['data'] as $amigo){
echo "Nombre: ".$amigo['name']." ID: ".$amigo['id'];
}
?>

Mostrar foto de perfil del usuario:

<?php
$yo=$facebook->api('/me');
$fotoPerfil = "<img src='http://graph.facebook.com/".$yo['id']."/picture?type=large'/>";
echo $fotoPerfil;
?>

Publicar en muro:

<?php
$parametros=array('message' => 'Aprendiendo a desarrollar aplicaciones en Facebook',
				  'name' => 'BrianUR.info',
				  'caption' => 'Mi primer aplicacion en Facebook',
				  'link' => 'http://www.brianur.info',
				  'description' => 'Es genial',
				  'picture' => 'http://brianur.info/brianur.png',
				  'actions' => array(array('name' => 'Entra ya!',
                                      'link' => 'http://www.brianur.info')));
$facebook->api('/me/feed','post',$parametros);
?>

También puede interesarte:

Tag(s): , , , , , , , ,

12 Comentarios para “Conociendo el PHP SDK de Facebook”

  1. Muchas gracias por la información aquí mostrada por fin encuentro un sitio donde expliquen decentemente como funciona el php-sdk de Facebook :) lo que ahora me queda por saber es como hacer para publicar una pestaña de una aplicación dentro de una página de facebook, a ver si me puedes echar un cable o ponerlo ahi como ejemplo, gracias ;)

  2. Hola, estoy haciendo mi primera aplicación en Facebook, y la tengo casi lista, pero el único problema que tengo, es al pedir permisos. Tengo el pedido tal cual este artículo, pero antes de ir a la pantalla de aceptar los permisos pedidos, facebook me lleva a una pagina con el logo de Facebook, si hago click en el logo de Facebook, recién ahí me lleva a la pagina de aceptar permisos. Sabes que puede ser?? Muchas gracias

  3. Hola Andrés, algunas veces me pasó eso y es cuando uno hace un iframe a alguna pagina de Facebook entonces ellos muestran como una imagen para ir directamente a esa pagina. Debe ser algún error mínimo en el código, no olvides reemplazar las variables $urlApp, $secret y $appId con los datos de tu aplicación.

  4. Tengo un pequeño problema. Que cuando el usuario acepta la aplicación no me redirige a la página de la aplicación si no a la página del servidor.

    Y otra cosa, cuando agrego permisos para publicar en el muro primero se pide acceso a la aplicación como tal y luego redirige a una nueva página para pedir permisos de publicación en el muro.

    ¿Qué podrá ser?

  5. Tocaría ver el código para ver que pasa.

  6. Jesús Santos dice:

    Hola Brian:

    Primero que nada me gustó mucho tu publicación, he estado buscando como hacer aplicaciones facebook y es de lo mejor que he encontrado, por ello quería comentarte si de casualidad sabes cómo podría hacer para mostrar las fotos del usuario que se loggea en mi sitio web, ya que en mi aplicación necesito que el usuario pueda escoger una de sus fotos del facebook, he buscado por todos lados y no he encontrado nada.

    De antemano muchas Gracias!!

  7. Hola Jesús, para hacer eso primero debes pedir los permisos user_photos o friends_photos y hacer algo como $fotos = $facebook->api(‘/me/albums’); eso debería devolver un array con todos los albums del usuario y sus respectivas fotos.

  8. Jesús Santos dice:

    Muchas Gracias Brain me faltaba pedir los permisos por eso el array me llegaba vacío!!!

  9. hola senor he visto sus publicaciones y estan muy buenas yo soy programador pero ahora estoy desarrollando aplicaciones facebook y quisiera pedirle su ayuda en sus posibilidades, yo tengo una duda, yo quiero guardar los datos de session de usuarios de facebook pero en mi base datos, pero no logro que se me guarden los datos en mi base datos, como pudiera resolver eso??? si usted sabe o me diera una pista se lo agradeceria enormemente

    gracias

    Alberto

  10. Hola Alberto, bien para guardar datos es cuestión de después de tener la autentificación del usuario (el permiso si es necesario) enviar ese dato a la BD, por ejemplo si tengo $yo = $facebook->api(‘/me’); luego para guardar el nombre se hace un insert con $yo["name"] a la base de datos (usando la forma que sea) y listo. Si es para guardar los datos de session entonces se puede usar el método llamado getAccessToken.
    Saludos.

  11. Jesús Santos dice:

    Hola Brian:

    Otra vez yo molestando, fíjate que ya logré traer las fotos de mi usuario, pero si le doy:

    $facebook->api(‘/me(albums’); me trae la info de los albumes y sus portadas;

    Y si le doy:

    $facebook->api(‘/me/photos’); me trae las fotos donde el usuario ha sido etiquetado.

    ¿Habrá una forma de traer las fotos de un determinado album (como el del muro o el del perfil)?

    Muchas Gracias de antemano y espero no molestar!!

  12. Hola Brian la verdad es que este y todos los artículos que vas publicando en tu blog son realmente excelentes!… la verdad es que estuve buscando mucha información sobre como utilizar la api de faceboook y felizmente me tope con tu blog donde encontré prácticamente todo lo necesario para crear una aplicación. No te escribo con la intensión de preguntarte algo sobre lo que has posteado, simplemente estoy escribiendo este mensaje para agradecerte la enorme ayuda que nos brindas… Gracias Brian… Muchas Gracias y Exitos!!!

Trackbacks/Pingbacks

  1. Publicar en el muro con el PHP SDK | BrianUR - [...] debe reemplazar /me/feed por /IDAmigo/feed, no olvides que para que el código funcione tienes que autenticar el usuario y ...

Dejar un comentario