多说评论系统迁移记

综合编程 2017-04-11

多说评论厂倒闭了,倒闭了,倒闭了!!!

作为一个使用了3年的重度用户,面对这个消息,满是感伤,说好的不离不弃呢,我只能默默的送上祝福

抉择

摆在我面前有两条路,要么迁移,干掉评论,我选择了前者

解决了纠结,又有一个大大岔路口摆在面前,众多评论系统中选择哪个呢???

先来说结果,最后我选择了commentit,原因是我乐意,首先类多说这种评论系统(有言,disqus)被我排除在外了,毕竟伤口还疼呢

gitment通过github api把文章评论托管在github issues,通过github issues做精细化定制,非常有意思,并且也是国人开发的,优点是只依赖github api,祈祷github 不下线这个功能就行了

Comm (ent|it)

我选择的是commentit,一个法国小孩开发的,依赖法国小孩的服务系统,将评论发pull request到自己的仓库,然在在自己仓库存储评论

法国小孩在 警告
里说自己不对系统稳定性和时间做任何保证,o(╯□╰)o

接入过程非常简单,官方的 Getting started
介绍的非常清楚了

开始老是报错,提交不上去,错误信息如下,后来在 github
和作者交流才发现是我的仓库名字是 yanhaijing.github.com
的问题,重命名为 yanhaijing.github.io
就好了

Error: could not commit the comment to github (repository or file not found)

commentit提供了两种评论存储方案,存储在博文的meta数据,或者存储在单独外部文件,我选择了后者,原因是方便迁移历史评论数据,而且我也觉得在.md里存储一大推评论有点恶心,具体接入可以直接参看我的 github

整体体验还是不错的,登录账号可以使用推特,脸谱和github

历史数据问题

好吧我最想说的是这部分,我大概有几百个评论,实在舍不得丢弃,最后写了一个脚本将多说导出的数据,转换成了commentit的数据

先来看下多说导出的数据

"threads": [
    {
        "thread_id": 1366309223767474177,
        "created_at": "2014-01-17T16:59:41+08:00",
        "url": "http://yanhaijing.com/css/2014/01/css/"
    }
],
"posts": [
    {
        "thread_id": 1366309223767474198,
        "message": "这题太发散了~~",
        "created_at": "2014-01-22T11:54:42+08:00",
        "author_name": "修远兮",
        "author_url": "http://weibo.com/bai80",
    }
]

再来看一下 commentit
要求的格式:

encapsulation-of-javascript:
  - author:
      type: full
      displayName: 修远兮
      url: http://weibo.com/bai80
      picture: /img/default-avatar.png
    content: 这题太发散了~~
    date: 2014-01-22T11:54:42+08:00

思路是,把评论按照文章进行聚合,代码如下

let threadsMap = {};
ret.threads.forEach(function (thread) {
    // 过滤指定url
    if (/yanhaijing.com/w*/dddd/dd/dd/.test(thread.url)) {
        threadsMap[thread.thread_id] = thread;
        console.log(thread.thread_id, thread.url)
    }
});

let commentMap = {};

ret.posts.forEach(function (post) {
    if (!threadsMap[post.thread_id]) {
        return;
    }

    let threadUrl = threadsMap[post.thread_id].url;

    let arr = threadUrl.split('?')[0].split('/');

    let threadName = arr.pop() || arr.pop();

    if (!/^[a-zA-Z0-9_-]+$/.test(threadName)) {
        return;
    }


    if (!commentMap[threadName]) {
        commentMap[threadName] = [];
    }

    commentMap[threadName].push(post);

})


let text = '';
Object.keys(commentMap).forEach(function (key) {
    text += `${key}:n`;

    commentMap[key].forEach(function (comment) {
        let msg = comment.message;
        if (msg.indexOf('n') !== -1) {
            msg = ' |-n' + msg;
            msg = msg.replace(/n/g, 'n      ');
        }
        msg = msg.replace(/[[]:@"b]/g, ' ');

        let name = comment.author_name.replace(/@/g, '');

        let picture = '/img/default-avatar.png';
        if (name === '颜海镜') {
            picture = '/img/facelessman.png'
        }
        text += `  - author:n`;
        text += `      type: fulln`;
        text += `      displayName: ${name}n`;
        text += `      url: ${comment.author_url}n`;
        text += `      picture: ${picture}n`;
        text += `    content: ${msg}n`;
        text += `    date: ${comment.created_at}n`;
    });
});

console.log(text);

遇到的一个问题就是头像,头像数据我只能弄了一个默认头像,所以历史评论全变成了一样的头像,好在用户名和url还有,demo

总结

总结了一些经验和遇到的一些问题,希望能够帮到迁移的人,现在我只祈祷法国小哥别弃坑,o(╯□╰)o

如果你是hexo我不建议迁移commenit,因为commentit不支持提交到指定分支,而hexo一般都是有两个分支source和master,我建议看下上面提到的gitment

责编内容by:颜海镜 (源链)。感谢您的支持!

您可能感兴趣的

小米也尊敬的对手:6GB不多说,就1299 大家一直知道的是,小米堪称性价比之王。高性价的路线,是从手机领域,一直延续到了它所有的产品线上,整个生态链的产品只要一出,必定会掀起一阵抢购风潮。但其实在国产手...
五粮液并购瞄准川酒六朵金花?董事长:不便多说,自己体会... 6月8日上午,宜宾五粮液股份有限公司(五粮液,000858)2017年度股东大会在公司总部四川省宜宾市举行。会上,四川省宜宾五粮液集团有限公司(简称“集团...
「多说」再见,「Hashover」 你好 多说评论用了好多年了,也是有感情的。这年头免费的事情难做我们也是很理解的,祝@沈振宇 和他的团队越来越好吧~ 感恩! 话说在「多说」宣布要关闭之...
华为厉害了!裸眼美妆+6G+EMUI8.0,女性看了多说好!... 华为不单单在价位机型市场有很大的优势,其在女性用户机型同样具有很好的口碑,特别是Nova手机,女性用户看了都说好。其在美颜拍照和外观颜值上的性价比很高,几乎没有...
库克:苹果并不落后 只是不愿多说 苹果首席执行官蒂姆·库克 凤凰科技讯 据《麻省理工科技评论》北京时间6月15日报道,在执掌苹果帅印的6年中,蒂姆&mid...