package Data::Feed::Parser::RSS;
use Any::Moose;
use Data::Feed;
use Data::Feed::RSS;
use Carp();
our $PARSER_CLASS;
BEGIN {
my @candidates = $ENV{DATA_FEED_RSS_PARSERS} ?
split(/\s+/, $ENV{DATA_FEED_RSS_PARSERS}) :
qw(XML::RSS::LibXML XML::RSS);
foreach my $module (@candidates) {
eval { Any::Moose::load_class($module) };
warn if &Data::Feed::DEBUG && $@;
next if $@;
$PARSER_CLASS = $module;
last;
}
if (! $PARSER_CLASS) {
Carp::confess("Cannot find suitable parser class from @candidates");
}
}
with 'Data::Feed::Parser';
__PACKAGE__->meta->make_immutable;
no Any::Moose;
sub parse {
my ($self, $xmlref) = @_;
my $rss = $PARSER_CLASS->new();
$rss->parse($$xmlref);
return Data::Feed::RSS->new(feed => $rss);
}
1;
__END__
=head1 NAME
Data::Feed::Parser::RSS - Data::Feed RSS Parser
=head1 DESCRIPTION
Attempts to parse the given scalar reference (which should contain a valid
RSS xml), using either XML::RSS::LibXML or XML::RSS (whichever one that is
found first will be used)
As of this writing, XML::RSS has some limitations (particularly with enclosures)
so, it is best to stick with XML::RSS::LibXML as long as you have libxml2
and XML::LibXML installed in your system.
=head1 METHODS
=head2 parse
=cut