2009年10月12日

部落格搬家紀實 - 從 SnipSnap 到 Blogger

前言

基本上在已經營部落格 5 年的情形下搞搬家是需要很大的勇氣的,當然也可能只是因為愚蠢的關係... XD

會決定部落格要搬家的首要原因是因為前陣子系統硬碟陣亡後,一時間找不到/想不起來把 SnipSnap 的 Source 塞那邊去了。沒了 Source 就沒辦法再加新功能,所以開始考慮搬家的問題。

決定要搬家意謂著得把過去所有的文章統統帶到新家,但是由於 SnipSnap 是一套極小眾化的部落格共筆系統,所以完全找不到任何工具可以快速的達成這項作業,於是退而求其次是自行寫小工具進行搬家。最原始的想法是將資料庫內的文章記錄全部翻出來後轉成 Blogger 的備份檔案,這樣只要直接 Import 馬上完成辦家作業,任務終了!

有了方向就開始進行測試了。弄了幾篇文章後匯出成 Blogger 匯出備份檔,東刪西砍後弄了一份假檔案去玩匯入功能,先是被 Blogger 吐槽說不支援別人家的備份檔,再修改後的測試則讓 Blogger 吐出一串奇怪的錯誤訊息。查詢過 Google 後確定應該不是因為我這個簡化過的備份檔的關係(難不成大家都有偽造備份檔的習慣?),顯然這個想法的可行性有執行上的問題...囧rz

雖然生出 Blogger 可用的匯出備份檔是個問題,但實際上 SnipSnap 儲存在資料庫內的資料和頁面上顯示的內容也因為 Macro 的存在而有極大的差異。因為沒辦法自行呼叫 SnipSnap 內建或自行開發的 Macro 去解析原始資料,很快的便把腦筋動到內建 RSS 輸出功能,至少從 FeedBurner 上可以確定產生的 RSS 檔已經將所有 Macro 、Filter、Formatter 等等都套用過了,更重要的是 Blogger 就是收這種 HTML 格式成為一篇文章的。

不過有點可惜的是內建的 RSS Servlet 只能輸出首頁的指定筆數資料,為了能夠倒出所有的文章內容,我必須安裝修改過的 Servlet 到 SnipSnap 內。這個問題不算難,確認那個 class 才是系統用來轉換 RSS format 的部份則花了點時間。最後實際執行 RSS 匯出的時間好像才 30 秒不到而以。

有了所有文章的 RSS 檔後就可以開始匯入了。於是我開始搜尋 rss2blogger 這個關鍵字,還真的在 Google Code 中找到一個 rss2blogger 開源專案,可惜的是他完全沒有記載怎麼使用。

之後,我決定自行開發匯入工具,本來名稱就叫做 RSS2Blogger,不過因為和上面那個開源專案名稱衝突,所以實際上真正 commit 進去的名稱叫做 RSS2Blogspot ,對!這是 Blogger 的另一個名字。

之所以需要自行開發匯入工具的主要且唯一的原因在於必須更正原本指向 SnipSnap 內其他文章的連結。如果使用現有工具直接導入 Blogger.com 的話,後續顯然得要花上更多的時間去修正所有文章中的連結,連結問題一直是所有搞部落格搬家工程的部落客心中最大的傷痛。

RSS2Blogspot

初期對這個匯入工具的想法除了採用 Google Data API 外,在功能上應當要具備以下功能:
  1. 可以設定是否存為草稿
  2. 可以濾除指定字串
  3. 可以標示出該文章有 Blog 內部參考連結
符合以上要求的第一個版本就是以下這張圖的執行畫面:
RSS2Blogger 執行匯入過程

匯入一些文章進行測試後認為程式碼部份應該可以再美化些(最後還是一樣醜),功能可以再增強些(還好達成了),以及訊息應該改回英文。想要只顯示英文的原因在於先前的 ass2srt 工具因為都是中文字結果造成網路上一些外國朋友使用上的問題,也許用一些不太工整、破破的英文訊息就可以讓這個工具活久一點(ass2srt 比我想像的活的還久)。

正式上傳到 Google Code 的 rss2blogspot 就是修改過後的版本,它提供了(在 RSS2Blogger 開發記錄中曾提到過):
  1. 可以單篇或全部 RSS 內文章都指定為草稿:其實後來我都指定為直接發佈了!
  2. 將濾除功能改為替換功能:原本濾除功能就是一種替換作業,加上我有一大堆的表情符號要重新指定連結網址,所以這個功能就被強化了。
  3. 使用參數方式檢驗文章內部的連結。
  4. 加入分類標籤設定:因為原本的 rss 檔中就有 <category /> 元素,所以直接拿來當做文章分類標籤使用。
因為功能上的強化,所以我又回頭改寫了 SnipSnap 的 RSS 輸出,將所有表情符號的對照表及內部連結格式等資訊統統直接輸出到 rss 檔案內,這樣子當開始搬移 Blog 文章後需要再檢核的項目就會大符減少。

匯入前檢查

至於實際上在匯入的時候,我會先檢查 rss 檔內部的發佈時間及文章標題是否正確。在早期發文習慣不良時是有少數幾篇文章沒有捉到文章標題的。另外也會針對文章內容是否有保留價值進行篩選,因為早期好像真的有一些無病呻吟的搞怪文章,這些後來都決定予以放棄了。

至於什麼時候可以搬完呢?我想應該還是會花上 1 ~ 2 個月吧! 畢竟人懶的時候會忘了要上傳文章... :p

應用

因為目前 RSS 資料是如此的容易取得,這個工具的應用似乎也挺有看頭的。舉一個最最簡單的例子來說,這個工具可以協助建立一個 Blog 備份站台。只要在原本的 BSP 中編寫完文章,然後捉下 rss 檔後馬上就可以再 Post 到 Blogger 內。除了一般的部落格文章外當然還可以用來處理別的資料類型如 picasaweb / flickr 的圖像記錄,只是這需要再修改程式進行客製化就是了。