You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Facebook自动发帖遇权限及ID问题求助

解决Python自动发布Facebook个人主页帖子的问题

问题分析

你尝试的两种方案均失败,核心原因是API版本过时、权限配置错误、目标对象(个人主页/页面)混淆:

  1. facebook库方案错误:使用的API版本v3.0早已废弃,且错误适配了页面/群组的权限要求,个人主页发帖的权限逻辑完全不同。
  2. Requests方案错误:误用页面ID作为发帖目标,个人主页需用me指代当前授权用户;同时未指定最新API版本,令牌也缺少必要权限。

可行解决方案

1. 前置准备(必须完成)

步骤1:创建并配置Facebook开发者应用

  • 登录Facebook开发者平台,创建消费者类型应用。
  • 添加「Facebook Login」产品,设置OAuth重定向URI(例如http://localhost:8000,无需实际服务,仅用于获取令牌)。
  • 在应用的「权限与功能」中,申请publish_posts权限(个人主页发帖必需)。

步骤2:获取长期用户访问令牌

  1. 生成授权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
    
  2. 打开该URL,用目标个人账号授权,授权后跳转的URL中会包含短期access_token。
  3. 把短期令牌换成长期令牌(有效期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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:52:54