watanet personal side-B

Yet another Blosxom weblog.
by chihiro ­ chihiro at dream dot com

Welcome

こんにちわ。chihiroです。
Linuxとアニメ、マンガネタが多いかも?
イワタバコ科の植物も大好き。写真も撮るかなぁ〜。
そんな日常。

Contents

TOP
Message Board
Documents Archive
コンピュータ関連

Search


Translate

Calender

1月 2009
       

Categories

Archives

2008年 (10)
3月 (3)
2月 (7)

Contact

Yahooメッセンジャー

Skype
My status

RSS


Firefox 2 無料ダウンロード


ご近所さん

プレジデントエスカの愛の小部屋
超人
「あ〜毎日素敵に暮らし...」 - グッチーBLOG
萌えキャラ♪WonderNet - 麻枝萌人のページ
おつかれサモア - iRA BLOG

IKAKICK - ラッキィ池田事務所
踊り放題! - ラッキィ池田BLOG
TOGETHER - ルー大柴BLOG
浅井企画

News

朝日新聞
読売新聞
毎日新聞

Slashdot Japan
CNET Japan
ZDNet
PC Watch
Nikkei BP Network
ケータイWatch
Japan internet.com
2ちゃんねる
AA大辞典(仮)

Radio

NHKラジオ
TBS R&C(954)
文化放送(1134)
AM HPリスト

Linux

日本のLinux情報
Linux Software Search(J)

もじら組
mozilla.org
Mozilla 日本語ローカライズ版リンク集
Mozilla 日本語インストーラ

Japanized Apache Server Project
The Apache Software Foundation
日本PHPユーザー会
PHPマニュアル
CPAN - Comprehensive Perl Archive Network

Qmail
Qmail(Jp1)
Qmail(Jp2)
Binc IMAP

日本Sambaユーザー会

Fedora Project(E)
Fedra JP Project(J)
Vine Linux(J)
Debian(J)
Debian JP Project(J)

とほほのWWW入門

Palm

Palm Fan
Muchy´s com
ProjectPalm
Simple-Palm
Visor Japan
CLIE User Club!
パルマガ(停止中)
パーム航空 (停止中)
iPAL-NEXT (停止中)

彩パームUG
全国PalmUG連絡会

PalmComputing(J)
SONY(J)
HandSpring(J)
IBM(J)
PalmComputing(E)
SHARP - Zaurus(J)

Vis-a-vis
Master
PDA工房
HIT IN

トップページ > linux >
2008/03/27 (Thu)

PyBlosxom - PythonによるBlosxomの実装

ふと漂っていると、PyBlosxomという単語を見つけた。
PythonによるBlosxomの実装。という理解でよいのかな?
sourceforgeのプロジェクトページを覗くと、2008年も活動している様子。

以下のページを観ると、blosxomの他言語での実装が。
phpやrubyにもあるんですねぇ。

phpの実装は、親和性が高いように感じる。

  • phpでのblosxom実装
    • Phposxom
    • PHPBlosxom
    • Blosxom.PHP
    • PyBlosxom
    • 10122038
    • umekomiblog
  • rubyでのblosxom実装
    • lily
    • Blosxonomy
  • その他
    • blojsom - javaでのblosxom実装
    • Lisp Blosxom - lispでのblosxom実装

とはいえ、もし移行するとしても、記事データの流用は出来たとしても、 プラグインや調整した部分が完全に言語依存しているし、 結局ほとんど一から再構築することになっちゃいますね。
ま、今Perl版のBlosxomプロジェクトは停止しているようなんで、 ちょっと不安でしたが、Blosxom自体はまだ続いているようで安心。

ま、perl版のblosxom本体も、Blogの基盤に過ぎないから、 将来性に不安は無いんですけれどね。

Posted at 2008/03/27 19:43 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/03/24 (Mon)

bloxsom用calendar pluginのリンクURLが適切では無い様子。パッチ作り。

現象

blosxom用calenderプラグインから日のリンクをクリックすると、その日の記事が一覧される。
はずなのに、なぜか前月の同じ日の記事も表示されてしまう。
ちょうど、月が無視されているような挙動。

