カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

Jane Viewのログをbbs2chReaderに移行する

概要: JaneViewからFirefox + bbs2chreader + Foxage2chに移行した。


ずっと前、たしかこのBlog書き始める前に一度、Jane(View)のログをbbs2chreaderに移行できないか、 とごにょごにょしていた事はあったんだけど、そのときは確かログが見れるけど新着がうまく認識できなかった、 とかなんとかであきらめていた。

で、今回気まぐれに試してみたら、ログも見れるし、新着も認識できるようだったので、 Jane(View)のログをbbs2chreaderに移行した。

Jane(View)のログをbbs2chreaderに移行する場合、datはそのままでいいんだけど、 idxの形式が違う(ただし、両方ともテキスト)ため、そのままでは読み込めない。

幸い変換して認識させるのに必要な情報はJaneのidxファイルに含まれていたので、 Jane->bbs2chreaderの変換は問題なくできた。

が、いかんせん量が多いので、手作業でやるのは無理。ということでPerlでスクリプト書いて、 自動的に変換した。以下そのスクリプト。

#!/usr/bin/perl
use strict;
use warnings;
use FileHandle;
use File::Find;
use File::Path;
use File::Copy;
use File::Spec;
my $jane_dat_dir    = 'Jane2chのログディレクトリのパス';
my $bbs2ch_dat_dir  = 'bbs2chreaderのログディレクトリへのパス';
my $fh = FileHandle->new();
find(sub {
    my $fn = $File::Find::name;
    return if ( -d $fn );
    return if ( !-r $fn );
    return if ( $fn !~ m{/\d+\.idx$} );
    my ( $name ) = ( $fn =~ m{/(\d+)\.idx$} );
    my ( $title, $line_count, $last_mod, $path ) = parse_idx( $fn );
    my ($jane_path) = ( $fn =~ m{^(.*)/\d+\.idx$} );
    my $bbs2ch_path = File::Spec->rel2abs( "$bbs2ch_dat_dir/$path" );
    my $jane_dat    = File::Spec->rel2abs( "$jane_path/$name.dat" );
    my $bbs2ch_dat  = File::Spec->rel2abs( "$bbs2ch_path/$name.dat" );
    my $bbs2ch_idx  = File::Spec->rel2abs( "$bbs2ch_path/$name.idx" );
    print "$path/$name.dat\n";
    eval { mkpath( $bbs2ch_path ) };
    if ( $fh->open( $bbs2ch_idx, '>') ) {
        print $fh &template( $title, $line_count, $last_mod );
        copy( $jane_dat, $bbs2ch_dat );
    }
    else {
        die;
    }
}, $jane_dat_dir);
exit(0);
# -- Subroutines --------------------- #
sub parse_idx {
    my ( $path ) = @_;
    my ( $title, $line_count, $last_mod, $dir )
        = (q{}, q{}, q{}, q{});
    my @lines = ();
    $path = File::Spec->rel2abs( $path );
    if ( $fh->open("< $path") ) {
        @lines = <$fh>;
    }
    $fh->close;
    for my $line ( @lines ) {
        chomp($line);
    }
    $title      = shift @lines;
    $last_mod   = shift @lines;
    $line_count = shift @lines;
    for my $line ( @lines ) {
        if ( $line =~ m{^http://(.*?)$} ) {
            $dir = $1;
            last;
        }
    }
    return ( $title, $line_count, $last_mod, $dir );
}
sub template {
    my ( $title, $line_count, $last_mod ) = @_;
    my $tmpl = "title=$title\nlineCount=$line_count\nlastModified=$last_mod";
    return $tmpl;
}

ライセンスはMIT-Licenseで。

使い方は、最初の方の$jane_dat_dir$bbs2ch_dat_dirを各環境に合わせて変更して、

perl jane2bbs2ch.pl

で実行するだけ。

ただし、パスの設定間違えると大変悲惨なことになる(作ってる途中でそうなった)ので、要注意。 あと無保証なので、各自自己責任で使ってください。えらいことになったとか言われても知りません。

ちなみにFirefox + bbs2chreader + Foxage2chは非常に快適。 今まで巡回するのにそこそこ時間がかかっていたのが、巡回時間を大幅に縮小された。 ま、巡回スタイルにもよるんだろうけど。

あとこの組み合わせはOSに依存しない(たぶん)ので、WindowsのログをLinux系に移植するとかできそう。

ただ、IDの色分けとかスレの抽出、画像とかのその場での表示なんかは、Skinでやる必要があるので、 そのあたり、ちょっと面倒かも。 まあでも、やろうと思えばlivedoorReaderみたいな快適インターフェイスを構築することもできるので、 長所なのか、短所なのか分かりませんが。

ま、なんか作ったら公開します。