Facebook评论CSVJSONAPI 教程

如何把 Facebook 评论导出为 JSON 或 CSV

通过 API 导出公开 Facebook 帖子评论,保留标准化 JSON,并生成适用于 Excel、表格、分析和存档的安全 UTF-8 CSV。

SocQ更新于 2026年7月19日阅读约 5 分钟

十条 Facebook 评论可以手动复制到表格;几百条评论、缺失作者、emoji、换行和每天重复导出,就不再适合人工操作。

本教程使用 SocQ Facebook Comments API 采集公开帖子评论,保留标准化 JSON,并生成可供 Excel、Google Sheets、分析、审核或存档使用的安全 CSV。

**快速答案:**把公开帖子 URL 提交到 POST /v1/facebook/comments,保存任务 ID 并轮询到完成,将标准化评论记录保留为 JSON。CSV 应作为派生输出生成:一条评论一行、UTF-8 编码、显式保存 parent ID,并防止电子表格公式注入。

导出 Facebook 评论的三种方式

手动复制

适合少量可见评论和一次性任务,但无法复现,不保留稳定 ID,也很难审计回复、作者、时间和附件。

无代码导出工具

适合需要立即获得 Excel 文件的人。使用前应确认支持哪些公开 URL、是否包含回复和附件、最多能导出多少评论,以及供应商如何保存数据。

API 自动化

适合定期导出、多帖子、内部产品、定时报表、数据校验和数据库入库。初始接入工作更多,但能获得明确任务状态、原始 JSON、可重复转换代码和稳定输出。

JSON 还是 CSV?

JSON 应作为事实来源,因为它可以保留:

  • author 身份和资料字段;
  • metrics 中的可见点赞和回复数;
  • media 附件;
  • extra 中的来源帖子和父评论引用;
  • null 语义与未来新增字段。

CSV 更适合 Excel、Google Sheets、BI 导入、抽奖复核、标注和简单分析,但嵌套值必须展开,部分类型信息会丢失。

推荐流程:

公开帖子 URL
      ↓
Facebook Comments API
      ↓
不可变原始 JSON
      ↓
通过校验的标准化记录
      ↓
CSV / 数据仓库 / Dashboard

提交公开 Facebook 帖子 URL

curl -X POST "https://api.socq.ai/v1/facebook/comments" \
  -H "Authorization: Bearer $SOCQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": [
      "https://www.facebook.com/facebook/posts/POST_ID"
    ]
  }'

当前端点接受一个或多个受支持的公开 Facebook 帖子 URL,不能用搜索词、Page 名称或私密群组 URL 代替公开帖子。

提交前:

  1. 只接受 HTTPS 和 Facebook 域名。
  2. 如果支持分享短链,在受控预处理阶段解析。
  3. 不改变帖子身份时删除跟踪参数。
  4. 按规范 URL 去重。
  5. 保留原始输入作为来源证据。

轮询异步任务

创建响应包含任务 ID,应先持久化再轮询:

curl "https://api.socq.ai/v1/tasks/$TASK_ID?limit=100" \
  -H "Authorization: Bearer $SOCQ_API_KEY"

queuedrunning 是正常状态,轮询间应退避。成功后处理 data.results.items;响应出现 has_more 时,用 next_cursor 继续。

保存输入 URL、任务 ID、提交时间、终态、最后已提交 cursor 和错误类别。Worker 重启时恢复已有任务,不要重复创建。

理解评论记录

标准化记录示例:

{
  "id": "1569965031842178_123456789",
  "platform": "facebook",
  "resource": "comments",
  "type": "comment",
  "url": "https://www.facebook.com/facebook/posts/POST_ID",
  "text": "评论正文",
  "author": {
    "id": "100064860875397",
    "username": "facebook",
    "name": "facebook",
    "url": "https://www.facebook.com/facebook/"
  },
  "metrics": {
    "likes_count": 18,
    "replies_count": 2
  },
  "media": [],
  "created_at": "2026-07-07T19:17:33",
  "collected_at": "2026-07-08T08:59:45",
  "extra": {
    "post_id": "1569965031842178",
    "parent_comment_id": null,
    "input_url": "https://www.facebook.com/facebook/posts/POST_ID"
  }
}

字段可能不可用。缺失作者 ID 应保留 null,不能写成 "unknown";缺失点赞数不等于零。replies_count 是可见回复数,不自动保证同一结果集包含所有回复正文。

先保存原始 JSON

原始存储提供审计轨迹,也能在不重新请求来源的情况下生成修正后的 CSV。建议保存:

  • 供应商和端点版本;
  • 任务 ID 与原始输入;
  • 响应页和 cursor;
  • 采集时间;
  • 原始响应或记录批次;
  • 校验结果与转换版本。

存储应加密、限制访问并设置适当保留期。“公开可见”不代表不存在隐私义务。

使用 Python 导出 CSV

下面的代码展开嵌套字段,并保护以公式字符开头的单元格:

import csv
import json

FORMULA_PREFIXES = ("=", "+", "-", "@")

def spreadsheet_safe(value):
    if value is None:
        return ""
    text = str(value)
    if text.startswith(FORMULA_PREFIXES):
        return "'" + text
    return text

