page - token facebook api




facebook: ¿Token permanente de acceso a la página? (9)

Trabajo en un proyecto que tiene páginas de Facebook como una de sus fuentes de datos. Importa algunos datos periódicamente sin ninguna GUI involucrada. Luego usamos una aplicación web para mostrar los datos que ya tenemos.

No toda la información es pública. Esto significa que tengo que tener acceso a los datos una vez y luego guardarlos. Sin embargo, no conozco el proceso y aún no he encontrado un buen tutorial sobre eso. Supongo que necesito un access_token , ¿cómo puedo obtenerlo del usuario, paso a paso? El usuario es un administrador de una página de Facebook, ¿tendrá que agregar alguna aplicación de FB a la página?

EDITAR: Gracias @phwd por la propina. Hice un tutorial sobre cómo obtener un token de acceso a la página permanente, incluso con el offline_access ya no existe.

EDITAR: Me acabo de enterar de que se responde aquí: token de acceso de FB de larga duración para que el servidor extraiga la información de la página de FB


Además de los métodos mencionados, vale la pena mencionar que para aplicaciones de servidor a servidor, también puede usar esta forma de token de acceso permanente: app_id | app_secret Este tipo de token de acceso se llama Token de aplicación. En general, se puede usar para llamar a Graph API y consultar nodos públicos dentro de la aplicación back-end. Se menciona aquí: https://developers.facebook.com/docs/facebook-login/access-tokens


Además de los pasos recomendados en la respuesta de Vlasec , puede usar:

  • Graph API explorer para hacer las consultas, ej. /{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
  • Acceda a Token Debugger para obtener información sobre el token de acceso.

Después de buscar y usar palabras que no repetiré aquí para no violar las pautas de SO, encontré esta respuesta después de la cual pude dejar de programar y comenzar a dormir ...

Se refiere a esta herramienta que realmente ayudó mucho.

Espero que esta respuesta siga siendo válida cuando leas esto.

S.


Hice un script PHP para hacerlo más fácil. Crea una aplicación En Graph API Explorer, seleccione su aplicación y obtenga un token de usuario con permisos de manage_pages y publish_pages. Encuentra la ID de tu página en la parte inferior de su página Acerca de. Complete los valores de configuración y ejecute el script.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}

Mientras obtenía el token de acceso permanente, seguí los 5 pasos anteriores como Donut mencionó. Sin embargo, en el 5º paso, mientras se genera el token de acceso permanente, se devuelve el token de acceso de larga duración (que es válido durante 2 meses) y no el token de acceso permanente (que nunca caduca). Lo que noté es que la versión actual de Graph API es V2.5. Si tratas de obtener el token de acceso permanente con V2.5 es un token de acceso de larga duración. Intenta realizar una llamada a API con la V2.2 (si no puedes cambiar la versión en el explorador de API de gráficos, pulsa la API https://graph.facebook.com/v2.2/ {account_id} / accounts? access_token = {long_lived_access_token} en la nueva pestaña con V2.2) entonces obtendrás el token de acceso permanente (que nunca caduca)


Muchos de estos ejemplos no funcionan, no estoy seguro de si es debido a la aparición de 2.9v, pero me estaba golpeando la cabeza. De todos modos, tomé la versión @ dw1 y la modifiqué un poco con la ayuda del video @KFunk y conseguí que funcionara para mí en 2.9. Espero que esto ayude.

$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r = json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/{$args['pageid']}?fields=access_token&access_token={$longtoken}")); // get user id
    $finaltoken=$r->access_token;
    return $finaltoken;
}

Si solo está solicitando datos de página, puede usar un token de acceso a la página. Solo tendrá que autorizar al usuario una vez para obtener el token de acceso del usuario; extenderlo a dos meses de validez luego solicitar el token para la página. Todo esto se explica en el Escenario 5 . Tenga en cuenta que el token de acceso a la página adquirido solo es válido mientras el token de acceso del usuario sea válido.



Se alcanzó el límite de solicitud de aplicación (n. ° 4) - FB API v2.1 y superior

Esta respuesta me llevó a la "respuesta definitiva para nosotros", por lo que está muy relacionada, así que la añado aquí. Si bien está relacionado con lo anterior, es diferente y parece que FB ha simplificado el proceso un poco.

Nuestro compartir cuenta en nuestro sitio detenido funcionó cuando FB rodó sobre la API a v 2.1. En nuestro caso, ya teníamos una APP de FB y NO estábamos usando el inicio de sesión de FB. Entonces, lo que teníamos que hacer era obtener un token de la aplicación FB para hacer las nuevas solicitudes. Esto es desde el 23 de agosto de 2016.

  1. Vaya a: https://developers.facebook.com/tools/explorer
  2. Seleccione la versión de la API y luego use GET y pegue lo siguiente:

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    Deberá ir a buscar la identificación de su aplicación y su aplicación secreta desde la página de su aplicación. Página principal del desarrollador de aplicaciones FB

  3. Ejecute la consulta de gráfico y verá:

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    Dónde

    "app-id"
    y
    "app-token"
    será su ID de aplicación desde la página de su aplicación FB y la FB App HASH generada que acaba de recibir.

  4. A continuación, pruebe su nuevo token de acceso a la aplicación: FB Access Token tester

  5. Deberías ver, pegando el

    "app-token"
    en el comprobador de fichas, un token basado en una aplicación sin fecha / hora de caducidad.

En nuestro caso, estamos usando el FB js sdk, así que cambiamos nuestra llamada para que fuera así (tenga en cuenta que SOLAMENTE obtiene el recuento de recursos compartidos y no el recuento de compartir y comentar combinados como solía ser) :

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

Esto ahora está funcionando correctamente. Esto requirió mucha búsqueda y un informe oficial de fallas con FB para confirmar que tenemos que comenzar a realizar solicitudes tokenizadas a la API de FB. Como comentario, solicité que ellos (FB) agreguen una pista al código de error (n. ° 4) que menciona la solicitud tokenizada.

Acabo de recibir otro informe de uno de nuestros desarrolladores que dice que nuestro conteo de comentarios FB también se ha roto debido a la nueva necesidad de solicitudes tokenizadas, por lo que voy a actualizar esto en consecuencia.





facebook-access-token