Plagger::Plugin::Publish::Excel 作ってみた
昨日の Notify::YahooMessenger に続いて、今度は Publish::Excel を作ってみた。
1 Feed を 1 シート に保存する。
Excel だと見た目仕事してるっぽいので、うるさい会社にいる人はこれ使って livedoor Reader or Bloglines → Excel で見たりすると怒られなくて済むかも??
あとは Filter::EntryFullText で取ってきて、ネット環境が無いところで読んだりとか。
職場でネット使えないと悲惨すぎるけど、開発現場で外部のメールすら読めないところもまだあるみたいなので。
現状では出力してるだけでレイアウトを触ってないのでかなり読みにくいけど(どうしようか)。
さらにまだ追記が出来ない・・・
Spreadsheet::ParseExcel とか使ったらいいのかな。
ソースは以下。
package Plagger::Plugin::Publish::Excel; use strict; use warnings; use base qw(Plagger::Plugin); use Plagger::Util qw(strip_html); use Spreadsheet::WriteExcel; sub init { my $self = shift; $self->SUPER::init(@_); Plagger->context->error("filename is missing") unless exists $self->conf->{filename}; } sub register { my ($self, $context) = @_; $context->register_hook( $self, 'publish.init' => \&initialize, 'publish.feed' => \&feed, ); } sub initialize { my ($self, $context) = @_; my $workbook = Spreadsheet::WriteExcel->new($self->conf->{filename}); $self->{workbook} = $workbook; $self->{body_format} = $workbook->add_format(text_wrap => 1); } sub feed { my ($self, $context, $args) = @_; my $feed = $args->{feed}; my $worksheet = $self->{workbook}->add_worksheet(escape_sheet_name($feed->title)); my $row = 0; for my $entry ($feed->entries) { my $col = 0; $worksheet->write($row, $col++, $entry->date->format('Mail')); $worksheet->write($row, $col++, $entry->title); $worksheet->write($row, $col++, $entry->permalink); $worksheet->write($row, $col++, strip_html($entry->body), $self->{body_format}); $row++; } } sub escape_sheet_name { my $name = shift; $name =~ s![\[\]:*?/\\]! !g; $name; } 1; __END__ =head1 NAME Plagger::Plugin::Publish::Excel - Publish feeds as Excel workbook =head1 SYNOPSIS - module: Publish::Excel config: filename: /path/to/workbook.xls =head1 DESCRIPTION This plugin creates Excel workbook. =head1 AUTHOR Jiro Nishiguchi =head1 SEE ALSO L<Plagger>, L<Spreadsheet::WriteExcel> =cut
configは
- module: Publish::Excel config: filename: /path/to/workbook.xls
こんな感じで。
実際はこんな感じになる。(Feed は Plagger の timeline)