我正在尝试使用 Facebook Graph API 从公共页面获取最新状态,比如说 http://www.facebook.com/microsoft
根据 http://developers.facebook.com/tools/explorer/?method=GET&path=microsoft%2Fstatuses - 我需要一个访问令牌。由于 Microsoft 页面是“公开的”,这肯定是这种情况吗?如果没有访问令牌,我就无法访问这些公共状态吗?
如果是这种情况,为我的网站创建访问令牌的正确方法是什么?我有一个 App ID,但是 http://developers.facebook.com/docs/authentication/ 中的所有示例都描述了处理用户登录。我只是想在 Microsoft 页面上获取最新状态更新并将其显示在我的网站上。
这是设计使然。一旦可以从没有访问令牌的公共页面获取最新状态。这是为了阻止对 API 的身份不明的匿名访问而进行的更改。您可以使用图形 API 通过以下调用获取应用程序的访问令牌(如果您没有为您的网站设置 Facebook 应用程序 - 您应该创建它):
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&
grant_type=client_credentials
这称为应用访问令牌。然后,您使用上面的应用访问令牌继续实际的 API 调用。
希望这可以帮助
您可以使用 AppID 和 Secret 密钥来获取任何页面的公共帖子/提要。这样您就不需要获取访问令牌。像下面这样称呼它。
https://graph.facebook.com/PAGE-ID/feed?access_token=APP-ID|APP-SECRET
并获得职位。
https://graph.facebook.com/PAGE-ID/posts?access_token=APP-ID|APP-SECRET
不再可能使用没有访问令牌的 Facebook Graph API 来读取公共页面状态,这在 Facebook API 权限中称为 Page Public Content Access。访问令牌甚至是不够的。您必须将 appsecret_proof 与访问令牌一起使用,以验证您是合法用户。 https://developers.facebook.com/blog/post/v2/2018/12/10/verification-for-individual-developers/。如果您是个人开发者,您可以访问三页数据(有限),除非您拥有商业应用程序。
您可以通过简单地请求浏览器请求的站点然后从 HTML 中提取帖子来获取帖子。
在 NodeJS 中,你可以这样做:
// 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);
}
});
有关如何检索 20 多个帖子的详细信息和示例,请参阅:https://stackoverflow.com/a/54267937/2879085
几个星期以来,我有一个类似的用例,我使用了这个 API:
https://rapidapi.com/axesso/api/axesso-facebook-data-service/
我可以在几分钟内获取所有帖子和评论,对我来说效果很好。
不定期副业成功案例分享