def flatten(comment):
    author = comment.get("author") or {}
    metrics = comment.get("metrics") or {}
    extra = comment.get("extra") or {}

    return {
        "post_id": extra.get("post_id"),
        "comment_id": comment.get("id"),
        "parent_comment_id": extra.get("parent_comment_id"),
        "author_id": author.get("id"),
        "author_name": spreadsheet_safe(author.get("name")),
        "comment_text": spreadsheet_safe(comment.get("text")),
        "likes_count": metrics.get("likes_count"),
        "replies_count": metrics.get("replies_count"),
        "created_at": comment.get("created_at"),
        "collected_at": comment.get("collected_at"),
        "source_url": extra.get("input_url") or comment.get("url"),
    }

with open("facebook-comments.json", encoding="utf-8") as source:
    comments = json.load(source)

rows = [flatten(comment) for comment in comments]
fields = list(rows[0].keys()) if rows else []

with open("facebook-comments.csv", "w", newline="", encoding="utf-8-sig") as output:
    writer = csv.DictWriter(output, fieldnames=fields)
    writer.writeheader()
    writer.writerows(rows)

utf-8-sig 会写入 UTF-8 BOM,帮助常见 Excel 版本识别 Unicode。Python CSV writer 会正确处理逗号、双引号和字段内换行。

不要通过字符串逗号拼接生成 CSV,因为评论正文可以合法包含这些字符。

使用 Node.js 导出

使用维护中的 CSV 库,不要自己拼接字符串:

import { writeFile } from "node:fs/promises";
import { stringify } from "csv-stringify/sync";

const unsafe = /^[=+\-@]/;
const safe = (value) => {
  if (value == null) return "";
  const text = String(value);
  return unsafe.test(text) ? `'${text}` : text;
};

const rows = comments.map((comment) => ({
  post_id: comment.extra?.post_id ?? "",
  comment_id: comment.id ?? "",
  parent_comment_id: comment.extra?.parent_comment_id ?? "",
  author_id: comment.author?.id ?? "",
  author_name: safe(comment.author?.name),
  comment_text: safe(comment.text),
  likes_count: comment.metrics?.likes_count ?? "",
  replies_count: comment.metrics?.replies_count ?? "",
  created_at: comment.created_at ?? "",
  collected_at: comment.collected_at ?? "",
  source_url: comment.extra?.input_url ?? comment.url ?? "",
}));

const csv = stringify(rows, { header: true });
await writeFile("facebook-comments.csv", `\uFEFF${csv}`, "utf8");

锁定依赖版本并验证结果行数;测试包含 emoji、逗号、引号、Tab、换行和公式前缀的评论。

评论与回复的数据模型

优先使用 comment_id 作为记录 key。顶层评论的 parent_comment_id 为 null;存在父子关系时,它引用父评论。

不要使用显示名称作为身份 key,名称既不唯一也不永久。也不能假设显示顺序就是时间顺序,平台可能排序评论并个性化可见顺序。

定期导出时,upsert 评论实体并为可变指标追加快照:

comment
  comment_id
  post_id
  parent_comment_id
  author_id
  text
  created_at
  first_seen_at
  last_seen_at

comment_snapshot
  comment_id
  collected_at
  likes_count
  replies_count

构建增量导出

每天运行的流程可以是:

  1. 提交规范帖子 URL。
  2. 轮询并校验完成任务。
  3. 按评论 ID upsert。
  4. 为返回记录更新 last_seen_at
  5. 只为成功采集追加指标快照。
  6. 从数据库或已校验 JSON 生成 CSV。
  7. 记录提交、返回、有效、新增、更新和拒绝数量。

一次失败或不完整采集不能证明旧评论已经删除,应要求多次成功观察或使用独立验证策略。

校验导出结果

检查:

  • 每条记录的 platformfacebookresourcecomments
  • 同一帖子内可用 ID 唯一;
  • 时间戳可一致解析;
  • 计数非负或为 null;
  • parent ID 不指向自身;
  • CSV 行数等于转换记录数;
  • emoji、多语言、引号和换行能往返;
  • 每行保留来源 URL 与采集时间。

可用少量公开浏览器样本对照,但浏览器显示数不是绝对完整性标准。评论可能被排序、过滤、删除、隐藏,或在两次观察之间变化。

负责任地使用评论数据

只采集合法目的所需的公开评论。不要绕过登录、私密群组、受众限制或技术控制,也不要用评论推断敏感特征或对个人作出高影响决定。

在需要时建立合法依据、限制保留、保护导出文件、控制表格分享、响应适用的删除和访问权利,并审查 Meta 当前条款和当地法律。本文不构成法律意见。

常见问题

能导出一个 Facebook 帖子的全部评论吗?

任何供应商都不应承诺普遍完整。结果取决于公开帖子、可见排序、来源行为、删除情况和端点覆盖。

是否包含回复?

标准模型可以表达父子关系和可见回复数,但应使用真实样本确认当前端点的回复正文覆盖。

可以导出私密群组评论吗?

此公开数据流程不支持,也不应绕过群组隐私或访问控制。

JSON 和 CSV 应该选哪个?

保留 JSON 作为可审计来源,为表格和简单导入生成 CSV。

Emoji 会丢失吗?

整个流程使用 UTF-8 时不会。示例还写入 BOM 以提高 Excel 兼容性。

为什么要防止公式前缀?

电子表格可能把以 =+-@ 开头的评论当作公式。添加文本前缀可以防止不可信正文被执行为表格内容。

可以每天自动导出吗?

可以。持久化任务状态、使用退避、按评论 ID 去重、追加指标快照,并且只从通过校验的结果生成文件。

FACEBOOK API

使用公开的 Facebook 输入测试工作流

提交公开输入,获取带有可追溯来源上下文的标准化记录。

查看 Facebook API