bloggerからはてなに記事を移行

bloggerからエクスポートした記事のxmlを、はてな記法に変換するスクリプトです。
参考:Conveyorを使ってBloggerからはてなダイアリーへ移行する

#encoding:shift-jis
from __future__ import division, print_function
__metaclass__ = type 
import sys
import re
from itertools import islice
import codecs

import feedparser
import dateutil.parser


def main():
    rss = feedparser.parse("blog-05-29-2010.xml")
    
    sources = [
        '<?xml version="1.0" encoding="UTF-8"?>',
        "<diary>"
    ]
    append = sources.append
    extend = sources.extend
    
    entries = rss.entries
    #冒頭のtemplateや末尾のcommentを省くために、適当に調整
    for i, entry in islice(enumerate(entries), 49, 196):
        extend([
            '<day date="{0}" title="">'.format(
                dateutil.parser.parse(entry["date"]).strftime("%Y-%m-%d")),
            '<body>',
            '*' + entry.title,
            entry.content[0].value,
            "</body>",
            "</day>",
        ])
    
    append("</diary>\n")
    source_str = "\n".join(sources)
    
    source_str = re.sub(r"(&lt;|<)\s*br\s*/?(&gt;|>)", "\n", source_str)
    source_str = re.sub(r"<pre.*?>", "\n>|python|\n", source_str)
    source_str = re.sub(r"</pre>", "\n||<\n", source_str)
    source_str = re.sub(r"(&lt;|<)blockquote(&gt;|>)", "\n>>\n", source_str)
    source_str = re.sub(r"(&lt;|<)blockquote(&gt;|>)", "\n<<\n", source_str)
    
    with codecs.open("o.txt", "w", "utf8") as fp:
        fp.write(source_str)

if __name__ == "__main__":
    main()