Mar 042015
 

La información social de Facebook puede ser accedida por programa, utilizando el “Graph API”. Facebook ha desarrollado una librería en PHP que simplifica la programación de aplicaciones que desean hacer uso de esta información.

En este artículo se explica la manera de utilizar esta librería para obtener información de lugares, negocios, etc mediante un script escrito en lenguaje PHP.

1. Obtención de las claves de acceso

Aunque el uso del API de FB es gratuito, el acceso requiere autentificación, para lo cual debemos obtener un par de claves OAuth (APP_ID, APP_SECRET). Para ello, debemos registrarnos como desarrollador de FB, y dar de alta una aplicación.

Accedemos a la url https://developers.facebook.com/apps, y pulsamos sobre el botón “Register Now”. El proceso de registro sólo requiere aceptar la política de privacidad, tras lo cual llegamos a un pantalla en la que debemos seleccionar el tipo de aplicación que vamos a dar de alta:

FB-register-app

En nuestro caso, seleccionamos “Website”.

El proceso de alta solicita la url del sitio web en el que se va a utilizar el API (aunque en nuestro caso el uso del API se va a realizar desde un script que se ejecuta fuera de un sitio web). Al finalizar, se presenta el panel de control, en el que aparece la aplicación que acabamos de dar de alta:

En este mismo panel, tomamos nota de las claves “App ID” y “App Secret” que deberemos emplear más adelante.

2. Descarga e instalación de la librería

Desde la página de descarga del SDK, podemos realizar directamente la descarga de la librería pulsando sobre el botón “Download the PHP SDK”.

Sin embargo, Facebook recomienda realizar la descarga utilizando “composer”, que tiene en cuenta todas las dependencias del paquete, y las instala si fuera necesario. En un sistema Linux, es sencillo instalar composer mediante un único comando que descarga el paquete y lo instala:

$ curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
 
Composer successfully installed to: /home/user/composer/composer.phar
Use it: php composer.phar
$

Para instalar el API de Facebook utilizando composer, creamos un directorio fb-api, y en él creamos un fichero “composer.json” con el siguiente contenido:

{
  "require" : {
    "facebook/php-sdk-v4" : "4.0.*"
  }
}

Después, en el mismo directorio, utilizamos el comando “composer.phar” para realizar la instalación de la librería PHP de acceso al API de FB:

# php /home/user/composer/composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing facebook/php-sdk-v4 (4.0.20)
    Downloading: 100%         

facebook/php-sdk-v4 suggests installing guzzlehttp/guzzle 
                                        (Allows for implementation of the Guzzle HTTP client)
Writing lock file
Generating autoload files
#

3. Consulta sencilla de lugares cercanos a un punto

Para realizar una consulta, en primer lugar hay que establecer una sesión, utilizando las claves OAuth de la aplicación:

?php

require_once('./vendor/facebook/php-sdk-v4/autoload.php');

use Facebook\FacebookSession;
use Facebook\FacebookRequest;

$app_ID = APP-ID;
$app_secret = APP-SECRET;

FacebookSession::setDefaultApplication($app_ID, $app_secret);
$session = FacebookSession::newAppSession();

// Validar la sesión
try {
      $session->validate();
} catch (FacebookRequestException $ex) {
      // Session not valid, Graph API returned an exception with the reason.
      echo $ex->getMessage();
} catch (\Exception $ex) {
      // Graph API returned info, but it may mismatch the current app or have expired.
      echo $ex->getMessage();
}

Una vez la sesión se ha establecido con éxito, podemos realizar la consulta:

$query = '/search?q=coffee&type=place&center=37.76,-122.427&distance=1000';

$request = new FacebookRequest($session, 'GET', $query);
try {
    $response = $request->execute();
} catch (FacebookRequestException $ex) {
      echo $ex->getMessage();
} catch (\Exception $ex) {
      echo $ex->getMessage();
}
$graphObject = $response->getGraphObject();
$graph_array = $graphObject->asArray();

La respuesta obtenida es un array de objetos de tipo Place. Podemos recorrer el array para imprimir el resultado obtenido con el siguiente código:

foreach ($graph_array["data"] as $place) {
    echo $place->name . "\t" . $place->category . "\t" .
         $place->location->street . ", " . $place->location->city . "\n";
}

Y obtenemos el siguiente resultado:

Philz Coffee - Castro   Local business  4023 18th St, San Francisco
Ritual Coffee Roasters  Restaurant/cafe 1026 Valencia St, San Francisco
Four Barrel Coffee  Restaurant/cafe 375 Valencia St, San Francisco
Reveille Coffee Co. Local business  4074 18th St, San Francisco
Weaver's Coffee & Tea   Local business  2301 Market St, San Francisco
...

4. Obtener el esquema de los objetos de tipo Place

Para saber qué campos pueden estar presentes en los objetos que devuelve el API, se puede realizar una consulta al esquema OpenGraph con la url:

http://graph.facebook.com/schema/place

5. Obtener la lista completa de categorías

La lista de todas las categorías en las que puede estar clasificado un registro puede obtenerse realizando la siguiente consulta:

/search?type=placetopic&topic_filter=all

En el momento de escribir este artículo (marzo de 2015), esta consulta devuelve más de 800 categorías.

6. Graph API explorer

Facebook ha puesto a disposición de los desarrolladores una herramienta online en la que se pueden probar distinto tipo de consultas y examinar los resultados que se obtienen, conocida como Graph API explorer.

Referencias

 

 Publicado por en 8:33 am

 Deja un comentario

(requerido)

(requerido)