Get public page statuses using Facebook Graph API without Access Token
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
Comments
-
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 over 12 yearsAfter 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áč over 11 yearsthe response i get from a call to this url is of type text/plain I'm confused
-
Tom Waddington over 11 yearsYikes! Careful - don't publish your app secret anywhere public. It's a secret! This code is fine if it stays server-side though.
-
Julian about 11 yearsSo 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 over 9 yearsThe secret token should not be used on the client side for security reason, see developers.facebook.com/docs/facebook-login/security/#appsecret
-
nalexn almost 9 yearsHere is a great article about access tokens in Facebook API 2.0: devils-heaven.com/facebook-access-tokens
-
Matthew Lock almost 9 yearsI get the following error when issuing above "An unknown error has occurred"
-
Vucko about 8 yearsIs there an expiring time for this solution?
-
Hassan Siddique about 8 yearsNo expiry time yet and it is working fine. But don't believe on Facebook API it keeps on changing their mind :)
-
Vucko about 8 yearsThanks for the quick reply :)
-
Turnerj about 7 yearsFor 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 about 7 yearsHi Anatoly. Thanks for this. I'd like to get post with image for facebook.com/artisanideasltd, could you give me detail example? Thanks
-
sirius2013 about 7 yearsThanks for this, but I can't get image of post, could you help how to get image of post?
-
Adrian B over 6 yearsIt's there a similar solution for page insights?
-
Tor Arne about 6 yearsIt seems facebook has now locked this down :( Getting the events of a page now requires a page access token
-
Mark almost 6 yearsNot just events either - it looks like getting feed data at all requires a page or user access token.
-
Mark almost 6 yearsIt 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 almost 6 yearsis it possible to get image with the text by this way ?
-
Vaibhav Bhatia almost 6 yearsapp 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 almost 6 yearsIt does not work any more as Facebook announcement here link . we need an approval or use access tokens.
-
Samuel Prevost over 5 yearsThe 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 over 5 yearsThis 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 over 4 yearsdoes 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-permissions#manage-pages and https://developers.facebook.com/docs/apps/review/feature#reference-PAGES_ACCESS for details.", "type": "OAuthException", "code": 10, "fbtrace_id": "AyMIAFAtq3JnkCn-Bn_2Ey1" } }
-
Yuseferi over 4 yearsDOES 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-permissions#manage-pages and https://developers.facebook.com/docs/apps/review/feature#reference-PAGES_ACCESS for details.", "type": "OAuthException", "code": 10, "fbtrace_id": "AOrqBQ9ZRwG8obAIIKuK72e" } }
-
Tharindu Sathischandra about 4 yearsThis 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.