多說評論一次導(dǎo)回 Typecho 本地數(shù)據(jù)庫

一、追憶往昔

第一次接觸社交化評論類產(chǎn)品大概是在2012年左右,當(dāng)時國內(nèi)知名度較高的有多說、友言等,國際上比較有名的有Disqus,這類產(chǎn)品的優(yōu)點(diǎn)在此就不多說了。

用過幾款產(chǎn)品后,被多說漂亮的頁面和體驗(yàn)所吸引,最終愛上了多說。開源的內(nèi)容管理和博客系統(tǒng)換過很多,但評論只要能用多說,就一定用它。

后來被 typecho 的精簡吸引,本人的個人博客系統(tǒng)也從 wp 換到 typecho,評論也一直用的多說。但 typecho 沒有像 wp 那樣完善的插件管理系統(tǒng),看不到數(shù)據(jù),加上對第三方的不信任(隨時停更),所以也沒有安裝第三方插件;再加上是多說的死忠粉,實(shí)不實(shí)時同步到本地數(shù)據(jù)庫也沒什么大問題。

2017年3月21日,多說官方發(fā)布了一條重要通知:“多說即將關(guān)閉,將于2017年6月1日正式關(guān)停服務(wù)”。當(dāng)時內(nèi)心感慨萬千,本想來個長篇大論感慨一下,奈何文采有限,最后發(fā)了一條朋友圈:

”多說“國內(nèi)社交化評論”No.1“,如今竟然也落得如此下場!不能變現(xiàn)的項(xiàng)目,即使再優(yōu)秀也難得長久,愿在新的領(lǐng)域里再創(chuàng)輝煌,前程似錦!”

感慨完了,數(shù)據(jù)還是要拿回來,既然是6月1日正式停止服務(wù),那還是有大把時間可以揮霍的,所以一直也沒上心。正好這個五一小長假來臨前一天,感冒+高燒找上了門,只能在家閉門養(yǎng)病了(平時也不知道在瞎忙什么...)。

二、主要步驟

關(guān)于多說的數(shù)據(jù)格式和 typecho 表結(jié)構(gòu)在這里就不分析了,主要說說主要步驟。這里是把多說json格式的數(shù)據(jù)轉(zhuǎn)換成符合 typecho 表關(guān)系的 insert 語句,并寫入到insert.sql文件中,有了這個文件相信聰明的你就知道該怎么做了!

1. 將多說數(shù)據(jù)導(dǎo)出

進(jìn)入多說開發(fā)者后臺=>工具=>導(dǎo)出數(shù)據(jù),選中”包含文章數(shù)據(jù)“、”包含評論數(shù)據(jù)“,務(wù)必選中兩項(xiàng),然后導(dǎo)出數(shù)據(jù),解壓后拿到export.json文件備用。

2. PHP 代碼如下:

在 export.json 同級目錄新建import.php文件,代碼如下:

<?php

// 讀取 json 文件并轉(zhuǎn)換成 php 數(shù)組
$json = file_get_contents("./export.json");
$data = json_decode($json, true);

// 文章數(shù)據(jù)
$threads = $data['threads'];    
// 評論數(shù)據(jù)
$posts = $data['posts'];    

// 多說的文章ID(thread_id)與 typecho 的文章ID(cid) 對應(yīng)關(guān)系
$threadIdRelationCid = [];
foreach ($threads as $item) {
    $threadIdRelationCid[$item['thread_id']] = $item['thread_key'];
}

// 假設(shè)評論表 coid 小于10001,此處從10001開始自增,請根據(jù)實(shí)際最大值修改
$coid = 10001;
// 多說的評論ID(post_id) 與 typecho 的評論ID(coid) 對應(yīng)關(guān)系
$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);\n";
}

// 將 sql 寫入文件中
file_put_contents("./insert.sql", $sql);

echo "end \n";

在命令行執(zhí)行php import.php 或在瀏覽器中訪問import.php文件(推薦使用命令行方式),就會在該文件所在的目錄生成一個insert.sql文件?!?a target="_blank" rel="nofollow">下載代碼】

3. 小問題

部分評論數(shù)據(jù)里面可能會有 emoji 表情,但是 typecho 表的字符集是 utf8,如果需要保留 emoji 的童鞋把 pre_comments 表的字符集改成 utf8mb4 即可,不需要保留 emoji 表情的將 emoji 表情刪掉重導(dǎo)即可。

本博客已切換到 typecho 自帶的評論,默認(rèn)的才是最好的?。。。?!如果有和我一樣需求的童鞋可以把代碼拿去放心使用。

三、反思

不得不說,從產(chǎn)品角度講,”多說“是一個非常優(yōu)秀的產(chǎn)品,市場占有率非常高,但從商業(yè)角度講,”多說“又是一個非常失敗的案例,其成敗都值得深思。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,962評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,201評論 4 61
  • 16.8.22 離婚以后告訴我的親朋好友,之后得到很多反饋。 大我五歲以上自己所有的父輩告訴我,婚姻沒有十全十美,...
    輕情閱讀 250評論 0 1
  • 過年因生意需要,從外面大城市調(diào)了幾個大學(xué)生兼職回來幫忙。其中一個男生,還沒放假早早就打電話問候了餐廳幾位經(jīng)理,然后...
    我是松鼠醬閱讀 390評論 0 1

友情鏈接更多精彩內(nèi)容