2009年08月26日

楽天ブログをバックアップするプログラム

1.はじめに
私は2005年から楽天ブログにて日記(?)を書いていましたが、他のブログシステムに引っ越ししようとすると、楽天ブログは記事をエクスポートする機能がありませんでした。
いくつかバックアップ用のツールなども公開されていますが、コメントやトラックバック、画像についてすべての項目をダウンロードしてくれるツールはみつけられませんでした。
そこで、かねてより勉強したいと思っていたインタープリター言語rubyを使って、自作してみたものです。
ソースは、こちら(backup_raku.rb)です。
出力例は、こちらです。
 
2.機能
このrubyスクリプトは、楽天ブログをMT形式(MovableType)でダウンロードするプログラムです。言い換えれば、楽天ブログをMT形式でエクスポートするプログラムです。
以下の特徴があります。
 
(1)一回の起動で全ブログエントリをダウンロードします。
はじめのブログエントリを与えれば、そこから「次へ>>」のリンクをたどって、最後まで順番にダウンロードしていきます。
スクリプトの初期設定のtargetUrlに、ダウンロードを開始したいブログエントリのURLを記載ください。
例として、私のブログの最初のエントリが記載されています。
 
(2)コメント、トラックバック、カテゴリ名もダウンロードします。
 
(3)スクリプトを実行すると、標準出力にMT形式のデータが順次表示されます。
リダイレクトを使って、ファイルに保存してください。
使用例: % ruby backup_raku.rb > mtfile
 
(4)ブログエントリ内に<img>タグで記載しているsrc属性の値から、画像ファイルをダウンロードします。
ダウンロードした画像は、初期設定のimageDirの項で指定したディレクトリ名に保存されます。ディレクトリ名の例示は、imagesです。
 
(5)ブログエントリ内の<img>タグで指定されている画像ファイルへのリンクを、ローカルファイルを指すように変更することができます。
例えば、
<img src="http://image.space.rakuten.co.jp/xxx/img1454zj.jpeg">
とあったら、
<img src="<imageDir>/img1454zj.jpeg">
と変更します。
この機能をONにする場合は、スクリプトの初期設定のところでimageLinkUpdate変数を1に設定してください。初期値は0です。
 
(6)画像ファイル名が重複している場合、画像ファイルを上書きしないようにプログラムの動作を停止させます。(楽天の場合ほとんどないと思いますが)
この機能をONにする場合は、スクリプトの初期設定のところでimageFileDuplicateCheck変数を1に設定してください。初期値は0です。
 
3.制限事項・注意事項
(1)改行コードがおかしい。
ブログエントリ本文の改行コードがCRLFで出てしまいます。MT形式ではLFにすべき、と規定されていますが、未熟者なので変換させることができませんでした。
そこで、出力されたMTファイルをエディタで開き、一括変換してください。
viで行う場合の例  :%s/^M//g (^Mは、CTRL+vをおして、さらにCTRL+Mを押して入力します)
 
(2)漢字コード
本プログラムではUTF8で出力します。MTインポートをする場合は、引っ越し先のブログシステムが求める漢字コードにnkf等を使って変換してからインポートしてください。

(3)連続するハイフン
ブログエントリやコメント本文に連続した半角ハイフンが3文字以上続く場合、=に変換します。
MT形式では項目の区切りを連続するハイフン5つないし8つで区切りとしますが、本文中に同様の区切り文字があると、区切りを誤認するケースがあったためです。
変更してほしくない場合は、blogitemクラス内のsetBody()メソッド内にある
        body=body.gsub("---","===")
という行をコメントアウトしてください。
(4)時間が取れない
楽天ブログでは、記事が投稿された日付は残りますが時間は残りません。本文末のLast Updateの記載は、最終更新日時なので、記事に対応する日付とは異なる場合があります。
そこで、本プログラムでは、投稿時間は一律00:00:00にしました。
コメント、トラックバックの投稿時間についても同様です。
 
(5)引っ越し先での画像リンク
本プログラムは、楽天ブログをローカルに保存するためのものです。したがって、引越しをするときのインポート用データに加工する機能は、別途作成する必要があります。
ブログエントリ内の<img>タグは、ダウンロードしたローカルのリンクに指定することができますが、他のブログシステムに引っ越しをする場合は、別のなんらかの方法で画像リンクをそのブログシステム用に変更する必要があります。
他のブログシステムに画像ファイルをアップロードした際に得られるURLを、各ブログエントリの画像リンクに指定し直してください。
 
(6)楽天ブログのスタイル
楽天ブログで得られるHTMLは、必ずしもMT形式に則って構造化された形式になっていません。そのため本プログラムでは、HTML内のタグを本来の意味とは異なる意味で区切りとして使い、強引に各情報(本文やコメントなど)を抜き出しています。
そのため、例示したブログのスタイルと大きく異なる場合、正常に情報の抜き出しが行えない可能性があります。
スタイルの違いが問題かと思われたら、スクリプトのはじめのtargetUrlに私のブログのURLが例示してありますので、そのブログのスタイルに合わせてみてください。
 
(7)エラー処理・例外処理
本プログラムは、エラーチェックや整合性チェックを行っていません。エラーがおこるとそこで停止します。
本来、問題の起こったエントリをスキップするなど、それぞれ対処をすればよいのですが手を抜いています。
エラーがおこって止まってしまったら、その原因を考えてプログラムを改良するなり、エントリを書き換えるなりして逐次対処ください・・・。m(_ _)m
 
4.動作環境
本プログラムは以下のruby環境で動作確認しています。
% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
 
% ruby -v
Ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
 
また、以下の外部ライブラリを使用しています。
hpricot
 
hpricotは、
% sudo gem install hiricot
でインストールしてください。
 
 
5.謝辞
rubyの基礎的な勉強は、以下のサイトでお世話になりました。
検索文字の大文字小文字の問題解決に、以下サイトからソースを使わせていただきました。
 
6.免責その他
本プログラムの著作権は私にあります。
転載、再利用については自由にしていただいてかまいません。
改善、改良のアイディア、コードをより美しくするアイディアなどありましたらお寄せください。
転載いただいた際には、トラックバック等で連絡いただけると幸いです。
本プログラムは、個人的に作成した習作であり、けして安全なものではありません。利用するにあたり、自己責任でお願いいたします。
また、プログラミングという作業そのものに不慣れなため、とても醜いコードになっているであろうことをお詫びいたします。


2008-08-26



sylphide_ffr31mr at 22:33コメント(0)トラックバック(0)programing | 技術 

トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
プロフィール

やすき

月別アーカイブ
  • ライブドアブログ