当サイトで利用しているbloxsom用calender pluginのリンクが見つからない。
どこからダウンロードしてきたものだ?
Todd Larasonさんのcalendar plugin 0+1i版なのは間違いないのだが。

以下、原因・対処へつづく。

原因

calendarプラグインのリンクの月日の数値が一桁になるときに、そのまま一桁の数値として利用している。
しかし、blosxomでの年月日指定の際のリンク文字としては、 一桁数値は"0"をつけた2桁数値にしないといけない様子。"3"->"03"のように。
(blosxomの挙動からの推測)

  • NG : /blosxom.cgi/2008/3/11
  • GOOD: /blosxom.cgi/2008/03/11

対処

calenderプラグイン内のreport_day_link()関数を以下のように修正。
単に、1桁ならば"0"を追加するというもの。

sub report_day_link {
    my ($year, $month, $day) = @_;

    my $month_l = $month;
    $month_l = "0$month" if($month < 10);
    my $day_l = $day;
    $day_l = "0$day" if($day < 10);
    return qq!<td class="calendar_day_link"><a href="$blosxom::url/$year/$month_l/$day_l">$day</a></td>\n!

#    return qq!<td class="calendar_day_link"><a href="$blosxom::url/$year/$month/$day">$day</a></td>\n!
      if ($output_format eq 'table');
    return qq!!;
}

追加箇所は以下の行。

my $month_l = $month;
$month_l = "0$month" if($month < 10);
my $day_l = $day;
$day_l = "0$day" if($day < 10);
return qq!<td class="calendar_day_link"><a href="$blosxom::url/$year/$month_l/$day_l">$day</a></td>\n!

パッチ

上記修正のパッチも作ってみる。

--- calendar.dist       2008-03-17 04:26:06.000000000 +0900
+++ calendar    2008-03-17 05:51:24.000000000 +0900
@@ -55,7 +55,14 @@

 sub report_day_link {
     my ($year, $month, $day) = @_;
-    return qq!<td class="calendar_day_link"><a href="$blosxom::url/$year/$month/$day">$day</a></td>\n!
+
+    my $month_l = $month;
+    $month_l = "0$month" if($month < 10);
+    my $day_l = $day;
+    $day_l = "0$day" if($day < 10);
+    return qq!<td class="calendar_day_link"><a href="$blosxom::url/$year/$month_l/$day_l">$day</a></td>\n!
+
+#    return qq!<td class="calendar_day_link"><a href="$blosxom::url/$year/$month/$day">$day</a></td>\n!
       if ($output_format eq 'table');
     return qq!!;
 }
以上

Posted at 2008/03/24 18:53 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/03/23 (Sun)

blosxom「続く...」を作るcontinues_moreプラグイン

blogの記事が長くなってしまう際に、記事の途中に「続きを読む...」と表示して、 詳細ページにて全文を表示できるようにするプラグイン。
作りっぱなしだったので、一応ご紹介。

blosxomのSeeMore Pluginと同じ機能です。
(この程度のプラグインで大げさですが)車輪の再発明です。
blosxom構築当初にこの機能に相当するプラグインが見つからなかったので、作ってみたという。
導入後にSeeMoreが見つかったので、当サイトではこのcontinues_moreプラグインを設置したままにしてあります。

ま、参考まで。

Posted at 2008/03/23 09:53 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/25 (Mon)

blosxomでのプラグインのロード順について

まだはっきり解析出来ている訳ではないが、気づいたので書いておく。

blosxomでのプラグインの機能の関係で、pluginのロード順によって、 それらの挙動や動作に及ぼす影響が変わるのでは?という話。

理屈で考えれば当たり前だと思うのですが、実際はどうなんだろうか。

blosxomのプラグインファイルは、ファイル名をソートした配列を元に順番に処理されているよう。
blosxomのプラグインの呼出し順番が名前で決まっているならば、 この順序性に関連した問題?やテクニック?っていうのが あったり、もしかしたらプラグイン開発者の間では、 プラグインの順序性を考慮した命名規則を保っているのかもしれない? と想像してみたり。

