TH01_maintenance/.codex/tasks/twitter-monitor-mvp.md
2026-05-30 23:30:55 +08:00

7.5 KiB
Raw Permalink Blame History

Twitter Monitor MVP

日期2026-05-16 状态completed

背景

用户要求在 Steam MVP 已完成的基础上,新增 X.com/Twitter 玩家反馈采集与处理功能,目标源为 https://x.com/Tohotopia,采集范围为所有帖子以及所有回复,首轮全量,增量按时间,继续复用 RawItem -> raw_items -> OpenRouter -> analysis_results -> work_items -> dashboard 流程。

需求确认

  • 做什么:接入 X.com/Twitter 账号 Tohotopia 的账号帖子和每帖回复采集,归一为 RawItem 并进入现有同步、分析、dashboard 流程。
  • 不做什么:不改 dashboard 的核心数据结构;不把 Twitter 私有字段提升为 dashboard 查询字段;不在未登录时伪造空结果。
  • 成功标准本机登录态可用时CLI/同步能采集 Twitter 帖子与回复并入库去重,新增内容可进入 OpenRouter 分析和 dashboard 展示。
  • 关键约束X.com 当前页面/API/登录态属于动态事实,先以本机 smoke test 验证;采集失败不得删除旧数据。

文档/代码预读

  • Project AGENTS新渠道单独封装采集、解析、限流、登录态和失败处理运营判断必须可追溯到平台、原始链接、采集时间或批次。
  • Relevant docsREADME.md任务/方案/后续社区平台接入指南.md 明确新平台采集器输出 app.models.RawItem,复用三层数据模型。
  • Relevant codeapp/sync.py 当前只采 Steamapp/models.pyRawItem 可容纳 Twitter 数据;app/db.py 已有 raw_json(source, source_item_id) 唯一键。
  • 已确认事实:已有 social-media-scraper skill 支持 X.com 用户时间线和单帖回复,通过已登录 Chrome/CDP profile 拦截 API 输出 JSON/CSV。
  • 冲突 / 歧义:用户不确定是否需要登录态;本机 smoke test 已验证当前 profile 检测到 X.com 登录提示。

术语与冲突

  • Resolved termsTwitter/X 平台标识在代码中使用 twitter 作为配置前缀;来源类型使用 twitter_poststwitter_replies
  • Conflicts无。
  • Follow-up CONTEXT / glossary updates暂无项目级 CONTEXT.md,本次术语记录在任务文档。

当前计划

  • T1 预读文档与现有 Steam 流程代码。
  • T2 验证 X.com 目标页与可用采集工具前提。
  • T3 制定 Twitter 接入方案和数据映射。
  • T4 实现采集器与同步流程接入。
  • T5 补充 CLI/配置/文档与任务记录。
  • T6 运行 smoke test 验证入库、分析与 dashboard。

关键判断与证据

判断 类型(稳定原理/当前事实/推断) 证据 验证时间 未验证项 决策影响
新平台应输出 RawItem 后复用同步链路 稳定原理 README、后续社区平台接入指南、app/models.py 2026-05-16 避免 dashboard 直接依赖 Twitter 私有字段
X.com 当前采集需要登录态 当前事实 social-media-scraper 未登录提示;登录后小样本抓到 18 条 2026-05-16 全量回复数量和耗时 实现必须显式处理未登录失败并给出前置条件
复用已有 CDP 采集脚本比重写 X.com API 更稳妥 推断 已有 skill 支持 UserTweets/TweetDetail登录后项目同步入口成功入库并分析 2026-05-16 全量耗时 新增项目内适配层读取 JSON 并转 RawItem

