使用github issue创建blog
原因
- 使用 github issue + mardkown 可以方便的写作博客
- 使用 github api + jekll 可以自动生成 博客
使用
- [install]复制本仓库下 generate.js 和 package.json 中的依赖 并执行
npm install
- [setup] 修改 generate.js 中的 仓库地址和 想要生成博客对应的label
- [usage]执行
node generate.js
(node version 10.x) ##
实现
- 搭建jekll博客,参考其他教程
- 生成博客
- 从github获取issue列表,参考 github api
async function getIssues() { return new Promise((resolve, reject) => { const options = { method: 'GET', headers: { "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" } }; var request = require('request'); request('https://api.github.com/repos/lotosbin/lotosbin.github.io/issues?labels=published', options, function (error, response, body) { if (!error && response.statusCode == 200) { resolve(JSON.parse(body)); } else { reject(error || `${response.statusCode}`) } }) }) }
- 把issue转换成article
async function issueToArticle(issue) { var moment = require('moment'); var fileName = `${moment(issue.created_at).format('YYYY-MM-DD')}-${issue.id}-${issue.title}` var title = issue.title; var body = issue.body; var content = `# ${title} \r\n ${body}` return { fileName, content } }
- 根据article 生成博客文件
const fs = require('fs'); casync function writeArticleToFile(article) { return new Promise((resolve, reject) => { var filePath = `_posts/${article.fileName}.markdown`; fs.writeFile(filePath, `${article.content}`, function (err) { if (err) { console.log(err); reject(err); return } console.log(`generate file ${filePath}`); resolve({ filePath }) }); }) }
- 合体
var main = async () => { var issues = await getIssues(); for (i in issues) { var issue = issues[i]; var article = await issueToArticle(issue); await writeArticleToFile(article); } } main()
- 从github获取issue列表,参考 github api
- 其他
- 关于使用node开发命令行工具,参考其他文章
TODO
- [] 自动工具集成,实现指定标签变更后自动生成文件,并创建 pull request或者自动 commit&push
- [] 生成RSS
- [] 增加 github issue 评论功能
- [] 增加分类功能,ref http://pizn.github.io/2012/02/23/use-category-plugin-for-jekyll-blog.html
- [] 增加系列功能
参考
ref: ref: zp1112/blog#3 https://www.v2ex.com/t/253854