转入静态博客的方法(2019年4月11日更新)

这里提到的静态博客,以hexo为例。我摸索出typecho转hexo的方法,包括文章转换和评论转换。在此记录一下转换的全过程。

这里有几个问题需要事先说明:

第一,我操作这次转换,不代表typecho不好,也不代表hexo好,二者各有优缺点。我折腾typecho转hexo,是根据自己已经掌握的hexo操作方法进行的。不代表我会放弃typecho而转移到hexo。

第二,转到静态博客(如hexo、jekyll等)之后,再将转换后的数据再转回动态博客(如typecho、wordpress等),有一定难度。如果您有转到静态博客的想法,请谨慎操作。

第三,评论存储需要使用第三方存储服务,此处使用的是Disqus。我目前还不清楚是否还有其他第三方评论系统和Disqus一样可以完美导入评论、存储所有的评论数据(包含昵称、评论者的网址等),且可以在评论列表访问留言者的网站。由于境内特殊的网络环境,使用Disqus需要一定的技术手段。目前有高手开发出了Disqus PHP Api,可以接入静态博客,实现墙内使用Disqus基础功能。

文章导出

文章导出。使用TypExport插件导出xml文件。

导入hexo

按照hexo官方文档的指导,导入到hexo。

首先,安装hexo-migrator-wordpress插件。

$ npm install hexo-migrator-wordpress --save

插件安装完成后,执行下列命令来迁移所有文章。source可以是xml文件路径或网址。

$ hexo migrate wordpress <source>

source的位置便是xml放置的位置。可使用相对路径。

操作后,会在hexo文件夹中source/_posts下看到自己的文章。每个md文件的文件名,与typecho中设置的固定连接中{slug}的名字相同。

注:我试过一个php工具转出,但转出后文档的文件名和内文全是乱码。所以还是用上述方法比较稳妥。

保持链接相同

保持和原来的链接相同。之所以要保持相同,是为了能在disqus中匹配相应的Thread,保证文章和评论对应。如果不想和原来保持一致,需要在disqus中修改discussions内的链接地址,具体可在disqus网站查看操作方法,此处不予赘述。

操作过程:

设置hexo的_config.yml和主题目录下的_config.yml文件。

如果typecho的固定链接设置的是archives/{slug}.html,那么在hexo和主题目录下的_config.yml中,需要将归档页面文件夹名称改掉,以防和链接冲突。否则不用改。

如果typecho的固定链接设置的是archives/{slug}.html,那么,需要修改hexo的_config.yml中固定链接格式:

permalink: archives/:title.html

如果typecho的固定链接设置的是其他类似格式,便模仿修改即可。注意:如果typecho的固定链接设置的是cid,那转换过来的固定链接就和原来的不同了,需要在导出xml之前将固定链接修改掉。

评论导入Disqus

评论导入。这个地方有个坑:如果直接用该xml导入disqus,那么在disqus的disscussions中显示的链接是?p=cid,无法和原链接匹配,这会引起hexo博客寻找不到disqus内的thread,导致无法显示对应的评论。如果要回避这个问题,需要借助一个工具:Wordpress。

可以在本地环境(如phpstudy等)或云主机(包括虚拟主机、vps、云服务器、独立服务器等)中安装Wordpress,无论是Mysql还是sqlite安装均可,这里不涉及到数据库。

安装好后,在WordPress设置和typecho中相同的固定链接。设置好后,在WordPress后台运行导入工具,将typecho导出的xml文件导入。如果xml文件超出WordPress限制的大小(一般为2M),需要进行切割。我使用的是一个Windows下的绿色免安装无残留软件WXRsplit.exe,可将xml切割为符合大小的多个文件,并分别导入。

导入成功后,可在WordPress看到导入的文章和评论,链接和typecho博客相同。随后,在WordPress导出xml文件。将此xml文件导入disqus,在导入页面按提示操作即可。此处需要有初中英语基础。

成功导入disqus后,可在disqus中看到所有文章的评论。在disqus中,我发现,导入的评论内,留言者的名字如果超过3个汉字,那么第4个汉字及后面的文字便会变成一个占用2个字符的乱码。如果以后在disqus留言,超过3个汉字就不会这样了。出现这种情况到底是什么原因我不清楚。

同时会发现,在disqus中,留言者的头像不会显示为邮箱对应的Gravatar,这是由于欧盟的《通用数据保护条例》导致disqus没有存储用户的全部邮箱数据导致,详情请阅读这篇文章。Api作者暂时修复了这个问题,如果在disqus使用同样的邮箱再次评论,可以显示出Gravatar。

hexo连接Disqus

使用hexo连接自己的disqus账号。可以直接连接,也可以使用Disqus PHP Api。如果需要在hexo中使用Disqus PHP Api,可以参考官方文档这篇文章

按hexo官方文档的指导进行部署。部署结束后,访问自己的hexo博客便可以看到导入的文章和评论了。只要文章的链接和disqus中记录的文章链接相匹配,那么该文章对应的评论就会显示在评论区。

如果已经转移到静态博客,再将转换后的数据转回动态博客,有一定的操作难度。以WordPress为例,可以运行RSS导入工具,通过RSS方式导入文章。利用WordPress上面的disqus插件,连接到disqus,将评论数据从disqus内导入WordPress。如果想转入typecho,再通过WordPress To Typecho插件转换即可。注意:RSS导入,可能导入不全,因为一般只显示最近的10篇文章。

2019年4月11日更新:

告诉大家一个不需要hexo命令行的方法。

