我摸索出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篇文章。