Plagger で取得した記事のスクリーンショットを出力する


Plagger::Plugin::Publish::Screenshot。

CrenaHtml2jpg を使って、Plaggerスクリーンショットを出力してみる。


キャプチャには Win32::CaptureIE とかその辺のモジュール使えばPerlで完結するけど、試した中で一番安定してたのでCrenaHtml2jpgを使ってみた

もちろんWindows専用。


cmd_path に CrenaHtml2jpg のアーカイブを展開したパスを設定して、dirに出力先ディレクトリを設定すると、そこにスクリーンショットの画像が放り込まれる。



すさまじくいい加減なコードだが、やりたいことは出来たのでよしとしよう。

他のOSにも対応したちゃんとしたモジュールがほしいなぁ。自分で作れって話だな。

package Plagger::Plugin::Publish::Screenshot;
use strict;
use warnings;
use base qw(Plagger::Plugin);

use Cwd;
use Plagger::Util;

sub init {
    my $self = shift;
    $self->SUPER::init(@_);
    Plagger->context->error("dir is missing") unless exists $self->conf->{dir};
    Plagger->context->error("cmd_dir is missing") unless exists $self->conf->{cmd_dir};
}

sub register {
    my ($self, $context) = @_;
    $context->register_hook(
        $self,
        'publish.feed' => \&feed,
    );
}

sub feed {
    my ($self, $context, $args) = @_;
    my $dir = $self->conf->{dir};
    unless (-e $dir && -d _) {
        mkdir $dir, 0755 or $context->error("mkdir $dir: $!");
    }
    my $path = $self->conf->{cmd_dir};
    my $pwd = getcwd;
    chdir $path;
    my $format      = $self->conf->{format}      || 'jpeg';
    my $filename    = $self->conf->{filename}    || '%l';
    my $screen_size = $self->conf->{screen_size} || '1024x768';
    my $size        = $self->conf->{size}        || '120x90';
    my $other_opt   = $self->conf->{other_opt}   || '';
    for my $entry ($args->{feed}->entries) {
        my $file = Plagger::Util::filename_for($entry, $filename);
        my $url = $entry->link;
        my $cmd = qq(proccmd -w 30 -c "CrenaHtml2jpg.exe -o"$dir\\$file.$format" -f$format -w$screen_size -s$size $other_opt -u""$url""");
        $self->log(debug => $cmd);
        system($cmd);
    }
    chdir $pwd;
}

1;
__END__

=head1 NAME

Plagger::Plugin::Publish::Screenshot - Publish feeds as screenshot.

=head1 SYNOPSIS

  - module: Publish::Screenshot
    config:
      dir: /path/to/destdir # required
      cmd_dir: C:\Program Files\CrenaHtml2jpg # required
      format: jpeg
      filename: %l
      screen_size: 1280x768
      size: 120x90
      other_opt: -q92 -d72 -t25 -l5

=head1 DESCRIPTION

This plugin creates screenshot image files.

=head1 AUTHOR

Jiro Nishiguchi

=head1 SEE ALSO

L<Plagger>, L<http://dip.picolix.jp/disp5.html>

=cut