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

使用Facebook Graph API创建带图定时帖遇参数错误求助

解决Facebook Graph API定时帖带图报错:param attached_media must be an array

错误原因

Facebook Graph API要求attached_media参数必须是JSON字符串格式的数组,而你当前直接传入了Python列表。facebook-sdk不会自动将嵌套列表/字典序列化为JSON字符串,导致API接收到的参数格式不符合要求,触发#100错误。

修复步骤

  1. 导入json模块,用于将Python列表序列化为JSON字符串
  2. 修正attached_media参数格式,将列表转为JSON字符串后传入
  3. 完善图片上传异常处理,避免上传失败时image_id未定义导致的后续错误

修改后的关键代码片段

import json  # 新增导入
import facebook
import datetime

# ... 其他原有代码不变 ...

def schedule_post(page_id, message, days_from_now, scheduled_time=None, image_path=None):
    try:
        # ... 其他原有代码不变 ...
        
        # Default image path: None (no image)
        attached_media = []
        if image_path:
            # Upload the image (check for errors)
            try:
                image = open(image_path, 'rb')
                image_id = graph.put_photo(image, album_path=f'{page_id}/photos', published=False, temporary=True)['id']
                print(image_id)
                # 仅上传成功时添加媒体ID
                attached_media.append({'media_fbid': image_id})
            except facebook.GraphAPIError as e:
                print(f"Error uploading image: {e}")
                # 上传失败则跳过媒体添加
                pass
        
        # ... 其他原有代码不变 ...

        # Construct parameters for the put_object method
        parameters = {
            'message': message,
            'published': False,
            'scheduled_publish_time': scheduled_time_str
        }

        # Add attached_media to parameters if it's not empty
        if attached_media:  # 判断列表是否非空,替代原有的非None判断
            # 将Python列表转为JSON字符串
            parameters['attached_media'] = json.dumps(attached_media)

        print("parameters:", parameters)
        
        # Schedule the post
        graph.put_object(page_id, "feed", **parameters)

        # ... 其他原有代码不变 ...
    except facebook.GraphAPIError as e:
        print(f"Error: {e}")
        return False

额外说明

  • 你之前切换到page_access_token的处理是正确的,定时帖必须以Page身份发布,不能用用户token,否则会触发#200权限错误。
  • temporary=True参数可以保留,它会将图片上传到临时相册,适合用于定时帖的媒体资源。

内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:25:56