Plagger::Plugin::Publish::PowerPoint
ファイル名まわりとか、Plagger::Pluginあたりに入れてもらった方がすっきりするかもなあと思いつつ。
package Plagger::Plugin::Publish::PowerPoint; use strict; use base qw( Plagger::Plugin ); our $VERSION = '0.01'; use Win32::PowerPoint; use Encode; use File::Path; sub register { my($self, $context) = @_; $context->register_hook( $self, 'publish.init' => \&connect_powerpoint, 'publish.feed' => \&publish_presentation, ); } sub publish_presentation { my ($self, $context, $args) = @_; my $feed = $args->{feed}; $self->{powerpoint}->new_presentation; foreach my $entry ($feed->entries) { my $title_text = $entry->title_text; my $body_text = $entry->body_text; $title_text =~ s/^\s+//mg; $body_text =~ s/^\s+//mg; $self->{powerpoint}->new_slide; $self->{powerpoint}->add_text( encode('shift_jis',$title_text), { size => 30, bold => 1, height => 50 }, ); $self->{powerpoint}->add_text( encode('shift_jis',$body_text), { size => 20 }, ); } # generate file path; my $file = File::Spec->catfile( $self->conf->{dir}, $self->gen_filename($feed) ); $context->log(info => "save feed for " . $feed->link . " to $file"); $self->{powerpoint}->save_presentation($file); $self->{powerpoint}->close_presentation; } sub connect_powerpoint { my ($self, $context, $args) = @_; my $dir = $self->conf->{dir}; unless (-e $dir && -d _) { $context->log(debug => "make dir"); mkpath($dir, 0755) or $context->error("mkdir $dir: $!"); } $context->log(debug => "hello, PowerPoint"); $self->{powerpoint} = Win32::PowerPoint->new; } # stolen from ::Publish::Feed my %formats = ( 'u' => sub { my $s = $_[0]->url; $s =~ s!^https?://!!; $s }, 'l' => sub { my $s = $_[0]->link; $s =~ s!^https?://!!; $s }, 't' => sub { $_[0]->title }, 'i' => sub { $_[0]->id }, ); my $format_re = qr/%(u|l|t|i)/; sub gen_filename { my($self, $feed) = @_; my $file = $self->conf->{filename} || '%i.pps'; $file =~ s{$format_re}{ $self->safe_filename($formats{$1}->($feed)) }egx; $file; } sub safe_filename { my($self, $path) = @_; $path =~ s![^\w\s]+!_!g; $path =~ s!\s+!_!g; $path; } 1; __END__ =head1 Plagger::Plugin::Publish::PowerPoint - publish as PowerPoint slide =head1 SYNOPSYS - module: Publish::PowerPoint config: dir: /home/foobar/plagger filename: %l.pps =head1 CONFIG Accepts C<dir> and C<filename>. See ::Publish::Feed for details. =head1 AUTHOR Kenichi Ishigaki =head1 SEE ALSO C<Plagger>, C<Plagger::Plugin::Publish::Feed>, C<Win32::PowerPoint> =cut