有馬総一郎のブログ

(彼氏の事情)

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

自分としてはhtmlから作成したのはMT(Movable Type)形式ではなく、Markdown型式なのだが、世間一般として喜ばれるのはこちらなので、適当に作成したのを公開しておく。

コメント欄の移行は面倒なので、対応してない。Ameba Owndへのインポートしたページを数ページ確認しただけ。

htmlToMovableType.ps1
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
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分ぐらいで終わった。

Comments