tokuhirom's blog.

'; DROP DATABASE database();

Plagger::Plugin::Filter::HatenaDiaryKeywordLink

package Plagger::Plugin::Filter::HatenaDiaryKeywordLink;
use strict;
use base qw( Plagger::Plugin );

use URI;
use XMLRPC::Lite;

$XML::Feed::RSS::PREFERRED_PARSER = 'XML::RSS::LibXML';

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

sub update {
    my($self, $context, $args) = @_;

    $context->log(info => "hatena diary keyword auto link start : " . $args->{entry}->link);

    my $rpc = XMLRPC::Lite->new;
    $rpc->proxy($XMLRPC_URL);
    my $body = $args->{entry}->body;

    my $res = $rpc->call('hatena.setKeywordLink' => {
        body => XMLRPC::Data->type('string', $body),
        a_target => '_blank',
        a_class => 'keyword',
    });

    if (my $fault = $res->fault){
        for (keys %{$fault}){
            $context->log(warn => "hatena diary keyword auto link failed : $_ => " . $fault->{$_});
        }
    } else {
        $body = $res->result;
        $body =~ s/&lt;/</ig;
        $body =~ s/&gt;/>/ig;
        $body =~ s/&quot;/"/ig;
    }

    $args->{entry}->body($body);
}

1;