Discord BOT获取Facebook特定用户帖子的技术解决方案咨询
解决Facebook帖子获取+Discord Bot即时推送的方案
嘿,我之前在做类似的Discord Bot时也踩过Facebook API的权限大坑,结合你的情况给你几个可行的方向:
一、先明确目标:公共主页还是个人用户?
Facebook的API权限对公共主页和个人用户账号的限制天差地别,先搞清楚你要抓取的对象:
如果目标是公共Facebook主页
这是官方API能支持的唯一合法路径,解决你遇到的(#100) Pages Public Content Access错误步骤如下:
- 申请必要权限:
你的Facebook应用必须通过审核获得Pages Public Content Access权限——在开发者后台的「应用审核」里提交用途说明(比如“用于将公共主页的帖子同步至Discord社区”),Facebook一般会通过这类非商用的合理申请。 - 正确生成调用凭证:
- 方案A:使用App Token(最省心,无需用户授权)
直接拼接你的APP_ID和APP_SECRET,格式为{APP_ID}|{APP_SECRET},用这个Token调用/{page-id}/posts端点即可获取公共帖子。 - 方案B:使用用户AccessToken + App Secret Proof
如果必须用用户授权的Token,需要生成appsecret_proof参数(HMAC-SHA256加密你的AccessToken,密钥为App Secret),以Node.js为例:
调用API时把const crypto = require('crypto'); const appSecret = '你的AppSecret'; const accessToken = '用户授权的AccessToken'; const appSecretProof = crypto.createHmac('sha256', appSecret).update(accessToken).digest('hex');appsecret_proof作为参数带上即可。
- 方案A:使用App Token(最省心,无需用户授权)
- 即时推送:配置Page Webhook
等权限通过后,给目标主页配置Webhook,订阅feed字段的更新,这样有新帖子时Facebook会主动推送给你的Bot,完全不需要轮询,延迟极低。
如果目标是个人用户的帖子(非公共主页)
Facebook的隐私政策几乎完全限制了第三方应用获取非授权个人用户的帖子,官方API走不通,只能考虑以下非官方方案(注意合规性,避免频繁请求触发反爬):
- 无头浏览器定时抓取:用Puppeteer或Playwright模拟浏览器访问用户的公开帖子页面,提取内容后推送到Discord。记得控制请求频率(比如每15分钟一次),避免被封IP。
- RSS中转:部分工具可以将Facebook个人主页的公开内容转换成RSS feed,你可以让Bot订阅这个RSS源来获取更新,但延迟可能比Webhook高一点,但比IFTTT好很多。
二、避坑提醒
- 不要尝试调用个人用户的
/{user-id}/posts端点:现在这个端点只对用户自己授权的应用开放,第三方无法获取其他用户的帖子。 - 始终使用最新版Graph API:旧版本的端点可能已经被废弃,权限规则也会变化。
- 非官方抓取要谨慎:如果你的Bot是公开使用的,可能违反Facebook的服务条款,建议优先考虑公共主页的官方方案。
内容的提问来源于stack exchange,提问作者mafu
相关产品推荐
相关产品推荐

