From 4ccef75442e9b56054b2c7929542e422ee5d89f2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 12 Feb 2010 19:31:21 -0600 Subject: better error handling --- lib/Crawl/Bot/Plugin/Wiki.pm | 10 ++++++---- lib/Crawl/Bot/Role/RSS.pm | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/Crawl/Bot/Plugin/Wiki.pm b/lib/Crawl/Bot/Plugin/Wiki.pm index 44765d5..66394c2 100644 --- a/lib/Crawl/Bot/Plugin/Wiki.pm +++ b/lib/Crawl/Bot/Plugin/Wiki.pm @@ -3,6 +3,7 @@ use Moose; extends 'Crawl::Bot::Plugin'; use XML::RPC; +use Try::Tiny; has xmlrpc_location => ( is => 'ro', @@ -31,16 +32,17 @@ sub tick { my $xmlrpc = XML::RPC->new($self->xmlrpc_location); warn "Getting recent wiki changes..."; - my $changes = $xmlrpc->call('wiki.getRecentChanges', $last_checked); + my $changes = try { $xmlrpc->call('wiki.getRecentChanges', $last_checked) } catch { warn $_ }; # ->call returns a hashref with error info on failure return unless ref($changes) eq 'ARRAY'; for my $change (@$changes) { warn "Page $change->{name} changed"; - my $history = $xmlrpc->call('wiki.getPageVersions', $change->{name}, 0); - next if @$history; + my $history = try { $xmlrpc->call('wiki.getPageVersions', $change->{name}, 0) } catch { warn $_ }; + next if !defined($history) || @$history; warn "Page $change->{name} is new!"; my $name = $change->{name}; - my $page = $xmlrpc->call('wiki.getPage', $change->{name}); + my $page = try { $xmlrpc->call('wiki.getPage', $change->{name}) } catch { warn $_ }; + next unless $page; if ($page =~ /(===?=?=?=?) (.*) \1/) { $name = $2; } diff --git a/lib/Crawl/Bot/Role/RSS.pm b/lib/Crawl/Bot/Role/RSS.pm index 8576a82..7a0177e 100644 --- a/lib/Crawl/Bot/Role/RSS.pm +++ b/lib/Crawl/Bot/Role/RSS.pm @@ -2,6 +2,7 @@ package Crawl::Bot::Role::RSS; use Moose::Role; use XML::RAI; +use Try::Tiny; with 'Crawl::Bot::Role::CachedItems'; @@ -9,7 +10,8 @@ requires 'rss_feed'; sub current_items { my $self = shift; - my $rss = XML::RAI->parse_uri($self->rss_feed); + my $rss = try { XML::RAI->parse_uri($self->rss_feed) } catch { warn $_ }; + return unless ref($rss) eq 'ARRAY'; # after the XML::RAI object goes out of scope, the item objects become # worthless. how dumb. capture the relevant data in some hashrefs instead. return map { -- cgit v1.2.3-54-g00ecf