执行记录

  • 14:00读取 AGENTS.mdREADME.md.codex/tasks/steam-monitor-mvp.md任务/方案/后续社区平台接入指南.md,确认新平台接入规则。
  • 14:05读取 social-media-scraper skill确认 X.com 用户时间线和单帖回复已支持,输出位置可指定。
  • 14:10运行 python C:\Users\jiajiankun\.codex\skills\social-media-scraper\scraper.py https://x.com/Tohotopia --max-no-new 1 --output-dir 任务/验证/twitter-smoke,结果为当前 Chrome profile 未登录 X.com。
  • 14:25新增 app/twitter.py,将 social-media-scraper 输出的 timeline/thread JSON 转为 RawItem,内容类型为 twitter_post / twitter_reply,来源为 twitter_posts / twitter_replies
  • 14:35扩展 app/config.pyapp/sync.pyapp/cli.pyapp/main.py,支持 TWITTER_ENABLED、平台级同步、Twitter 单平台 CLI、dashboard 类型筛选。
  • 14:42更新 .env.exampleREADME.mdrequirements.txt,补充 Twitter 登录前提、配置和依赖。
  • 14:50修正 Twitter 增量高水位,从“最近同步完成时间”改为“已入库 Twitter 内容的最大发布/采集时间”,避免漏掉发布时间早于同步结束时间的内容。
  • 14:55验证 python -m compileall app 通过;默认配置 python -m app.cli sync --platform twitter 返回 twitter_skipped=1;临时启用 Twitter 后返回 twitter_errors=1sync_runs.status=partial,未插入空 Twitter 数据。
  • 19:17用户在 CDP Chrome profile 登录 X.com 后,运行 social-media-scraper 小样本验证,抓到 18 条 Tohotopia 时间线内容。
  • 19:21运行项目同步小范围验证TWITTER_ENABLED=trueTWITTER_INCREMENTAL_MAX_NO_NEW=1TWITTER_THREAD_MAX_NO_NEW=1TWITTER_INCREMENTAL_REPLY_PARENT_LIMIT=2python -m app.cli sync --platform twitter。结果:twitter_fetched=26、新增 22、分析 22、已见 4。
  • 19:25数据库确认 Twitter 已入库 18 条 twitter_posts 和 4 条 twitter_replies;最近同步 id=12 状态为 success
  • 19:24-19:51用户设置 TWITTER_ENABLED=true 后启动 python -m app.cli sync --platform twitter --full。命令被用户中断后仍有进程存活但 30 秒内无文件增长、CPU 几乎不变,判断为不再推进。
  • 19:53停止残留全量进程 pid=81152,将 sync_runs id=13running 标记为 partial,保留已入库数据。最终 Twitter 数据为 34 条主帖、139 条回复,共 173 条,分析状态全部 done

当前状态

  • 已完成:文档/代码预读X.com 登录态前提验证Twitter 采集适配层、配置、同步、CLI、dashboard 文案和文档更新;编译、未登录失败路径、登录后小范围端到端验证。
  • 阻塞:无。
  • 下一步:如需执行“所有帖子及所有回复”的首轮全量,启用 .envTWITTER_ENABLED=true 后运行 python -m app.cli sync --platform twitter --full

五层变更候选

  • 无。

恢复入口

下次继续时先读:

  • 关键文件:app/twitter.pyapp/sync.pyapp/config.pyapp/cli.pyapp/main.py
  • 当前目标:把 https://x.com/Tohotopia 的帖子和回复接入现有 RawItem 流程。
  • 当前状态实现已完成X.com 登录态已写入 CDP profile小范围同步成功一次全量同步被中断后已清理残留进程并保留 173 条已分析数据。
  • 最近完成:清理全量残留进程,将 sync_runs id=13 标记为 partial。
  • 下一步:如需继续全量,可再次运行 python -m app.cli sync --platform twitter --full,现有去重会跳过已入库内容。
  • 不要做:不要把未登录导致的失败当作“无数据”;不要改 dashboard 数据模型。
  • 已改文件:.codex/tasks/twitter-monitor-mvp.mdapp/twitter.pyapp/config.pyapp/sync.pyapp/cli.pyapp/main.py.env.exampleREADME.mdrequirements.txt
  • 验证结果:python -m compileall app 通过;默认 Twitter 未启用会跳过;未登录会 partial登录后项目同步成功当前 Twitter 共 34 条主帖和 139 条回复173 条全部 done
  • 当前阻塞:无。