File Coverage

blib/lib/XMLRPC/Lite/UpdatePing.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package XMLRPC::Lite::UpdatePing;
2              
3 1     1   26286 use strict;
  1         3  
  1         41  
4 1     1   6 use vars qw($VERSION);
  1         2  
  1         70  
5             our $VERSION = '0.06';
6              
7 1     1   22102 use Encode;
  1         14421  
  1         114  
8 1     1   503 use XMLRPC::Lite;
  0            
  0            
9              
10             sub new {
11             my $class = shift;
12             bless { ping_servers => [
13             'http://blogsearch.google.com/ping/RPC2',
14             'http://www.blogpeople.net/servlet/weblogUpdates',
15             'http://rpc.technorati.com/rpc/ping',
16             ], }, $class;
17             }
18              
19             sub ping_servers {
20             my $self = shift;
21             return $self->{ping_servers};
22             }
23              
24             sub add_ping_server {
25             my $self = shift;
26             my $new_ping_server = shift;
27             push @{$self->{ping_servers}}, $new_ping_server;
28             return $self;
29             }
30              
31             sub setup_ping_servers {
32             my $self = shift;
33             $self->{ping_servers} = shift;
34             return $self;
35             }
36              
37             sub ping {
38             my $self = shift;
39             my $feed_uris = shift;
40             my ($all_res, $recent_res) = ('', '');
41             for my $feed_name ( keys %{$feed_uris} ) {
42             for my $ping_server_uri (@{$self->ping_servers}) {
43             $recent_res = &_send_ping(
44             rpc => $ping_server_uri,
45             site_name => encode('eucjp', $feed_name),
46             feed_uri => $$feed_uris{$feed_name},
47             );
48             $all_res .= &_as_string($recent_res) if defined $recent_res;
49             }
50             }
51             return $all_res;
52             }
53              
54             sub _send_ping {
55             my %arg = @_;
56             my $rpc_uri = $arg{rpc};
57             my $site_name = $arg{site_name};
58             my $feed_uri = $arg{feed_uri};
59              
60             if ( ! defined $rpc_uri || $rpc_uri !~ m/^http/ ) {
61             return { flerror => 0,
62             message => 'local echo mode',
63             name => $site_name,
64             uri => $feed_uri, };
65             }
66              
67             my $result = eval {
68             XMLRPC::Lite->proxy($rpc_uri)
69             ->call( 'weblogUpdates.ping', $site_name, $feed_uri, )
70             ->result ;
71             };
72             return $@ if $@;
73              
74             return (defined $result) ? $result : { 'flerror' => 'none', 'message' => 'none' };
75             }
76              
77             sub _as_string {
78             my $input = shift;
79             if (not ref $input) {
80             return $input;
81             } elsif (ref $input eq 'SCALAR') {
82             return $$input;
83             } elsif (ref $input eq 'ARRAY') {
84             return join("
\n", @$input);
85             } elsif (ref $input eq 'HASH') {
86             my $return = '';
87             for my $key (sort keys %$input) {
88             $return .= "$key => $input->{$key}
\n";
89             }
90             return $return;
91             } else {
92             return 'unknown data format';
93             }
94             }
95              
96             1;
97              
98             __END__