自分としてはhtmlから作成したのはMT(Movable Type)形式ではなく、Markdown型式なのだが、世間一般として喜ばれるのはこちらなので、適当に作成したのを公開しておく。
コメント欄の移行は面倒なので、対応してない。Ameba Owndへのインポートしたページを数ページ確認しただけ。
htmlToMovableType.ps1
cd "C:\Users\arimasou16\Documents\html"
$files = Get-ChildItem -File *.html
$tempfile = "temp.txt"
echo $null > $tempfile
foreach($file in $files) {
# タイトル
$title = (Get-Content -Encoding UTF8 $file).foreach{ if ($_ -match "(?<=data-unique-entry-title=`")(.+?)(?=`" data-unique-ameba-id=)") { $matches[1] }}
# カテゴリ
$category = (Get-Content -Encoding UTF8 $file).foreach{ if ($_ -match "(?<=`" rel=`"tag`">)(.+?)(?=<\/a><\/span>)") { $matches[1] }}
# 日付
$date = (Get-Content -Encoding UTF8 $file).foreach{ if ($_ -match "(?<=pubdate=`"pubdate`">)(\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2})(?=<\/time><\/span>)") { $matches[2] + "/" + $matches[3] + "/" + $matches[1] + " " + $matches[4] }}
# 出力ファイル名
$mtfilename = "movabletype.txt"
echo "AUTHOR: arimasou16">> $tempfile
echo "TITLE: $title">> $tempfile
echo "STATUS: Publish">> $tempfile
echo "ALLOW COMMENTS: 1">> $tempfile
echo "CONVERT BREAKS: default">> $tempfile
echo "ALLOW PINGS: 1">> $tempfile
echo "PRIMARY CATEGORY: $category">> $tempfile
echo "CATEGORY: $category">> $tempfile
echo "">> $tempfile
echo "DATE: $date">> $tempfile
echo "-----">> $tempfile
echo "BODY:">> $tempfile
$content = (Get-Content -Encoding UTF8 $file) -as [String[]]
$isBody = $false
$isCode = $false
$linesep = "`r`n"
$body = ""
foreach ($line in $content) {
# 本文終了か判定
if ($line -match "^<!--entryBottom-->$") {
$isBody = $false
# 本文の最終行にある</div>を削除
$body = $body.Remove($body.Length -6, 6)
}
if ($isBody) {
# 空白行でなければ
if (-not ($line -match "^\s*$")) {
# 整形ブロックの開始タグがあるか判定
if ($line -match "<pre>") {
$isCode = $true
$linesep = ""
}
# 整形ブロックの終了タグがあるか判定
if ($line -match "</pre>") {
$isCode = $false
$linesep = "`r`n"
}
# 変換
$line = $line -replace "<br ?/?>",$linesep
$line = $line -replace "</p>",$linesep
$line = $line -replace "<p>",""
$line = $line -replace "-(?=-{3})","-"
$body += $line
}
}
# 本文開始か判定
if ($line -match "^<div class=`"articleText`">$") {
$isBody = $true
}
}
echo $body >> $tempfile
echo "-----">> $tempfile
echo "EXTENDED BODY:">> $tempfile
echo "">> $tempfile
echo "-----">> $tempfile
echo "EXCERPT:">> $tempfile
echo "">> $tempfile
echo "-----">> $tempfile
echo "KEYWORDS:">> $tempfile
echo "">> $tempfile
echo "-----">> $tempfile
echo "">> $tempfile
echo "">> $tempfile
echo "--------">> $tempfile
}
# テキスト読み込み
$enc = [Text.Encoding]::GetEncoding("UTF-16")
$readfile = $file.DirectoryName + "\" + $tempfile
$stream_r = new-Object system.IO.StreamReader("$readfile", $enc)
$buff = $stream_r.Readtoend()
$stream_r.close()
# テキスト書き込み(PowerShellは文字コードUTF-16がデフォルトなので)
$enc = New-Object System.Text.UTF8Encoding($False)
$writefile = $file.DirectoryName + "\" + $mtfilename
$stream_w = new-Object system.IO.Streamwriter("$writefile", $false, $enc)
$stream_w.write($buff)
$stream_w.close()
Remove-Item $readfile -Force
事前にhtmlファイルを取得しておく必要があるのは、 アメブロ(ameblo.jp)の画像をバックアップする(引っ込抜く)と同じ。
初期値ではいきなり公開になっているので、STATUS: Publish
を、必要であればSTATUS: Draft
に。188記事で、20分ぐらいで終わった。