多說評論一次導回 Typecho 本地數據庫

1、追憶往昔

第一次接觸社交化評論類產品大概是在2012年左右,當時國內知名度較高的有多說、友言等,國際上比較有名的有Disqus,這類產品的優勢在此就很少說了。php

用過幾款產品後,被多說漂亮的頁面和體驗所吸引,最終愛上了多說。開源的內容管理和博客系統換過不少,但評論只要能用多說,就必定用它。git

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

2017年3月21日,多說官方發佈了一條重要通知:「多說即將關閉,將於2017年6月1日正式關停服務」。當時心裏感慨萬千,本想來個長篇大論感慨一下,奈何文采有限,最後發了一條朋友圈:sql

」多說「國內社交化評論」No.1「,現在居然也落得如此下場!不能變現的項目,即便再優秀也可貴長久,願在新的領域裏再創輝煌,前程似錦!」數據庫

感慨完了,數據仍是要拿回來,既然是6月1日正式中止服務,那仍是有大把時間能夠揮霍的,因此一直也沒上心。正好這個五一小長假來臨前一天,感冒+高燒找上了門,只能在家閉門養病了(平時也不知道在瞎忙什麼...)。json

2、主要步驟

關於多說的數據格式和 typecho 表結構在這裏就不分析了,主要說說主要步驟。這裏是把多說json格式的數據轉換成符合 typecho 表關係的 insert 語句,並寫入到insert.sql文件中,有了這個文件相信聰明的你就知道該怎麼作了!數組

1. 將多說數據導出

進入多說開發者後臺=>工具=>導出數據,選中」包含文章數據「、」包含評論數據「,務必選中兩項,而後導出數據,解壓後拿到export.json文件備用。瀏覽器

2. PHP 代碼以下:

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

<?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);\n";
}

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

echo "end \n";

在命令行執行php import.php 或在瀏覽器中訪問import.php文件(推薦使用命令行方式),就會在該文件所在的目錄生成一個insert.sql文件。【下載代碼typecho

3. 小問題

部分評論數據裏面可能會有 emoji 表情,可是 typecho 表的字符集是 utf8,若是須要保留 emoji 的童鞋把 pre_comments 表的字符集改爲 utf8mb4 便可,不須要保留 emoji 表情的將 emoji 表情刪掉重導便可。

本博客已切換到 typecho 自帶的評論,默認的纔是最好的!!!!!若是有和我同樣需求的童鞋能夠把代碼拿去放心使用。

3、反思

不得不說,從產品角度講,」多說「是一個很是優秀的產品,市場佔有率很是高,但從商業角度講,」多說「又是一個很是失敗的案例,其成敗都值得深思。

若是您看到了這篇文章,請留下您的思考!^_^

相關文章
相關標籤/搜索