Load XML-Feed-0.03 into trunk.
[catagits/XML-Feed.git] / lib / XML / Feed / Atom.pm
CommitLineData
a749d9b9 1# $Id: Atom.pm,v 1.2 2004/06/20 15:20:37 btrott Exp $
0d5e38d1 2
3package XML::Feed::Atom;
4use strict;
5
6use base qw( XML::Feed );
7use XML::Atom::Feed;
8use XML::Atom::Util qw( iso2dt );
9use List::Util qw( first );
10
11sub init_string {
12 my $feed = shift;
13 my($str) = @_;
14 $feed->{atom} = XML::Atom::Feed->new(Stream => \$str)
15 or return $feed->error(XML::Atom::Feed->errstr);
16 $feed;
17}
18
19sub format { 'Atom' }
20
21sub title { $_[0]->{atom}->title }
22sub link {
23 my $l = first { $_->rel eq 'alternate' } $_[0]->{atom}->link;
24 $l ? $l->href : undef;
25}
26sub description { $_[0]->{atom}->tagline }
27sub copyright { $_[0]->{atom}->copyright }
28sub language { $_[0]->{atom}->language }
29sub generator { $_[0]->{atom}->generator }
30sub author { $_[0]->{atom}->author ? $_[0]->{atom}->author->name : undef }
31sub modified { iso2dt($_[0]->{atom}->modified) }
32
33sub entries {
34 my @entries;
35 for my $entry ($_[0]->{atom}->entries) {
36 push @entries, XML::Feed::Atom::Entry->wrap($entry);
37 }
38 @entries;
39}
40
41package XML::Feed::Atom::Entry;
42use strict;
43
44use base qw( XML::Feed::Entry );
45use XML::Atom::Util qw( iso2dt );
a749d9b9 46use XML::Feed::Content;
0d5e38d1 47use List::Util qw( first );
48
49sub title { $_[0]->{entry}->title }
50sub link {
51 my $l = first { $_->rel eq 'alternate' } $_[0]->{entry}->link;
52 $l ? $l->href : undef;
53}
a749d9b9 54
55sub summary {
56 XML::Feed::Content->wrap({ type => 'text/html',
57 body => $_[0]->{entry}->summary });
58}
59
60sub content {
61 my $c = $_[0]->{entry}->content;
62 XML::Feed::Content->wrap({ type => $c ? $c->type : undef,
63 body => $c ? $c->body : undef });
64}
0d5e38d1 65
66sub category {
67 my $ns = XML::Atom::Namespace->new(dc => 'http://purl.org/dc/elements/1.1/');
68 $_[0]->{entry}->get($ns, 'subject');
69}
70
71sub author { $_[0]->{entry}->author ? $_[0]->{entry}->author->name : undef }
72sub id { $_[0]->{entry}->id }
73sub issued { iso2dt($_[0]->{entry}->issued) }
74sub modified { iso2dt($_[0]->{entry}->modified) }
75
761;