-# $Id: RSS.pm 1934 2006-04-22 05:13:55Z btrott $
+# $Id$
package XML::Feed::Format::RSS;
use strict;
our $PREFERRED_PARSER = "XML::RSS";
+
+sub identify {
+ my $class = shift;
+ my $xml = shift;
+ my $tag = $class->_get_first_tag($xml);
+ return ($tag eq 'rss' || $tag eq 'RDF');
+}
+
sub init_empty {
my ($feed, %args) = @_;
$args{'version'} ||= '2.0';
my($str) = @_;
$feed->init_empty;
if ($str) {
- $feed->{rss}->parse($$str);
+ $feed->{rss}->parse($$str, { hashrefs_instead_of_strings => 1 } );
}
$feed;
}
my @entries;
for my $item (@{ $rss->{items} }) {
push @entries, XML::Feed::Entry::Format::RSS->wrap($item);
+ $entries[-1]->{_version} = $rss->{'version'};
}
@entries;
}
package XML::Feed::Entry::Format::RSS;
use strict;
+sub format { 'RSS ' . $_[0]->{'_version'} }
+
use XML::Feed::Content;
use base qw( XML::Feed::Entry );
}
sub category {
- my $item = shift->{entry};
+ my $entry = shift;
+ my $item = $entry->{entry};
if (@_) {
- $item->{category} = $item->{dc}{subject} = $_[0];
+ my @tmp = ($entry->category, @_);
+ $item->{category} = [@tmp];
+ $item->{dc}{subject} = [@tmp];
} else {
- $item->{category} || $item->{dc}{subject};
+ my $r = $item->{category} || $item->{dc}{subject};
+ my @r = ref($r) eq 'ARRAY' ? @$r : defined $r? ($r) : ();
+ return wantarray? @r : $r[0];
}
}
sub lat {
my $item = shift->{entry};
if (@_) {
- $item->{geo}{lat} = $_[0];
+ $item->{geo}{lat} = $_[0];
} else {
- return $item->{geo}{lat};
+ return $item->{geo}{lat};
}
}
sub long {
my $item = shift->{entry};
if (@_) {
- $item->{geo}{long} = $_[0];
+ $item->{geo}{long} = $_[0];
} else {
- return $item->{geo}{long};
+ return $item->{geo}{long};
}
}