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__ |