本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2014/03/17/migrate_from_cnblogs_to_hexo/
备注:该文章写于2014年,相关思路可以作为参考,但是hexo的版本更新相关导致相关工具无法使用了。
很早以前就开始使用博客园的服务,虽然有这样那样的问题,但是始终还是觉得不错。
一来不用自己维护空间什么的,二来博客园的原创文章很好被收录,偶尔写写文章也不操心。
大概从去年起将操作系统全面切换到ubuntu,没有想到最不习惯的居然是没有live writer。博客园的在线编辑器实在太难用了,反复折腾决定用node-webkit快速的做一个linux下的编辑器。
就在这之间接触到了Hexo,最终决定从博客园迁移出来,自建博客。
这里分享一下迁移中的各种收获。
Hexo
Hexo是基于Nodejs的静态博客工具。所谓静态博客区别于Wordress之类的博客系统主要是并不是由动态语言在服务端生成,而是使用者在使用完博客后生成全站静态文件。
Hexo的优点其实我没有啥深刻的体会,这是我接触到的第一款静态博客工具。对我而言它的优势有三:
- 书写方便,使用markdown书写。
很多人觉得md很潮,其实我很现实的,只要好用就行了。用md来写不需要专用软件支持,一个记事本就好了。
- 容易保存原始资料
在博客园的时候就有定期备份数据的习惯,倒也不是害怕哪天它突然关闭了,只是决定数据在自己手中有一份比较安全。
Hexo的原始资料可以纳入版本管理之中,还是挺方便的。
- 使用方便,易于扩展
Hexo在设计上预留了扩充点,而且本身原理很简单,实在不行也是可以自己修改的。这样如果有不合意的地方可以自己动手完成。接下来我也会谈到我为了迁移做的一个迁移插件。
准备工作
Hexo要求nodejs环境,具体安装大家随意搜索以下就可以找到。而npm是nodejs的包管理器,默认也会自动安装上。
然后运行
npm install -g hexo
hexo init <blogFolder>
初始化完成以后运行hexo server
可以看到效果。
基本的配置在_config.xml
文件中,有部分配置也会在对应的主题目录的_config.xml
中。
从博客园迁移数据
博客园是由一个未公开的API的,不过API中没有提供分类和标签,所以不适合迁移时的数据获取,所以还是抓取网页比较值得信赖。
首先来看看插件列别。
Hexo将插件分类7类。分别是生成,渲染,迁移,标签,辅助,其他。
从博客园迁移数据当然是属于(Migrator)。
原理上将是比较简单的:
- 从列表中获取所有博文的地址。
- 抓取博文内容并转为适合Hexo的格式。
- 将博文中的图片保存到source中,并更改对应文件中的引用路径。
- 将转化好的博文写入文件系统。
我原本一直觉的Javascript属于很二流的语言,直到我接触了nodejs,然后看了一些javascript的书籍后我才发现这东西很不错的。
nodejs的各种库的数量之大让人振奋,在npmjs中可以找到几乎所有需要的库。
比如将html转为markdown,下载图片,解析html等等。
具体的实现很简单,大家有兴趣可以看看hexo-migrator-cnblogs。
使用的时候首先安装它:
npm install hexo-migrator-cnblogs --save
然后在博客根目录中运行
hexo migrate cnblogs <username>
这里的用户不是你登录博客园后台的用户名,而是你博客的短名,比如我的是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
之后速度还可以接受。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2014/03/17/migrate_from_cnblogs_to_hexo/
TypeError: Cannot read property ‘file’ of undefined
这个怎么解决?
不好意思,忘了署名
新版本用不起这个迁移插件的,你可以试试官方的rss插件
rss迁移只会迁移文章摘要,外加一个链接到博客园的原文链接啊
这个就不清楚了,我记得当时博客园可以配置全文显示的,但是迁移以后代码效果会丢失,所以才自己写的
最终都是wp
🙂
报错啊
这篇文章很旧了,hexo都升级了几个大版本了。
相关思路可以作为参考,但是工具是用不了。