## The following elements are the same in all versions of RSS.
sub title { shift->{rss}->channel('title', @_) }
-sub link { shift->{rss}->channel('link', @_) }
+sub link {
+ my $link = shift->{rss}->channel('link', @_);
+ $link =~ s/^\s+//;
+ $link =~ s/\s+$//;
+ return $link;
+}
sub description { shift->{rss}->channel('description', @_) }
sub updated { shift->modified(@_) }
my $date;
eval {
if (my $ts = $rss->channel('pubDate')) {
+ $ts =~ s/^\s+//;
+ $ts =~ s/\s+$//;
$date = DateTime::Format::Mail->parse_datetime($ts);
} elsif ($ts = $rss->channel->{dc}{date}) {
+ $ts =~ s/^\s+//;
+ $ts =~ s/\s+$//;
$date = DateTime::Format::W3CDTF->parse_datetime($ts);
}
};
## For RSS 2.0 output from XML::RSS. Sigh.
$entry->{entry}{permaLink} = $_[0];
} else {
- $entry->{entry}{link} ||
- $entry->{entry}{permaLink} ||
- $entry->{entry}{guid};
+ my $link = $entry->{entry}{link} ||
+ $entry->{entry}{permaLink} ||
+ $entry->{entry}{guid};
+ if (defined $link) {
+ $link =~ s/^\s+//;
+ $link =~ s/\s+$//;
+ }
+ return $link;
}
}
if (my $ts = $item->{pubDate}) {
my $parser = DateTime::Format::Mail->new;
$parser->loose;
+ $ts =~ s/^\s+//;
+ $ts =~ s/\s+$//;
$date = $parser->parse_datetime($ts);
} elsif ($ts = $item->{dc}{date} or $ts = $item->{dcterms}{date}) {
- $date = DateTime::Format::W3CDTF->parse_datetime($ts);
+ $ts =~ s/^\s+//;
+ $ts =~ s/\s+$//;
+ $date = DateTime::Format::W3CDTF->parse_datetime($ts);
}
};
return $date;
$item->{dcterms}{modified} =
DateTime::Format::W3CDTF->format_datetime($_[0]);
} else {
- if (my $ts = $item->{dcterms}{modified} || $item->{'http://www.w3.org/2005/Atom'}{updated}) {
+ if (my $ts = $item->{dcterms}{modified} ||
+ $item->{'http://www.w3.org/2005/Atom'}{updated}) {
+ $ts =~ s/^\s+//;
+ $ts =~ s/\s+$//;
return eval { DateTime::Format::W3CDTF->parse_datetime($ts) } || eval { XML::Atom::Util::iso2dt($ts) };
}
}