> >

 |  tomori_icon  | 
 |  category_icon  | 

2004年10月03日 (日)

CategoryImageFTP ユーザ限定、 iBlog 1.4.0 の RSS をさらにちゃんとする

タイトルに「 FTP ユーザ限定」などと書きましたが、正確には「 FTP で 非 ActiveMounter ユーザで iblogPatcher ユーザ限定」と言う、実は「 t0moriBlog 限定」な話題です。 OKAMURA さんがエントリして下さった方法に基づいたき、「 iBlog 1.4.0b4 の謎」問題に対処しました。


実は ActiveMounter を導入すればあっさり解決するような問題だったりしますが、頑なに“非 ActiveMounter 縛り”な公開にこだわって来ましたので、そのまま行ってみたいと思います。「 iBlog 1.4.0b4 の謎」問題を整理する為、前回の RSS の生成過程を引用します。

  1. プレビューで rss.xml の [o$DocumentRoot$] , [$DatePublished$] が展開されない、途中経過のひな形的な物が作成される。
  2. パブリッシュでプレビューディレクトリの rss.xml を元に [o$DocumentRoot$] , [$DatePublished$] が展開された物が "~Library/Application Support/iBlog/temp" 内に作成される。
  3. 公開先にアップロードされる。
  4. プレビューディレクトリの rss.xml は再度、 [o$DocumentRoot$] , [$DatePublished$] が展開されない状態で再生成される。( FTP が公開先だった場合のみ?)
  5. 指定した公開先(ここの場合は "http://t0mo.org/iblog" )とは違うローカルに公開先が指定されていた場合、そのディレクトリへは公開したとは見なさず、 [o$DocumentRoot$] , [$DatePublished$] は展開されない物が生成される。

上記のうち 3. の「公開」時、なぜかここの FTP 環境では [$DatePublished$] が展開されずにアップロードされてしまうのが iBlog 1.4.0 での問題でした。問題の発生する条件が“公開先が FTP だから”なのか、うちの“ iBlog のデータベースに何らかの問題が有る”のかは定かでは有りません。しかしながら KHOO さん所【篠の風】さん所nao-cha さんの所でも iblogPatcher 適用前の“非 ActiveMounter ”な公開で問題が認められていた(らしい)事から、 FTP 環境での問題ではないか、と言うのが目下の所の僕の予想です。

で、これの解決策として ActiveMounter な方は従来通り iblogPatcher の PublishAfter で、 GenPubRSS.plugin を掛ければ解決します。

うちの場合は iBlog も内部的に使用している ncftpput を用いて、ローカルに「公開」された rss.xml に PublishAfter を適用し、 iBlog が FTP にアップロードした rss.sml を上書きしていました。
 ここで問題になるのが、上記、生成過程の 4. 5. の挙動です。 iBlog で未だに残るマイナーバグとして、エントリタイトルなどに意図しない改行が加えられる(主に複数バイト文字と1バイト半角スペース文字間)事があり、この状態ですと、 RSS リーダ(物にも寄るでしょうが)での閲覧ではタイトルが途中で切れた状態で表示される事がまま有ります。これを iblogPatcher の DeleteTitleLF.plugin で PreviewAfter 時に取り去っていますが、うちの方法ですと GenPubRSS で rss.xml を処理する際 4. で置き換えられた物が対象になる為、せっかく取り去ったタイトルの改行が元に戻った物に GenPubRSS で [o$DocumentRoot$] , [$DatePublished$] を展開した物がアップロードされていました。今までもこの問題は気に掛かっていたのですが、他の環境依存かと考えていて、 iBlog と iblogPatcher ( PublishAfter )の処理タイミングの誤差とは気付きませんでした。 iBlog 1.4.0 で日本語環境でのバグが取れ、 [o$DocumentRoot$] が展開されるようにならなければ、 GenPubRSS の適用を止める事もなかったので、ずっと気付かないままだったでしょう。

閑話休題。

