更换评论系统:从多说到网易云跟贴

多说将于2017/06/01关闭服务,Disqus仍不可用。今天试了下网易云跟贴,有很喜欢的地方,也有很不满意的地方。

1. 本站与多说

网站建站之初(2014年),那会Disqus已经被墙了,经过细致的比较,最后选择了多说,一用就是两年多,共产生686条评论(包括自己的回复)。

有一段时间,多说黄色广告垃圾评论特别多,加了关键词过滤,没有一点效果。那会萌生了更换评论系统的念头,但实在没找到好的替代品。尽管多说不支持Markdown,偶尔刷不出来(可能是因为在国外的原因),但总体上用着很舒服。

上周收到多说网邮件,说将于2017年6月1日关闭服务(详情见:重要通知: 多说即将关闭)。将多说插件停用,原生态的评论系统丑得不行,不得不找一个替代品。今天试了下网易云跟贴,有很喜欢的地方,也有很不满意的地方。

最后,感谢多说团队提供的便利。截图一张用于怀念。

duoshuo_example

2. 从多说到网易云跟贴

安装网易云跟贴很简单。安装插件,详情见:网易云跟贴帮助文档 – WordPress插件安装;导出多说评论数据。进入多说管理后台,点击左侧工具,点击导出数据,勾选包含文章数据包含评论数据,导出评论;将评论数据导入网易云跟贴,详情见:网易云跟贴帮助文档 – 导入数据

用了一下午,说下体验。先说说优点:支持多说评论导入,无需自己转换格式;界面很简洁,评论盖楼嵌套很直观(移动端也做得很好),举例如下:

netease_yungentie_example

但是,缺点也很明显:

  • 评论数据不能备份到Wordpress本地数据库
  • 不支持匿名评论(输入昵称、电子邮件),必须登录(目前只有3种选择:网易、微博、QQ)才能评论
  • 怀疑评论没有全部导入(比如没有头像,有些评论缺失)
  • 无论是后台管理还是提交评论,响应都很慢(可能是因为在国外访问的原因)
  • 不支持Markdown(这点不能怪罪于云跟贴,貌似只有原生态评论和Disqus支持Markdown)
  • 没有回复通知,需要登录后台查看(多说那种有新评论,打开博客就能看到,很方便)

除此之外,还有一个很严重的问题。在云跟贴留言,前台刷新就看不到留言了(设置的是先发后审),后台要过很久(高达1个小时甚至更久,难道是系统批处理审核?)才能看到评论。我就想是不是因为开通了站长审核。然而,尽管我关闭了站长审核,提交评论还是显示“跟帖被审核”,进入后台,也看不到这个留言(还是要等很久)。这点体验相当不友好,访客会以为自己没成功提交留言,进而多次提交。

哦,对了,修改评论昵称和头像,需要在网易贴吧上改,不在云跟贴的管理后台。

3. 评论数据处理

多说和网易云跟贴存储评论的格式都是JSON,处理起来很方便。关于JSON,摘抄Wikipedia如下:

JSON (/ˈdʒeɪsən/) is an open-standard format that uses human-readable text to transmit data objects consisting of attribute–value pairs. It is the most common data format used for asynchronous browser/server communication, largely replacing XML, and is used by AJAX.

JSON is a language-independent data format. It was derived from JavaScript, but as of 2017 many programming languages include code to generate and parse JSON-format data. The official Internet media type for JSON is application/json. JSON filenames use the extension .json.

3.1 多说导出的格式

勾选了包含文章数据包含评论数据,导出的文件export.json包含threadsposts数据,详情见:多说导出的评论文件说明。这里,将其摘抄过来,方便日后分析评论。

threads文章记录,属性如下:

# threads: a list of dicts, each dict contains,
thread_id       多说文章ID
thread_key      文章在当前站点中的唯一表示符,例如文章ID。
title           文章的标题
url             文章链接
author_key      文章作者在本站的ID
author_id       文章作者的多说ID,如果为空,说明发表文章时没有登陆多说账号
likes           文章被点【赞】的次数
views           文章浏览数

# 一个实例
{   u'thread_key'   :   u'1609', 
    u'views'        :   0, 
    u'url'          :   u'http://sparkandshine.net/wordpress-load-google-open-sans-normally/',
    u'created_at'   :   u'-0001-11-30T08:00:00+08:00', 
    u'title'        :   u'WordPress\u6b63\u5e38\u52a0\u8f7d\u8c37\u6b4c\u5b57\u4f53Google Open Sans', 
    u'site_id'      :   u'1071326', 
    u'updated_at'   :   u'2015-12-11T06:45:20+08:00', 
    u'thread_id'    :   6226763126134539009, 
    u'likes'        :   0, 
    u'author_id'    :   u'5622282', 
    u'author_key'   :   u'1'}

posts是多说的评论,不包括微博、删除评论、垃圾评论;

# posts: a list of dicts, each dict contains,
post_id         多说评论ID
thread_id       这条评论对应的文章记录
message         评论内容
created_at      评论发表时间
author_id       作者在多说的id。空表示匿名用户
author_name     作者显示名。有可能为空
author_email    作者邮箱。有可能为空
author_url      作者填写的URL。有可能为空
ip              作者的IP地址

