summaryrefslogtreecommitdiffstats
path: root/lib/Crawl/Bot/Role/RSS.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Crawl/Bot/Role/RSS.pm')
-rw-r--r--lib/Crawl/Bot/Role/RSS.pm70
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;