調子に乗ってPlaggerのPlugin作った。 Plagger側のエントリーひとつごとにFC2エントリーをひとつ投稿するタイプ。 テストしてたらFC2の1日最大投稿数が30までらしく激しく怒られますた。 よく考えたらdescriptionにbodyしか入れてないのでlinkにとばねえじゃん。 というわけで、使うときはtemplatizeさせるように。
package Plagger::Plugin::Publish::FC2;
use strict;
use base qw( Plagger::Plugin );
our $VERSION = 0.01;
use RPC::XML::Client;
use Encode;
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'plugin.init' => \&initialize,
'publish.entry' => \&post_entry,
);
}
sub rule_hook { 'publish.entry' }
sub initialize {
my ($self, $context, $args) = @_;
$self->{client} = RPC::XML::Client->new('http://blog.fc2.com/xmlrpc.php');
}
sub post_entry {
my($self, $context, $args) = @_;
my $req = RPC::XML::request->new(
'metaWeblog.newPost',
RPC::XML::string->new($self->conf->{blog_id}),
RPC::XML::string->new($self->conf->{user_id}),
RPC::XML::string->new($self->conf->{password}),
RPC::XML::struct->new(
'title' => RPC::XML::string->new( encode('utf-8', $args->{entry}->title) ),
'description' =>
RPC::XML::string->new( encode('utf-8', $args->{entry}->body) ),
'mt_convert_breaks' => RPC::XML::string->new("0"),
),
RPC::XML::boolean->new('true'),
);
my $res = $self->{client}->send_request($req);
if( $res->is_fault ){
$context->log(info => "Error: " . $res->value->{faultString} );
}else{
$context->log(info => "Post entry success. FC2 blog entry id is " . $res->value );
}
}
1;
__END__
=head1 NAME
Plagger::Plugin::Publish::FC2 - Post to FC2 blog automatically
=head1 SYNOPSIS
- module: Publish::FC2
config:
blog_id: your-blog_id
user_id: your-user_id
password: your-password
=head1 AUTHOR
Yusuke Wada
=head1 SEE ALSO
L<Plagger>, L<RPC::XML::Client>, L<http://blog.fc2.com/>
=cut

