2008/01/31

Recent entries from same category

  1. blosxom 2.1.0がリリースされました
  2. feedジェネレータとしてblosxomを使う
  3. blosxom-xmlrpcを色んなブログツールに対応させる...その後
  4. フィード購読者数カウンタ for blosxom
  5. blosxomは生きている

blosxomでモブログをするには、2つの機能が必要となります。
  1. XMLRPCでのポスト
  2. メール受信でXMLRPCをキックするサーバ
前者については、「BXR: Blosxom XML-RPC Interface>」というスバラシイものがあるので、これを利用します。
ただ、後者については、サーバを用意出来ない方もいらっしゃると思います。そこで登場するのが「サイドバー.jp」です。このサービスでは、モブログ支援ということで、各アカウント毎に用意されたメールアドレスに対して記事を投稿すると、設定していたXMLRPCサーバをコールしてくれる機能を持っています。

じゃぁ簡単じゃん...

とお思いでしょうが、すんなりはいきません。
必要なメソッドが揃っていない為、テストで失敗します。

原因は、mtパッケージが無い事です。
sidebarサーバからは
mt.getCategoryList
mt.setPostCategories
mt.publishPost
が呼び出し可能でないとエラーが発生します。
まず、sidebarの設定画面から、カテゴリ一覧を取得する為に、mt.getCategoryListが呼ばれます。これはmetaWeblog.getCategoriesを参考にすれば、すぐに出来上がります。

次に、記事投稿後、その記事のカテゴリを設定画面で指定したカテゴリに変更するようmt.setPostCategoriesが呼ばれます。引数のPostIdはblosxom::data_pathから記事への相対パスですので、getCategoryFromFilenameでカテゴリを取得し、引数のカテゴリへファイル移動します。
ただblosxomの場合、複数のカテゴリは設定出来ませんので、カテゴリリストの1番目を採用するようにしました。

最後にmt.publishPostですが、このメソッドは実は実装しなくても構いません。newPostされた時点で既に拡張子がtxtになっており、公開扱いとなっているからです。ただ、気持ち悪いので一応実装しました。拡張子がtxtでない場合はtxtの拡張子に変えるようにしています。

そんなこんなで、ようやくsidebarサーバから記事が投稿できるようになりました。

ただ、ここでもう一度問題が発生しました。実は、bxrのnewPostはHTMLエンコードされた記事をデコードせずにポストしてしまいます。よって、ブログにHTMLタグがそのまま出てしまいます。
これはHTML::Entries::decode_entitiesでなんなく処理できました。
やっとこれで...と思ったのですがさらに問題。
画像付きで送られてくる場合、ID属性にdescriptionという値を持ったDIVタグが送られてきます。私の使っているblosxomのCSSでは、ブログタイトル名がdescriptionというDIVで作られているため、記事本文にブログタイトル用のCSSが適応されてしまいました。

色々調べた結果、IEでは孫セレクタが使えないとの事なので、むりやり
#banner div {
...
}
#banner > .description {
...
}
のようにIEとFireFox両方のCSSを作って対応しました。

で、ようやく携帯から画像付きの記事が投稿出来るようになりました。

以下、blosxom-xmlrpc.cgiの変更差分
ダウンロード:
Posted at by