package XMLRPC::Lite::UpdatePing; use 5.008000; use strict; our $VERSION = '0.03'; use Encode; use XMLRPC::Lite; sub new { my $class = shift; bless { ping_servers => [ 'http://blogsearch.google.com/ping/RPC2', 'http://www.blogpeople.net/servlet/weblogUpdates', 'http://rpc.technorati.com/rpc/ping', ], }, $class; } sub ping_servers { my $self = shift; return $self->{ping_servers}; } sub add_ping_server { my $self = shift; my $new_ping_server = shift; push @{$self->{ping_servers}}, $new_ping_server; return $self; } sub setup_ping_servers { my $self = shift; $self->{ping_servers} = shift; return $self; } sub ping { my $self = shift; my $feed_uris = shift; my ($all_res, $recent_res) = ('', ''); for my $feed_name ( keys %{$feed_uris} ) { for my $ping_server_uri (@{$self->ping_servers}) { $recent_res = &_send_ping( rpc => $ping_server_uri, site_name => encode('eucjp', $feed_name), feed_uri => $$feed_uris{$feed_name}, ); $all_res .= &_as_string($recent_res) if defined $recent_res; } } return $all_res; } sub _send_ping { my %arg = @_; my $rpc_uri = $arg{rpc}; my $site_name = $arg{site_name}; my $feed_uri = $arg{feed_uri}; if ( ! defined $rpc_uri || $rpc_uri !~ m/^http/ ) { return { flerror => 0, message => 'local echo mode', name => $site_name, uri => $feed_uri, }; } my $result = XMLRPC::Lite->proxy($rpc_uri) ->call( 'weblogUpdates.ping', $site_name, $feed_uri, ) ->result ; return $@ if $@; return (defined $result) ? $result : { 'flerror' => 'none', 'message' => 'none' }; } sub _as_string { my $input = shift; if (not ref $input) { return $input; } elsif (ref $input eq 'SCALAR') { return $$input; } elsif (ref $input eq 'ARRAY') { return join("
\n", @$input); } elsif (ref $input eq 'HASH') { my $return = ''; for my $key (sort keys %$input) { $return .= "$key => $input->{$key}
\n"; } return $return; } else { return 'unknown data format'; } } 1; __END__ =head1 NAME XMLRPC::Lite::UpdatePing - send update-ping easily with XMLRPC::Lite =head1 SYNOPSIS use XMLRPC::Lite::UpdatePing; my $your_rssfeeds = ( 'example1' => 'http://example.com/rss.xml', 'example2' => 'http://example.com/rss2', ); my $client = XMLRPC::Lite::UpdatePing->new; my $result = $client->ping($your_rssfeeds); =head1 DESCRIPTION XMLRPC::Lite::UpdatePing is a Perl modules that you can send update-ping to ping servers so easily. You can send update ping to the following ping servers by default. http://blogsearch.google.com/ping/RPC2 http://www.blogpeople.net/servlet/weblogUpdates http://rpc.technorati.com/rpc/ping If you want to send to others than those above, add ping server or set new list of ping servers. =item add_ping_server my $client = XMLRPC::Lite::UpdatePing->new; my $result = $client->add_ping_server('http://api.my.yahoo.com/RPC2') ->ping($your_rssfeeds); =item setup_ping_servers my $ping_servers = [ 'http://api.my.yahoo.com/RPC2', 'http://rpc.reader.livedoor.com/ping', 'http://r.hatena.ne.jp/rpc', ]; my $client = XMLRPC::Lite::UpdatePing->new; my $result = $client->setup_ping_servers($ping_servers) ->ping($your_rssfeeds); =head2 DEPENDENCIES XMLRPC::Lite =head1 SEE ALSO XMLRPC::Lite =head1 AUTHOR Kazuhiro Sera, Ewebmaster@seratch.ath.cxE =head1 COPYRIGHT AND LICENSE Copyright (C) 2008 by Kazuhiro Sera This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available. =cut