换个方式写博客

就在前几周以前,我还是以一种安分且常见的形式更新我的博客:本地 markdown 写文章 -> 用hexo生成静态html页面(hexo clean,hexo g) -> 发布到pages服务上(hexo d)

这个使用pages服务的仓库称为hexo deploy project

为了换电脑、重装系统等情况下不需要重新设置hexo主题,配置等等,我把源码托管到了git上。

下文称为hexo source project

用这种方式,我写了2年的博客(之前几年是wordpress搭建的博客),直到现在,我决定改变一下写博客的方式。

首先,我不想每次写完文章,还要手动执行hexo的一串命令:hexo clean,hexo g,hexo d…,不得不说,太二了…
其次,我想要自动生成一些文章,比如,我想要实时获取android develop上关于android的一些数据,比如当前android的版本分布情况,屏幕分辨率的分布情况等等。
最后,如果有时间的话,我还希望可以在手机也能随时随地发表文章。

好的,废话不多说,动手做吧。

change_hexo_writing_start

要完成第一个目标,两种选择,第一种,使用本地git仓库的git hook,每次git push之前执行一个脚本,脚本很简单,就执行几个hexo命令,这样每次我push代码的时候就可以自动完成发布工作,但是,这样有个问题,那就是不能在每个写文章的环境下都能自动化发布。

所以我采用了第二种方式:web hook。

一般的git托管服务网站都会提供web hook功能,主要就是在一些仓库变更的节点上发出变更的事件,向指定的webhook链接post一些数据,而这个链接,我可以在自己的服务器上部署一个简单的http server,解析post请求,然后pull最新的hexo source project仓库并在执行hexo的发布命令,这样,我可以在任何环境下写文章,只要把文章push到我的hexo source project仓库即可。

源码在这儿:https://github.com/Kyson/tech_hikyson_cn_hexo_webhook

第二个目标:自动生成文章并发布

其实说起来也很简单,那就是爬虫。只需要爬我想要的网站的数据并生成文章即可,这里我用scrapy,一个大名鼎鼎的python爬虫框架,爬取了https://developer.android.google.cn/about/dashboards/index.html的数据并解析出android版本分布数据,然后生成文章并提交到了hexo source project,之后的流程大家都知道了:第一步部署的http server会收到这个仓库的webhook的post请求并执行hexo的发布命令,perfect。

这部分的源码在这儿:https://github.com/Kyson/ScrapyForAndroidDashboard

为了更清楚地表达我的意思,我画了一张框架图:

change_hexo_writing_framework

最后的一个目标,事实上我还没开始做,但是android开发是我的本职工作嘛,所以应该不是什么问题,思路就是:写一个简单的应用,输入一些文章内容,提交的时候向之前的那个简单的http server post文章数据内容,server解析数据并在服务器的hexo source project中生成文章并commit & push即可。

做了大概一周时间的东西没想到这么一篇短博三言两语就说完了,希望大家也可以找到自己舒服的写作方式。

写完收工~