更换评论系统:从多说到网易云跟贴
多说将于2017/06/01关闭服务,Disqus仍不可用。今天试了下网易云跟贴,有很喜欢的地方,也有很不满意的地方。
1. 本站与多说
网站建站之初(2014年),那会Disqus已经被墙了,经过细致的比较,最后选择了多说,一用就是两年多,共产生686条评论(包括自己的回复)。
有一段时间,多说黄色广告垃圾评论特别多,加了关键词过滤,没有一点效果。那会萌生了更换评论系统的念头,但实在没找到好的替代品。尽管多说不支持Markdown,偶尔刷不出来(可能是因为在国外的原因),但总体上用着很舒服。
上周收到多说网邮件,说将于2017年6月1日关闭服务(详情见:重要通知: 多说即将关闭)。将多说插件停用,原生态的评论系统丑得不行,不得不找一个替代品。今天试了下网易云跟贴,有很喜欢的地方,也有很不满意的地方。
最后,感谢多说团队提供的便利。截图一张用于怀念。
2. 从多说到网易云跟贴
安装网易云跟贴很简单。安装插件,详情见:网易云跟贴帮助文档 - Wordpress插件安装;导出多说评论数据。进入多说管理后台,点击左侧工具,点击导出数据,勾选包含文章数据
和包含评论数据
,导出评论;将评论数据导入网易云跟贴,详情见:网易云跟贴帮助文档 - 导入数据。
用了一下午,说下体验。先说说优点:支持多说评论导入,无需自己转换格式;界面很简洁,评论盖楼嵌套很直观(移动端也做得很好),举例如下:
但是,缺点也很明显:
- 评论数据不能备份到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
包含threads
和posts
数据,详情见:多说导出的评论文件说明。这里,将其摘抄过来,方便日后分析评论。
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}
}]
}, ...
]