做了一个小工具,每天自动从 V2EX 和 Hacker News 抓取热门内容,评分排序,可选 AI 总结,输出 Markdown 日报。
GitHub: https://github.com/jackwener/kabi-digest
跑一次大概这样:
📥 collect — 2026-03-01
🔶 Hacker News
Fetching top... 30 stories
🟢 V2EX (pages: 3)
Fetching hot... 9 topics
Fetching create... 60 topics
Fetching programmer... 60 topics
💾 HN: 30 fetched → 85 total in pool
💾 V2EX: 129 fetched → 203 total in pool
✅ Data collected.
生成时:
📊 HN: 0 fetched, 85 pooled → 20 ranked
📊 V2EX: 0 fetched, 203 pooled → 20 ranked
📎 Enriching V2EX items with supplements...
📎 想要给父母在农村建个四合院... ✓ 2 条附言 (API)
📎 公司的 AI 客服被真人干掉了... ✓ (Jina fallback)
🤖 OpenAI raises $110B... ✓
🤖 全职独立开发满一个月... ✓
✅ out/hn-2026-03-01.md
✅ out/v2ex-2026-03-01.md
一开始只是想用 V2EX API 抓个热门列表,后来发现光一次 /topics/hot.json 只有 10 条不太够,就加了分页抓取和数据累积。
collect / generate 分离是为了省 token:白天定时 collect 只积累原始数据,晚上跑一次 generate --no-fetch 一次性评分 + AI 总结。这样 AI 只花一份 token ,但候选池是一整天多次采集的结果。
评分算法直接搬的 HN 排名公式:score = (engagement - 1) / (hours + 2) ^ 1.8,新且热门的帖子得分高,老帖自然衰减。V2EX 用回复数当 engagement ,HN 用 points 。
V2EX 附言是通过 V2 API 的 GET /topics/:id 拿到的 supplements 字段(官方文档没写但实际返回有)。API 失败时 fallback 到 Jina Reader 直接抓帖子页面。
bun install
cp config.example.yaml config.yaml
bun run generate --no-ai # 先不配 AI key ,看看效果
不配 AI key 也能用,只是没有摘要,输出标题 + 元数据。