Tutoriales PHP

Obtener numero de me gusta de página en Facebook utilizando access token

Hace unos días tuve un problema con Facebook Graph, el cual devolvía la cadena "An access token is required to request this resource.", ésto, claramente, sólo afectaba a las páginas, en el caso de las url o enlaces (ejemplo) no se requería tal cosa para obtener el numero de me gusta (por obvias razones).

Al parecer, al igual que Google Plus, Facebook comenzó a implementar un código de acceso para obtener información sobre las páginas, quizá como medida de seguridad; Tras buscar, me encontré con varios artículos en ingles bastante completos con los que pude solucionar "el problema", solución que ahora les comparto.

1. Crear una aplicación en Facebook Developers

Lo primero será crear una aplicación en Facebook Developers, dando clic en el botón verde que dice "Add a New App (Agregar nueva aplicación)", seguido de eso, eligen un nombre para la aplicación, seleccionan la categoría "Aplicaciones para páginas" y finalmente dan clic en Create App ID.
crear-nueva-aplicacion-min
Después de eso, la aplicación quedará hecha…Ahora, con la aplicación ya creada, dejaremos abierta la pestaña donde está la aplicación ya que usaremos más adelante el ID de la aplicación (App ID) y el App Secret.
aplicacion-desarrollogeek-min

2. Obtener un access token para la aplicación

Para ello nos dirigimos a la utilidad Access Token Tool de Facebook para obtener un access token; una vez dentro daremos clic en need to grant permissions para obtener el access token para nuestra aplicación.
access-token-min
app-access-token-min
Ahora copiaremos el código (access token), copiaremos el ID de la aplicación que creamos, su código secreto y lo ingresaremos en conjunto en una nueva pestaña:

https://graph.facebook.com/oauth/access_token?client_id=APP-ID&client_secret=APP-SECRET&grant_type=fb_exchange_token&fb_exchange_token=ACCESS-TOKEN

(nota: remplazar los valores de color rojo por su App ID, App Secret, Access token e ingresar a la url)

El resultado, será otro Access Token, el definitivo, el cual deberán copiar. (ya pueden olvidarse del anterior)
code-access-token-min

¿Por qué otro Access Token?

El primero, sin duda funcionaría, sin embargo, expira…en 1 hora dejaría de funcionar, a lo mucho se podría extender a 2 meses….lo que se intenta hacer usando un segundo Access Token es obtener uno que nunca expire.

Ahora, una vez aclarado el punto nos dirigimos a la página Graph API Explorer.

En application seleccionamos le aplicación que creamos anteriormente.
graph-api-app-min
En Get Token seleccionamos Get page token, al hacerlo aparecerá una ventana flotante en la cuál nos informará que la aplicación quiere administrar nuestras páginas; presionamos aceptar.
get-page-token-min

En Access Token ingresamos el Access Token que dio como resultado en el paso numero 2, verificamos que la segunda caja de texto tenga el valor /v2.3/me/accounts y presionamos submit; en caso de que nos devuelva una cadena Json, está todo bien, has pasado la parte más difícil.
graph-api-explorer-min

3. Comprobar que el Access Token nunca expirará

Para ello nos dirigimos a la herramienta URL debuger de Facebook e ingresamos el Access Token y presionamos debug…..les mostrará información, en la cual se encontrará el apartado expires….en caso de tener el valor "never (nunca en español)" significa que hemos hecho todo bien, por el contrario, si tiene algún tiempo definido, han hecho algo mal y tendrán que volver al paso 2.

4. Obtener numero de me gusta con php

//Creamos la función para obtener los me gusta
function FacebookFans($name){
$accesstoken = "AQUI SU ACCESS TOKEN";
$result = file_get_contents("https://graph.facebook.com/v2.7/$name?fields=name,likes&access_token=$accesstoken");
$result = json_decode($result,true);return $result["likes"];}
//Obtenemos el numero de me gusta
echo FacebookFans("Nombre");

Finalmente, después de tantos procedimientos largos, el resultado vale la pena. Ahora, a actualizar el antiguo script de Facebook Graph por el nuevo.

  1. condexsystems

    para la version 2.8 cambia el json_decode me marca error en esta parte $result = json_decode($result,true);return $result[“likes”];}

  2. Jorge

    Hola que tal es te aporte esta muy bien, pero ahora se debe usar la siguiente sintaxis para la version 2.7.
    $result = file_get_contents(“https://graph.facebook.com/v2.7/$name?fields=name,fan_count&access_token=$accesstoken”);

    Saludos

  3. bwilian

    Soy novato en esto y tengo como trabajo sacar cuantos “me gustas” “compartidos” de una pagina de facebook si alguien me puede ayudar con esto se los agradecería por donde inicio???

    1. Adrián PrunedaAdrián Pruneda

      Hola, no termino de entender a qué te refieres; si tienes acceso a tu sitio y soporta la edición del mismo, puedes agregar el script PHP que dejé al final…sólo tienes que agregar tu access token y el nombre de usuario de tu fanpage.

  4. Isa

    Hola,

    muy buen articulo.
    Quería saber si esto solo sirve para tu sacar los fans de tu propia pagina de facebook o podría también obtener los fans de cualquier otra sin necesidad de pedirle permiso. Por ejemplo, como lo hacen los plugins de contadores sociales.

    Pero es que cuando pongo un nombres de usuario o pagina me dice:
    “message”: “(#803) Cannot query users by their username (isanchezsaez)”,

    Muchas gracias!

    1. Adrián PrunedaAdrián Pruneda

      Hola, el tutorial es únicamente para tus paginas; Sí es posible obtener los me gusta de cualquier otra página sin requerir el código de acceso, sin embargo, es un procedimiento diferente.