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.
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.
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.
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)
¿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.
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.
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.
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.