はてなダイアリーからOctopressへの移行
I had another blog, hatena diary
技術系のエントリーに関しては、はてなダイアリーの方にブログを書いていたが、Octopressへの移行に際して、全部こっちに移動することにした。その時の手順を書いておく。
Firstly, you can export all entries from hatena diary
はてなダイアリーのデータは管理画面>データ管理>インポート/エクスポート
からエクスポート出来る。
ここでは、Movable Type形式をダウンロードする。はてなの日記データ形式は、xml形式にも関わらず、同一日付で複数エントリーある場合でも、<day>
タグのなかに複数のエントリーが入っていたため、パースするのがめんどくさかった。Movable Type形式でエクスポートしておくと、これらは別エントリーとして扱われるため、単純になる。
Movable Type decoder
Symfony Serializer componentの考え方からすると、ファイルフォーマットから配列への変換なので、ここの処理はdecodeというのが正しいはず。
中身は単純で、--------
がエントリーの区切り、-----
がデータの区切りとなっているようだ。詳細はThe Movable Type Import / Export Formatに書いてあるが、各エントリーの先頭にSingle-line Dataが置かれ、それに続くMulti-line Dataが-----
で区切られる、というフォーマットらしい。
decodeの内容はこんなコードを書いた。手抜きなので、ただのfunctionだ。
Symfony\Component\Serializer\Encoder\DecoderInterface
を実装して、なんてことはやってないし、Multi-line Dataはbodyしか読み取ってない。
エントリーの区切りでファイルを分割してから、この関数を使ってそれぞれのエントリーをdecodeしていく。
hatena_diary2markdown.php
最終的には、こんなスクリプトを書いてOctopress用のmarkdownを生成した。なおhtmlからmarkdownへの変換はpandocを使用しているので、このスクリプトを実行する前にインストールしておく必要がある。
Conclusion
_posts
ディレクトリにxxx.markdownが出来上がっているはずなので、後はこれらのファイルをsource/_posts
に移動すれば完了だ。
pandocを使うと妙なところで改行が入ってしまうので、なんとかしたかったが、方法が分からなかった。おそらくword wrapしているのだと思うが、オプションでなんとかなるのだろうか。