なぜこういうことを思ったのかというと、 entries_kacheのキャッシュが1時間で更新されないなぁ〜、 って現象に遭遇した所からの処置検討の経緯で。
画面更新のリクエストがlamitapに阻まれているのかな?と 想像して、lamitapを最後に呼び出されるように zzz_lamitap などとプラグイン名を変更して処置した、と。 しかし、考えてみたら、perlのsort関数で並べ替えを行っている際に、 entries_kacheがlamitapより先に並ぶはずなので、やったことは意味ないじゃん!っていうオチ。
lamitapプラグインもentries_kacheプラグインもちゃんと仕事しているのに、 自分が早とちりしていただけの恥ずかしいドタバタでした。

ん〜、あまり、どうでもよいポイントなのかな?

Posted at 2008/02/25 20:43 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/18 (Mon)

(実は)Blosxomって終わっているのか?

今までblosxomのポータル的なサイトばかり見ていたので気づかなかったが、 blosxomのユーザーサイトを訪れてみると、既にBlosxomは開発も止まって、 枯れているツール、と認識されている様子。
ショック!

ま、便利だし、どうでもいいけれどね。
環境依存の不具合も回避出来ているし。

上記の2つのサイトの記事は、自分がblosxomを使っていて感じていることを的確に言い表していますね。
特に Big Sky さんの記事にある『blosxomの何が良いと聞かれれば「そりゃ*nix臭さだよ」って答えてしまいそう』 というのは、その通りと思います。

今時のWeb技術にも対応した、手作りホームページを作るには便利。
テキスト処理が主になるので、*nix系の環境で管理するのが便利ですね。

管理方法も含めて、やりたいようにできるので、変な縛りが無くていいかも。
WordPressも便利だけれど、
良くも悪くもWebフォームから更新する必要がありますからね。

Posted at 2008/02/18 21:56 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/16 (Sat)

entries_kacheの、未来投稿パッチ

entries_kacheでは、記事中に「meta-creation_date:」というタグで日時を 記録することが出来ます。記事の投稿日時を固定化する為のタグ。
このタグの日時は、通常はプラグインの動作で自動追記させるのですが、 手入力することでも投稿日時を設定できます。

entries_kache標準の動作では、 タグに過去の日時を設定した際には過去の任意の投稿日時にして表示することができるのですが、 タグに未来の日時を入力して記事をアップロードした場合も、未来の投稿日時ですぐに記事が表示されてしまいます。

これは表示非表示の制御はファイルのタイムスタンプのみで行われているのですが、 表示する際のタイムスタンプはentries_kacheにて調整されていることに由来します。

そもそも、未来の日時のmetaタグを手入力して、未来に表示させる、 という使い方が考慮されていない為と思われるのですが (っていうかそんな未来の日時を手入力してなんて使い方想定外でしょう)、 個人的にはできるようにしたい。
という訳で、entries_kacheの、未来投稿パッチを作成しました。

blosxomでは、エントリファイルのタイムスタンプを元に投稿日時を管理しますが、 entries_kacheは、それを固定化してくれる、非常に便利なプラグイン。
blosxom使いの基本プラグインです。

entries_kacheの機能は「更新日時を固定化する」というものですが、この機能を応用して、過去の任意の時刻に投稿したことにできます。
これはファイル中に時刻のmetaタグを記入して行います。
entries_kacheはファイル中にmetaタグを追記して時刻を保存するため、このmetaタグをコントロールして、ファイルのタイムスタンプとは関係なく、過去の任意の日時を指定する方法です。

1行目のタイトル行の次行に、以下のような行が追記されます。
手入力する際にも同様の書式で指定しています。

meta-creation_date: 2008-02-12T02:41:56+09:00

という訳で、entries_kacheの、未来投稿パッチを作成しました。
これにより、以下の種類のファイルは表示されなくなります。

  • 未来の日時のmetaタグを持ったファイル(上記パッチにて出来るようになる)
  • 未来のタイムスタンプを持っているファイル(これはblosxomの標準動作)

entries_kacheの、未来投稿パッチ

