有馬総一郎のブログ

(彼氏の事情)

2017年01月14日 13:15:05 JST - 2 minute read - Comments - PowerShell

アメブロ(ameblo.jp)の記事をMT(Movable Type)型式のテキストファイルに変換する

自分としては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})","&#45;"
                $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分ぐらいで終わった。

Tags: PowerShell ameblo

アメブロ(ameblo.jp)の画像をバックアップする(引っ込抜く) Linux(Ubuntu)でAndroidアプリを動かす

comments powered by Disqus