zoukankan      html  css  js  c++  java
  • 多说评论一次导回 Typecho 本地数据库

    一、追忆往昔

    第一次接触社交化评论类产品大概是在2012年左右,当时国内知名度较高的有多说、友言等,国际上比较有名的有Disqus,这类产品的优点在此就不多说了。

    用过几款产品后,被多说漂亮的页面和体验所吸引,最终爱上了多说。开源的内容管理和博客系统换过很多,但评论只要能用多说,就一定用它。

    后来被 typecho 的精简吸引,本人的个人博客系统也从 wp 换到 typecho,评论也一直用的多说。但 typecho 没有像 wp 那样完善的插件管理系统,看不到数据,加上对第三方的不信任(随时停更),所以也没有安装第三方插件;再加上是多说的死忠粉,实不实时同步到本地数据库也没什么大问题。

    2017年3月21日,多说官方发布了一条重要通知:“多说即将关闭,将于2017年6月1日正式关停服务”。当时内心感慨万千,本想来个长篇大论感慨一下,奈何文采有限,最后发了一条朋友圈:

    ”多说“国内社交化评论”No.1“,如今竟然也落得如此下场!不能变现的项目,即使再优秀也难得长久,愿在新的领域里再创辉煌,前程似锦!”

    感慨完了,数据还是要拿回来,既然是6月1日正式停止服务,那还是有大把时间可以挥霍的,所以一直也没上心。正好这个五一小长假来临前一天,感冒+高烧找上了门,只能在家闭门养病了(平时也不知道在瞎忙什么...)。

    二、主要步骤

    关于多说的数据格式和 typecho 表结构在这里就不分析了,主要说说主要步骤。这里是把多说json格式的数据转换成符合 typecho 表关系的 insert 语句,并写入到insert.sql文件中,有了这个文件相信聪明的你就知道该怎么做了!

    1. 将多说数据导出

    进入多说开发者后台=>工具=>导出数据,选中”包含文章数据“、”包含评论数据“,务必选中两项,然后导出数据,解压后拿到export.json文件备用。

    2. PHP 代码如下:

    在 export.json 同级目录新建import.php文件,代码如下:

    <?php
    
    // 读取 json 文件并转换成 php 数组
    $json = file_get_contents("./export.json");
    $data = json_decode($json, true);
    
    // 文章数据
    $threads = $data['threads'];	
    // 评论数据
    $posts = $data['posts'];	
    
    // 多说的文章ID(thread_id)与 typecho 的文章ID(cid) 对应关系
    $threadIdRelationCid = [];
    foreach ($threads as $item) {
    	$threadIdRelationCid[$item['thread_id']] = $item['thread_key'];
    }
    
    // 假设评论表 coid 小于10001,此处从10001开始自增,请根据实际最大值修改
    $coid = 10001;
    // 多说的评论ID(post_id) 与 typecho 的评论ID(coid) 对应关系
    $postIdRelationCoid = [];
    foreach ($posts as $item) {
    	$postIdRelationCoid[$item['post_id']] = $coid++;
    }
    
    // 拼成多条 insert sql语句
    $sql = '';
    foreach ($posts as $item) {
    	$coid = $postIdRelationCoid[$item['post_id']];
    	$cid = $threadIdRelationCid[$item['thread_id']];
    	$created = strtotime($item['created_at']);
    	$author = $item['author_name'] ?: '';
    	$mail = $item['author_email'] ?: '';
    	$url = $item['author_url'] ?: '';
    	$ip = $item['ip'];
    	$text = $item['message'];
    	$parent = 0;
    	if (is_array($item['parents'])) {
    		$parent = $postIdRelationCoid[$item['parents'][0]];
    	}
    
    	$sql .= "INSERT INTO `typecho_comments` 
    (`coid`, `cid`, `created`, `author`, `authorId`, `ownerId`, `mail`, `url`, `ip`, `agent`, `text`, `type`, `status`, `parent`) VALUES
    ({$coid}, {$cid}, {$created}, '{$author}', 0, 1, '{$mail}', '{$url}', '{$ip}', NULL, '{$text}', 'comment', 'approved', $parent);
    ";
    }
    
    // 将 sql 写入文件中
    file_put_contents("./insert.sql", $sql);
    
    echo "end 
    ";
    

    在命令行执行php import.php 或在浏览器中访问import.php文件(推荐使用命令行方式),就会在该文件所在的目录生成一个insert.sql文件。【下载代码

    3. 小问题

    部分评论数据里面可能会有 emoji 表情,但是 typecho 表的字符集是 utf8,如果需要保留 emoji 的童鞋把 pre_comments 表的字符集改成 utf8mb4 即可,不需要保留 emoji 表情的将 emoji 表情删掉重导即可。

    本博客已切换到 typecho 自带的评论,默认的才是最好的!!!!!如果有和我一样需求的童鞋可以把代码拿去放心使用。

    三、反思

    不得不说,从产品角度讲,”多说“是一个非常优秀的产品,市场占有率非常高,但从商业角度讲,”多说“又是一个非常失败的案例,其成败都值得深思。

    如果您看到了这篇文章,请留下您的思考!_

  • 相关阅读:
    48. Rotate Image
    47. Permutations II
    46. Permutations
    45. Jump Game II
    44. Wildcard Matching
    43. Multiply Strings
    42. Trapping Rain Water
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
  • 原文地址:https://www.cnblogs.com/imayanlong/p/6789833.html
Copyright © 2011-2022 走看看