diciembre, 2011 archivo

Publicar en el muro de Facebook con la nueva API y PHP

Escrito en Tutoriales

Usar servicios automáticos

Desde Sortea2 consideramos muy importante la sincronización con Facebook de los contenidos que aparecen publicados en la web. Es por eso que decidimos utilizar un servicio para que cada vez que se publicara un nuevo sorteo, se publicara automáticamente en el muro de Facebook.

Hay varios servicios que realizan esto, nosotros probamos con TwitterFeed y también con Ifttt. Ambos servicios son gratuitos y sencillos de usar, pero tienen un importante defecto: son muy poco fiables. Un día el TwitterFeed dejó de postear en el muro de Facebook y no había nada que se pudiera hacer al respecto. Pasó casi un mes y sin explicación aparente, volvió a postear cada nuevo sorteo publicado. Es por ello que decidimos darle un vistazo a posibles alternativas, eligiendo ifttt. Este servicio es muy interesante pero esta vez el problema estaba en que los artículos aparecían como muy resumidos en el muro de Facebook, y con un enlace en cada posteo.

Principalmente por la irregularidad de los servicios gratuitos, en los que no siempre se puede confiar, pero también por no tener todo el control de lo que se estaba publicando, decidimos intentar realizar esa sincronización por nosotros mismos.

Es este un problema que no todo el mundo va a tener, porque por ejemplo, si se tiene un blog de WordPress, hay servicios que automatizan la sincronización con Facebook gracias a plugins. En nuestro caso estas soluciones no nos sirven, pues tenemos un sistema propio para publicar los sorteos.

Y aquí aparece un tercer problema: todos estos sistemas antes mencionados dependen del RSS de sortea2, lo que provoca un importante retraso desde que se publica un sorteo en la página hasta que se incorpora al Facebook.

Y es que el RSS no se actualiza instantáneamente. Y los servicios revisan el RSS cada cierto tiempo, normalmente una media hora como mínimo. Es por estos retrasos que fácilmente la publicación de un nuevo sorteo puede resultar en su aparición en Facebook unas tres o cuatro horas después.

Así, decidimos echar un vistazo a la forma de realizar la publicación de forma directa, sin depender de servicios poco fiables.

Fijaros en la diferencia de personalización entre tres métodos de posteo:

Publicación automática con ifttt

Publicación automática con ifttt

Publicación automática con Twitterfeed

Publicación automática con Twitterfeed

Publicación automática totalmente auto gestionada

Publicación automática totalmente auto gestionada

API de Facebook

El primer problema que no se encuentra es que Facebook ha vuelto a cambiar la API de acceso externo, con lo que casi toda la documentación que uno encuentra en la red se refiere a la anterior API, que ya no funciona. Así, todas las búsquedas que se realicen en Google se deben limitar al periodo del último año. Todo lo publicado antes, por popular que fuera, no sirve para nada.

Así, uno se debe descargar la última versión de la API desde la página de desarrolladores de Facebook. Y luego con esa API vienen unos ejemplos, que para colmo no funcionan tal cual.

El concepto a entender a la hora de realizar nuestra publicación automática es que dentro de Facebook hay tres entidades diferenciadas que toman parte en todo esto:

  • El Administrador de la página, que es un usuario de Facebook, con nombre y apellidos.
  • La Página de Sortea2 dentro de Facebook, que es una página con uno o varios administradores.
  • La Aplicación de Sortea2. Es una aplicación que hemos tenido que crear, dentro de Facebook, para poder realizar posteos en el muro. Técnicamente con esta única aplicación ya se pueden realizar posteos en otras páginas y más acciones, pero si uno quiere postear en su propia página de Facebook, tiene que crearse una aplicación.

Así, si queréis postear automáticamente en vuestra página, vais a necesitar crear una aplicación de Facebook. ¿Cómo se crea una aplicación de Facebook? Hay muchos tutoriales y ejemplos por Internet que seguro que encontraréis. En el momento en que tengáis la aplicación, conseguiréis dos datos fundamentales:

  • Un ID de aplicación, appid.
  • Una clave secreta, secret key.

Con esos dos datos, ya podéis empezar a juntar las piezas. Lo siguiente es conseguir autorización de la página de Sortea2 para postear desde la aplicación que acabamos de crear. Esa aplicación podrá postear siempre y cuando se le hayan dado permisos muy amplios.

