Mar 10, 2006

[Blosxom] 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>";

Posted in Blosxom | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |