一箱歧、追憶往昔
第一次接觸社交化評論類產(chǎn)品大概是在2012年左右矾飞,當(dāng)時國內(nèi)知名度較高的有多說、友言等呀邢,國際上比較有名的有Disqus洒沦,這類產(chǎn)品的優(yōu)點在此就不多說了。
用過幾款產(chǎn)品后价淌,被多說漂亮的頁面和體驗所吸引申眼,最終愛上了多說。開源的內(nèi)容管理和博客系統(tǒng)換過很多输钩,但評論只要能用多說豺型,就一定用它。
后來被 typecho 的精簡吸引买乃,本人的個人博客系統(tǒng)也從 wp 換到 typecho姻氨,評論也一直用的多說。但 typecho 沒有像 wp 那樣完善的插件管理系統(tǒng)剪验,看不到數(shù)據(jù)肴焊,加上對第三方的不信任(隨時停更)前联,所以也沒有安裝第三方插件;再加上是多說的死忠粉娶眷,實不實時同步到本地數(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)的項目每聪,即使再優(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ù)必選中兩項,然后導(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ù)實際最大值修改
$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
文件∫龋【下載代碼】
3. 小問題
部分評論數(shù)據(jù)里面可能會有 emoji 表情甲葬,但是 typecho 表的字符集是 utf8,如果需要保留 emoji 的童鞋把 pre_comments 表的字符集改成 utf8mb4 即可懈贺,不需要保留 emoji 表情的將 emoji 表情刪掉重導(dǎo)即可经窖。
本博客已切換到 typecho 自帶的評論,默認(rèn)的才是最好的K蟛印;隆!Lピ础棉钧!如果有和我一樣需求的童鞋可以把代碼拿去放心使用。
三涕蚤、反思
不得不說宪卿,從產(chǎn)品角度講,”多說“是一個非常優(yōu)秀的產(chǎn)品万栅,市場占有率非常高佑钾,但從商業(yè)角度講,”多說“又是一個非常失敗的案例烦粒,其成敗都值得深思休溶。
如果您看到了這篇文章,請留下您的思考扰她!_