備忘録のような何か

何か += 備忘録( 日々のこと, 妄想, IT, DIY, 畑仕事 );

【Ruby】gooブログからのお引越用MTファイル自動作成ツール

妻がブログのお引越をするというので、
MovableTypeファイル(以下MTファイル)を自動作成するツールを作ってみました。
(※gooブログも有料会員だとエクスポート機能が提供されているようですが・・・)

MTファイルのフォーマットはこちら

最近、Rubyのお勉強中なのでRubyで書いてみました。
処理の流れはこんな感じです。
1.一番古い記事にアクセス
2.1記事分をMTファイル形式に編集
3.次記事のリンクを辿って再帰処理

コードはこんな感じになりました。
(ほぼ力技なのであまりキレイなコードじゃないですが^^;)

require "nokogiri"
require "uri"
require "open-uri"
require "kconv"

$fileCount = 0

def createMTFile(url)
    # HTMLを取得
    page = open(url, "r:binary").read
    doc = Nokogiri::HTML(page.toutf8, nil, "utf-8")

    # タイトル
    title = doc.css(".entry-top > h3").first.content

    # 本文、日付
    body = doc.css(".entry-body-text").first.inner_html
    d = body[body.index("dc:date=") + 9, 19]
    date = d[5, 2]+"/"+d[8, 2]+"/"+d[0, 4]+" "+d[11, 8]+"M"
    body = body[0, body.index("<!--")]

    # カテゴリー
    category = doc.css(".entry-top-info-category").first.content

    buf = <<-EOS
--------
AUTHOR: hogehoge
TITLE: #{title}
BASENAME: file#{$fileCount}
STATUS: Publish
ALLOW COMMENTS: 1
ALLOW PINGS: 1
CONVERT BREAKS: 1
CATEGORY: #{category}
DATE: #{date}
TAGS: #{category}
-----
BODY:
#{body}
-----
  EOS

    # ファイルに書き出し
    o = File.open("mtFile.dat", "a")
    o.write(buf)
    o.close

    p date + " " + title

    # 次の記事のURLを取得して再帰処理(なければ終わり)
    n = doc.css(".mod-pre-nex-next > a")
    if n.length > 0
        nextUrl = n.first[:href]
        $fileCount += 1
        createMTFile("http://blog.goo.ne.jp" + nextUrl)
    end
end

# 最初の記事からスタート
createMTFile("http://blog.goo.ne.jp/・・・")
p "end"

これで記事自体のお引越準備は完了です。
試しにはてなブログのインポートに突っ込んでみたら上手くできました。
あとは、画像ファイルをどうしようかなぁと悩み中。


なにげにはてなブログソースコード
シンタックスハイライトが出来るようになっていますね。
半年以上ブログをさぼっている間に進化していたようですw