The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Kwiki::Podcast;
use Kwiki::Plugin -Base;
use mixin 'Kwiki::Installer';
use XML::RSS;
use URI;
our $VERSION = '0.01';

const class_id => 'podcast';
const class_title => 'Podcast';
const config_file => 'podcast.yaml';

sub register {
    my $registry = shift;
    $registry->add(action => 'podcast');
    $registry->add(toolbar => 'podcast_button', 
                   template => 'podcast_button.html',
                  );
}

sub podcast {
    my @pods;
    for($self->hub->pages->all){
	if($_->content =~ m/(https?:.+?\.mp3)/i) {
	    push @pods, { uri => $1 , page => $_ };
	}
    }
    $self->hub->headers->content_type('text/xml');
    return $self->mkrss($self->hub->config->podcast_title,
			$self->hub->config->podcast_publisher,
			$self->hub->config->podcast_description,
			@pods);
}

sub mkrss {
    my ($title,$creator,$description,@pods) = @_;
    my $rss = XML::RSS->new( version => '2.0', encoding=> 'utf-8' );

    $rss->channel(title => $title,
		  publisher => $creator,
		  description => $description );

    for (@pods) {
	my $uri = URI->new($_->{uri});
	my ($sec,$min,$hour,$mday,$mon,$year,,,) = localtime($_->{page}->io->ctime);
	$rss->add_item( title => $_->{page}->title,
			link  => $uri,
			enclosure => { url => $uri, type => 'audio/mpeg' },
			description => '<![CDATA[' . $_->{page}->content . ']]>',
			category => "Podcast",
			pubDate => ($year+1900)."-$mon-$mday"."T"."$hour:$min:$sec",
			author => $_->{page}->metadata->edit_by
		      );
    }
    return $rss->as_string;
}

__DATA__

=head1 NAME

  Kwiki::Podcast - Podcasting in a Kwiki way

=head1 INSTALLATION

  kwiki -install Kwiki::Podcast

=head1 DESCRIPTION

This plugin offer an Kwiki action to generate podcast rss.  User
simply put down a mp3 URL in a page, and leave the rest to Kwiki.
For example, you only have to write something like:

    My Podcast Try. This is my first podcast song, please
    take a look at it.

    http://foobar.org/podcast/first.mp3

With proper user preference, your podcast will have proper publisher
tag too.

Subscribe can address your podcast RSS URL from Kwiki's toolbar.

=head1 CONFIGURATION

This plugin offer 3 configuratino keywords:

=over 4

=item podcast_title

General title for you Podcasting

=item podcast_publisher

Your name

=item podcast_description

General description for this podcast.

=back

=head1 COPYRIGHT

Copyright 2005 by Kang-min Liu <gugod@gugod.org>.

This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

See <http://www.perl.com/perl/misc/Artistic.html>

=cut

__config/podcast.yaml__
podcast_title: Kwiki Podcast
podcast_publisher: Kwiki Hacker
podcast_description: Podcast in a Kwiki way
__template/tt2/podcast_button.html__
<a href="[% script_name %]?action=podcast">
[% INCLUDE podcast_button_icon.html %]
</a>
__template/tt2/podcast_button_icon.html__
Podcast