各サービスのエンドポイントメモ。
とりあえずXML-RPCに対応してそうなブログの一覧。
サービスhostpath
FC2blog.fc2.com/xmlrpc.php
gooblog.goo.ne.jp/xmlrpc.php
seesaablog.seesaa.jp/rpc
jugenYOURID.jugem.jp/xmlrpc.php
ココログapp.f.cocolog-nifty.com/t/api
ninjaYOURID.blog.shinobi.jp/XMLRPC/


XMLRPC::Liteモジュールを利用してPerlでの実装。
package Blogpost;
use strict;
use XMLRPC::Lite;

sub new {
    my $class = shift;
    return bless {}, $class;
}

sub post {
    my ($self, $send_param) = @_;
    my $result = $self->_call_rpc("metaWeblog.newPost",
                                  $param{'xmlrpc_url'},
                                  $send_param->{'blogid'},
                                  $send_param->{'username'},
                                  $send_param->{'password'},
                                  {
                                      'title' => $send_param->{'title'},
                                      'description' => $send_param->{'description'},
                                      'dateCreated' => $send_param->{'datetime'},
                                  },
                                  length($send_param->{'publish'}) ? $send_param->{'publish'} : 1);
    return $result;
}

sub _call_rpc {
    my($self, $method, $url, @args) = @_;
    my $DEBUG = 1;
    my $err;

    my $result = eval {
    XMLRPC::Lite->proxy($url)
        ->on_debug(sub { warn @_ if $DEBUG; })
        ->on_fault(sub { $err = @_[0]->{'_deserializer'}{'_ids'}; })
        ->call($method => @args);
    };
    warn $@ if $@;
    if ($err) {
        return {
            'code' => $err->[2][0][2][0][2][0][4]->{'faultCode'},
            'msg' => $err->[2][0][2][0][2][0][4]->{'faultString'}
        };
    } else {
        return {
            'code' => 0,
            'msg' => $result,
        };
    }
}

sub get_blogid {
    my ($self, $param) = @_;
    my $result = $self->_call_rpc("blogger.getUsersBlogs",
                                  $param->{'xmlrpc_url'},
                                  XMLRPC::Data->type('string', ''),
                                  XMLRPC::Data->type('string', $param->{'username'}),
                                  XMLRPC::Data->type('string', $param->{'password'}),
                                  );
    my $data = $result->{'msg'}{'_content'}[2][0][2][0][2][0][2][0][4];

    return 0 if ($result->{'code'});

    if (scalar @$data == 1) {
        return @$data[0]->{'blogid'};
    } else {
        for (my $i=0, my $num = scalar @$data; $i < $num; $i++) {
            return @$data[$i]->{'blogid'} if @$data[$i]->{'url'} eq $param->{'url'};
        }
    }
}