HEXO評論從「多說」搬遷到Hashover
1. 從「多說」停運說起
2017年3月21日,國內著名的第三方評論系統「多說」發布了一則重要通知:
因公司業務調整,非常遺憾的向大家宣布多說項目即將關閉。 我們將於2017年6月1日正式關停服務,在此之前您可以通過後台的數據導出功能導出自己站點的評論數據。 對此給您造成的不便,我們深表歉意,感謝您的一路相伴。
這則通知也讓很多還在堅持做獨立博客的博主們憂傷,特別是各類採用靜態博客站點的博主,大部分都是多說的用戶。多說的停運,意味著大家不得不關閉或者更換評論系統了。
最早的各類動態博客,比如WordPress、Z-blog,還有國內風靡的[Emlog](emlog個人博客系統 - 基於php的blog博客程序及CMS建站系統)(我一直用它很多年,今年才換成Hexo)等等,都是自帶評論系統的,那時第三方評論系統初現端倪,但使用量不太大。後來隨著靜態博客的流行,以及適應各種社交場合的需要,像國外的 Disqus,國內的多說、有言這些第三方評論逐漸取代第一方評論系統流行開來。
我個人也是在把博客系統換成 HEXO 之後才開始正式使用多說,當時搬遷的時候為了把Emlog的評論導入到多說還是費了一些周折([詳見此文](從EMLOG搬家到HEXO)),沒想到才沒安定多久就要見證它停運了。
2. 尋找代替者
其實從收到多說的公告的時候就想著要早點搬遷評論系統了,但是這段時間各種婚禮籌備等事情佔用了大量精力,以致於拖到現在才來完成這項工程。
我使用的 Yelee 主題直接支持多說、Disqus、友言三個第三方評論系統,這也基本上是目前國內主流的第三方評論系統了,除此之外還有一些別的小眾的,我也挑了一些備選。[1]
2.1 第三方評論系統
Disqus
說到第三方評論,這方面的巨頭就是 Disqus 了,很多 HEXO 用戶也是採用 Disqus 作為評論系統。我使用的 Yelee 主題支持的三大第三方評論系統之一就有它,而且因為用戶多,自然各種導入方案就多,可以直接把多說的數據導入 Disqus,實現無縫啟用。然而最無奈的問題就是,Disqus 被GFW牆掉了,所以只好無奈的不選擇它。
友言
友言應該是比較接近多說的一款了,不過總感覺是快要步入多說後塵的產品,而且不知道是我瀏覽器的原因還是怎麼的,點擊註冊老沒反應,不得已只好放棄……
其他
其他還有搜狐旗下的「暢言」、網易旗下的「雲跟帖」等等,因為界面太違和了就沒用。還有韓國的「來必力」,無法支持導入多說的數據,也就此作罷。
2.2 自建獨立評論系統
在第三方的評論系統裡面選完發現沒有合適的,覺得方便起見還是要自己搭建獨立的評論系統好一些。自建的評論系統挑了 ISSO 和 HashOver。ISSO 是運行在 Python 環境下的系統,感覺專門為了它再配置一個環境太麻煩,最終還是選擇了用 HashOver。
HashOver
HashOver 是一個 PHP 環境下的評論系統,支持 XML、MySQL、SQLite 幾種數據儲存方式,調用也十分簡單。更何況主機上已經配置好了 PHP 環境,應用上去比較簡單。
3 搬遷評論系統
3.1 安裝 HashOver
安裝 HashOver 還是很簡單的,首先到 HashOver 的[Github倉庫](jacobwb/hashover-next)把源碼下載下來,然後直接放到網站根目錄即可。然後需要配置一下`hashover`目錄下的`setting.php`文件,根據需要修改一下所需的自定義參數即可。
3.2 把 HashOver 添加到 HEXO
這一步需要通過修改 HEXO 的主題源碼來實現,先找到主題的`article.ejs`文件,在我使用的主題中是採用這樣的 IF 嵌套來選擇具體使用哪個評論的:
<% 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 使用的開關:
hashover:
on: true
然後在`article.ejs`評論部分的IF嵌套中加入一個 HashOver 的選項:
<% } else if (theme.hashover.on) { %>
<%- partial(comments/hashover) %>
<% } %>
再在它的`comments`目錄下新建一個`hashover.ejs`文件,在裡面插入 HashOver 的調用代碼即可,比如最簡單的一句話`<script type="text/javascript" src="/hashover/hashover.js"></script>`,不過我在這裡為了實現非同步載入以及後續的CSS控制,還是這樣寫的:
<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 的頁面,發現評論系統已經在頁面下了。
3.3 導入多說數據
安裝完評論系統就該轉移數據了,把多說的數據完全轉移到 HashOver 中還是要借用一些手段的。
把多說數據導入 Disqus
這裡借用 Disqus 做一個跳板來轉移數據,轉移完這一步也可以直接使用 Disqus 這個評論系統了。[2]
1. 在 Disqus 上面建立一個站點。
2. 登錄多說的後台,將數據導出為`export.json`。
3. 下載轉換腳本文件[migrate.php](http://urouge.github.io/assets/migrate.php)。
4. 將他們一起傳到 PHP 伺服器上,在伺服器上這個目錄執行`php -f migrate.php`,運行完後會生成一個` disqus.xml`文件。
5. 在 Disqus 後台導入`disqus.xml`文件。
這樣就把多說的數據全部導入到 Disqus 中了。
將 Disqus 格式數據導入 HashOver
正是因為在網上找到了有別人寫好的轉換程序,才讓我最終打定主意用 HashOver。[3]
1. 在這個[Github倉庫](gucheen/disqus-to-hashover-next)下載 JAVA 源碼到 NetBeans 或 Eclipse 中編譯(記得選擇JAXB插件)
2. 在 Disqus 後台將數據導出為`comments.xml`放到編譯好的程序目錄。
3. 運行編譯好的 JAVA 程序,會生成`hashoverpage`目錄以及各個 XML 文件。
4. 將生成的`page`目錄上傳到伺服器上 HashOver 所在目錄即可。
在這裡可能第一步會比較讓人疑惑,為什麼不能直接用上一步從多說導出的`disqus.xml`文件。其實上一步中導出的`disqus.xml`是被 Disqus 支持的 WordPress 格式,並非直接 Disqus 的格式,所以要分兩步來再轉。
手動調整
因為我的評論經歷過從 Emlog 到多說,再從多說到 Disqus 再到 HashOver,所以一些嵌套關係被打亂了,手動調整一下之前的`page`目錄下的文件名為其嵌套就可以了。
4 最終效果
最終調整完的評論效果像這樣,基本上可以滿足日常的使用了,以後再慢慢去調整相應的CSS樣式來更好的適應主題風格就可以了。
經歷了動態博客原生評論到採用第三方評論,再到自己在動態環境搭建博客系統供給靜態博客使用,總有一種走了一大圈又回到原點的感覺。
真是生命不息,折騰不止啊……
5 參考資料
1.第三方評論系統推薦 - 水八口記
2.多說評論遷移至Disqus - Urouge
3.遷移評論系統到 hashover - PasteBin of GC
博客原文:HEXO評論從「多說」搬遷到Hashover
推薦閱讀: