Mar 10, 2006
Bloxsom のエントリーを一覧表示する
Blosxom のエントリー一覧を確認したくなることが結構あるので、簡単なスクリプトを作成してみた。 このスクリプトは Blosxom starter kit 環境下で、エントリーファイルの一覧を HTML で表示する。 Blosxom starter kit の設定ファイルを参照している都合で、ノーマルの Blosxom 環境下では動作しないかもしれない(未確認)。
Blosxom エントリー一覧表示スクリプト
$BLOG_HOME 直下に適当な名前でスクリプトを設置し、パーミッションを 755 にすると動作する。
#!/usr/bin/perl
package blosxom;
eval { require './config.cgi'; };
die "Failed to load configuration file.\n$@" if $@;
use vars qw! $datadir $url $depth $file_extension %files !;
use strict;
use FileHandle;
use File::Find;
use File::stat;
use Time::localtime;
use Time::Local;
use CGI qw/:standard :netscape/;
use CGI::Carp;
my $fh = new FileHandle;
# Use the stated preferred URL or figure it out automatically
$url ||= url();
$url =~ s/^included:/http:/; # Fix for Server Side Includes (SSI)
$url =~ s!/$!!;
# Drop ending any / from dir settings
$datadir =~ s!/$!!;
# Fix depth to take into account datadir's path
$depth and $depth += ($datadir =~ tr[/][]) - 1;
# find entry files
my @files;
find(
sub {
my $d;
my $curr_depth = $File::Find::dir =~ tr[/][];
return if $depth and $curr_depth > $depth;
my $file = $File::Find::name;
if($file =~ m/(.)*\.$file_extension$/i) {
push(@files, $file);
}
}, $datadir
);
# soft entry files
@files = sort {
$a =~ /.*\/(.+)/;
my $filename_a = $1;
$b =~ /.*\/(.+)/;
my $filename_b = $1;
$filename_b cmp $filename_a;
} @files;
# print results;
print "Content-type: text/html\n\n";
print "<html>";
print "<head><title>";
print "list entries in ";
print $datadir;
print "</title></head>";
print "<body>";
print "list entries in ";
print $datadir;
print "<ol>";
foreach my $file (@files) {
$file =~ /.*\/(.+)/;
my $filename = $1;
my $fileurl = $file;
$fileurl =~ s/$datadir//g;
$fileurl =~ s/\.$file_extension/\.html/g;
$fileurl = $url . $fileurl;
print "<li>";
print "<a href=\"";
print $fileurl;
print "\">";
print $filename;
print "</a>";
print " <span style=\"font-size: x-small;\">(";
print $file;
print ")</span>";
print "</li>";
}
print "</ol>";
print "</body></html>";
TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Blosxom/20060310_01.trackback
writeback message: Ready to post a comment.
