65 votes

Obtenir les statuts des pages publiques à l'aide de l'API Facebook Graph sans jeton d'accès

J'essaie d'utiliser l'API Facebook Graph pour obtenir le dernier statut d'une page publique, disons http://www.facebook.com/microsoft

Selon le http://developers.facebook.com/tools/explorer/?method=GET&path=microsoft%2Fstatuses - J'ai besoin d'un jeton d'accès. La page Microsoft étant "publique", est-ce bien le cas ? N'y a-t-il aucun moyen pour moi d'accéder à ce statut public sans jeton d'accès ?

Dans ce cas, quelle est la bonne méthode pour créer un jeton d'accès pour mon site web ? J'ai un App ID, mais tous les exemples donnés à http://developers.facebook.com/docs/authentication/ décrire le traitement de la connexion de l'utilisateur. Je veux simplement récupérer la dernière mise à jour de l'état de la page Microsoft et l'afficher sur mon site.

64voto

Anatoly Lubarsky Points 2561

C'est un choix délibéré. Auparavant, il était possible d'obtenir le dernier état d'une page publique sans jeton d'accès. Cela a été modifié afin de bloquer l'accès anonyme non identifié à l'API. Vous pouvez obtenir un jeton d'accès pour l'application (si vous n'avez pas d'application Facebook pour votre site web, vous devriez en créer une) avec l'appel suivant en utilisant l'API graphique :

https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&
grant_type=client_credentials  

C'est ce qu'on appelle le jeton d'accès à l'application. Ensuite, vous procédez à l'appel API proprement dit en utilisant le jeton d'accès à l'application mentionné ci-dessus.

J'espère que cela vous aidera

4 votes

Après avoir obtenu le jeton d'application et l'avoir transmis à " graph.facebook.com/PADEID/status?access_token= (en anglais) " J'obtiens l'erreur "Un jeton d'accès utilisateur est requis pour demander cette ressource".

0 votes

La réponse que j'obtiens lors d'un appel à cette URL est de type text/plain je suis confus

11 votes

Aaaaaaaaaaaaaaaaaaah ! Attention, ne publiez pas le secret de votre application sur la place publique. C'est un secret ! Ce code est parfait s'il reste côté serveur.

33voto

Hassan Siddique Points 333

Vous pouvez utiliser l'AppID et la clé secrète pour obtenir les posts/feed publics de n'importe quelle page. De cette façon, vous n'avez pas besoin d'obtenir le code d'accès. Appelez-le comme ci-dessous.

https://graph.facebook.com/PAGE-ID/feed?access_token=APP-ID|APP-SECRET

Et pour obtenir des postes.

https://graph.facebook.com/PAGE-ID/posts?access_token=APP-ID|APP-SECRET

4voto

Acanthuslabs Points 121

Il n'est plus possible d'utiliser l'API Facebook Graph sans jeton d'accès pour lire les statuts des pages publiques. Page Accès au contenu public dans les autorisations de l'API Facebook. Un jeton d'accès ne suffit pas. Vous devez utiliser appsecret_proof avec le jeton d'accès afin de valider que vous êtes l'utilisateur légitime. https://developers.facebook.com/blog/post/v2/2018/12/10/verification-for-individual-developers/ . Si vous êtes un développeur individuel, vous avez accès à trois pages de données (limitées), sauf si vous possédez une application professionnelle.

2voto

Forivin Points 1329

Vous pouvez obtenir les billets en demandant simplement le site que votre navigateur demande, puis en extrayant les billets du code HTML.

En NodeJS, vous pouvez procéder comme suit :

// npm i request cheerio request-promise-native
const rp = require('request-promise-native'); // requires installation of `request`
const cheerio = require('cheerio');

function GetFbPosts(pageUrl) {
    const requestOptions = {
        url: pageUrl,
        headers: {
            'User-Agent': 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0'
        }
    };
    return rp.get(requestOptions).then( postsHtml => {
        const $ = cheerio.load(postsHtml);
        const timeLinePostEls = $('.userContent').map((i,el)=>$(el)).get();
        const posts = timeLinePostEls.map(post=>{
            return {
                message: post.html(),
                created_at: post.parents('.userContentWrapper').find('.timestampContent').html()
            }
        });
        return posts;
    });
}
GetFbPosts('https://www.facebook.com/pg/officialstackoverflow/posts/').then(posts=>{
    // Log all posts
    for (const post of posts) {
        console.log(post.created_at, post.message);
    }
});

Pour plus d'informations et un exemple de récupération de plus de 20 postes, voir : https://stackoverflow.com/a/54267937/2879085

0voto

JerryParker Points 197

J'ai eu un cas d'utilisation similaire pendant quelques semaines et j'ai utilisé cette API :

https://rapidapi.com/axesso/api/axesso-facebook-data-service/

J'ai pu récupérer tous les messages et commentaires en quelques minutes, ce qui a très bien fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X