Bump version and update Changes
[webservice-tdwtf.git] / lib / WebService / TDWTF / Article.pm
1 package WebService::TDWTF::Article;
2
3 use 5.014000;
4 use strict;
5 use warnings;
6 use parent qw/Class::Accessor::Fast/;
7
8 our $VERSION = '0.002';
9
10 use WebService::TDWTF ();
11
12 sub _article { goto &WebService::TDWTF::article }
13
14 __PACKAGE__->mk_ro_accessors(qw/Id Slug SummaryHtml BodyHtml FooterAdHtml Title CoalescedCommentCount DiscourseThreadUrl PublishedDate DisplayDate Url CommentsUrl PreviousArticleId PreviousArticleUrl NextArticleId NextArticleUrl/);
15
16 sub AuthorName { shift->{Author}->{Name} }
17 sub AuthorShortDescription { shift->{Author}->{ShortDescription} }
18 sub AuthorDescriptionHtml { shift->{Author}->{DescriptionHtml} }
19 sub AuthorSlug { shift->{Author}->{Slug} }
20 sub AuthorImageUrl { shift->{Author}->{ImageUrl} }
21
22 sub SeriesSlug { shift->{Series}->{Slug} }
23 sub SeriesTitle { shift->{Series}->{Title} }
24 sub SeriesDescription { shift->{Series}->{Description} }
25
26 sub PreviousArticle { _article shift->PreviousArticleId // return }
27 sub NextArticle { _article shift->NextArticleId // return }
28
29 sub Body {
30 unless ($_[0]->BodyHtml) {
31 my $ret = _article $_[0]->Id, 1;
32 $_[0]->{$_} = $ret->{$_} for qw/BodyHtml FooterAdHtml/;
33 }
34 $_[0]->BodyHtml
35 }
36
37 1;
38 __END__
39
40 =encoding utf-8
41
42 =head1 NAME
43
44 WebService::TDWTF::Article - Class representing information about a TDWTF article
45
46 =head1 SYNOPSIS
47
48 use WebService::TDWTF;
49 my $article = tdwtf_article 8301;
50
51 say $article->Id; # 8301
52 say $article->Slug; # your-recommended-virus
53 say $article->SummaryHtml;
54 say $article->BodyHtml;
55 say $article->Body;
56 say $article->Title; # Your Recommended Virus
57 say $article->CoalescedCommentCount;
58 say $article->DiscourseThreadUrl; # http://what.thedailywtf.com/t/your-recommended-virus/52541
59 say $article->PublishedDate; # 2015-11-12T06:30:00
60 say $article->DisplayDate; # 2015-11-12
61 say $article->Url; # http://thedailywtf.com/articles/your-recommended-virus
62 say $article->CommentsUrl; # http://thedailywtf.com/articles/comments/your-recommended-virus
63 say $article->PreviousArticleId; # 8299
64 say $article->PreviousArticleUrl; # //thedailywtf.com/articles/confession-rect-contains-point
65 say $article->NextArticleId; # 8302
66 say $article->NextArticleUrl; # //thedailywtf.com/articles/who-stole-the-search-box
67
68 say $article->AuthorName; # Ellis Morning
69 say $article->AuthorShortDescription; # Editor
70 say $article->AuthorDescriptionHtml;
71 say $article->AuthorSlug; # ellis-morning
72 say $article->AuthorImageUrl; # http://img.thedailywtf.com/images/remy/ellis01.jpg
73
74 say $article->SeriesSlug; # feature-articles
75 say $article->SeriesTitle; # Feature Articles
76 say $article->SeriesDescription;
77
78 say $article->PreviousArticle->Title # Confession: rect.Contains(point)
79 say $article->NextArticle->Title # Who Stole the Search Box?!
80
81 =head1 DESCRIPTION
82
83 A WebService::TDWTF::Article object represents an article on
84 L<http://thedailywtf.com>. Objects of this class are returned by the
85 functions in L<WebService::TDWTF>. Each such object is guaranteed to
86 be a blessed hashref corresponding to the JSON returned by the TDWTF
87 API (possibly with some extra keys), so the data inside can be
88 obtained by simply dereferencing the object.
89
90 The ArticleModel class in the TDWTF source code might be helpful in
91 finding the available attributes and understanding their meaning. It
92 can be found here:
93 L<https://github.com/tdwtf/WtfWebApp/blob/master/TheDailyWtf/Models/ArticleModel.cs>
94
95 Several accessors and convenience functions are provided for accessing
96 the most common attributes. See the SYNOPSIS for usage examples.
97
98 =over
99
100 =item B<Id>
101
102 The numerical ID of the article.
103
104 =item B<Slug>
105
106 The string ID of the article.
107
108 =item B<Title>
109
110 The title of the article
111
112 =item B<Url>
113
114 URL of the article itself.
115
116 =item B<SummaryHtml>
117
118 The summary (first 1-2 paragraphs) of the article.
119
120 =item B<BodyHtml>
121
122 The body of the article. If the object comes from a tdwtf_list_* function, this method returns "".
123
124 =item B<Body>
125
126 The body of the article. If the object comes from a tdwtf_list_* function, this method retreives the body from the server, saves it in the object and returns it.
127
128 =item B<FooterAdHtml>
129
130 The advertisment in the footer of the article. If the object comes from a list_ function, this method returns "".
131
132 =item B<CoalescedCommentCount>
133
134 The number of comments of the article.
135
136 =item B<CommentsUrl>
137
138 URL to the featured comments list. See DiscourseThreadUrl for the URL to the full comment thread.
139
140 =item B<DiscourseThreadUrl>
141
142 URL of the full comment thread on what.thedailywtf.com.
143
144 =item B<PublishedDate>
145
146 Date and time when the article was published in ISO 8601 format, with no timezone.
147
148 =item B<DisplayDate>
149
150 Date when the article was published in ISO 8601 format, with no timezone.
151
152 =item B<AuthorName>
153
154 Name of the article's author.
155
156 =item B<AuthorShortDescription>
157
158 A one-line description of the article's author.
159
160 =item B<AuthorDescriptionHtml>
161
162 A longer description of the article's author.
163
164 =item B<AuthorSlug>
165
166 The ID of the article's author, suitable for passing to the tdwtf_list_author function of L<WebService::TDWTF>.
167
168 =item B<AuthorImageUrl>
169
170 URL to an image of the article's author.
171
172 =item B<SeriesSlug>
173
174 The ID of the article's series, suitable for passing to the tdwtf_list_series function of L<WebService::TDWTF>
175
176 =item B<SeriesTitle>
177
178 The name of the article's series.
179
180 =item B<SeriesDescription>
181
182 A description of the article's series.
183
184 =item B<PreviousArticleId>
185
186 The numerical ID of the previous article.
187
188 =item B<PreviousArticleUrl>
189
190 URL of the previous article.
191
192 =item B<PreviousArticle>
193
194 Retrieves the previous article using L<WebService::TDWTF> and returns it as a WebService::TDWTF::Article object.
195
196 =item B<NextArticleId>
197
198 The numerical ID of the next article.
199
200 =item B<NextArticleUrl>
201
202 URL of the next article.
203
204 =item B<NextArticle>
205
206 Retrieves the next article using L<WebService::TDWTF> and returns it as a WebService::TDWTF::Article object.
207
208 =back
209
210 =head1 AUTHOR
211
212 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
213
214 =head1 COPYRIGHT AND LICENSE
215
216 Copyright (C) 2016 by Marius Gavrilescu
217
218 This library is free software; you can redistribute it and/or modify
219 it under the same terms as Perl itself, either Perl version 5.20.2 or,
220 at your option, any later version of Perl 5 you may have available.
221
222
223 =cut
This page took 0.030429 seconds and 4 git commands to generate.