bestblogs-daily-digest

BestBlogs.dev 每日内容早报。适用场景:(1) 生成每日早报/日报,(2) 获取过去 24 小时最值得阅读的内容,(3) 每天早上 9 点的内容精选,(4) 今日 AI/技术领域有什么重要动态,(5) 生成早报海报和分享文案。触发短语:'每日早报'、'今日早报'、'每日摘要'、'早报'、'日报'、'今天有什么值得看的'、'早间简报'、'每日精选'、'每日简报'、'生成早报'、'今日精选'、'bestblogs 早报'、'bestblogs 摘要'、'内容早报'、'技术早报'、'AI 早报'、'每日推荐'

安装

热度:6

下载并解压到你的 skills 目录

复制命令,发送给 OpenClaw 自动安装:

下载并安装这个技能 https://openskills.cc/api/download?slug=ginobefun-skills-bestblogs-daily-digest&locale=zh&source=copy
name:bestblogs-daily-digestdescription:"BestBlogs.dev 每日内容早报。适用场景:(1) 生成每日早报/日报,(2) 获取过去 24 小时最值得阅读的内容,(3) 每天早上 9 点的内容精选,(4) 今日 AI/技术领域有什么重要动态, (5) 生成早报海报和分享文案。触发短语:'每日早报', '今日早报', 'daily digest', '早报', '日报', '今天有什么值得看的', 'morning briefing', '每日精选', 'daily briefing', '生成早报', '今日精选', 'bestblogs 早报', 'bestblogs digest', '内容早报', '技术早报', 'AI 早报', '每日推荐'"

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
# 目录或文件不存在则跳过该天

