Je travaille sur un projet dont l'une des sources de données est la page facebook. Il en importe périodiquement des données sans aucune interface graphique. Ensuite, nous utilisons une application Web pour afficher les données que nous avons déjà.
Toutes les informations ne sont pas publiques. Cela signifie que je dois accéder aux données une fois, puis les conserver. Cependant, je ne connais pas le processus et je n'ai pas encore trouvé de bon tutoriel à ce sujet. Je suppose que j'ai besoin d'un access_token
, comment l'obtenir de l'utilisateur, étape par étape? L'utilisateur est un administrateur d'une page facebook, devra-t-il ajouter une application FB de la nôtre à la page?
EDIT: Merci @phwd pour le tuyau. J'ai créé un tutoriel sur la manière d'obtenir un jeton d'accès à la page permanent, même avec offline_access
qui n'existe plus.
EDIT: Je viens de découvrir que sa réponse est la suivante: Jeton d’accès FB de longue durée pour que le serveur extrait les informations de page FB
Voici ma solution en utilisant seulement Graph API Explorer & Access Token Debugger :
(Testé avec API Version 2.9-2.11, 3.0-3.1)
En plus des étapes recommandées dans la réponse Vlasec , vous pouvez utiliser:
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_Explorer
J'ai créé un script PHP pour faciliter les choses. Créer une application . Dans l'explorateur d'API Graph , sélectionnez votre application et obtenez un jeton d'utilisateur doté des autorisations manage_pages et publish_pages. Recherchez l'ID de votre page au bas de sa page À propos. Remplissez les variables de configuration et exécutez le 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;
}
Une autre PHP réponse pour vous simplifier la vie. Mise à jour pour Facebook Graph API 2.9. Il suffit de remplir et de charger.
<?php
$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/v2.9/me?access_token={$longtoken}")); // get user id
$userid=$r->id;
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
if($r->id==$args['pageid']) $finaltoken=$r->access_token;
return $finaltoken;
}
?>
À partir du graphique 2.9, vous pouvez éviter beaucoup d’obtenir un jeton d’accès long en cliquant simplement sur Étendre le jeton d’accès au bas de l’outil Access Token Debugger , après avoir débogué un jeton d’accès court. Armé d'informations sur pageid
et longlivedtoken
, lancez le php ci-dessous pour obtenir le jeton d'accès permanent.
<?php
$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 --*/
'longlivedtoken'=>'',
'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/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>
Bien que le second code vous évite beaucoup de tracas, je vous recommande d'exécuter le premier code php, sauf si vous êtes très pressé, car il vérifie les propriétés de pageid et userid. Le second code ne fonctionnera pas si vous choisissez par erreur un jeton utilisateur.
J'ai essayé ces étapes: https://developers.facebook.com/docs/marketing-api/access#graph-api-Explorer
Obtenir un jeton d'accès à la page permanent
Un conseil: cela ne fonctionnait que lorsque la langue de la page est english.
Tout en obtenant le jeton d'accès permanent, j'ai suivi les 5 étapes décrites ci-dessus par Donut. Cependant, lors de la 5ème étape, tout en générant un jeton d'accès permanent, il renvoie le jeton d'accès de longue durée (valable 2 mois) et non pas un jeton d'accès permanent (qui n'expire jamais). Ce que j'ai remarqué, c'est que la version actuelle de Graph API est la V2.5. Si vous essayez d’obtenir le jeton d’accès permanent avec la V2.5 en lui donnant un jeton d’accès de longue durée. Essayez de passer un appel API avec la V2.2 (si vous ne pouvez pas changer de version dans l’API Explorer du graphique, appuyez sur l’appel d’API https://graph.facebook.com/v2.2/ {account_id}/accounts? access_token = {long_lived_access_token} dans le nouvel onglet avec V2.2), vous obtiendrez le jeton d'accès permanent (qui n'expire jamais)
Si vous ne demandez que des données de page, vous pouvez utiliser un jeton d'accès à la page. Vous ne devrez autoriser l'utilisateur qu'une seule fois pour obtenir le jeton d'accès de l'utilisateur; étendez-le à deux mois de validité, puis demandez le jeton pour la page. Tout cela est expliqué dans Scénario 5 . Notez que le jeton d'accès à la page acquise n'est valide que tant que le jeton d'accès utilisateur est valide.
Outre les méthodes mentionnées, il convient de mentionner que, pour les applications serveur à serveur, vous pouvez également utiliser cette forme de jeton d'accès permanent: App_id | app_secret Ce type de jeton d'accès est appelé jeton d'application. Il peut généralement être utilisé pour appeler l'API Graph et interroger des noeuds publics dans le back-end de votre application . Il est mentionné ici: https://developers.facebook.com/docs/facebook-login/access-tokens
Beaucoup de ces exemples ne fonctionnent pas, je ne sais pas si c'est à cause de la sortie de la version 2.9v, mais je me suis cogné la tête. Quoi qu'il en soit, j'ai pris la version @ dw1 et je l'ai légèrement modifiée à l'aide de la vidéo @KFunk, et cela a fonctionné pour moi pour la version 2.9. J'espère que cela t'aides.
$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;
}
Grâce à @donut, j’ai réussi à obtenir le jeton d’accès qui n’expire jamais en JavaScript.
// Initialize exchange
fetch('https://graph.facebook.com/v3.2/oauth/access_token?grant_type=fb_exchange_token&client_id={client_id}&client_secret={client_secret}&fb_exchange_token={short_lived_token}')
.then((data) => {
return data.json();
})
.then((json) => {
// Get the user data
fetch(`https://graph.facebook.com/v3.2/me?access_token=${json.access_token}`)
.then((data) => {
return data.json();
})
.then((userData) => {
// Get the page token
fetch(`https://graph.facebook.com/v3.2/${userData.id}/accounts?access_token=${json.access_token}`)
.then((data) => {
return data.json();
})
.then((pageToken) => {
// Save the access token somewhere
// You'll need it at later point
})
.catch((err) => console.error(err))
})
.catch((err) => console.error(err))
})
.catch((err) => {
console.error(err);
})
puis j'ai utilisé le jeton d'accès enregistré comme celui-ci
fetch('https://graph.facebook.com/v3.2/{page_id}?fields=fan_count&access_token={token_from_the_data_array}')
.then((data) => {
return data.json();
})
.then((json) => {
// Do stuff
})
.catch((err) => console.error(err))
J'espère que quelqu'un pourra couper ce code parce que c'est un peu brouillon, mais c'était le seul moyen auquel je pouvais penser.
Nombre maximal de demandes d'application atteint (# 4) - FB API v2.1 et versions supérieures
Cette réponse m'a conduit à la "réponse ultime pour nous" et est donc très liée, je l'ajoute ici. Bien que cela soit lié à ce qui précède, il est différent et il semble que FB ait quelque peu simplifié le processus.
Nos comptes de partage sur notre site ont cessé de fonctionner lorsque FB a transféré l’API en v 2.1. Dans notre cas, nous avions déjà une application FB et nous n'utilisions PAS le nom d'utilisateur FB. Il nous fallait donc un FB APP Token pour effectuer les nouvelles demandes. C'est à partir du 23 août 2016.
Sélectionnez la version de l'API, puis utilisez GET et collez ce qui suit:
/oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
Vous voudrez aller récupérer votre app id et votre app secret depuis la page de votre application. Page principale du développeur FB Apps
Exécutez la requête graphique et vous verrez:
{
"access_token": "app-id|app-token",
"token_type": "bearer"
}
Où
"app-id"et
"jeton d'application"sera votre identifiant d'application à partir de la page de votre application FB et le FB App HASH généré que vous venez de recevoir.
Ensuite, testez votre nouveau jeton d'accès à l'application: Testeur de jetons d'accès FB
Vous devriez voir, en collant le
"jeton d'application"dans le testeur de jetons, un jeton basé sur une application unique sans date/heure d'expiration.
Dans notre cas, nous utilisons le ss du FB js, nous avons donc modifié notre appel pour qu'il soit comme suit (notez que ceci SEULEMENT obtient le nombre de partages et non le nombre de partages et de commentaires comme auparavant)):
FB.api(
'/','GET',{
// this is our FB app token for our FB app
access_token: FBAppToken,
"id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}
Cela fonctionne maintenant correctement. Il a fallu beaucoup de recherche et un rapport de bogue officiel avec FB pour confirmer que nous devions commencer à envoyer des requêtes symbolisées à l'API FB. En passant, je leur ai demandé (FB) d’ajouter un indice au code d’erreur (# 4) qui mentionne la demande à jeton.
Un de nos développeurs vient de signaler un autre rapport selon lequel le décompte des commentaires FB est également erroné en raison du nouveau besoin de requêtes numérotées. Je le mettrai à jour en conséquence.
Si vous avez l'application facebook, vous pouvez essayer avec app-id et app-secret.
Comme :
access_token={your-app_id}|{your-app_secret}
il ne sera pas nécessaire de changer le jeton fréquemment.
J'ai trouvé cette réponse qui fait référence à cet outil qui a vraiment beaucoup aidé.
J'espère que cette réponse est toujours valable quand vous lisez ceci.