--- entries_kache.dist  2008-02-12 23:26:06.000000000 +0900
+++ entries_kache       2008-02-12 23:10:32.000000000 +0900
@@ -146,6 +146,7 @@
                                        and (
                                                $files{$File::Find::name} = extract_date($File::Find::name, $files{$File::Find::name})
                                        )
+                                       and ( $files{$File::Find::name} <= time or delete $files{$File::Find::name} and next)

                                        # Static
                                        and (

単に、以下の一行追記するだけなので、手入力してもよいかも。

and ( $files{$File::Find::name} <= time or delete $files{$File::Find::name} and next)

entries_kacheがインデックスを再検出した後に、 検出された時刻が現在時刻より未来ならば、配列から取り除き、 表示できないようにする、と言うものです。

この未来投稿の仕組みは、WordPressを使っていて、とても便利だったんですよね。
実現できて良かったです。

Posted at 2008/02/16 20:36 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/13 (Wed)

Cobaltサーバーでは、blosxomが正常動作しない?対策記録

blosxomを使用してサイトを作った。
それを、契約しているホスティングサーバーのCobalt環境に配置するも、 以下メッセージが出てしまい回避できない現象に遭遇した。

Error: I'm afraid this is the first I've heard of a "cgi" flavoured Blosxom.
Try dropping the "/+cgi" bit from the end of the URL.

宅内で構築しているサーバでは、新旧含めて問題ないため、Cobalt固有の問題と推測し、 調査し、対策できた。
因調査の上、対策できたので、その記録を以下に。

その他、cobalt上ではpaginate_sinpleプラグインも正常動作せず。
cobalt上での$datadirの求め方も併せて。

発生経緯

blosxomで製作を進める。
宅内LAN内サーバーのUbuntu環境(Apache/2.2.3 + perl v5.8.8)と、 Vine2.1(Apache/1.3.34 + perl 5.005_03古!)環境で動作確認。

ここでは問題無し。
プラグインも、定番のcalendar、categories、archives、back_and_forth、entry_title、entries_kacheも動作した。

anyencodingがperl5.8以降に対応する文字コード変換機能を使用しているため動作しないも、 確かjcodeを使用する版も公開されていたはずと、回避方法は検討する。

entries_kacheは、<blosxom path>/plugins/state配下にentries_kache.indexとentries_kache.othersという ファイルを作成するが、このファイルは配置したサーバ上で生成させた方が良いようだ。
理由は、検証サーバーで動作実績のあるファイル群としてこのファイルも一緒に転送したら、 別のサーバーではCPU負荷100%になって復帰しない状態になった。 entries_kache.indexとentries_kache.othersは、動作させるサーバー上で生成させるのが安全。

余談もありつつ、少なくとも上記VineとUbuntu環境では問題なく動作したコンテンツを、
今度はCobaltサーバーへ転送して動作チェックする。
当然blosxom.cgi中のコンフィグレーションなど、サーバー依存の設定は全て調整隅済み。

現象

blosxom.cgi自身の"cgi"部分を、フレーバーと誤認して、エラーを返すという現象。

具体的には、Cobaltサーバーへ転送後 http://<hostname>/<path>/bloxsom.cgiなどとアクセスするも、 以下のメッセージが出て、画面が正常に校正されない。

Error: I'm afraid this is the first I've heard of a "cgi" flavoured Blosxom.
Try dropping the "/+cgi" bit from the end of the URL.

代えて、http://<hostname>/<path>/bloxsom.cgi/index.htmlとアクセスすると、表示可能。

前述のvineとubuntuの環境では発生しない。

上記のエラーメッセージの意味は、 「エラー:申し訳ないが、"cgi"という名前のBlosxomフレーバーは 聞いたことがないんだなぁ〜。URL最後の"cgi"の文字を省いて試してみてくれ」というもの。
これは、普通のアクセスでも、URL末尾の文字を間違えたりすれば出てくるもので、 珍しいメッセージではない。
しかし、自身のみでも表示できるblosxom.cgiを実行するだけで、こんなエラーを出すのはを出されても困る。

原因

blosxom.cgi中で、利用されているpath_info()関数の返り値が間違っている?為と判明。
path_info()関数の返りが、Cobaltサーバーでは以下のように冗長になっている。

  • 通常
    http://<hostname>/<path>/bloxsom.cgi -> ""
    http://<hostname>/<path>/bloxsom.cgi/index.html -> "/index.html"
  • Cobaltでは
    http://<hostname>/<path>/bloxsom.cgi -> "/<path>/bloxsom.cgi"
    http://<hostname>/>path>/bloxsom.cgi/index.html -> "/<path>/bloxsom.cgi/index.html"

ソース内では、以下の箇所が該当する。
106行目では、path_info()関数にてblosxom.cgiの後の文字を取得することを期待している。
ここで、Cobaltではblosxom.cgiも含む文字列を返す為、 後の処理でその末尾の文字列"cgi"をフレーバーと誤認させる結果となっている。

blosxom Version: 2.0 - blosxom.cgiより抜粋

   104  # Path Info Magic
   105  # Take a gander at HTTP's PATH_INFO for optional blog name, archive yr/mo/day
   106  my @path_info = split m{/}, path_info() || param('path');
                                   ~~~~~~~~~~~~
   107  shift @path_info;

対策

場当たり的に、以下のように修正した。

path_info()の結果から、不要な部分を消去して、@path_infoの式に当てはめる、という方法。

以下の修正コードの場合は、116行目で、path_info()の結果から取り除く文字列を 直接指定して、消し込んでいる。全く美しくない方法だが、これで修正可能。

116行目には、path_info()より削除する文字列を指定します。
例を下記します。

  • http://<hostname>/<path>/bloxsom.cgi -> /<path>/bloxsom.cgi
  • http://<hostname>/~username/blosxom/bloxsom.cgi -> /~username/blosxom/bloxsom.cgi

blosxom Version: 2.0 に対するCobalt対応修正箇所(line 109-119)

   107  # Path Info Magic
   108  # Take a gander at HTTP's PATH_INFO for optional blog name, archive yr/mo/day
   109  #my @path_info = split m{/}, path_info() || param('path');
   110
   111  # added by chihiro 2008/02/05
   112  #  cobalt server return no good path_info(),
   113  #  so blosxom cannot use on cobalt server.
   114  #  pached workaround.
   115  #  -- $path_info_text and $path_info_prop added use define line.
   116  $path_info_text = "<path>/blosxom.cgi";
   117  $path_info_prop = path_info();
   118  $path_info_prop =~ s/^${path_info_text}//g;
   119  my @path_info = split m{/}, $path_info_prop || param('path');
   120
   121  shift @path_info;

その他1:cobaltでは、paginate_simpleも正常動作しなかった。

paginate_simpleプラグインも、 Cobaltサーバーで正常動作しませんでした。
原因の一つはCobalt上で動作させているということにあるようですが、 もう一つが、今回blosxom.cgiをindex.cgiに変更しており、 URL文字にindex.cgiが指定していない場合に発生しました。

  • 異常:http://<Server>/<blosxomdir>/
    (生成されるpaginate_simpleプラグインのリンクの文字列に重複している部分があり、リンク文字列として不適切)
  • 正常:http://<server>/<blosxomdir>/index.cgi
    (index.cgiが付いている場合は、リンク文字列に問題無し。)

もし、Cobaltサーバー上であり、更にblosxom.cgiをindex.cgiなどに変更して、 paginate_simpleプラグインのリンクが変という場合は、役に立つかもしれません。
以下にパッチを。

--- paginate_simple.dist        2008-02-13 16:39:13.000000000 +0900
+++ paginate_simple     2008-02-13 16:42:28.000000000 +0900
@@ -69,6 +69,16 @@
   if ($page > 1) {
     param('page' => $page - 1);
     my $prev_url = url(-path_info => 1, -query => 1);
+    ####################
+    # added by chihiro 2008/02/05
+    # cobalt server url problem workaround.
+    $prev_url =~ s/(.*?)((\?)(.*))/${2}/si;
+    if ( ${blosxom::path_info} ) {
+       $prev_url = "${blosxom::url}/${blosxom::path_info}/${prev_url}";
+    }else{
+       $prev_url = "${blosxom::url}${prev_url}";
+    }
+    ####################
     $prev_url =~ s/\?page=1// if ($page == 2);
     $link_prev = qq!<link rel="previous" href="$prev_url" />!;
     $prev = &$blosxom::template($currentdir, 'paginate_simple_prev', $blosxom::flavour) || '<p><a href="$paginate_simple::prev_url">« Go to previous page</a></p>';
@@ -78,6 +88,16 @@
   if (($page + 1) <= $pages) {
     param('page' => $page + 1);
     my $next_url = url(-path_info => 1, -query => 1);
+    ####################
+    # added by chihiro 2008/02/05
+    # cobalt server url problem workaround.
+    $next_url =~ s/(.*?)((\?)(.*))/${2}/si;
+    if ( ${blosxom::path_info} ) {
+       $next_url = "${blosxom::url}/${blosxom::path_info}/${next_url}";
+    }else{
+       $next_url = "${blosxom::url}${next_url}";
+    }
+    ####################
     $link_next = qq!<link rel="next" href="$next_url" />!;
     $next = &$blosxom::template($currentdir, 'paginate_simple_next', $blosxom::flavour) || '<p><a href="$paginate_simple::next_url">Go to next page »</a></p>';
     $next =~ s/\$paginate_simple::next_url/$next_url/ge;

その他2:cobaltでは、paginate_simpleも正常動作しなかった。

上記の問題の前に、index.cgiをつけていてもリンクが変だった。
以下のようにurl()にfullをつけて回避していた。
この回避方法は、現在は止めている。
上記の「その他1」の回避方法を現在は使用している。

[編集前:1]
  my $prev_url = url(-path_info => 1, -query => 1);
[編集後:1]
  my $prev_url = url(-full => 1 , -path_info => 1, -query => 1);

[編集前:2]
  my $next_url = url(-path_info => 1, -query => 1);
[編集後:2]
  my $next_url = url(-full => 1 , -path_info => 1, -query => 1);

参考までに周辺コードを下記します。

paginate_sinpleプラグイン blosxomVersion: 1.2 Cobalt対応修正後抜粋

    66  sub head {
    67    my ($pkg, $currentdir, $head_ref) = @_;
    68
    69    if ($page > 1) {
    70      param('page' => $page - 1);
    71      # added by chihiro 2008/02/05
    72      # cobalt server url problem workaround.
    73      # url()function add option "-full"
    74      my $prev_url = url(-full => 1 , -path_info => 1, -query => 1);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    75      $prev_url =~ s/\?page=1// if ($page == 2);
    76      $link_prev = qq!<link rel="previous" href="$prev_url" />!;
    77      $prev = &$blosxom::template($currentdir, 'paginate_simple_prev', $blosxom::flavour) || '<p><a href="$paginate_simple::prev_url">« Go to previous page</a></p>';
    78      $prev =~ s/\$paginate_simple::prev_url/$prev_url/ge;
    79    }
    80
    81    if (($page + 1) <= $pages) {
    82      param('page' => $page + 1);
    83      # added by chihiro 2008/02/05
    84      # cobalt server url problem workaround.
    85      # url()function add option "-full"
    86      my $next_url = url(-full => 1 , -path_info => 1, -query => 1);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    87      $link_next = qq!<link rel="next" href="$next_url" />!;
    88      $next = &$blosxom::template($currentdir, 'paginate_simple_next', $blosxom::flavour) || '<p><a href="$paginate_simple::next_url">Go to next page »</a></p>';
    89      $next =~ s/\$paginate_simple::next_url/$next_url/ge;
    90    }
    91
    92    return 1;
    93  }

その他:3 cobaltでの$datadirの求め方

cobaltサーバーでの、$datadirの探し方ですが、私は、sshでログインしてblosxomのパスでpwdを実施して 求めたもので設定しています。

ftpのパスや、phpinfo()のパスは、異なる実行パスが出てきて、使えませんでした。

Posted at 2008/02/13 19:21 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/12 (Tue)

WordPressのデータを、blosxomデータにコンバート 〜 rubyとREXMLにて

WordPressの日記データを、Blosxsomへ読み込めるような形式に変換したいと考えた。
WordPressからは、XML形式でエクスポートできるため、XMLのrdfを元にして、 Blosxomで参照可能な個別のテキスト形式へ変換できないか考える。

完全にデータ移行できるというものではありませんが、 最終的には、WordPressからエクスポートして得られたxmlデータから、 記事毎のファイルを生成することはできました。

以下に詳細を。

どう行うか

Webを探しても、Wordpressからエクスポートしたデータを、blosxomで管理できる形式への コンバートする、なんていう情報は見つからず。

blosxomでは、記事毎にファイルが必要。
先頭行がタイトルで、次行以降に本文が来れば良い。 さて、まず、XMLをパースできれば、XMLファイルから得られたデータを元に、 後は記事毎にファイルを生成すればよいと考える。

移行対象データも100件以下、スクリプトも移行作業のみの使い捨てになる見込み。
なので、スクリプト言語でXMLを簡単にパースできて、perl、php、rubyから探した。
rubyでREXMLというものが見つかる。
何となく、素人自分でも使えるかなぁ?と。

rubyは、railsでごにょごにょ経験はあったものの、それなりに書くのは上手くない。
ちょっと情報源を探す。

REXMLのプラグインは上記のURLよりダウンロードして展開して用意。
以下のスクリプトでxmlを、ファイルに分割します。

スクリプト

簡単にrubyで作成したスクリプト概要。
以下のスクリプトでは、カレントディレクトリにある"./wordpress.2008-02-03.xml" というファイルを読み込んで、./outout/ディレクトリ配下にテキストファイルを作成します。
ファイル名は、"投稿日時+数字.txt"という書式です。
XMLで記事を参照する際に、"rss/channel/item"という階層を探すのに、ちょっと手間取りました。

require 'nkf'
require "rexml/document"
include REXML

doc = Document.new File.new("./wordpress.2008-02-03.xml")

num = 0;

doc.elements.each("rss/channel/item"){|element|

puts element.elements["title"].to_a
  puts "----------------------------------------"
  puts element.elements["pubDate"].to_a

  tm = element.elements["pubDate"].to_a.to_s.split(" ")
  tm[0].chop!
  tm = tm + tm[4].split(":")
  #["Fri", "28", "Sep", "2007", "12:38:00", "+0000", "12", "38", "00"]
  tmobj=Time.mktime(tm[3],tm[2],tm[1],tm[6],tm[7],tm[8])
  p tmobj
  p tmobj.strftime("%Y%m%d%H%M%S")

  filename = "./output/" + tmobj.strftime("%Y%m%d%H%M%S") + "_" + num.to_s + ".html"
  num += 1

  puts "----------------------------------------"
  puts element.elements["category"].to_a
  puts "----------------------------------------"
  puts element.elements["title"].to_a
  puts "----------------------------------------"
  puts NKF.nkf('-W -e',element.elements["content:encoded"].to_s)
  puts "----------------------------------------"

  open(filename,"w") do |f|
     f.puts NKF.nkf('-W -e',element.elements["title"].to_a.to_s)
     f.puts NKF.nkf('-W -e',element.elements["content:encoded"].to_s)
  end

  puts "========================================================="
}

上記のスクリプトを実行したのちに、ファイルの内容を手編集。
終わったら、ファイル名から時刻を引いて、touchでタイムスタンプを更新して、ひとまず終了。
XMLのパースさえ出きれば、後はテキスト処理なので、いろいろ工夫できると思います。

上記のスクリプトで、ファイルへの出力に、次の項目をつけておくべきだったと反省。

  • index-kacheプラグインで参照する、meta-creation_date: タグをタイトルの次行に記述する

こんなかんじ。以下の、metaタグの行です。

ここが先頭行。タイトル行になります。
meta-creation_date: 2008-02-04T17:23:00+09:00

本文...

理由は、投稿日時をblosxomに認識させる際に、ファイルのタイムスタンプを参照するが、 index-kacheプラグインなどを使用すると、metaタグの日時に固定できる為。
上記のスクリプトで切り出したデータを、更にtouchでタイムスタンプを編集しなくても、 metaタグの時刻が参照されるので、事後の編集も容易になります。

Posted at 2008/02/12 02:41 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/08 (Fri)

blosxomにてサイト構築進行中

blosxomにて、サイトの構築を進めています。
(この記事を書いている段階では、まだテスト段階ですが、前回のblosxomの記事以降、この記事を書いて更新している程度には進展している)

まだ造り込み作業中ですが、blosxomには、かなり好感です。

blosxomとは、weblogを実現するPerlスクリプト。
blosxomをLinuxのディストリビューションに例えて言うと、WordPressがRedHat Enterprise Linuxならば、blosxomはGentoo Linuxというような印象。

WordPressには、初期状態でも完成しているというよさがあります。
最初にblogしてみたい、と言うならば、WordPressやMTが楽で良いでしょうね。

blosxomは、初期状態ではまともなブログは無理です。
機能をプラグインを選んで導入して、ページデザインも自作する必要があり。
しかし、手を入れればどこまでも自分のやりたいようにできますし、やりやすいと感じます。
デザインもHTMLで柔軟に作成できるし、プラグインも充実してて、さらに プラグインもPerlで簡単に作れて、かゆいところに簡単に手が届く感じです。
仕様上これはダメ、とかいうのも見当たらないし。 (まだ深く見えていないだけかもしれませんが)

とても万人にお薦めできるソフトではありません。
が、もしHTMLやCSSを手打ちでホームページが作れて、Perlがわかるならば、 これは非常に強力なツールになると思います。

以下のページも参考になるかと。
「まとめ」の項に書かれている内容は、私も使って、作ってみて実感しています。

元々自分は、HTMLやCSSを手打ちしてホームページを作っていて、 掲示板程度のスクリプトならばPerlで作れます。
blosxomで作りはじめて、数日でデザインもできて、プラグインにも手をつけています。
フルスクラッチしましたし、プラグインを改造したり、 見よう見まねでプラグインを作って組み込んでテストしています。
きっとあなたにもできますよぉ〜

と、ここまで書いたのですが、blosxomには、Blogとして運用する際に必要な プラグインや設定を加味した一括パッケージもあるそうです。
自分は何も無いところから構築を始めてしまいましたが、この一括パッケージを利用すると導入も楽かも?

(blosxomはプラグインに手を入れたり作ったりするところにも、醍醐味があるようには感じるので、 素のblosxomで一から構築するのもそれもまた良いと思います...)

Posted at 2008/02/08 19:20 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する

2008/02/04 (Mon)

blosxom - Perlで書かれたBlog

さて、自分の管理している既存サイトにコンテンツはあるのだが、記事のアップデートはともかくとして、関連ファイルの配置から様々更新する必要がある。
文章書きはたいした苦労ではないのだが、この更新、それも「関連ファイルも更新しなければならない」という状態はいかんせん面倒なのです。
その面倒な状態のまま、マニュアルのサイト更新を続けてきたわけで。

管理しやすい方法に移行しようにも、既に結構な数のHTML文書が蓄積されてしまっている為、これをいかに再利用出きるかが、課題。

さて、HTMLベースの既存のコンテンツが大量にある状態ではあるので、これをどのようにメンテナンスしやすいサイトに作り替えてゆくかというのが課題。
と、いろいろ探してみると、Blosxomというブログスクリプトがあって、これ、自分が自作で作ろうとしていた仕組みそのまんま、というようなもの!
というわけで、Blosxomでサイトのリニューアル中。

このBlosxomは非常に単純、かつ柔軟な作りになっていて、今までの自分のサイトデザインそのままに、BlosxomでBlogサイトのように作り直すことができそうです。

WordPressもシステムとしては非常に便利。
でも、柔軟性にはBlosxomにはかなわないでしょうね。
もし、PerlとHTMLが書ける方ならば、ちょっとしたサイト構築ならば便利に使える気がします。PerlのCGIが動作すれば動くので、大抵のホスティングでもそのままで動くでしょうしね。

がんばるぞー!

Posted at 2008/02/04 17:23 in /linux/blosxom
ソーシャルブックマークへ登録 ブックマークに追加する