各サービスのエンドポイントメモ。
とりあえずXML-RPCに対応してそうなブログの一覧。
XMLRPC::Liteモジュールを利用してPerlでの実装。
とりあえずXML-RPCに対応してそうなブログの一覧。
サービス | host | path |
---|---|---|
FC2 | blog.fc2.com | /xmlrpc.php |
goo | blog.goo.ne.jp | /xmlrpc.php |
seesaa | blog.seesaa.jp | /rpc |
jugen | YOURID.jugem.jp | /xmlrpc.php |
ココログ | app.f.cocolog-nifty.com | /t/api |
ninja | YOURID.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'}; } } }
コメント