bbs2chreaderとFoxage2chを板移転に対応させるスクリプト

読了まで:約1分


概要: bbs2chreader と Foxage2ch を板移転に対応させる。


去年というか昨日からどうも Foxage2ch で新着が引っかからないと思ったら、 どうも大量に板移転していたらしい。

で、bbs2chreader は板移転に対応して無い、Foxage2ch は追尾してたらしいけど、追尾して無い、 と言うことで、Perl でスクリプト書いて対応した。

ログの移動

#!/usr/bin/perl
use strict;
use warnings;
use YAML ();
use File::Copy;
use File::Spec;
use File::Find;
use File::Path;
my $list_file = '板移動一覧のYAMLへのパス';
my $log_dir = 'bbs2chreaderのログディレクトリへのフルパス';
my $list = YAML::LoadFile( $list_file );
for my $old ( sort keys %{ $list } ) {
my $new = $list->{ $old };
if ( -d "$log_dir/$old" ) {
find( sub {
my $fn = $File::Find::name;
return if ( !-r $fn );
return if ( -d $fn );
return if ( $fn !~ m{(\d+)\.idx$} );
my ( $name ) = ( $fn =~ m{/(\d+)\.idx$} );
my $old_dat_path = File::Spec->rel2abs("$log_dir/$old/$name.dat");
my $old_idx_path = File::Spec->rel2abs("$log_dir/$old/$name.idx");
my $new_dat_path = File::Spec->rel2abs("$log_dir/$new/$name.dat");
my $new_idx_path = File::Spec->rel2abs("$log_dir/$new/$name/idx");
print "$old => $new\n";
move( $old_dat_path, $new_dat_path );
move( $old_idx_path, $new_idx_path );
rmtree(  [[$old_dat_path, $old_idx_path]]  );
}, "$log_dir/$old" );
}
}

Foxage2ch への追尾

#!/usr/bin/perl
use strict;
use warnings;
use YAML ();
use FileHandle;
my $list = '板移動一覧のYAMLへのパス';
my $rdf  = 'foxage2ch.rdfへのパス';
my $rep = YAML::LoadFile( $list );
my $fh = FileHandle->new;
$fh->open($rdf, '<') or die;
my $file;
{
local $/;
$file = <$fh>;
}
$fh->close;
while ( my ( $old, $new ) = each %{ $rep } ) {
$old =~ s{\.}{\\.}g;
$file =~ s{($old)}{$new}xmsg;
}
$fh->open($rdf, '>');
print $fh $file;
$fh->close;

両方とも MIT-License で。

で、あと [[板移動一覧の YAML //nyarla.github.io/assets/files/2007-01-01/2ch-board-move-list.yaml]] 。

使い方は、設定して実行すればいいです。 ちなみに無保証なので、使い方分かりません><とかログがぶっ壊れたとか、 Foxage2ch がおかしくなったとか言われても知りません。

とは言いつつも、そう致命的な問題は無いと思いますが。

新年早々スクリプト書いてるっていうのは、 スクリプタにとって縁起がいいんだろうか?

追記:2007-01-01T11:12:00+09:00

なんかログ移動のほうがちゃんと動いているのか怪しい。ログが壊れたりする。

#FIXME

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

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

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