From 18024785860020d83b14b686c47ad7ef455f0da7 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 9 Dec 2012 12:43:09 +0000 Subject: sample structure --- feeder.pl | 15 +++++++++++++ lib/Feed.pm | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/Feed/Printer.pm | 23 ++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 feeder.pl create mode 100644 lib/Feed.pm create mode 100644 lib/Feed/Printer.pm diff --git a/feeder.pl b/feeder.pl new file mode 100644 index 0000000..61f73be --- /dev/null +++ b/feeder.pl @@ -0,0 +1,15 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.016; +use Feed; + +my $feed_class = Feed->with_traits('Feed::Printer'); +sub feed { + my (%args) = @_; + my $feed = $feed_class->new(%args); + $feed->process; +} + +feed(uri=>'http://www.gentoo.org/rdf/en/gentoo-news.rdf'); +feed(uri=>'http://feeds2.feedburner.com/sydneypadua/yBZX'); diff --git a/lib/Feed.pm b/lib/Feed.pm new file mode 100644 index 0000000..d8c67a8 --- /dev/null +++ b/lib/Feed.pm @@ -0,0 +1,62 @@ +package Feed; +use Moose; +use namespace::autoclean; +use 5.016; +use MooseX::Types::URI 'Uri'; +with 'MooseX::Traits'; +use XML::Feed; + +has uri => ( + is => 'ro', + isa => Uri, + coerce => 1, + required => 1, +); + +has feed => ( + is => 'ro', + isa => 'XML::Feed', + lazy_build => 1, +); + +has _entries => ( + is => 'ro', + isa => 'ArrayRef[XML::Feed::Entry]', + traits => [ 'Array' ], + lazy_build => 1, + handles => { + entries => 'elements', + count_entries => 'count', + }, +); + +sub process { + my ($self) = @_; + + for my $entry ($self->entries) { + $self->process_entry($entry); + } + + return; +} + +sub _build_feed { + my ($self) = @_; + + return XML::Feed->parse($self->uri) + or die XML::Feed->errstr; +} + +sub _build__entries { + my ($self) = @_; + + + return [$self->feed->entries]; +} + +sub process_entry { +} + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Feed/Printer.pm b/lib/Feed/Printer.pm new file mode 100644 index 0000000..5743883 --- /dev/null +++ b/lib/Feed/Printer.pm @@ -0,0 +1,23 @@ +package Feed::Printer; +use Moose::Role; +use 5.016; +use namespace::autoclean; + +requires 'process'; + +before process => sub { + my ($self) = @_; + + say $self->feed->title; +}; + +sub process_entry { + my ($self,$entry) = @_; + + for my $f (qw(id title link issued modified)) { + say " $f:",$entry->$f//''; + } + say ''; +} + +1; -- cgit v1.2.3