HEXO评论从“多说”搬迁到Hashover

从“多说”停运说起

  2017年3月21日,国内著名的第三方评论系统“多说”发布了一则重要通知:

因公司业务调整,非常遗憾的向大家宣布多说项目即将关闭。 我们将于2017年6月1日正式关停服务,在此之前您可以通过后台的数据导出功能导出自己站点的评论数据。 对此给您造成的不便,我们深表歉意,感谢您的一路相伴。

  这则通知也让很多还在坚持做独立博客的博主们忧伤,特别是各类采用静态博客站点的博主,大部分都是多说的用户。多说的停运,意味着大家不得不关闭或者更换评论系统了。

  最早的各类动态博客,比如WordPress、Z-blog,还有国内风靡的Emlog(我一直用它很多年,今年才换成Hexo)等等,都是自带评论系统的,那时第三方评论系统初现端倪,但使用量不太大。后来随着静态博客的流行,以及适应各种社交场合的需要,像国外的 Disqus,国内的多说、有言这些第三方评论逐渐取代第一方评论系统流行开来。

  我个人也是在把博客系统换成 HEXO 之后才开始正式使用多说,当时搬迁的时候为了把Emlog的评论导入到多说还是费了一些周折(详见此文),没想到才没安定多久就要见证它停运了。

寻找代替者

  其实从收到多说的公告的时候就想着要早点搬迁评论系统了,但是这段时间各种婚礼筹备等事情占用了大量精力,以致于拖到现在才来完成这项工程。

  我使用的 Yelee 主题直接支持多说、Disqus、友言三个第三方评论系统,这也基本上是目前国内主流的第三方评论系统了,除此之外还有一些别的小众的,我也挑了一些备选。[1]

第三方评论系统

Disqus

  说到第三方评论,这方面的巨头就是 Disqus 了,很多 HEXO 用户也是采用 Disqus 作为评论系统。我使用的 Yelee 主题支持的三大第三方评论系统之一就有它,而且因为用户多,自然各种导入方案就多,可以直接把多说的数据导入 Disqus,实现无缝启用。然而最无奈的问题就是,Disqus 被GFW墙掉了,所以只好无奈的不选择它。

友言

  友言应该是比较接近多说的一款了,不过总感觉是快要步入多说后尘的产品,而且不知道是我浏览器的原因还是怎么的,点击注册老没反应,不得已只好放弃……

其他

  其他还有搜狐旗下的“畅言”、网易旗下的“云跟帖”等等,因为界面太违和了就没用。还有韩国的“来必力”,无法支持导入多说的数据,也就此作罢。

自建独立评论系统

  在第三方的评论系统里面选完发现没有合适的,觉得方便起见还是要自己搭建独立的评论系统好一些。自建的评论系统挑了 ISSO 和 HashOver。ISSO 是运行在 Python 环境下的系统,感觉专门为了它再配置一个环境太麻烦,最终还是选择了用 HashOver。

HashOver

  HashOver 是一个 PHP 环境下的评论系统,支持 XML、MySQL、SQLite 几种数据储存方式,调用也十分简单。更何况主机上已经配置好了 PHP 环境,应用上去比较简单。

搬迁评论系统

安装 HashOver

  安装 HashOver 还是很简单的,首先到 HashOver 的Github仓库把源码下载下来,然后直接放到网站根目录即可。然后需要配置一下hashover目录下的setting.php文件,根据需要修改一下所需的自定义参数即可。

把 HashOver 添加到 HEXO

  这一步需要通过修改 HEXO 的主题源码来实现,先找到主题的article.ejs文件,在我使用的主题中是采用这样的 IF 嵌套来选择具体使用哪个评论的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<% if (!index && post.comments){ %>
<% if (theme.duoshuo.on) { %>
<%- partial('comments/duoshuo', {
key: post.path,
title: post.title,
url: config.url+url_for(post.path),
}) %>
<% } else if (theme.youyan.on) { %>
<%- partial('comments/youyan') %>
<% } else if (theme.disqus.on) { %>
<%- partial('comments/disqus', {
shortname: theme.disqus.shortname
}) %>
<% } else if (config.disqus_shortname) { %>
<%- partial('comments/disqus', {
shortname: config.disqus_shortname
}) %>
<% } %>
<% } %>

  通过判断_config.yml文件中的开关,来确定使用哪种评论系统,再调用comments文件夹下的不同代码。这样的话先在_config.yml中加入一个给 HashOver 使用的开关:

