diff options
author | Jesse Luehrs <doy@tozt.net> | 2009-11-30 20:03:13 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2009-11-30 20:16:47 -0600 |
commit | 7986f17cdffbafa62209796de502e20832be3afb (patch) | |
tree | 58d0a3b920549a19dc5534f0ab68cca597bd4f2c /lib/Crawl/Bot/Role/RSS.pm | |
parent | 3759f6d531e0439d1f3673352943f79fa8578d3e (diff) | |
download | crawlbot-7986f17cdffbafa62209796de502e20832be3afb.tar.gz crawlbot-7986f17cdffbafa62209796de502e20832be3afb.zip |
further factor out the caching from the RSS role
Diffstat (limited to 'lib/Crawl/Bot/Role/RSS.pm')
-rw-r--r-- | lib/Crawl/Bot/Role/RSS.pm | 70 |
1 files changed, 4 insertions, 66 deletions
diff --git a/lib/Crawl/Bot/Role/RSS.pm b/lib/Crawl/Bot/Role/RSS.pm index c2a3f16..8470eee 100644 --- a/lib/Crawl/Bot/Role/RSS.pm +++ b/lib/Crawl/Bot/Role/RSS.pm @@ -1,80 +1,18 @@ package Crawl::Bot::Role::RSS; use Moose::Role; -use autodie; -use File::Spec; use XML::RAI; -requires 'data_dir', 'rss_item_to_id', 'rss_feed'; +with 'Crawl::Bot::Role::CachedItems'; -has rss_items => ( - traits => ['Hash'], - isa => 'HashRef', - builder => '_build_rss_items', - handles => { - has_rss_item => 'exists', - rss_items => 'keys', - _add_rss_item => 'set', - }, -); +requires 'rss_feed'; -sub _build_rss_items { +sub current_items { my $self = shift; - warn "Loading RSS cache for " . blessed($self); - my $file = $self->rss_cache_file; - my %items; - if (-r $file) { - open my $fh, '<', $file; - while (<$fh>) { - chomp; - $items{$_} = 1; - } - } - else { - $self->each_rss_item(sub { - my $item = shift; - my $id = $self->rss_item_to_id($item); - $items{$id} = 1; - }); - } - warn "Done loading"; - \%items; -} - -sub add_rss_item { - my $self = shift; - $self->_add_rss_item($_[0], 1); -} - -sub each_rss_item { - my $self = shift; - my ($code) = @_; my $rss = XML::RAI->parse_uri($self->rss_feed); - for my $item (@{ $rss->items }) { - $code->($item); - } -} - -sub save_rss_cache { - my $self = shift; - open my $fh, '>', $self->rss_cache_file; - $fh->print("$_\n") for $self->rss_items; + return @{ $rss->items }; } -sub rss_cache_file { - my $self = shift; - my $class = blessed($self); - (my $plugin = $class) =~ s/^Crawl::Bot::Plugin:://; - $plugin = lc($plugin); - my $file = "${plugin}_rss_cache"; - return File::Spec->catfile($self->data_dir, $file); -} - -after BUILDALL => sub { - my $self = shift; - $self->save_rss_cache; -}; - no Moose::Role; 1; |