web-dev-qa-db-fra.com

Obtenez le statut 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 état d'une page publique, disons http://www.facebook.com/Microsoft

Selon 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 vraiment le cas? N'y a-t-il aucun moyen pour moi d'accéder à ces statuts publics sans jeton d'accès?

Si tel est le cas, comment est la bonne méthode pour créer un jeton d'accès pour mon site Web? J'ai un ID d'application, cependant tous les exemples sur http://developers.facebook.com/docs/authentication/ décrivent la gestion de la connexion utilisateur. Je veux simplement obtenir la dernière mise à jour de statut sur la page Microsoft et l'afficher sur mon site.

62
christofr

C'est par conception. Une fois qu'il était possible de récupérer 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éfini d'application Facebook pour votre site Web - vous devez le créer) avec l'appel suivant à l'aide de l'API graphique:

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

Il s'agit du jeton d'accès à l'application. Ensuite, vous procédez à l'appel d'API réel à l'aide du jeton d'accès à l'application ci-dessus.

j'espère que cela t'aides

62
Anatoly Lubarsky

Vous pouvez utiliser AppID et la clé secrète pour obtenir les publications/flux publics de n'importe quelle page. De cette façon, vous n'avez pas besoin d'obtenir le jeton 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 messages.

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

Vous pouvez obtenir les publications en demandant simplement le site que votre navigateur demanderait, puis en extrayant les publications du HTML.

Dans NodeJS, vous pouvez le faire comme ceci:

// npm install 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_time: 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: https://stackoverflow.com/a/54267937/2879085

0
Forivin