从博客园迁移到Hexo

17 3月

备注:该文章写于2014年,相关思路可以作为参考,但是hexo的版本更新相关导致相关工具无法使用了。

很早以前就开始使用博客园的服务,虽然有这样那样的问题,但是始终还是觉得不错。

一来不用自己维护空间什么的,二来博客园的原创文章很好被收录,偶尔写写文章也不操心。

大概从去年起将操作系统全面切换到ubuntu,没有想到最不习惯的居然是没有live writer。博客园的在线编辑器实在太难用了,反复折腾决定用node-webkit快速的做一个linux下的编辑器。

就在这之间接触到了Hexo,最终决定从博客园迁移出来,自建博客。

这里分享一下迁移中的各种收获。

Hexo

Hexo是基于Nodejs的静态博客工具。所谓静态博客区别于Wordress之类的博客系统主要是并不是由动态语言在服务端生成,而是使用者在使用完博客后生成全站静态文件。

Hexo的优点其实我没有啥深刻的体会,这是我接触到的第一款静态博客工具。对我而言它的优势有三:

  • 书写方便,使用markdown书写。

很多人觉得md很潮,其实我很现实的,只要好用就行了。用md来写不需要专用软件支持,一个记事本就好了。

  • 容易保存原始资料

在博客园的时候就有定期备份数据的习惯,倒也不是害怕哪天它突然关闭了,只是决定数据在自己手中有一份比较安全。

Hexo的原始资料可以纳入版本管理之中,还是挺方便的。

  • 使用方便,易于扩展

Hexo在设计上预留了扩充点,而且本身原理很简单,实在不行也是可以自己修改的。这样如果有不合意的地方可以自己动手完成。接下来我也会谈到我为了迁移做的一个迁移插件。

准备工作

Hexo要求nodejs环境,具体安装大家随意搜索以下就可以找到。而npm是nodejs的包管理器,默认也会自动安装上。
然后运行


初始化完成以后运行hexo server可以看到效果。

基本的配置在_config.xml文件中,有部分配置也会在对应的主题目录的_config.xml中。

从博客园迁移数据

博客园是由一个未公开的API的,不过API中没有提供分类和标签,所以不适合迁移时的数据获取,所以还是抓取网页比较值得信赖。

首先来看看插件列别。

Hexo将插件分类7类。分别是生成,渲染,迁移,标签,辅助,其他。

从博客园迁移数据当然是属于(Migrator)。

原理上将是比较简单的:

  • 从列表中获取所有博文的地址。
  • 抓取博文内容并转为适合Hexo的格式。
  • 将博文中的图片保存到source中,并更改对应文件中的引用路径。
  • 将转化好的博文写入文件系统。

我原本一直觉的Javascript属于很二流的语言,直到我接触了nodejs,然后看了一些javascript的书籍后我才发现这东西很不错的。

nodejs的各种库的数量之大让人振奋,在npmjs中可以找到几乎所有需要的库。

比如将html转为markdown,下载图片,解析html等等。

具体的实现很简单,大家有兴趣可以看看hexo-migrator-cnblogs

使用的时候首先安装它:


然后在博客根目录中运行


这里的用户不是你登录博客园后台的用户名,而是你博客的短名,比如我的是htynkn。

等待程序执行完成,这可能会花费一些时间,特别是有大量图片需要下载的时候,所以请保持网络通畅,耐心等待。

数据迁移后的一些处理

虽然插件节省了很多功夫,但是对于每篇文章还是预览检查一下。

目前有几个已知的问题需要手动处理一下:

  • 代码高亮

在博客园中代码高亮有好几种,包括后台提供的和livewriter提供的,所有有时候会无法识别代码类型,这样可能会导致高亮效果不明显,可以手动补全。

  • 页面变形

因为迁移插件使用了to-markdown,它可能会错误判断标签闭合,导致页面变形,这个情况不常见,不过还是有的。

迁移后的配置

刚才的迁移步骤只是迁移了博文和图片,博客的配置并没有完成。

_config.xml中配置博客的名称、地址等等。

然后就是根据使用习惯替换统计代码,留言系统和分享代码。这涉及到改theme中的样式片段。如果嫌麻烦,可以使用一些改好的主题。比如我当期这个主题是修改自pacman

它使用多说和jiathis,基本不需要再修改了。

不过pacman的一些语言设置有问题,可能需要手动修改以下,比如下一页的显示在languages中有配置,但是在实际中没有使用。

发布和上传

Hexo支持发布博客到github,这样很方便速度也很快,还支持域名绑定。

我最初也想托管到github的,但是想想sf的结局,还是自己买了云主机。

云主机支持FTP和ssh,刚才用FTP上传,稳定性之差令人发指,文件基本不完成。

所以改成sshfs挂在主机目录到本地,然后rsync之。Hexo支持rsync发布,所以可以直接hexo deploy搞定。

不过每次挂在以下有些慢,最后改成lftp直接mirror,添加上 --ignore-time--use-cache之后速度还可以接受。

8 Replies to “从博客园迁移到Hexo

    • 这篇文章很旧了,hexo都升级了几个大版本了。
      相关思路可以作为参考,但是工具是用不了。

发表评论

电子邮件地址不会被公开。