使用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错误。
修复步骤
- 导入
json模块,用于将Python列表序列化为JSON字符串 - 修正
attached_media参数格式,将列表转为JSON字符串后传入 - 完善图片上传异常处理,避免上传失败时
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
相关产品推荐
相关产品推荐