从每份历史日报中提取:

  • 每条内容的标题核心主题关键词(如 "GPT-5.4 发布"、"OpenClaw 安全")

  • 构建「已覆盖主题」列表,用于后续筛选时排除
  • 不存在历史文件时跳过此步骤(首次生成或历史文件被清理)。


    阶段二:合并去重 + AI 智能筛选

    2.1 合并与去重

  • 合并数据:

  • - 请求 1-6(resource/list): 直接取 data.dataList 中的资源对象
    - 请求 7(tweet/list): 取 data.dataList[].resourceMeta 作为资源对象,同时保留 tweet.author.userName 用于输出时标注 @用户名
  • URL 去重: 按 url 去重(同一内容可能出现在多个分类查询结果中)

  • 主题去重(当日内部): 多篇内容讨论同一话题时,保留评分最高的一条,记录其他来源作为补充提及(格式:另见: 来源2, 来源3

  • 历史主题去重(跨日): 与阶段 1.5 构建的「已覆盖主题」列表比对,排除历史日报已推荐过的相同角度内容。判断规则:

  • - 排除: 同一事件的重复报道(如昨天已报道 "GPT-5.4 发布",今天另一个来源也报道了同样的发布消息)
    - 允许: 对已报道事件的深度分析、技术原理拆解、产品评测、独家访谈、行业影响解读等不同角度的内容(视为新增价值,正常参与筛选排序)
    - 判断标准: 标题和摘要是否提供了历史日报中未涵盖的实质性新信息或新视角

    2.2 AI 智能筛选 Top 10

    从合并后的候选池中选出 10 条最值得推荐的内容。筛选维度(按优先级排列):

    优先级 0: 时效性加权(3d 窗口下的时间衰减)

    由于使用 3 天窗口拉取数据,发布时间越近的内容优先级越高:

  • 今天发布: 无衰减,满权重

  • 昨天发布: 轻微降权(约 -5% 权重),仍然优先于前天

  • 前天发布: 明显降权(约 -15% 权重),仅在内容质量显著优于今天/昨天的内容时才入选
  • 时效性加权基于 publishTimeStamp 字段,与当前日期对比计算。同等质量下,优先选择更新的内容。

    优先级 1: 头部厂商重大动态

    以下厂商的新模型、新产品、新政策、重大更新自动进入候选:

  • 国际: OpenAI, Anthropic, Google/Gemini, Meta AI, xAI

  • 国内: 阿里巴巴/通义,腾讯,DeepSeek, 月之暗面/Kimi, 智谱/GLM, Minimax, 百度/文心,字节/豆包
  • 优先级 2: AI Coding 专题

    关于以下工具、方法论、实践经验的内容加权提升:

  • Claude Code, Codex, Cursor, Windsurf, GitHub Copilot, Devin

  • AI 辅助编程最佳实践、Agent 开发、MCP 协议
  • 优先级 3: 高优来源加权

    来自以下来源的内容加权提升(按 sourceName 或推文作者 userName 匹配):

    文章/博客来源:

  • 国际: Latent Space, Simon Willison's Weblog, LangChain Blog, deeplearning.ai, The GitHub Blog, InfoQ, The Cloudflare Blog, Google Developers Blog, freeCodeCamp.org, Spring Blog, Elevate (Addy Osmani), The Pragmatic Engineer, OpenClaw Blog

  • 国内: 机器之心,新智元,量子位,赛博禅心,数字生命卡兹克,十字路口 Crossing, 歸藏的 AI 工具箱,Founder Park, 腾讯科技,腾讯技术工程,InfoQ 中文,阮一峰的网络日志,宝玉的分享,SuperTechFans, Datawhale, 魔搭 ModelScope 社区,阿里技术,阿里云开发者,腾讯云开发者,大淘宝技术,前端早读课
  • 播客/视频来源:

  • 国际: Lenny's Podcast, Y Combinator, a16z, The Pragmatic Engineer, OpenAI (YouTube), Anthropic (YouTube), Google DeepMind (YouTube), AI Engineer

  • 国内: 张小珺 Jùn|商业访谈录,十字路口 Crossing (播客), 晚点 LatePost
  • 推文作者 (按 userName 匹配):

  • 厂商官方: @OpenAI, @OpenAIDevs, @AnthropicAI, @GoogleDeepMind, @GeminiApp, @cursor_ai, @LangChainAI, @github

  • 行业领袖: @sama (Sam Altman), @gdb (Greg Brockman), @karpathy (Andrej Karpathy), @AndrewYNg (Andrew Ng), @demishassabis (Demis Hassabis), @OfficialLoganK (Logan Kilpatrick), @satyanadella (Satya Nadella), @sundarpichai (Sundar Pichai)

  • 投资人/创业者: @pmarca (Marc Andreessen), @paulg (Paul Graham), @naval (Naval), @lennysan (Lenny Rachitsky), @hwchase17 (Harrison Chase)

  • 中文圈: @dotey (宝玉), @lexfridman (Lex Fridman)
  • 优先级 4: 内容质量与阅读价值

  • score 评分(基础权重)

  • 内容深度(长文/深度分析 > 短资讯)

  • 读者阅读的迫切性(时效性强的 > 常青内容)

  • 独特视角或原创洞察
  • 筛选输出

    对每条入选内容记录:

  • 排名(1-10)

  • 入选理由(一句话)

  • 如有同话题的其他来源,记录补充来源
  • 不要求覆盖每个分类或内容类型 — 纯按内容重要性排序。


    阶段三:生成三种输出

    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 中可直接点击

  • Top 1 的内容适当增加篇幅(2-3 句摘要 + 为什么值得关注)

  • 其余每条 1-2 句摘要

  • 同话题有多个来源时:另见: 来源2, 来源3

  • 关键词 3-5 个,提取自当日最热话题,用 / 分隔

  • 内容类型标识:推文标注 @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>

    每张卡片包含:

  • 墨蓝序号 + 衬线体标题(可点击,链接到 readUrl)

  • 来源 | 分类 | 评分(中灰辅助行)

  • 1-2 句摘要(深炭灰正文)

  • Top 1 额外展示:主要观点(如有)、为什么值得关注

  • 内容类型标识:文章无标注、推文 @ 前缀、播客/视频显示时长胶囊标签
  • 设计禁忌:

  • 不要使用渐变背景、发光效果、蓝紫科技感

  • 不要给每张卡片加投影 — 用分隔线代替

  • 不要塞满画面 — 留白是设计的一部分

  • 不要超过两种强调色 — 琥珀是唯一的点睛
  • 3.3 信息图海报

    使用 image-gen skill 生成纵向信息图海报,仅包含 Top 5 内容。

    海报视觉风格:

    整体气质:高端建筑事务所作品集或 Monocle 杂志信息页 — 瑞士国际主义的克制与精准,每个元素恰到好处。

  • 色彩: 墨蓝 #1a365d 为主调 + 琥珀 #d97706 仅 Top 1 点睛 + 米白 #fefdfb 纸张背景

  • 质感: 细腻纸质噪点纹理覆盖全图,营造手工印刷质感,而非光滑数码感

  • 布局: 纵向 9:16,上下留白充足(顶部至少 60px,底部至少 80px)

  • 头部: "BestBlogs 早报" 衬线体标题 + 日期 + 3 个关键词胶囊标签(墨蓝细边框)

  • 主体: 5 条内容,每条用序号 + 标题 + 一句话摘要 + 来源,条目间用极细分隔线

  • Top 1: 左侧琥珀色竖线标记,标题加大,视觉权重最高

  • 底部: "BestBlogs.dev" 品牌标识 + 细线收尾

  • 字体风格: 标题用衬线体(有文化底蕴感),正文用无衬线体(清晰易读)

  • 留白: 大量留白让信息有呼吸感,条目间距 > 内容高度的 40%
  • 海报设计禁忌:

  • 不要蓝紫渐变科技感、不要发光粒子效果

  • 不要圆角气泡卡片堆叠 — 用平面排版 + 分隔线

  • 不要用力过猛 — 克制即高级
  • 调用方式:

    # 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

    默认生成海报,无需询问用户。仅在以下情况跳过:

  • 用户首次明确指定输出格式(如"只要文本"、"不需要海报")

  • image-gen skill 未安装(此时告知用户)

  • 阶段四:保存文件

    所有输出保存到项目根目录下:

    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 功能相近但定位不同:

  • bestblogs-daily-digest: 面向 BestBlogs 订阅者的每日简报产品,输出标准化日报格式

  • daily-content-curator: 跨源(BestBlogs + XGo)个人阅读清单,基于个人兴趣打分筛选
  • 如需个人阅读推荐(含 Twitter 推文),使用 daily-content-curator