package XMLRPC::Lite::UpdatePing;
use strict;
use vars qw($VERSION);
our $VERSION = '0.06';
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 = eval {
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->add_ping_server('http://rpc.reader.livedoor.com/ping')
->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
=head1 METHODS
=over 4
=item new()
my $client = XMLRPC::Lite::UpdatePing->new();
Create and return a new XMLRPC::Lite::UpdatePing object.
=item add_ping_server(I<$url>)
$client->add_ping_server('http://api.my.yahoo.com/RPC2');
Add a new ping server to the list of target ping servers and return self object.
=item setup_ping_servers(I<\@url>)
my $ping_servers = [ 'http://api.my.yahoo.com/RPC2',
'http://rpc.reader.livedoor.com/ping',
'http://r.hatena.ne.jp/rpc', ];
$client->setup_ping_servers($ping_servers);
Set a new list of ping servers instead of the default list and return self object.
=item ping(I<\%feed_url>)
my $result = $client->ping($your_rssfeeds);
Send update ping requests to the ping servers and return a result string.
=head1 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