まちゅダイアリー

絵日記プラグインから flickr プラグインへのマイグレーションツールを作った

2008-10-24

先日から書いていたけど、tDiary の絵日記プラグイン (image.rb) から flickr プラグイン (flickr.rb) へ写真を移行するためのツールを作った。

簡単な説明

ツールがやってくれること
要件
ダウンロード

ファイルは CodeRepos にアップしました。

使い方

image2flickr.rb の USAGE をご覧ください。

メモ

古い日記データはバックアップするようにしたし、自分の環境では何度もテストしたけど、やっぱり日記データを書き換えるツールなので少し心配。 なので、Webから簡単に使えるようにはせずに、コマンドラインからの操作にした。 何かあれば、バックアップから日記データを戻すことができるくらいの知識があることを想定してる。 もうひとつの理由は、 flickr に写真をアップするのでCGI経由の起動だとタイムアウトになる可能性があるから。

flickr への写真のアップロードは、こないだの日記に書いたように rflickr ライブラリを使えば簡単にできた。

課題だった tDiary の日記データの書き換えは、こうやってみた。

  # imageプラグインをflickrプラグインへ置き換える
  def convert(yearmonth)
    @parser.each_diary(yearmonth) do |@date, diary|
      # 現在はWiki記法のみ対応
      diary.gsub!(/\{\{(image[^}]+)\}\}/) {|match|
        begin
          "{{#{eval($1)}}}"
        rescue => e
          # 例外が発生したら置換しない
          match
        end
      }
      diary
    end
  end

  def image(index, title = nil)
    replace("flickr", @date, index, title)
  end

  def image_left(index, title = nil)
    replace("flickr_left", @date, index, title)
  end

  def image_right(index, title = nil)
    replace("flickr_right", @date, index, title)
  end

やってることは、以下のとおり。

  1. 日記データから、”…”という文字列を検索
  2. eval で image, image_left, image_right を呼び出し
  3. flickr プラグインへの置換文字列を返す

最初は普通に置換しようと思ったけど、プラグイン呼び出しの文字列のパースが面倒だった。 たとえば、スペースの数やシングルクオーテーションとダブルクオーテーションの違いとかね。 だったら、evalを使ってrubyに解釈してもらえばいいじゃん、と気がついて、今の形になった。 自分のスクリプトで、はじめて eval を使ったなぁ。

それから、途中でツールを中断しても再開できるように、気を配った。 日記データはバックアップから元に戻せるけど、flickr にアップした写真まで元に戻すのは大変だからね。

なので、もし日記データの書き換えに失敗しても、YAMLファイルが残っていれば flickr へのアップはやり直す必要がない。

そういえば

久しぶりに Ruby のスクリプトを書いたなぁ。 PHP や Perl のあとに Ruby を書くと、最初は思わず $ や ; を付けそうになっちゃう。