Python实现Facebook自动发帖遇权限及ID问题求助
解决Python自动发布Facebook个人主页帖子的问题
问题分析
你尝试的两种方案均失败,核心原因是API版本过时、权限配置错误、目标对象(个人主页/页面)混淆:
- facebook库方案错误:使用的API版本v3.0早已废弃,且错误适配了页面/群组的权限要求,个人主页发帖的权限逻辑完全不同。
- Requests方案错误:误用页面ID作为发帖目标,个人主页需用
me指代当前授权用户;同时未指定最新API版本,令牌也缺少必要权限。
可行解决方案
1. 前置准备(必须完成)
步骤1:创建并配置Facebook开发者应用
- 登录Facebook开发者平台,创建消费者类型应用。
- 添加「Facebook Login」产品,设置OAuth重定向URI(例如
http://localhost:8000,无需实际服务,仅用于获取令牌)。 - 在应用的「权限与功能」中,申请
publish_posts权限(个人主页发帖必需)。
步骤2:获取长期用户访问令牌
- 生成授权URL(替换
YOUR_APP_ID为你的应用ID):https://www.facebook.com/v18.0/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=http://localhost:8000&scope=publish_posts&response_type=token - 打开该URL,用目标个人账号授权,授权后跳转的URL中会包含短期
access_token。 - 把短期令牌换成长期令牌(有效期60天,替换以下参数):
import requests app_id = "YOUR_APP_ID" app_secret = "YOUR_APP_SECRET" short_lived_token = "YOUR_SHORT_LIVED_TOKEN" response = requests.get( "https://graph.facebook.com/v18.0/oauth/access_token", params={ "grant_type": "fb_exchange_token", "client_id": app_id, "client_secret": app_secret, "fb_exchange_token": short_lived_token } ) long_lived_token = response.json()["access_token"] print("长期令牌:", long_lived_token)
2. 最终发布代码(使用Requests调用最新API)
import requests # 替换为你的长期令牌和内容 user_access_token = "YOUR_LONG_LIVED_ACCESS_TOKEN" post_message = "测试自动发布到个人主页" post_link = "https://www.gainsberg.co.uk/" # 可选,不需要可删除该参数 # 调用v18.0版本API发布到个人主页 post_url = "https://graph.facebook.com/v18.0/me/feed" payload = { "access_token": user_access_token, "message": post_message, "link": post_link } response = requests.post(post_url, data=payload) if response.status_code == 200: print("帖子发布成功!帖子ID:", response.json()["id"]) else: print(f"发布失败,状态码: {response.status_code}") print("错误详情:", response.json())
关键注意事项
- 开发模式下,仅应用的测试用户可以使用该功能;若要面向普通用户,需提交应用审核并通过
publish_posts权限的审核。 - 长期令牌每60天需要重新刷新一次,可通过相同的令牌交换接口实现。
- 切勿将应用密钥、访问令牌硬编码在代码中,建议使用环境变量管理(例如
os.getenv("FB_ACCESS_TOKEN"))。
内容的提问来源于stack exchange,提问作者user23404275
相关产品推荐
相关产品推荐

