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

読了まで:約2分


  • [[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 みたいな​快適インターフェイスを​構築する​こともできるので、​長所なのか、​短所なのか​分かりませんが。

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

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。