お次はこちら。EntryのlinkがAmazon商品へのURLだった場合に、 Amazon Web Serviceから情報を取得して、Entryのbodyとかに入れるFilter。 templatizeさせて、好きなようにbodyの中身を表示させることも可能。 これも俺しか使わないと思うよ。
package Plagger::Plugin::Filter::AddAmazonDescription;
use strict;
use base qw( Plagger::Plugin );
use Net::Amazon;
use Net::Amazon::Request::ASIN;
our $VERSION = '0.01';
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'update.entry.fixup' => \&filter,
);
}
sub filter {
my($self, $context, $args) = @_;
my $entry = $args->{entry};
$entry->link =~
m!(?:www.amazon.co.jp/)(?:.*?)(?:ASIN|product-description|product|dp)/([^/]+)(?:/.*)*$!;
return unless $1;
# delete '?' etc. param
$1 =~ m!(.*?)\?.*!;
$1 =~ m!(.*?)%3f.*!;
my $asin = $1;
my $attr;
$attr->{token} = $self->conf->{developer_token};
$attr->{locale} = $self->conf->{locale};
$attr->{affiliate_id} = $self->conf->{associate_id};
my $item = search_aws($attr, $asin);
my $body = $entry->body;
if( $self->conf->{template} ) {
$body = $self->templatize($self->conf->{template}, {item => $item} );
}else{
$body = $item->ProductDescription if $item->ProductDescription;
}
$entry->body( $body );
$entry->title( $item->ProductName ) if $self->conf->{set_title};
$entry->link( $item->url) if $self->conf->{set_url};
$entry->icon({
url => $item->ImageUrlSmall,
});
# add meta data for after use
$entry->meta->{affiliate_url} = $item->url;
$entry->meta->{icon_url} = $item->ImageUrlSmall;
}
sub search_aws {
my($attr, $asin) = @_;
my $ua = Net::Amazon->new(%$attr);
my $req = Net::Amazon::Request::ASIN->new( asin => $asin );
my $response = $ua->request($req);
my $item = ($response->properties())[0];
return $item;
}
1;
__END__
=head1 NAME
Plagger::Plugin::Filter::AddAmazonInformation - Set information to entries from Amazon Web Service
=head1 SYNOPSIS
- module: Filter::AddAmazonInformation
config:
associate_id: xxxxxxxxxx-22
developer_token: XXXXXXXXXXXXXXXXXXXX
locale: jp
set_title: 1 # default is off
set_url: 1 # default is off
=head1 DESCRIPTION
This plugin fetches related data from Amazon Web Service and
sets summary to the entry if entry link is amazon product URL.
=head1 AUTHOR
Yusuke Wada
=head1 SEE ALSO
L<Plagger>
=cut

