Get public page statuses using Facebook Graph API without Access Token

51,848

Solution 1

This is by design. Once it was possible to fetch the latest status from a public page without access token. That was changed in order to block unidentified anonymous access to the API. You can get an access token for the application (if you don't have a Facebook application set for your website - you should create it) with the following call using graph API:

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

This is called App Access Token. Then you proceed with the actual API call using the app access token from above.

hope this helps

Solution 2

You can use AppID and Secret key to get the public posts/feed of any page. This way you don't need to get the access-token. Call it like below.

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

And to get posts.

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

Solution 3

It's no more possible to use Facebook Graph API without access token for reading public page statuses, what is called Page Public Content Access in Facebook API permissions. Access token even is not enough. You have to use appsecret_proof along with the access token in order to validate that you are the legitimate user. https://developers.facebook.com/blog/post/v2/2018/12/10/verification-for-individual-developers/. If you are individual developer, you have access to three pages of the data (limited), unless you own a business app.

Solution 4

You can get the posts by simply requesting the site that your browser would request and then extracting the posts from the HTML.

In NodeJS you can do it like this:

// 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);
    }
});

For more information and an example of how to retrieve more than 20 posts see: https://stackoverflow.com/a/54267937/2879085

Share:
51,848
christofr
Author by

christofr

Solr / Lucene. Sheffield, UK. 🌲

Updated on July 08, 2022

Comments

  • christofr
    christofr almost 2 years

    I'm trying to use the Facebook Graph API to get the latest status from a public page, let's say http://www.facebook.com/microsoft

    According to http://developers.facebook.com/tools/explorer/?method=GET&path=microsoft%2Fstatuses - I need an access token. As the Microsoft page is 'public', is this definitely the case? Is there no way for me to access these public status' without an access token?

    If this is the case, how is the correct method of creating an access token for my website? I have an App ID, however all of the examples at http://developers.facebook.com/docs/authentication/ describe handling user login. I simply want to get the latest status update on the Microsoft page and display it on my site.

  • pdavis
    pdavis over 12 years
    After I get the application token and pass it to "graph.facebook.com/PADEID/statuses?access_token=" I get the error "A user access token is required to request this resource."
  • Peter Perháč
    Peter Perháč over 11 years
    the response i get from a call to this url is of type text/plain I'm confused
  • Tom Waddington
    Tom Waddington over 11 years
    Yikes! Careful - don't publish your app secret anywhere public. It's a secret! This code is fine if it stays server-side though.
  • Julian
    Julian about 11 years
    So is the resulting access token good forever? Do I have to do this for each client? Why require a token if you are just going to give them away free? A hoop-jumping exercise. :p
  • ocolot
    ocolot over 9 years
    The secret token should not be used on the client side for security reason, see developers.facebook.com/docs/facebook-login/security/#appsec‌​ret
  • nalexn
    nalexn almost 9 years
    Here is a great article about access tokens in Facebook API 2.0: devils-heaven.com/facebook-access-tokens
  • Matthew Lock
    Matthew Lock almost 9 years
    I get the following error when issuing above "An unknown error has occurred"
  • Vucko
    Vucko about 8 years
    Is there an expiring time for this solution?
  • Hassan Siddique
    Hassan Siddique about 8 years
    No expiry time yet and it is working fine. But don't believe on Facebook API it keeps on changing their mind :)
  • Vucko
    Vucko about 8 years
    Thanks for the quick reply :)
  • Turnerj
    Turnerj about 7 years
    For anyone else that sees this answer, this type of access token is called an App Access Token and they do state that combination of AppId and AppSecret for an access token in their documentation.
  • sirius2013
    sirius2013 about 7 years
    Hi Anatoly. Thanks for this. I'd like to get post with image for facebook.com/artisanideasltd, could you give me detail example? Thanks
  • sirius2013
    sirius2013 about 7 years
    Thanks for this, but I can't get image of post, could you help how to get image of post?
  • Adrian B
    Adrian B over 6 years
    It's there a similar solution for page insights?
  • Tor Arne
    Tor Arne about 6 years
    It seems facebook has now locked this down :( Getting the events of a page now requires a page access token
  • Mark
    Mark almost 6 years
    Not just events either - it looks like getting feed data at all requires a page or user access token.
  • Mark
    Mark almost 6 years
    It looks like this will continue work for applications that have previously accessed this data, but new applications will be subject to approval. Additionally in my testing with a development app leads me to believe that without a user or page access token your application needs to be approved specifically. (Hard to submit an app review when a development app can't perform the action though)
  • Md. Abu Taleb
    Md. Abu Taleb almost 6 years
    is it possible to get image with the text by this way ?
  • Vaibhav Bhatia
    Vaibhav Bhatia almost 6 years
    app access token is not working to get public feed and posts.I think now user access token is must to get feed or post? Any one have updates how to get user access token using graph api?
  • pouyada
    pouyada almost 6 years
    It does not work any more as Facebook announcement here link . we need an approval or use access tokens.
  • Samuel Prevost
    Samuel Prevost over 5 years
    The error message is: To use 'Page Public Content Access', your use of this endpoint must be reviewed and approved by Facebook. To submit this 'Page Public Content Access' feature for review please read our documentation on reviewable features: developers.facebook.com/docs/apps/review.
  • OyeHarish
    OyeHarish over 5 years
    This token work only for app related activities, For user activities and post you need to have user access token, for any page related activities you need to have page access token.
  • Yuseferi
    Yuseferi over 4 years
    does not work anymore : { "error": { "message": "(#10) This endpoint requires the 'manage_pages' permission or the 'Page Public Content Access' feature. Refer to https://developers.facebook.com/docs/apps/review/login-permi‌​ssions#manage-pages and https://developers.facebook.com/docs/apps/review/feature#ref‌​erence-PAGES_ACCESS for details.", "type": "OAuthException", "code": 10, "fbtrace_id": "AyMIAFAtq3JnkCn-Bn_2Ey1" } }
  • Yuseferi
    Yuseferi over 4 years
    DOES NOT WORK { "error": { "message": "(#10) This endpoint requires the 'manage_pages' permission or the 'Page Public Content Access' feature. Refer to https://developers.facebook.com/docs/apps/review/login-permi‌​ssions#manage-pages and https://developers.facebook.com/docs/apps/review/feature#ref‌​erence-PAGES_ACCESS for details.", "type": "OAuthException", "code": 10, "fbtrace_id": "AOrqBQ9ZRwG8obAIIKuK72e" } }
  • Tharindu Sathischandra
    Tharindu Sathischandra about 4 years
    This endpoint requires the 'manage_pages' permission or the 'Page Public Content Access' feature. Refer to developers.facebook.com/docs/apps/review/… and developers.facebook.com/docs/apps/review/… for details.