# 一个实例
{   u'post_key'     :   u'1177935394138750992', 
    u'thread_key'   :   u'290', 
    u'thread_id'    :   1177935394138751065, 
    u'author_email' :   u'', 
    u'ip'           :   u'113.251.219.43', 
    u'created_at'   :   u'2014-10-31T10:53:42+08:00', 
    u'site_id'      :   1071326, 
    u'updated_at'   :   u'1970-01-01T08:00:00+08:00', 
    u'author_name'  :   u'\u65e0\u4e3a\u4f55\u81f3', 
    u'post_id'      :   1177935394138750992, 
    u'parents'      :   [], 
    u'likes'        :   0, 
    u'message'      :   u'\u697c\u4e3b\u592a\u597d\u4e86\uff0c\u6574\u7406\u51fa\u8fd9\u4e9b\u6709\u7528\u7684\u4e1c\u897f\uff0c\u65b0\u624b\u521a\u63a5\u89e6\uff0c\u76fc\u671b\u80fd\u8ddf\u697c\u4e3b\u591a\u4ea4\u6d41\u5b66\u4e60\uff01\uff01\uff01', 
    u'author_key'   :   u'0', 
    u'author_id'    :   9493092, 
    u'author_url'   :   u'http://weibo.com/2560944840'}

有了这些之后,就可以处理评论数据了。比如我想筛选出所有评论者的用户名和邮箱,Python源代码如下:

from __future__ import unicode_literals

import json

with open('export.json') as data_file:    
    data = json.load(data_file)

# The total number of comments
print(len(data["posts"]))

author_emails = set([(d['author_name'], d['author_email']) 
                            for d in data["posts"] if d['author_email']])

#print(len(emails))

for author_name, author_email in author_emails:
    s = '{:<20s}\t{}'.format(author_name, author_email)
    print(s)

3.2 网易云跟贴

顺手把网易云跟贴导出的文件data.json也了解下,方便日后分析评论。其格式如下,详情见:网易云跟贴帮助文档 – 数据导出

# a list of dicts
[{
  "title"             :   "标题",
  "url"               :   "网址",
  "sourceId"          :   "文章标识",
  "ctime"             :   发贴时间,
  "comments":             //跟贴信息
    [{
      "cid"           :   "跟贴ID",
      "ctime"         :   发贴时间,
      "content"       :   "跟贴内容",
      "pid"           :   "盖楼父楼层ID",
      "ip"            :   "发贴IP",
      "port"          :   0,
      "sc"            :   "web",
      "vote"          :   顶数,
      "against"       :   踩数,
      "anonymous"     :   false,
      "user":             //用户信息 
        { "userId"    :   "用户ID",
          "nickname"  :   "用户昵称",
          "avatar"    :   "用户头像",
          "anonymous" :   是否匿名
        }
    }]
}]

# 一个实例
[
{  "title"                          :   "《圆桌派》片尾曲",
    "url"                           :   "sparkandshine.net/?p=2320",
    "sourceId"                      :   "2320",
    "ctime"                         :   1485895738000,
    "comments":[{"cid"              :   "55307728",
                "ctime"             :   1487630150000,
                "content"           :   "还是自己平台靠谱,视频中画面和音频同步。",
                "pid"               :   "0",
                "ip"                :   "79.143.143.146",
                "port"              :   0,
                "sc"                :   "",
                "vote"              :   0,
                "against"           :   0,
                "anonymous"         :   false,
                "user":{"userId"    :   "112120900",
                        "nickname"  :   "SparkandShin",
                        "avatar"    :   "http://img5.cache.netease.com/tie/images/yun/photo_default_62.png",
                        "anonymous" :   false}
                }]
}, ...
]

最后一个小问题:跟帖 和 跟贴,哪个是对的,还是都对?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

10 thoughts on “更换评论系统:从多说到网易云跟贴

  • Pingback: 多说和网易云跟贴关闭后:还是用原生评论系统吧 | | Spark & Shine

  • 2017年04月29日 星期六 at 12:13上午
    Permalink

    我一直在疑惑云跟帖的头像和昵称哪来的,我各个网易产品都看了都不是,谢谢了

    Reply
  • 2017年04月12日 星期三 at 11:11下午
    Permalink

    除了网易,貌似还有一家背靠大山的,搜狐畅言可以试试

    Reply
  • 2017年03月30日 星期四 at 07:58下午
    Permalink

    又用了一段时间实在没法忍受云跟贴刚才查了下以上大部分问题其他站长已经向云跟贴反馈但至今没有改善估计近期也很难改变。先换到多说后面空了再折腾吧。

    Reply
  • 2017年03月30日 星期四 at 07:47下午
    Permalink

    总结起来。网易云跟帖优点:支持多说评论导入,无需自己转换格式;界面很简洁,评论盖楼嵌套很直观(移动端也做得很好)。但是,缺点也很明显:1. 评论数据不能备份到Wordpress本地数据库2. 不支持匿名评论(输入昵称、电子邮件),必须登录(目前只有3种选择:网易、微博、QQ)才能评论3. 怀疑评论没有全部导入(比如没有头像,有些评论缺失)4. 无论是后台管理还是提交评论,响应都很慢(可能是因为在国外访问的原因)5. 不支持Markdown(这点不能怪罪于云跟贴,貌似只有原生态评论和Disqus支持Markdown)6. 没有回复通知,需要登录后台查看(多说那种有新评论,打开博客就能看到,很方便)除此之外,还有一个很严重的问题。在云跟贴留言,前台刷新就看不到留言了(设置的是先发后审),后台要过很久(高达1个小时甚至更久,难道是系统批处理审核?)才能看到评论。我就想是不是因为开通了站长审核。然而,尽管我关闭了站长审核,提交评论还是显示“跟帖被审核”,进入后台,也看不到这个留言(还是要等很久)。这点体验相当不友好,访客会以为自己没成功提交留言,进而多次提交。

    Reply