1
2
hashover:
on: true

  然后在article.ejs评论部分的IF嵌套中加入一个 HashOver 的选项:

1
2
3
<% } else if (theme.hashover.on) { %>
<%- partial('comments/hashover') %>
<% } %>

  再在它的comments目录下新建一个hashover.ejs文件,在里面插入 HashOver 的调用代码即可,比如最简单的一句话<script type="text/javascript" src="/hashover/hashover.js"></script>,不过我在这里为了实现异步加载以及后续的CSS控制,还是这样写的:

1
2
3
4
5
6
7
8
9
10
11
12
13
<section class="hashover" id="comments">
<script type = "text/javascript">(
function() {
var s = document.createElement('script'),
t = document.getElementsByTagName('script')[0];
s.type = 'text/javascript';
s.async = true;
s.src = "/hashover/hashover.js";
t.parentNode.insertBefore(s, t);
})();
</script>
<div id="hashover"></div>
</section>

  都完成之后重新生成一下 HEXO 的页面,发现评论系统已经在页面下了。

评论系统

导入多说数据

  安装完评论系统就该转移数据了,把多说的数据完全转移到 HashOver 中还是要借用一些手段的。

把多说数据导入 Disqus

  这里借用 Disqus 做一个跳板来转移数据,转移完这一步也可以直接使用 Disqus 这个评论系统了。[2]

  1. 在 Disqus 上面建立一个站点。
  2. 登录多说的后台,将数据导出为export.json
  3. 下载转换脚本文件migrate.php
  4. 将他们一起传到 PHP 服务器上,在服务器上这个目录执行php -f migrate.php,运行完后会生成一个disqus.xml文件。
  5. 在 Disqus 后台导入disqus.xml文件。

  这样就把多说的数据全部导入到 Disqus 中了。

将 Disqus 格式数据导入 HashOver

  正是因为在网上找到了有别人写好的转换程序,才让我最终打定主意用 HashOver。[3]

  1. 在这个Github仓库下载 JAVA 源码到 NetBeans 或 Eclipse 中编译(记得选择JAXB插件)
  2. 在 Disqus 后台将数据导出为comments.xml放到编译好的程序目录。
  3. 运行编译好的 JAVA 程序,会生成hashover\page目录以及各个 XML 文件。
  4. 将生成的page目录上传到服务器上 HashOver 所在目录即可。

  在这里可能第一步会比较让人疑惑,为什么不能直接用上一步从多说导出的disqus.xml文件。其实上一步中导出的disqus.xml是被 Disqus 支持的 WordPress 格式,并非直接 Disqus 的格式,所以要分两步来再转。

手动调整

  因为我的评论经历过从 Emlog 到多说,再从多说到 Disqus 再到 HashOver,所以一些嵌套关系被打乱了,手动调整一下之前的page目录下的文件名为其嵌套就可以了。

最终效果

最终评论效果

  最终调整完的评论效果像这样,基本上可以满足日常的使用了,以后再慢慢去调整相应的CSS样式来更好的适应主题风格就可以了。

  经历了动态博客原生评论到采用第三方评论,再到自己在动态环境搭建博客系统供给静态博客使用,总有一种走了一大圈又回到原点的感觉。

  真是生命不息,折腾不止啊……

参考资料

1.第三方评论系统推荐

2.多说评论迁移至Disqus

3.迁移评论系统到 hashover

文章目录
  1. 1. 从“多说”停运说起
  2. 2. 寻找代替者
    1. 2.1. 第三方评论系统
      1. 2.1.1. Disqus
      2. 2.1.2. 友言
      3. 2.1.3. 其他
    2. 2.2. 自建独立评论系统
      1. 2.2.1. HashOver
  3. 3. 搬迁评论系统
    1. 3.1. 安装 HashOver
    2. 3.2. 把 HashOver 添加到 HEXO
    3. 3.3. 导入多说数据
      1. 3.3.1. 把多说数据导入 Disqus
      2. 3.3.2. 将 Disqus 格式数据导入 HashOver
      3. 3.3.3. 手动调整
  4. 4. 最终效果
  5. 5. 参考资料
|