カラクリサイクル

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

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

概要: 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

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

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

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

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

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