ともあれ、このままだと PublishAfter を利用して余計な改行を我慢するか、 iBlog がアップロードした物をそのままにして [$DatePublished$] が展開されないのを我慢するかのどちらかになります。要は iBlog が FTP にアップロードする物が完ぺきな状態になっていれば良い訳です。で、 OKAMURA さんにあれこれと相談しながら、 iblogPatcher の PreviewAfter でタイトルの改行を取り去ると同時に GenPubRSS で [o$DocumentRoot$] , [$DatePublished$] を展開してしまう事にして、 iblogPatcher の Blog 定義ファイルを以下のように修正しました。

%ACTION = (
  'preview'  => {
    'before'  => {
      'onStart'  => undef,
      'file'    => undef,
      'onFinish'  => undef,
    },
    'after'  => {
      'onStart'  => sub {
        # RSS の [o$DocumentRoot$] を展開する。
        $GenPubRSS::Conf{'DocumentRoot'} = 'http://t0mo.org/iblog';

      },
      'onFinish'  => sub {
        # RSS の <$DatePublished$> を展開する。
        GenPubRSS::OnFinish(@_);

        # 次回エンコード変更のための .CHANGE_ENCODE.time を作成する
        #  一番最後に行う
        CHANGE_ENCODE::OnFinish(@_);
      },
    },
  },

赤字が修正箇所です。もちろんこの追記箇所以外にも各プラグインの設定がありますが、長いので省きます。で、 PublishAfter は基本的には不要なのですが、うちの場合は OPEN_FILES.plugin で「ぶろっぐぴんぴん」を起動して Ping するアップルスクリプトを走らせるようにしている為、 PublishAfter の GenPubRSS を無効にすると同時に下記のような処理が必要になりました。

  'publish'  => {
    'before'  => {
      'onStart'  => undef,
      'file'    => undef,
      'onFinish'  => undef,
    },
    'after'  => {
      'onStart'  => undef,
        #---- 必須 ----------------------------------------------------
#        $GenPubRSS::Conf{'DocumentRoot'} = 'http://t0mo.org/iblog';
        #--------------------------------------------------------------
#        1,
#      },

      'file'    => undef,
      'onFinish'  => sub {
        #---- 必須 ----------------------------------------------------
#        GenPubRSS::OnFinish(@_);
        #--------------------------------------------------------------
        #---- オプション ----------------------------------------------
        $OPEN_FILES::Conf{'target'} = [
          "$ENV{'HOME'}/Applications/BlogPingPingStart.app",
        ];
        OPEN_FILES::OnFinish(@_);
        #--------------------------------------------------------------
      },
    },
  },
);
1;

てな感じで、 GenPubRSS が有った所をコメントアウト( # )すると同時に、それしか処理のなかった 'onStart' の処理対象を無し( undef )にしておきました。でないとそこでエラーが発生して、続く 'onFinish' での OPEN_FILES が実行されなかったからです。

で、ローカルへの無駄な「公開」が無くなった分、今まで公開ディレクトリに指定していた場所のゴミになったファイルを削除しましたが、その際はディレクトリそのものは残っていないと iblogPatcher が PreviewAfter を実行する際、『公開ディレクトリが見つかんないよ』と怒られます。うちの場合は "~/Sites/publish/iblog" にしてましたので、中身( iBlog が生成した物)は要りませんがディレクトリそのものは残しておきます。
 で、同じように iBlog Spy の監視するファイルも「公開先」がローカルではなくなったので、ログファイルを監視するように変更します。 iBlog Spy をスクリプトエディタで開いて10行目を以下のように変更しました。

property target_pub_file_1 : "~/Library/Application Support/iBlog/Logs/Publish.txt"

以上。これで RSS も完璧になり、処理も滞りなく実行されているので正しいと思うのですが、あんまり自信有りません。問題が有ったら突っ込んで下さい、和尚!、いや師匠

iBlog が 1.4.0 でまともになって、ネタが無くなってきて、何となく寂しい......と言うのは内緒です......

Posted by at 18:47


▼1年前はこんなこと書いてました...▼