这个工具用于从 CNB Cool API 获取 issues 数据并自动生成 Hexo 博客文章。
功能特性
- 🔄 自动分页获取所有 issues
- 📝 获取 issue 详情(包含 body 内容)
- 🏷️ 智能解析标签:以”分类:”开头的标签转为分类,其他为普通标签
- 👤 自动提取作者、时间等信息
- ⏱️ 内置1秒延迟防止API限制
- 📁 生成标准 Hexo 文章格式(文件名:post-{number}.md)
- 🔄 覆盖已存在文件
- ⚙️ 可配置API地址
- 🔗 支持友情链接页面和详情处理
- 📋 解析多个友情链接代码块并自动更新数据文件
安装和使用
1. 安装依赖
首先安装dotenv包(用于加载.env文件):
1 | cd blog |
2. 设置Token
方法一:使用.env文件(推荐)
1 | # 在blog目录创建.env文件 |
.env文件示例:
1 | BLOG_CNB_ISSUE_TOKEN=your_token_here |
方法二:设置环境变量
1 | export BLOG_CNB_ISSUE_TOKEN="your_token_here" |
方法三:直接修改代码
在 generate-posts.js 中直接修改 CONFIG 对象。
2. 运行工具
在 blog 目录下运行:
1 | npm run fetch-posts |
或者直接运行:
1 | node generate-posts.js |
生成的文章格式
每篇文章都会生成标准的 Hexo front matter:
1 |
|
标签和分类处理
工具会智能处理issue标签:
- 分类标签:以
分类:开头的标签 → 转为Hexo分类(categories),自动移除前缀 - 普通标签:其他所有标签 → 保持为Hexo标签(tags)
示例
如果issue有以下标签:
分类:个人笔记→ 分类:个人笔记分类:技术分享→ 分类:技术分享JavaScript→ 标签:JavaScript前端→ 标签:前端
生成的front matter:
1 | categories: ["个人笔记", "技术分享"] |
友情链接处理
工具支持自动处理友情链接相关的issues:
友情链接页面
当issue标题为”友情链接”时,会生成到 source/friend/index.md,包含标准的Hexo front matter和页面内容。
友情链接详情
当issue标题为”友情链接详情”时,工具会解析issue body中的所有代码块,提取友情链接信息并更新 source/friend/_data.yml 文件。
支持的格式
代码块中的友情链接信息应按以下格式填写:
1 | 站点名称:小强IT屋 |
转换规则
- 支持中英文冒号(:和:)
- 自动解析多个代码块
- 站点名称和站点地址为必需字段
- 站点描述和站点头像为可选字段
- 自动去重,相同名称的链接会被更新
生成的YAML格式
1 | - name: 小强IT屋 |
文件命名规则
- 普通文章:
post-{issue_number}.md(例如:post-123.md) - 关于页面:当issue标题为”关于”时,生成到
about/index.md - 友情链接页面:当issue标题为”友情链接”时,生成到
friend/index.md - 友情链接详情:当issue标题为”友情链接详情”时,解析body中的代码块并更新
friend/_data.yml
配置选项
环境变量配置
BLOG_CNB_ISSUE_TOKEN: API认证token(必需)BLOG_CNB_ISSUE_API_URL: API基础URL
代码配置
在 generate-posts.js 中的 CONFIG 对象可以修改:
postsDir: 文章保存目录pageSize: 每页获取的issue数量delay: API调用间隔(毫秒)
注意事项
- API限制: 工具内置了1秒延迟防止被API限制
- 文件覆盖: 已存在的文章会被自动覆盖
- 错误处理: 单个文章获取失败不会影响其他文章
- Token安全: 建议使用环境变量而不是硬编码token
输出示例
1 | 🚀 开始获取issues并生成Hexo文章... |
故障排除
Token错误
1 | ❌ 请设置环境变量 BLOG_CNB_ISSUE_TOKEN 或修改CONFIG.token |
确保设置了正确的API token。
网络错误
检查网络连接和API地址是否正确。
权限错误
确保文章目录有写入权限。
完整代码
1 | const fs = require('fs'); |