IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    SparkandShine发表于 2017-03-29 18:07:07
    love 0

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

    1. 本站与多说

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

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

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

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

    duoshuo_example

    2. 从多说到网易云跟贴

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

    用了一下午,说下体验。先说说优点,界面很简洁,评论盖楼嵌套很直观,举例如下:

    netease_yungentie_example

    但是,缺点也很明显:

    • 评论数据不能备份到本地数据库
    • 不支持匿名评论(输入昵称、电子邮件),必须登录(目前只有3种选择:网易、微博、QQ)才能评论
    • 怀疑评论没有全部导入
    • 无论是后台管理还是提交评论,响应都很慢(可能是因为在国外访问的原因)
    • 不支持Markdown(这点也谈不上缺点,貌似只有原生态评论和Disqus支持)

    除此之外,还有一个很严重的问题。在云跟贴留言,前台刷新就看不到留言了(设置的是先发后审),后台要过很久(甚至高达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文章记录,属性如下:

    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是多说的评论,不包括微博、删除评论、垃圾评论;

    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 网易云跟贴

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

    [{
      "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}}]}, ...
    }]
    

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



沪ICP备19023445号-2号
友情链接