既然免不了用wordpress作为中转,那就直接在wordpress安装一个插件——jekyll export。经过它,可以导出md文档,从文件命名到格式,到附件等,全部打包好。尽管名字叫Jekyll,但是静态博客的格式是通用的(注意,Bitcron不是静态博客,Bitcron是不完全兼容静态博客的格式的),所以可导入任何静态博客,不需要再用文中提到的命令行了。配合《静态博客搭建方法》提到的在线操作方法,可以完美转入静态博客。

26 条回复

灰常记忆 2018年9月12日 回复

现在我很少折腾了。VPS倒是买了还几个。

林海草原 2018年9月13日 回复

VPS用来做啥了?

老何 2018年9月13日 回复

太能折腾了。

林海草原 2018年9月13日 回复

哈哈,折腾完挺累的,也不知道有何意义。因为我没打算永久转到hexo。

王小杰在路上 2018年9月13日 回复

我的想法和楼上几位差不多,太折腾了。个人还是喜欢使用数据库的方式存储数据,万一有地方需要修改就特别的方便。

林海草原 2018年9月13日 回复

实际上我也是。正如文章中所说,这次折腾不代表我会放弃typecho而转移到hexo。更何况hexo从0开始的管理本身就很折腾。

啊灰 2018年9月15日 回复

膜拜大神!

林海草原 2018年9月15日 回复

你太抬举我了,我可不是大神,哈哈哈

中二 2018年9月15日 回复

wordpress是最好的博客程序。

林海草原 2018年9月15日 回复

typecho too.

姜辰 2018年9月17日 回复

我还是默默的用这个动态的博客程序吧= =、静态的速度快,但是感觉不行。。。

林海草原 2018年9月17日 回复

动态的也没感觉慢多少,typecho首页比静态的hexo首页慢100~200ms左右。不太敏感的人都感觉不出来。哪个喜欢用哪个就行了。

范明明 2018年9月20日 回复

看过很多大佬的hexo静态博客也非常漂亮。突然也有冲动将博客整体移到Github。
看到文中很多次讲到WordPress,是需要把Typecho转移到WP,然后再到hexo吗?还是怎么个思路?看的我有点乱乱的……

林海草原 2018年9月20日 回复

我给你捋一下思路:
1.如果将博文转到hexo,用文中所述的插件导出xml。xml是wordpress格式,hexo官方文档中叙述的是“从wordpress转入”。所以,将博文从typecho转入hexo,不需要转入wordpress,只需要将导出的xml转入hexo即可。
2.如果将评论转入disqus,需要将typecho转入wordpress,再从wordpress导出xml文件,将此xml导入disqus。然后将disqus与Hexo进行接入,如果不需要使用api,则访客需要使用技术手段才能给你留言。如果使用api,则接入的过程有点复杂,详细见这篇文章:https://linhai1990.com/archives/84.html和api的官方文档:https://github.com/fooleap/disqus-php-api/blob/master/readme.md

熊猫小A 2018年10月2日 回复

Hexo 作为低(经济)成本的入门之选其实是不错的,只是文章数量多了之后效率也堪忧,另外可玩性比动态博客还是稍微差一些。
Disqus 的问题是现在 GDPR 生效之后没办法拿到评论者邮箱了…不然转起来是很方便的。当然境内访问困难也是个大问题。

林海草原 2018年10月2日 回复

我转出的90多篇文章,hexo从头编译,大概是19秒。可玩性确实啊,最近都没咋弄,代码也看不懂。disqus邮箱这个,人家注重隐私保护这个也是没办法。如果是正常用,肯定没问题。那个php api的作者改进了一下,暂时保存一个月邮箱,保证头像正常。

熊猫小A 2018年10月2日 回复

PHP API 那个我也短暂地使用过,在境内非得用 Disqus 的话确实是最好的解决方案了。但是有几点还是有些闹心。缓存的邮箱账号没办法迁移,邮件通知也不好搞,还有就是 PHP API 本身需要一个国外服务器做跳板,这个的门槛就偏高了。

林海草原 2018年10月4日 回复

这个反正真的相当折腾。我把api放到我的虚拟主机了。可是api毕竟不是官方原始程序,总会遇到一些问题。反正不是一般人能折腾得起的。我看到有些接入disqus的直接用官方程序了,最近因为节日原因不太好访问,我都没法给这些博客留言。

琛苏设计 2018年10月11日 回复

本来以为我就够能折腾的了,看了你这篇文章,感觉你比我还能折腾

林海草原 2018年10月11日 回复

哈哈哈,折腾折腾更健康

戏子 2018年11月27日 回复

最开始用sablog,后来用点点、tumblr,在后来word press,在后来typecho,然后年纪大了不想折腾了,搞了个hexo,用cloudflare挂在GitHub pages上了,虽然以前的数据都在,但不想折腾,懒得恢复了。

林海草原 2018年11月28日 回复

你也是够折腾啊。
尽管重新开始了,但希望你坚持下去。

yjl 2019年10月23日 回复

是的 hexo 不用维护数据库了,用git本地也有存档,编辑发布也 方便

林海草原 2019年10月29日 回复

是的,git真是个好东西。目前来说,我不会操作git,然后我就在线编译。在线传一个.md就行了,也非常方便。以后学一下git。

yjl 2019年11月1日

终于找到一个很变态的操作(修改程序,输出内容直接为markdown,然后制作专用模板,再批量下载所以文章…),typecho转hexo,晚上就跑路

林海草原 2019年11月7日

修改程序,制作专用模板,再批量下载文章,你是咋做的?

回复 灰常记忆 取消回复