Tutorial de Consultas FQL de facebook en PHP


Última Actualización: 31/08/2022 19:03 Nro de Vistas: 7343

ATENCION:

La versión 2.0 de la API de Facebook es la última versión donde FQL estará disponible. Versiones después 2.0 no apoyarán FQL. Por favor migrar sus aplicaciones a utilizar la API de la gráfica sociales (Graph API) en lugar de FQL. Por favor, consulte nuestra lista de cambios para la información de la versión actual. Ref: Documentación de Facebook 


Fql.-
Es un lenguaje de consultas proporcionada por Facebook (Facebook Query Languaje). Es similar al lenguaje SQL. FQL nos permite acceder a la información de las tablas de la base de datos de facebook, solo debemos conocer en que tabla esta la información, para así acceder a lo que queremos desde nuestra aplicación.

FQL en PHP.

En php utilizamos las librerías de PHP SDK de Facebook para poder realizar las consultas.


Ya sabemos cómo inicializarlo.

<?php

Require_once 'src/facebook.php';

$facebook = new Facebook(array(

  'appId'  => “APP ID”,

  'secret' => “APP SECRET”,

  'cookie' => true

));

 

El parámetro   'req_perms' => $permisos es necesario siempre en cuando necesitemos hacer consultas que requieran de permisos especiales. Ejm. Si queremos ver la lista de amigos de un usuario. Pero si por ejemplo solo queremos acceder al álbum o fotos del FanPage que es público entonces no necesitamos declarar el   'req_perms' => $permisos.

Recordemos que para acceder por ejemplo a los datos de los usuarios hacíamos lo siguiente:   

Acceder a los datos del usuario.

$userdatos = $facebook->api('/me');

O para acceder a los datos del FanPage.

$fanpagedatos = $facebook->api('/ID_O USERNAME_DE_FANPAGE');

Una consulta de esta forma nos retornaba un array similar este.

   "id": "277514218997516",

   "about": "http://www.semsoft-peru.com La Web donde.. ",

Por lo tanto si queremos el ID solo hacíamos lo siguiente:

echo 'El ID del Fanpage es: '.$fanpagedatos['id'];

 Si queremos consultar una única tabla este método es el mejor, sin embargo si queremos consultar varias tablas haríamos así.

$user_profile = $faceboo->api('/me'); //Consultar datos

$user_permisos = $faceboo->api('/me/permissions'); //Consultar sus permisos.

 Al hacer esto el api trabaja de esta manera.

Realiza una conexión a Facebook y retorna los valores requeridos del usuario, luego vuelve a reconectar de nuevo para retornar los otros datos que estamos consultando. Es decir en el ejemplo anterior tu página conectará y desconectará 2 veces a Facebook produciéndose demoras en la carga de la web.

Sin embargo gracias a FQL podremos hacer solo una vez la conexión y traer varios datos de diferentes tablas de Facebook.

En el siguiente enlace podremos ver todas las tablas disponibles para realizar nuestra consulta FQL.

https://developers.facebook.com/docs/reference/fql/

Ahora si realizaremos nuestra consulta FQL:

FQL SIMPLE

$strsql = "SELECT uid, first_name, last_name, username FROM user WHERE uid = me()"

    $fql = $facebook->api(array(  
           	'method' => 'fql ',
		'query' => $strsql, 
	));

 

Esto retornará un array. Si queremos el resultado es de la siguiente forma:

$usuario = $fql[0]['fql_result_set'];
echo "El USERNAME del Usuario es: ". $usuario['username'];

 Este ejemplo es solo para una tabla; y como les mencioné anteriormente. Si accedemos a una sola tabla es más fácil acceder sin FQL. Es decir así:

$user_profile = $faceboo->api('/me');
echo "El USERNAME del Usuario es: ". $user_profile['username'];

 ¿Entonces cuando es mejor utilizar FQL?

FQL MULTIQUERY.

Cuando necesitamos consultar a varias tablas en solo una conexión. Por ejemplo en mi web cuando el usuario inicia sesión haremos consultas a tres tablas.

  1. Tabla user.- para obtener los datos del USUARIO.
  2. Tabla page.- para saber si el usuario es administrador del Fanpage de modo que en la web también tendrá permisos especiales.
  3. Tabla permissions.- Para saber los permisos que el usuario a otorgado a nuestro app.

La mejor forma de aprender es con ejemplos.

 $multiQuery = '{

         "query1":"SELECT uid, name, first_name, middle_name, last_name, username, birthday_date, pic, pic_square, profile_url,current_location, email, locale, sex FROM user WHERE uid = me()",

         "query2":"SELECT page_id, username, name, access_token, pic, pic_square, page_url FROM page WHERE page_id IN(SELECT page_id FROM page_admin WHERE uid = me())",

         "query3":"SELECT publish_stream, manage_pages, user_photos, email, export_stream, manage_notifications, share_item,user_status,offline_access FROM permissions WHERE uid = me()"

         }';

    $fql = $facebook->api(array(
	'method' => 'fql.multiquery',
        'queries' => $multiQuery,
	));

    $usuario = $fql[0]['fql_result_set'][0];
    $cuentas = $fql[1]['fql_result_set'];
    $permisos = $fql[2]['fql_result_set'][0];
echo "El USERNAME del Usuario es: ". $usuario['username'];

$usuario['permisos'] = '';
     foreach($permisos as $index => $value){
             $permisos[$index] == 1 ? $usuario['permisos'] .= $index.',' : 1;
     }
echo "LOS PERMISOS DEL USUARIO SON: ". $usuario['permisos'];

 

Como vemos podríamos hacer infinidad cosas. No sé exactamente si hay límites de consultas en Facebook pero probando aprenderemos más y descubriremos más cosas.