[AutoIt] 將舊 MovableType 的網誌/圖片移到痞客邦/Google+相簿上!
最一開始寫網誌的時候,還沒有痞客邦,
那時候看到有人在介紹 MovableType,因此就自己架了一個,
其實也還不錯,用了很長的一段時間,
像圖片等等也都直接放在自己電腦上,不用上傳到外面的網頁上~
只是缺點是電腦都要一直開著,
而且也因此要申請動態 Domain Name 的服務~
後來轉移到了無名,不是很喜歡他們的介面,
接著又移到了痞客邦,不過其實寫網誌的頻率已經變很低了…
最近才又開始寫,
不過一方面其實也是因為不久前有在寫晨間日記,但後來也又荒廢了,
想說不寫晨間日記的話,
應該還是要寫網誌來記錄一下生活上的點點滴滴,
或是記錄一下用到的一些電腦技術,
順便自己之後需要的話可以查詢~
基於以上的理由,想說就也把舊網誌上的全部文章都轉移到痞客邦上,
MovableType 可以匯出網誌的內容,
而痞客邦也可以匯入 MovableType 的網誌備份,
可是圖片的部分並不會自動幫我抓進去(不過如果是從無名轉移過去是可以的)…
因此只好自己來…
觀察了一下,發現如果將一張圖片上傳至 Google+ 相簿的話,
它的網址雖然是很長一串亂亂的,不過檔名部分是跟原本的一樣,
而我的圖片基本上都有命名過,所以不會重覆,
因此如果我可以將圖片全部傳到 Google+ 相簿上,
再把網誌裡原本的圖片網址,都根據檔名的部分,對應到 Google+ 相簿中的圖片網址,
那樣子就 OK 了~
以下就是詳細的步驟:
Step 1: 先把圖片傳到 Google+ 相簿後,
把圖片網址全部抓到一個檔案 image_url_mapping.txt 中。
這時發現之前寫的 [Chrome extension] 自動抓取 Google+ 相簿中的所有相片連結再次派上用場,
果然之前做的努力還是有助於之後的偷懶的 😛
Step 2: 將舊 MovableType 的網誌匯出至 MTBackup.txt
Step 3: 執行以下的 AutoMT2Pixnet.au3(或到這裡下載),
會自動搜尋 MTBackup.txt 中圖片的網址,
如果圖檔名稱有在 image_url_mapping.txt 出現的話,
就替換成 image_url_mapping.txt 中定義的圖片網址。
像是原本我的圖片在 <img src=”/mt/images/atest.jpg”>,
而在 image_url_mapping.txt 中有個 https://xxx/yyy/atest.jpg 的話,
就會被取代成 <img src=”https://xxx/yyy/atest.jpg”>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
Const $CONST_SCRIPT_TITLE = StringReplace(@ScriptName, ".au3", "") Const $CONST_FILE_NAME_MAP = "D:PrivateDesktopimage_url_mapping.txt" Const $CONST_FILE_NAME_SRC = "D:PrivateDesktopMTBackup.txt" Const $CONST_FILE_NAME_DST = "D:PrivateDesktopMT_New.txt" Opt("MustDeclareVars", "1") ; Open files Global $g_hFileMap = FuncOpenFileHandle($CONST_FILE_NAME_MAP, 0) Global $g_hFileSrc = FuncOpenFileHandle($CONST_FILE_NAME_SRC, 128) Global $g_hFileDst = FuncOpenFileHandle($CONST_FILE_NAME_DST, 128+2) If $g_hFileMap <> -1 And $g_hFileSrc <> -1 And $g_hFileDst <> -1 Then Global $g_mapping = ObjCreate("Scripting.Dictionary") Local $sLine = "" While True ; Read a line from map file $sLine = FileReadLine($g_hFileMap) If @error <> 0 Then ExitLoop ; Add a mapping from that line FuncAddMap($sLine) WEnd Local $iLine = 0 While True ; Show current progress $iLine = $iLine + 1 TrayTip($CONST_SCRIPT_TITLE, "Processing line " & $iLine, 1) ; Read a line from source file $sLine = FileReadLine($g_hFileSrc) If @error <> 0 Then ExitLoop Local $nOffset = 1 While True ; Check if this line still contains references to /mt/ folder Local $arrayReg = StringRegExp($sLine, "(?U)""/mt/(.+)""", 1, $nOffset) If @error <> 0 Then ExitLoop ; Extract the filename part $nOffset = @extended Local $arrayReg2 = StringRegExp($arrayReg[0], ".+/(.+)", 1) ; Find the new mapped URL for the file Local $sMap = $g_mapping.Item(StringUpper($arrayReg2[0])) If $sMap <> "" Then ; Replace the original line with this new mapped URL $sLine = StringReplace($sLine, """/mt/" & $arrayReg[0] & """", """" & $sMap & """") EndIf WEnd ; Output the line to destination file FileWriteLine($g_hFileDst, $sLine) WEnd EndIf ; Close file handles FuncCloseFileHandle($g_hFileMap) FuncCloseFileHandle($g_hFileSrc) FuncCloseFileHandle($g_hFileDst) Func FuncOpenFileHandle($sFilePath, $nMode) Local $hFile = FileOpen($sFilePath, $nMode) If $hFile = -1 Then MsgBox(0, $CONST_SCRIPT_TITLE, "Cannot open " & $sFilePath & "!") Return $hFile EndFunc Func FuncCloseFileHandle($hFile) If $hFile <> -1 Then FileClose($hFile) EndFunc Func FuncAddMap($sLine) Local $arrayReg = StringRegExp($sLine, ".+/(.+)", 1) If @error = 0 Then $g_mapping.Item(StringUpper($arrayReg[0])) = $sLine EndIf EndFunc |
要注意的是行數 43-56 行之間的程式碼應該是需要修改的,
視你原本在 MovableType 的圖片網址格式而定~
基本上,如果你會 AutoIt 的話,要修改應該不是難事,
所以這邊也不打算多寫了,畢竟會用到這個的人應該很少~~
Step4: 程式會產生 MT_New.txt,
這邊要注意的一個小問題是,文章在 MovableType 中可能是 Publish/Draft 的狀態,
但痞客邦只吃 publish/draft(沒錯,有分大小寫…這應該可以算是 bug :P)
因此請先用文書編輯器,將所有的 Publish/Draft 都改成小寫的,
再匯入至痞客邦裡面,就完成了~
保險起見,最好先試只留一兩個文章在 MT_New.txt 裡然後匯入,
看看圖片是否可以正常顯示,和文章的狀態是不是正常的~
如果都 OK 的話,就可以把完整的 MT_New.txt 匯入囉~~