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