端午假期开始动手的小项目,就是把我以前备份下来的博客文章全部转成 Markdown。现在这里共有文章 200 多篇了。以前写的东西,现在看起来当然是挺幼稚和傻逼的,不过也无所谓了,放上来奇文共赏吧,反正这里也没啥人气的。

写的转换脚本比较简陋,连基本的校验输入都没有那种,不过出来的效果还不错。这里就不放代码献丑了,有需要研究的可以留言。

用的语言当然是 JavaScript,近几个月都在用。再加上 NodeJS 的一些包,很快就能搞定。

  • cheerio,能在 NodeJS 里使用 jQuery 的选择器,爬 HTML/XML 必备。
  • html-md,一个转换 HTML 到 Markdown 的包,效果不错。
  • iconv-lite,用来转码的包,如果页面是 GBK 而不是 UTF8, 就要用到了。

我以前在百步梯空间上的 WordPress,是通过 aReal-Html-Cache 插件备份出来的 HTML,具体看此文:在FreeBSD上搭建"FAMP"平台恢复Wordpress的文章(下)。然后在百度空间上备份出来的,也是 HTML,忘了当时是怎么导出的了。昨天回去重新激活百度空间,发现以前所有文章已经被清空,不错。。然后在网易博客上备份出来的,是 XML,其实就是 RSS 订阅。所以基本上能 RSS 订阅全文的博客空间,都可以比较容易转换成 Markdown。Jekyll 也提供 RSS 转 post 的工具,但感觉功能比较基础,例如文章的准确时间没法读出,所以就自己动手写个 parser 了,其实也不难,几十行的玩意。最后 QQ 空间上的几篇,懒得折腾,手动解决了。。

脚本很简单,就是用 cheerio 爬导出来的 HTML 或者 XML,找到对应的内容,用正则表达式处理一下(这次也顺道温习巩固了正则表达式的使用),最后整合生成 Jekyll 的 post 格式即可。正文部分可以用 html-md 转一下,那就不用自己麻烦写个 parser 了。这里有个小坑,貌似所有开源的 HTML parser 都不能正确爬出带有特殊字符的文本,例如 >_<,这个需要自己先转义一下再交给 parser 了。

文件名方面,日期很好办,就靠 parser 解出来,但标题的话,我是全部手动解决了。中文标题在 Jekyll 2.0 版本有 bug,据说会在 2.04 或者 2.1 版本解决。其实标题的话,也有自动转换的思路,先用正则把特殊符号清掉,然后用一个汉字转拼音的包转一下就好了。不过懒得去尝试了,只想最快速度把文章导好。。如果上千篇文章的话,那不妨写个小脚本吧。

旧文章中的图片,当然是没有了,手动 Review 了所有文章,人工清理了一下。

看回以前的文章,不免会想起以前的岁月,还好这炎热的夏日不容易多愁善感。

于 2014 年 6 月 15 日下午

-EOF-