[LifeType] WordPress To Lifetype
前陣子幫一個朋友的網誌從WordPress平台轉換到LifeType平台,在網路上找到的資料大多都是由LifeType轉換到Wordpress的資料,幾乎很少看到由WordPress轉換到Lifetype的資訊,而且目前Lifetype並沒有提供WordPress資料匯入的功能,只能手工透過資料庫轉換來達到轉換,所以在這邊就順手做一下紀錄:(以Lifetype 1.2.8 及WordPress 2.7.1為例)
1. 確認要轉換的網誌及帳號:
1. 1 在轉換到Lifetype之前,一定要先確認Lifetype目的端的轉換帳號(lt_users.user)、帳號ID(lt_users.id)、網誌名稱(lt_blogs.blog)以及網誌ID(lt_blogs.id),以方便資料庫轉換填入。(在此以帳號ID 13及網誌ID 10為例)
1.2 確認來源端的WordPress作者(wp_users.user_login)帳號ID(wp_users.ID),這個步驟是適用於多人共同編寫的WordPress網誌作者,取出屬於自己編寫的網誌。(在此以帳號ID 2為例)
2. 轉換文章類別名稱至LifeType:
在WordPress上面使用wp_terms這個表格(Table)來紀錄文章類別(category),而這個Table除了可以紀錄文章的類別,也可以紀錄自訂連結的類別,因此在轉換到LifeType的lt_articles_categories Table之時,必須要特別設定屬性為category的資料。
INSERT INTO lt_articles_categories (name, blog_id, last_modification, in_main_page, parent_id, description, properties, mangled_name, num_articles, num_published_articles)
SELECT terms.name, 10, now(), 1, 0, "", "", "", tax.count, tax.count FROM wptest.wp_terms as terms, wptest.wp_term_taxonomy as tax WHERE terms.term_id = tax.term_id AND tax.taxonomy = "category";
3. 轉換文章至Lifetype:
在LifeType平台上,紀錄文章的Table總共有三個,分別是lt_articles、lt_articles_text以及lt_articles_categories_link三個,其中articles紀錄的是一篇文章的基本屬性,如全系統類別、編寫時間、修改時間等等,而articles_text則紀錄文章主體內容、標題,在article_categories_link則是紀錄該篇文章所屬的類別,在LifeType平台上,對於一篇文章而言,這三個Table都必須要存在紀錄,缺一不可,如果一篇文章缺一筆資料,就會造成程式執行錯誤,這邊一定要小心轉換。另外在實行WordPress To LifeType的資料庫轉換過程,有一個預設前提條件,就是,要轉換的每一篇文章編寫時間必須要不同,因為文章轉換的過程中,會利用到一些時間比對的方式建立Join。
3.1. 首先將文章的基本屬性轉換至lt_articles(請記得將user_id、blog_id及post_author的ID置換成所要轉換的目標及來源)
INSERT INTO lt_articles (date, modification_date, user_id, blog_id, status, num_reads, properties, slug, num_comments, num_nonspam_comments, num_trackbacks, num_nonspam_trackbacks, global_category_id, in_summary_page)
SELECT wpp.post_date, wpp.post_date, 13, 10, 1, 0, 'a:1:{s:16:"comments_enabled";b:1;}', "", wpp.comment_count, wpp.comment_count, 0, 0, 0, 1 FROM wptest.wp_posts as wpp WHERE wpp.post_author = 2;
3.2. 接著轉換文章的文字內容至LifeType (lt_articles_text)
INSERT INTO lt_articles_text (article_id, text, topic, normalized_text, normalized_topic, mangled_topic)
SELECT arti.id, wpp.post_content, wpp.post_title, wpp.post_content, wpp.post_title, "" FROM lt_articles as arti, wptest.wp_posts as wpp WHERE arti.date = wpp.post_date;
在這個轉換的過程中,使用了時間的比對,因此再一次的提醒,做轉換資料的時候必須要確定每一篇文章的編寫時間都是不同的。
3.3. 轉換文章類別至Lifetype的文章類別(lt_articles_categories_link)
INSERT INTO lt_article_categories_link (article_id, category_id)
SELECT lt_arti.id, lt_cate.id
FROM lt_articles_categories as lt_cate, lt_articles as lt_arti, wptest.wp_term_relationships as wptr, wptest.wp_term_taxonomy as wptt, wptest.wp_terms as wpt, wptest.wp_posts as wpp
WHERE lt_arti.date = wpp.post_date AND wpp.ID = wptr.object_id AND wptr.term_taxonomy_id = wptt.term_taxonomy_id AND wptt.term_id = wpt.term_id AND wpt.name = lt_cate.name AND lt_cate.blog_id = 10;
這個SQL的Sub Query使用了許多的Join,主要是因為在WordPress之中的文章類別紀錄,分別使用了三個表格來達成,並且要達到兩邊的文章比對以及類別名稱的比對,所以相對的複雜許多;在這邊同樣要注意到要置換blog_id。
4. 轉換文章迴響(Comment)至Lifetype(lt_articles_comments)
INSERT INTO lt_articles_comments (article_id, blog_id, topic, text, date, user_id, user_email, user_url, user_name, parent_id, client_ip, send_notification, status, spam_rate, properties, normalized_text, normalized_topic, type)
SELECT lt_arti.id, 10, "Re:", wpc.comment_content, wpc.comment_date, 0, wpc.comment_author_email, wpc.comment_author_url, wpc.comment_author, 0, "0.0.0.0", 0, 0, 0, "a:0:{}", wpc.comment_content, "Re:", 1
FROM lt_articles as lt_arti, wptest.wp_posts as wpp, wptest.wp_comments as wpc
WHERE lt_arti.date = wpp.post_date AND wpp.ID = wpc.comment_post_ID;
在這個步驟中請記得修改blog_id的部份為目的端的BlogID。
文章的內容轉換,到這邊並還沒有完全結束,因為LifeType在文章及迴響的顯示上使用了normalized_text及normalized_topic存放移除所有HTML Tag的文字內容,因此還需要透過程式來做程式的修改,這步驟留待最後執行。
5. 計算轉換的部落格文章總數,以及迴響總數存入:
在LifeType紀錄單一部落格的文章總數以及迴響總數的表格位在lt_blogs的num_posts及num_comments,在這邊計算文章及迴響的方式總共下了兩道SQL計算數量,然後,手動填入該表格中。
計算文章數量:
SELECT count(id) FROM lt_articles WHERE user_id = 13 AND blog_id = 10
計算迴響數量:
SELECT count(id) FROM lt_articles_comments WHERE blog_id = 10
或者是你也可以用比較偷懶的方式,一次更改兩個數值:
UPDATE lt_blogs SET num_posts = (SELECT count(id) FROM lt_articles WHERE user_id = 13 AND blog_id = 10), num_comments = (SELECT count(id) FROM lt_articles_comments WHERE blog_id = 10) WHERE id = 10;
6. 修改文章及迴響內容的normalized_text及normalized_topic:
$host = "127.0.0.1"; $user = "root"; $password = "root"; mysql_connect($host, $user, $password); mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER_SET_CLIENT=utf8"); mysql_query("SET CHARACTER_SET_RESULTS=utf8"); //取得目前的文章內容,假設新增的文章id範圍為547~998 $result = mysql_db_query("lifetype", "SELECT id, normalized_text, normalized_topic FROM lt_articles_text WHERE id <= 998 AND id >= 547") or die ("error"); $count = 1; while($row = mysql_fetch_array($result)){ echo $row[0]."<br/>"; $cleanString = strip_tags($row[1]); mysql_query ("UPDATE lt_articles_text SET normalized_text = '$cleanString' WHERE id = $row[0]"); $count++; } mysql_free_result($result); //取得新增的迴響內容,假設新增的迴響id範圍為1335~1560 $result = mysql_db_query("lifetype", "SELECT id, normalized_text FROM lt_articles_comments WHERE id <= 1560 AND id >= 1335") or die ("error"); $count = 1; while($row = mysql_fetch_array($result)){ echo $row[0]."<br/>"; $cleanString = strip_tags($row[1]); mysql_query ("UPDATE lt_articles_comments SET normalized_text = '$cleanString' WHERE id = $row[0]"); $count++; } mysql_free_result($result);
以上的程式共有兩段,分別是修改文章的normalized_text以及修改迴響的normalized_text的部份小程式,作到這邊,大致上所有的轉換就完成了,可以先行連結是網誌的連結查看文章是否新增正常。有任何問題,歡迎大家提出討論。
相關文章:
[Lifetype] 一個Lifetype樣板(Template)的繼承架構
[Lifetype] 更新GoogleAnalyticsPlugin為新版的ga.js
[Lifetype] 在每個Post的HTML Title加入文章標題
[Lifetype] 在Lifetype平台使用Windows Live Writer
[Lifetype] 解決Live Writer無法更新類別問題



