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