Para conseguir esos permisos, el mejor tutorial que existe es este. Hay que teclear unas urls en el navegador, con los datos de la aplicación (su ID y su clave secreta) y un tercer dato que es fácil de conseguir que es el identificador de Facebook de la página de Sortea2 (o vuestra página).

Los pasos a seguir son:

  • https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=manage_pages,status_update&redirect_uri=http://www.facebook.com/connect/login_success.html (Se cambia el APP_ID por el que tengáis). Con esto nos logueamos damos permisos. Se obtiene un código.

    Dos notas sobre este paso:
    Primero: antes Facebook no exigía el parámetro scope = status_update, pero ahora es imprescindible.
    Segundo: el código que nos interesa aparecerá en la barra del dirección del navegador pero luego hace una redirección a otra página. Hay que estar atento para copiar ese código antes de que lo redireccione.

    A diferencia de lo que indica el tutorial, hay que exigir un permiso especial que es el de manage_pages.

  • https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=APP_SECRET&code=CODIGO_PASO_ANTERIOR (De nuevo hay que cambiar, ahora el APP_ID y el APP_SECRET por los de vuestra aplicación y además el código obtenido antes).

    Con esto se consigue una cadena de texto que hay guardar como un tesoro: el access_token, un código que viene a decir «el administrador de Sortea2 autoriza a la aplicación Sortea2 a gestionar sus páginas».

Siguiendo los pasos de ese tutorial sin embargo uno consigue otra cosa: que el Administrador de su consentimiento a otorgar permisos a la aplicación. Porque según Facebook, una página no puede dar permisos a una aplicación directamente.

Estamos ya realmente cerca. Tenemos el access_token del administrador, pero nos faltan el propio access_token de la página. Porque si usamos el del administrador, los posteos no saldrían en el muro de Sortea2, sino en el de sus administradores, lo que tiene poco sentido.

Para conseguir el access_token de la aplicación ya hay que recurrir a la API de Facebook, con un sencillo script de PHP se puede obtener una lista de todos los access_token de todas las páginas en que esa persona sea administrador. Incluso directamente en el navegador se escribe:

https://graph.beta.facebook.com/USER_ID/accounts?access_token=USER_ACCESS_TOKEN

USER_ID es el ID de la persona administradora de la página, no el ID de la página de publicación. Los Facebook ids se pueden conseguir fácilmente desde este recurso.

El user_id es el ID que asocia Facebook a cada uno de sus usuarios. El user_access_token es el código tan importante que obtuvimos en el paso anterior. Con esto nos sale en pantalla una lista de todas las páginas que gestiona ese administrador y sus correspondientes tokens. Los copiamos aparte y guardamos, pues son la pieza final para escribir el código que necesitamos.

Después de todas estas dificultades ya tenemos las tres piezas que nos hacen falta:
APP_ID
APP_KEY_SECRET
ACCESS_TOKEN

Con esto ya se puede publicar cualquier cosa en Facebook, usando su API, en unas sencillas líneas de código:

$facebook = new Facebook(array(«appId» => APP_ID, «secret» => APP_KEY_SECRET));
$publishStream = $facebook->api(«/PAGINA_ID/feed», ‘post’, array(
‘message’ => «I love thinkdiff.net for facebook app development tutorials.»,
‘link’ => ‘http://ithinkdiff.net’,
‘picture’ => ‘http://thinkdiff.net/ithinkdiff.png’,
‘name’ => ‘iOS Apps & Games’,
‘description’=> ‘Checkout iOS apps and games from iThinkdiff.net. I found some of them are just awesome!’,
‘access_token’=> ACCESS_TOKEN ));

Así, basta con personalizar el código que tengamos. Donde guardamos nuestro sorteo, rellenamos los valores que queremos postear y los pasamos a esta llamada a la API de Facebook, que publica automáticamente el post en el muro, sin retrasos, sin intermediarios y con la personalización que nos guste darle.

Espero que este tutorial os sirva de ayuda, Internet está lleno de información irrelevante, creemos que esos links son los más relevantes, con algunas adaptaciones y cosas que no suelen decirte en ningún sitio:

  • Que tienes que pedir permisos de Administrador para la página.
  • Y que lo tienes que hacer para el usuario, no la página.
  • Que tienes que pasar el token cuando realizas una petición de posteo en el muro.

Mucha suerte con vuestras luchas con la API de Facebook.


Escrito por .