bestblogs-daily-digest
BestBlogs.dev 每日内容早报。适用场景:(1) 生成每日早报/日报,(2) 获取过去 24 小时最值得阅读的内容,(3) 每天早上 9 点的内容精选,(4) 今日 AI/技术领域有什么重要动态, (5) 生成早报海报和分享文案。触发短语:'每日早报', '今日早报', 'daily digest', '早报', '日报', '今天有什么值得看的', 'morning briefing', '每日精选', 'daily briefing', '生成早报', '今日精选', 'bestblogs 早报', 'bestblogs digest', '内容早报', '技术早报', 'AI 早报', '每日推荐'
Author
Category
Content CreationInstall
Download and extract to your skills directory
Copy command and send to OpenClaw for auto-install:
BestBlogs 每日早报 (Daily Digest)
从 BestBlogs.dev 过去 3 天的内容中智能筛选 10 条最值得关注的信息,生成纯文本、杂志风 HTML 和信息图海报三种形式的早报。使用 3 天窗口以弥补 RSS/微信公众号/时区导致的数据延迟,同时优先推荐发布时间更近的内容,并与历史日报去重避免重复推荐。
完整 API 参数详情见 references/api_reference.md。
认证
所有请求需要 X-API-KEY 请求头。从环境变量 BESTBLOGS_API_KEY 读取密钥:
-H "X-API-KEY: $BESTBLOGS_API_KEY"若 BESTBLOGS_API_KEY 未设置,提示用户配置。
接口地址:https://api.bestblogs.dev
工作流概览
- [ ] 阶段一: 并行拉取数据(7 个请求,时间范围 3d)
- [ ] 阶段 1.5: 读取历史日报,构建已覆盖主题列表
- [ ] 阶段二: 合并去重 + 历史去重 + AI 智能筛选 Top 10
- [ ] 阶段三: 生成三种输出
- [ ] 3.1 纯文本版(IM/社交媒体分享)
- [ ] 3.2 杂志风 HTML(浏览/截图)
- [ ] 3.3 信息图海报(Top 5,via image-gen)
- [ ] 阶段四: 保存文件阶段一:并行拉取数据
7 个请求并行执行,每组获取评分最高的 100 条,时间范围 3 天(弥补 RSS/微信/时区延迟):
# 1. AI 文章
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"ARTICLE","category":"Artificial_Intelligence"}'
# 2. 编程技术文章
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"ARTICLE","category":"Programming_Technology"}'
# 3. 商业科技文章
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"ARTICLE","category":"Business_Tech"}'
# 4. 产品设计文章
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"ARTICLE","category":"Product_Development"}'
# 5. 视频
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"VIDEO"}'
# 6. 播客
curl -s -X POST https://api.bestblogs.dev/openapi/v1/resource/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"type":"PODCAST"}'
# 7. 推文
curl -s -X POST https://api.bestblogs.dev/openapi/v1/tweet/list \
-H "Content-Type: application/json" \
-H "X-API-KEY: $BESTBLOGS_API_KEY" \
-d '{"currentPage":1,"timeFilter":"3d","sortType":"score_desc","userLanguage":"zh_CN","pageSize":100,"language":"all"}'并行执行所有 7 个请求。 客户端过滤:仅保留 score >= 85 的内容。
阶段 1.5: 读取历史日报
读取当前项目下最近 3 天的历史日报文件,构建「已覆盖主题」列表,用于阶段二去重:
# 历史日报存放在项目根目录 contents/bestblogs-digest/ 下
# 例如今天是 2026-03-08,则依次尝试读取:
# contents/bestblogs-digest/2026-03-07/digest.txt
# contents/bestblogs-digest/2026-03-06/digest.txt
# contents/bestblogs-digest/2026-03-05/digest.txt
# 目录或文件不存在则跳过该天从每份历史日报中提取:
不存在历史文件时跳过此步骤(首次生成或历史文件被清理)。
阶段二:合并去重 + AI 智能筛选
2.1 合并与去重
- 请求 1-6(resource/list): 直接取
data.dataList 中的资源对象- 请求 7(tweet/list): 取
data.dataList[].resourceMeta 作为资源对象,同时保留 tweet.author.userName 用于输出时标注 @用户名url 去重(同一内容可能出现在多个分类查询结果中)另见: 来源2, 来源3)- 排除: 同一事件的重复报道(如昨天已报道 "GPT-5.4 发布",今天另一个来源也报道了同样的发布消息)
- 允许: 对已报道事件的深度分析、技术原理拆解、产品评测、独家访谈、行业影响解读等不同角度的内容(视为新增价值,正常参与筛选排序)
- 判断标准: 标题和摘要是否提供了历史日报中未涵盖的实质性新信息或新视角
2.2 AI 智能筛选 Top 10
从合并后的候选池中选出 10 条最值得推荐的内容。筛选维度(按优先级排列):
优先级 0: 时效性加权(3d 窗口下的时间衰减)
由于使用 3 天窗口拉取数据,发布时间越近的内容优先级越高:
时效性加权基于 publishTimeStamp 字段,与当前日期对比计算。同等质量下,优先选择更新的内容。
优先级 1: 头部厂商重大动态
以下厂商的新模型、新产品、新政策、重大更新自动进入候选:
优先级 2: AI Coding 专题
关于以下工具、方法论、实践经验的内容加权提升:
优先级 3: 高优来源加权
来自以下来源的内容加权提升(按 sourceName 或推文作者 userName 匹配):
文章/博客来源:
播客/视频来源:
推文作者 (按 userName 匹配):
优先级 4: 内容质量与阅读价值
score 评分(基础权重)筛选输出
对每条入选内容记录:
不要求覆盖每个分类或内容类型 — 纯按内容重要性排序。
阶段三:生成三种输出
3.1 纯文本版
适合直接复制到 IM 群聊(微信/飞书/Slack)或社交媒体分享。IM 不渲染 markdown,因此使用纯文本格式,URL 独立成行确保可点击。
BestBlogs 早报 | YYYY-MM-DD
# AI Coding / Claude 4 / DeepSeek V3
[1] 标题
2-3 句摘要,概括核心信息和为什么值得关注。
来源: sourceName | 评分: 96
readUrl(BestBlogs 站内链接)
[2] 标题
一两句话摘要。
来源: sourceName | 评分: 93
readUrl(BestBlogs 站内链接)
...(共 10 条)
---
BestBlogs.dev - 遇见更好的技术阅读格式规则:
readUrl 链接(BestBlogs 站内链接),URL 独立成行确保在 IM 中可直接点击另见: 来源2, 来源3/ 分隔@userName,播客标注 [播客 XXmin],视频标注 [视频 XXmin],文章不标注3.2 杂志风 HTML
生成一个可直接在浏览器打开的独立 HTML 文件,信息量介于纯文本和海报之间,适合浏览和截图分享。
整体追求高端设计杂志(Monocle、Kinfolk)的气质 — 低调、专业、有文化底蕴,经得起反复观看。
视觉风格(BestBlogs 品牌 + 现代主义杂志美学):
| 维度 | 规范 |
|---|---|
| 色彩体系 | 墨蓝 #1a365d(主色/标题/序号)、琥珀 #d97706(唯一强调色,仅用于 Top 1)、米白纸张 #fefdfb(背景)、深炭灰 #374151(正文)、中灰 #6b7280(辅助信息) |
| 标题字体 | Georgia, 'Noto Serif SC', serif — 衬线体营造书卷气质 |
| 正文字体 | -apple-system, 'PingFang SC', 'Helvetica Neue', sans-serif |
| 数字/评分 | 'Inter', sans-serif — 等宽数字对齐 |
| 质感纹理 | body 叠加细腻纸质噪点(CSS SVG filter,opacity 0.03),营造纸张手工质感 |
| 卡片风格 | 无边框,仅用极淡分隔线 #e5e7eb 区隔条目;避免堆叠阴影,保持平面克制感 |
| Top 1 强调 | 左侧 3px 琥珀色竖线 + 浅琥珀背景 rgba(217,119,6,0.06),克制而醒目 |
| 留白 | 大量留白让信息有呼吸感 — 卡片间距 32px,内边距 24px,标题与摘要间距 12px |
| 宽度 | max-width 640px 居中,窄幅阅读体验 |
HTML 结构:
<!-- 独立 HTML,内联所有 CSS + SVG 噪点,无外部依赖 -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BestBlogs 早报 | YYYY-MM-DD</title>
<style>
/* 纸质噪点纹理 */
body::before {
content: '';
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
opacity: 0.03; pointer-events: none; z-index: 9999;
background-image: url("data:image/svg+xml,..."); /* inline SVG noise */
}
/* 其余样式内联 */
</style>
</head>
<body style="background: #fefdfb;">
<!-- 头部区域 -->
<!-- "BestBlogs 早报" 品牌标题(墨蓝,衬线体,letter-spacing 0.05em) -->
<!-- 日期(中灰,小号) -->
<!-- 关键词标签(墨蓝边框胶囊,背景透明,font-size 12px) -->
<!-- Top 1 精选卡片 -->
<!-- 琥珀色左边线 + 微暖背景 -->
<!-- 标题(墨蓝衬线体,font-size 20px) -->
<!-- 2-3 句摘要 + 主要观点 -->
<!-- 来源 | 分类 | 评分 -->
<!-- 2-10 常规条目 -->
<!-- 序号(墨蓝,Inter 字体,与标题同行) -->
<!-- 标题(可点击链接,衬线体,font-size 17px) -->
<!-- 1-2 句摘要(深炭灰,font-size 14px,line-height 1.6) -->
<!-- 来源 | 类型标签 | 评分(中灰,font-size 12px) -->
<!-- 条目间以极淡分隔线区隔 -->
<!-- 底部 -->
<!-- 细分隔线 -->
<!-- "BestBlogs.dev" 品牌标识(墨蓝,letter-spacing) -->
<!-- "遇见更好的技术阅读"(中灰,font-size 12px) -->
</body>
</html>每张卡片包含:
@ 前缀、播客/视频显示时长胶囊标签设计禁忌:
3.3 信息图海报
使用 image-gen skill 生成纵向信息图海报,仅包含 Top 5 内容。
海报视觉风格:
整体气质:高端建筑事务所作品集或 Monocle 杂志信息页 — 瑞士国际主义的克制与精准,每个元素恰到好处。
#1a365d 为主调 + 琥珀 #d97706 仅 Top 1 点睛 + 米白 #fefdfb 纸张背景海报设计禁忌:
调用方式:
# 1. 定位 image-gen skill 目录(resolve symlink)
IMAGE_GEN_SKILL_DIR=$(readlink -f ~/.claude/skills/image-gen 2>/dev/null || readlink -f ~/.claude/skills/baoyu-image-gen 2>/dev/null)
# 2. 将海报内容描述写入 prompt 文件(保存在输出目录)
# prompt 文件包含: 完整视觉风格描述 + 品牌色值 + 5 条内容的标题和摘要
# 3. 生成海报
bun run ${IMAGE_GEN_SKILL_DIR}/scripts/main.ts \
--promptfiles <output-dir>/poster-prompt.md \
--image <output-dir>/poster.png \
--ar 9:16 \
--quality 2k默认生成海报,无需询问用户。仅在以下情况跳过:
阶段四:保存文件
所有输出保存到项目根目录下:
contents/bestblogs-digest/
YYYY-MM-DD/
digest.txt # 纯文本版
digest.html # 杂志风 HTML
poster.png # 信息图海报创建目录(如不存在):
mkdir -p contents/bestblogs-digest/YYYY-MM-DD保存完成后,输出纯文本版内容到对话中,并告知用户三个文件的路径。
参数调整
根据用户输入调整:
| 用户表述 | 参数调整 |
|---|---|
| "本周早报" / "这周" | timeFilter: "1w",Top 10 → Top 15,历史去重仍生效 |
| "只看 AI" | 仅拉取 AI 分类 |
| "多给几条" / "Top 15" | 增加输出数量 |
| "不需要海报" / "只要文本" / 首次明确指定输出格式 | 跳过阶段 3.3 |
| "只要文本" | 仅生成纯文本版 |
| "评分 90 以上" | 客户端过滤阈值调整为 90 |
错误处理
重要: 始终先检查 response.success 再处理 response.data。部分错误返回 HTTP 200 但 success: false — 不要仅依赖 HTTP 状态码。
401: 检查 BESTBLOGS_API_KEY 是否已设置且有效400: 参数值不合法,检查枚举值500: 重试一次,仍失败则告知用户data 为空或 totalCount: 0: 该时间范围内无内容。若 3d 仍无结果,建议用户尝试 1w职责边界
本 skill 与 daily-content-curator 功能相近但定位不同:
如需个人阅读推荐(含 Twitter 推文),使用 daily-content-curator。