カテゴリー別フィードを mix

とりあえず、カテゴリー別のフィードを mix して1つのフィードにしてみる。

結局、アイテムの並びは時系列にしてない。Last-Modified も適当。Perl の文法も適当。チェックしてボタン押したら別ウィンドウにフィードを表示。

多分、近いうちにゴミ箱行き。

mixedfeed.cgi
#!/usr/bin/perl -w

use strict;
use CGI;
use XML::FeedPP;

# config
my $defaultRSS  = 'Default Feed URL';
my $categoryDir = 'Category Archive Directory';

# init
my $cgi = CGI->new();
my $categories = $cgi->param('c');
my $mixedFeed  = XML::FeedPP::RSS->new();
my @modified   = ();
my $mixed      = 0;
foreach my $category (split(/ /, $categories)) {
  my $feedpath = $categoryDir . 'cat_' . $category . '.xml';
  if (-f $feedpath) {
    # check category feed modified
    my @stats = stat($categoryDir . $feedpath);
    push(@modified, $stats[9]);
    # merge feeds
    $mixedFeed->merge($categoryDir . 'cat_' . $category . '.xml');
    $mixed++;
  }
}
@modified = sort{$b <=> $a} @modified;

# redirect
if ($mixed == 0) {
  print 'Location: ' . $defaultRSS . "\n\n";
  exit;
}

# header, Last-Modified: ***
my ($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime($modified[0]);
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @days   = qw(Sun Mon Tur Wed Thu Fri Sat);
print "Content-type: application/xml\n";
print sprintf("Last-Modified: %3s, %d %3s %4d %02d:%02d:%02d GMT\n",
              $days[$wday],$mday,$months[$mon],$year+1900,$hour,$min,$sec);
print "\n";

# output
$mixedFeed->pubDate($modified[0]);
print $mixedFeed->to_string();
プロフィール

このブログ記事について

このページは、koshigoeが2006年3月 4日 00:31に書いたブログ記事です。

ひとつ前のブログ記事は「my hatena bookmark on 2006-03-03」です。

次のブログ記事は「my hatena bookmark on 2006-03-04」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。