¿Cómo publicar un post en nuestro muro con la API Graph API de Facebook (PHP)?

- Andrés Cruz

¿Cómo publicar un post en nuestro muro con la API Graph API de Facebook (PHP)?

Facebook es la red social de mayor impacto en la actualidad de la cual forman parte más de 1500 millones de usuarios activos al mes, lo que es un montón de personas y esto es un punto fundamental para todos los que empleemos una red social (quién se molestaría siquiera de crear una cuenta en una red social que no tenga personas) para compartir algún contenido útil mediante un simple post en nuestro muro o en un grupo.

Con todas estas redes sociales, obligaciones diarias, etc y con el tiempo cada vez más escaso, siempre es buena idea automatizar algunos procesos que podamos considerar mecánicos o rutinarios y de esta forma ahorrar mucho tiempo y el olvido de publicar nuestro contenido; si no sabes cómo automatizar procesos mediante CRONS te recomiendo que revises: Ejecutar script automáticamente con Cron en Linux.

Hoy les traigo una de esas medidas que consisten en publicar un post en nuestro muro con la API Graph API de FaceBook y PHP.

Cómo se mencionó anteriormente, para realizar cualquier operación con la API Graph de Facebook debemos comenzar en crear una aplicación en la Graph API de FaceBook los cuales son unos sencillos pasos que hay que seguir para obtener unos tokens de autenticación y dar algunos parámetros de seguridad a nuestra cuenta que los puedes seguir en el enlace anterior.

Una vez hecho esto, veremos que aun nos falta algunos pasos extras para poder publicar un simple post en nuestro muro lo cual no es tan sencillo como vimos en el caso de Twitter.

0.0 Pasos para publicar un post en nuestro muro de Facebook con PHP

En esta entrada aprenderemos a:

1.0 Descargando la SDK de Facebook para PHP

Primero descarguemos la SDK de Facebook para PHP que nos permitirá emplear la API de Graph Facebook mediante consultas HTTP; para ello tenemos el siguiente enlace Getting started with the Facebook SDK for PHP.

Descomprimimos y ubicamos la carpeta que nos generó en nuestro servidor HTTP; en nuestro caso la aplicación Facebook estará en la siguiente ubicación:

/var/www/html/test/fbtest
En general solo nos interesa el contenido ubicado en la ruta facebook-php-sdk-vX-X.X.X\src\Facebook.

2.0 Configurando nuestro proyecto PHP

Nuestro aplicacion PHP consta de dos archivos:

  1. La ventana de autenticación: index.php.
  2. La ventada para el envío del post: post.php.

En ambos archivos debemos tener definida la siguiente cabecera que contiene referencia a los archivos de la SDK de la API de Facebook:

/var/www/html/test/fbtest

2.1 Obteniendo los Tokens

Vamos a la página de desarrolladores de Facebook en donde ya tenemos nuestra aplicación creada y nos vamos a la sección de Dashboard y copiamos la "API ID" y la "APP Secret":

dashboard facebook

3.0 Login en nuestra cuenta de Facebook con la API Graph de Facebook

En ambos archivos, debemos de colocar los tokens de acceso obtenidos anteriormente desde la página de desarrolladores de Facebook:

$fb = new Facebook\Facebook([
  'app_id' => '{app-id}',
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.4',
  ]);

En nuestro caso, definimos un archivo llamado config.php el cual los tokens de acceso y que tiene la siguiente estructura:

$config['App_ID']      =   'Tu_App_ID';
$config['App_Secret']  =  'Tu_App_Secret'; 

Una vez vinculada nuestra cuenta de Facebook con la aplicación PHP, invocamos al método que nos permitirá obtener el token de acceso para solicitar permisos a nuestra cuenta; para eso empleamos el método getRedirectLoginHelper:

$helper = $fb->getRedirectLoginHelper();

Especificamos los permisos para publicar un post entre otros:

$permissions = ['email', 'user_likes', 'publish_actions', 'user_managed_groups'];
Puedes ver la lista completa de los permisos en el siguiente enlace: Permissions Reference - Facebook Login junto con su descripción.

La API de Facebook cuenta con un método que permite la autenticación y redirige a la página que vamos a configurar que es la que va a enviar el post; este método es el getLoginUrl():

$loginUrl = $helper->getLoginUrl('https://example.com/fb-callback.php', $permissions);

El código completo del index.php:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
session_start();
require 'Facebook/config.php';
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/Facebook/');

$facebook = new Facebook\Facebook(array(
    'app_id' => $config['App_ID'],
    'app_secret' => $config['App_Secret'],
    'default_graph_version' => 'v2.4'
        ));

$helper = $facebook->getRedirectLoginHelper();
$permissions = ['email', 'user_likes', 'publish_actions', 'user_managed_groups']; 
$loginUrl = $helper->getLoginUrl('http://localhost/test/fbtest/post.php', $permissions);

if (isset($_GET['redirect'])) {
    header_remove();
    header("Location: " . $loginUrl);
}

echo 'Log in con Facebook.';

4.0 Publicando un post en nuestro muro de Facebook con la API Graph de Facebook

Finalmente llegamos a la parte crucial y el objetivo de esta entrada, la cual es publicar un post en nuestro muro; para esto es el archivo post.php que definimos a continuación.

Una vez autenticado y ubicados en la página desde la cual vamos a publicar el post (redirigida de manera automática al emplear el getLoginUrl).

Obtenemos el token de acceso (método getAccessToken) y publicamos el post mediante el método post() pasando como parámetros un array con un mensaje y el link:

  $helper = $fb->getRedirectLoginHelper();

    try {
        $accessToken = $helper->getAccessToken();
        $linkData = [
            'link' => 'http://www.desarrollolibre.net/blog/tema/50/html/uso-basico-del-canvas',
            'message' => "Hola Mundo",
        ];
        $fb->post('/feed', $linkData, $accessToken);
        
    } catch (Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        echo 'Graph returned an error: ' . $e->getMessage();
    } catch (Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
    }
Además del link y el message se pueden enviar otros parámetros como una imagen los cuales puedes ver en el siguiente enlace: Post /{post-id} - Fields.

El código completo de post.php es:

date_default_timezone_set('UTC');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

session_start();

    require 'Facebook/config.php';
    define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/Facebook/');

    $fb = new Facebook\Facebook(array(
        'app_id' => $config['App_ID'],
        'app_secret' => $config['App_Secret'],
        'default_graph_version' => 'v2.4'
    ));

    $helper = $fb->getRedirectLoginHelper();

    try {
        $accessToken = $helper->getAccessToken();
        $linkData = [
            'link' => 'http://www.desarrollolibre.net/blog/tema/50/html/uso-basico-del-canvas',
            'message' => "Hola Mundo",
        ];
        $fb->post('/feed', $linkData, $accessToken);
        
    } catch (Facebook\Exceptions\FacebookResponseException $e) {
        // When Graph returns an error
        echo 'Graph returned an error: ' . $e->getMessage();
    } catch (Facebook\Exceptions\FacebookSDKException $e) {
        // When validation fails or other local issues
        echo 'Facebook SDK returned an error: ' . $e->getMessage();
    }

4 Extra: Publicando un post en un grupo de Facebook

Para publicar un post en un grupo del cual formamos parte, primero debemos obtener el identificador de ese grupo en cuestión; para ello existen varias páginas en Internet como Lookup-ID.com.

Con el identificador del grupo en nuestro poder realizamos una pequeña modificación al método post() para que quede de la siguiente manera:

$fb->post('/' . $group_id . '/feed', $linkData, $accessToken);

El resto de la estructura del archivo PHP quedaría igual; y esto es todo; con los pasos anteriores podrás publicar un post en Facebook con PHP empleando la Graph API de Facebook.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.