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:
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:
1 2 3 4 5 6 7 8 9 10 |
$ 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:
1 2 3 4 5 6 7 |
{ "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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
?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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$query = '/search?q=coffee&type=place¢er=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:
1 2 3 4 5 6 |
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:
1 2 3 4 5 6 7 8 |
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:
1 2 3 |
/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