概要: 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
なんかログ移動のほうがちゃんと動いているのか怪しい。ログが壊れたりする。