Misnamed
[catagits/XML-Feed.git] / lib / XML / Feed / Entry.pm
CommitLineData
23103173 1# $Id: Entry.pm 1872 2005-08-12 04:28:42Z btrott $
0d5e38d1 2
3package XML::Feed::Entry;
4use strict;
973e1f9e 5use base qw( Class::ErrorHandler );
6
566afdf5 7use Scalar::Util qw( blessed );
8
973e1f9e 9use Carp;
0d5e38d1 10
11sub wrap {
12 my $class = shift;
13 my($item) = @_;
14 bless { entry => $item }, $class;
15}
16
973e1f9e 17sub unwrap { $_[0]->{entry} }
18
19sub new {
20 my $class = shift;
21 my($format) = @_;
22 $format ||= 'Atom';
23 my $format_class = 'XML::Feed::' . $format;
24 eval "use $format_class";
25 Carp::croak("Unsupported format $format: $@") if $@;
26 my $entry = bless {}, join('::', __PACKAGE__, $format);
27 $entry->init_empty or return $class->error($entry->errstr);
28 $entry;
29}
30
31sub init_empty { 1 }
32
33sub convert {
34 my $entry = shift;
35 my($format) = @_;
36 my $new = __PACKAGE__->new($format);
9a36f82c 37 for my $field (qw( title link content summary category author id issued modified lat long )) {
23103173 38 my $val = $entry->$field();
39 next unless defined $val;
566afdf5 40 next if blessed $val && $val->isa('XML::Feed::Content') && ! defined $val->body;
23103173 41 $new->$field($val);
973e1f9e 42 }
43 $new;
44}
45
0d5e38d1 46sub title;
47sub link;
48sub content;
49sub summary;
50sub category;
51sub author;
52sub id;
53sub issued;
54sub modified;
9a36f82c 55sub lat;
56sub long;
0d5e38d1 57
581;
59__END__
60
61=head1 NAME
62
63XML::Feed::Entry - Entry/item in a syndication feed
64
65=head1 SYNOPSIS
66
67 ## $feed is an XML::Feed object.
68 for my $entry ($feed->entries) {
69 print $entry->title, "\n", $entry->summary, "\n\n";
70 }
71
72=head1 DESCRIPTION
73
74I<XML::Feed::Entry> represents an entry/item in an I<XML::Feed> syndication
75feed.
76
77=head1 USAGE
78
973e1f9e 79=head2 XML::Feed::Entry->new($format)
80
81Creates a new I<XML::Feed::Entry> object in the format I<$format>, which
82should be either I<RSS> or I<Atom>.
83
84=head2 $entry->convert($format)
85
86Converts the I<XML::Feed::Entry> object into the I<$format> format, and
87returns the new object.
88
89=head2 $entry->title([ $title ])
0d5e38d1 90
91The title of the entry.
92
973e1f9e 93=head2 $entry->link([ $uri ])
0d5e38d1 94
95The permalink of the entry, in most cases, except in cases where it points
fe71566d 96instead to an offsite URI referenced in the entry.
0d5e38d1 97
973e1f9e 98=head2 $entry->content([ $content ])
0d5e38d1 99
a749d9b9 100Bn I<XML::Feed::Content> object representing the full entry body, or as
101much as is available in the feed.
0d5e38d1 102
103In RSS feeds, this method will look first for
104I<http://purl.org/rss/1.0/modules/content/#encoded> and
105I<http://www.w3.org/1999/xhtml#body> elements, then fall back to a
106I<E<lt>descriptionE<gt>> element.
107
973e1f9e 108=head2 $entry->summary([ $summary ])
0d5e38d1 109
a749d9b9 110An I<XML::Feed::Content> object representing a short summary of the entry.
111Possibly.
0d5e38d1 112
113Since RSS feeds do not have the idea of a summary separate from the entry
a749d9b9 114body, this may not always be what you want. If the entry contains both a
115I<E<lt>descriptionE<gt>> element B<and> another element typically used for
116the full content of the entry--either I<http://www.w3.org/1999/xhtml/body>
117or I<http://purl.org/rss/1.0/modules/content/#encoded>--we treat that as
118the summary. Otherwise, we assume that there isn't a summary, and return
119an I<XML::Feed::Content> object with an empty string in the I<body>.
0d5e38d1 120
973e1f9e 121=head2 $entry->category([ $category ])
0d5e38d1 122
123The category in which the entry was posted.
124
973e1f9e 125=head2 $entry->author([ $author ])
0d5e38d1 126
127The name or email address of the person who posted the entry.
128
973e1f9e 129=head2 $entry->id([ $id ])
0d5e38d1 130
131The unique ID of the entry.
132
973e1f9e 133=head2 $entry->issued([ $issued ])
0d5e38d1 134
135A I<DateTime> object representing the date and time at which the entry
136was posted.
137
973e1f9e 138If present, I<$issued> should be a I<DateTime> object.
139
140=head2 $entry->modified([ $modified ])
0d5e38d1 141
142A I<DateTime> object representing the last-modified date of the entry.
143
973e1f9e 144If present, I<$modified> should be a I<DateTime> object.
145
0d5e38d1 146=head1 AUTHOR & COPYRIGHT
147
148Please see the I<XML::Feed> manpage for author, copyright, and license
149information.
150
151=cut