基于RestFB获取Facebook帖子评论的用户ID
嘿,我来帮你搞定用RestFB获取Facebook帖子评论用户ID的问题!你之前的尝试没成功,大概率是因为没明确指定评论里的用户字段——RestFB需要你精准声明要拉取的嵌套数据才行。下面是具体的解决步骤:
1. 确保使用最新版RestFB
旧版本的RestFB可能对Facebook Graph API的字段嵌套支持不太完善,先把依赖更新到最新版,比如Maven里的依赖:
<dependency> <groupId>com.restfb</groupId> <artifactId>restfb</artifactId> <version>2024.2.0</version> <!-- 替换成最新版本 --> </dependency>
2. 正确构造请求,指定评论的用户字段
你需要在请求参数里明确指定comments的子字段,比如from.id(用户ID)、from.name(用户名)这些,而不是只请求comments本身。示例代码如下:
// 初始化FacebookClient(确保传入有效的访问令牌) FacebookClient facebookClient = new DefaultFacebookClient("你的访问令牌", Version.LATEST); // 目标帖子ID,格式是「页面ID_帖子ID」或者「用户ID_帖子ID」 String targetPostId = "123456789_987654321"; // 构造请求参数,指定要获取的字段:包括评论的作者ID、姓名、评论内容等 Parameter[] requestParams = Parameter.withFields( "comments.order(chronological).summary(true).limit(100){from.id,from.name,message,created_time}" ); // 获取包含评论数据的帖子对象 Post fetchedPost = facebookClient.fetchObject(targetPostId, Post.class, requestParams); // 遍历评论列表,提取用户ID if (fetchedPost.getComments() != null && fetchedPost.getComments().getData() != null) { for (Comment comment : fetchedPost.getComments().getData()) { User commentAuthor = comment.getFrom(); if (commentAuthor != null) { String userId = commentAuthor.getId(); String userName = commentAuthor.getName(); System.out.println("评论用户ID: " + userId + " | 用户名: " + userName); } } }
3. 处理大量评论的分页场景
如果帖子的评论数量超过你设置的limit(比如上面的100条),需要用fetchConnection来处理分页:
// 建立评论的分页连接 Connection<Comment> commentConnection = facebookClient.fetchConnection( targetPostId + "/comments", Comment.class, Parameter.with("order", "chronological"), Parameter.with("fields", "from.id,from.name,message"), Parameter.with("limit", 100) ); // 遍历所有分页的评论 for (List<Comment> commentPage : commentConnection) { for (Comment comment : commentPage) { User author = comment.getFrom(); if (author != null) { System.out.println("评论用户ID: " + author.getId()); } } }
4. 权限与常见坑点排查
- 权限确认:虽然你说启用了所有权限,还是要核对是否包含
pages_read_engagement(访问公共页面帖子)或user_posts(访问用户个人帖子),测试令牌要确保未过期且关联了正确的测试应用。 - 帖子ID格式:必须是完整的ID(比如从页面帖子详情里复制的
页面ID_帖子ID),不能只填帖子的后半段。 - Graph API版本:初始化FacebookClient时指定
Version.LATEST,避免因API版本兼容问题导致字段无法获取。
内容的提问来源于stack exchange,提问作者Evandro
相关产品推荐
相关产品推荐

