一、追憶往昔
第一次接觸社交化評論類產(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è)角度講,”多說“又是一個非常失敗的案例,其成敗都值得深思。
如果您看到了這篇文章,請留下您的思考!_