如何用Facebook Java SDK实现带图定时帖子发布及规划项查询?
使用Facebook Java Business SDK 17.0.3实现定时带图帖子及获取已定时项目
依赖配置
<dependency> <groupId>com.facebook.business.sdk</groupId> <artifactId>facebook-java-business-sdk</artifactId> <version>17.0.3</version> </dependency>
一、发布定时带图帖子(同步到Meta Business Suite规划工具)
要实现定时带图帖子并同步到规划工具,需先将图片上传至页面相册,再创建定时Feed帖子,核心是设置scheduled_publish_time参数。
完整代码实现
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Calendar; public class ScheduledPageFeedPostWithImage { public static void main(String args[]) throws APIException { String accessToken = "<ACCESS_TOKEN>"; String pageId = "<PAGE_ID>"; APIContext context = new APIContext(accessToken).enableDebug(true); // 1. 上传图片到页面相册(不直接公开,仅作为帖子附件) File imageFile = new File("path/to/your/image.jpg"); String photoId = new Page(pageId, context) .createPhoto() .setImage(imageFile) .setPublished(false) .execute() .getId(); // 2. 设置定时发布时间(示例为1小时后,需转换为秒级时间戳) Calendar publishTime = Calendar.getInstance(); publishTime.add(Calendar.HOUR_OF_DAY, 1); long scheduledPublishTime = publishTime.getTimeInMillis() / 1000; // 3. 创建定时Feed帖子 new Page(pageId, context) .createFeed() .setMessage("这是一条定时带图测试帖子") .setAttachedMedia("[{\"media_fbid\":\"" + photoId + "\"}]") .setScheduledPublishTime(scheduledPublishTime) .setPublished(false) // 必须设为false,否则会立即发布 .execute(); System.out.println("定时带图帖子已创建,将显示在Meta Business Suite规划工具中"); } }
关键注意事项
- 权限要求:确保
access_token拥有pages_manage_posts、pages_show_list权限,且已完成页面角色验证。 - 定时规则:
scheduled_publish_time必须是当前时间至少10分钟之后的秒级时间戳,这是Meta的硬性限制。 - 图片关联:上传图片时设置
published=false,避免图片单独公开,仅作为帖子的附件使用。
二、获取Meta Business Suite规划工具中的所有已定时项目
通过页面的scheduled_posts端点,可直接获取规划工具中所有已定时的帖子。
代码实现
import com.facebook.ads.sdk.*; import java.util.List; public class GetScheduledPosts { public static void main(String args[]) throws APIException { String accessToken = "<ACCESS_TOKEN>"; String pageId = "<PAGE_ID>"; APIContext context = new APIContext(accessToken).enableDebug(true); // 获取页面所有已定时帖子,指定需要返回的字段 APINodeList<Post> scheduledPosts = new Page(pageId, context) .getScheduledPosts() .setFields("id,message,scheduled_publish_time,created_time,attachments") .execute(); // 遍历输出定时项目详情 for (Post post : scheduledPosts) { System.out.println("定时帖子ID: " + post.getId()); System.out.println("帖子内容: " + post.getMessage()); System.out.println("定时发布时间: " + post.getScheduledPublishTime()); System.out.println("创建时间: " + post.getCreatedTime()); System.out.println("---------------------------"); } // 处理分页(如果定时帖子数量超过默认返回上限) while (scheduledPosts.hasNextPage()) { scheduledPosts = scheduledPosts.getNextPage(); for (Post post : scheduledPosts) { // 重复上述输出逻辑 } } } }
关键说明
- 字段自定义:可根据需求添加更多返回字段,比如
status查看定时状态、from查看发布主体等。 - 分页处理:当定时帖子数量较多时,需通过
hasNextPage()和getNextPage()循环获取全部结果。
内容的提问来源于stack exchange,提问作者user10053673
相关产品推荐
相关产品推荐

