How NOT to do it
file: code/BadExample/FindNewSeries.pm
1: package FindNewSeries;
2: use 5.014;
3: use Moose;
4: use namespace::autoclean;
5:
6: use LWP::UserAgent;
7: use XML::Feed;
8: use Number::Format;
9: use Template;
10:
11: sub run {
12: my ($self) = @_;
13: my $html = $self->fetch;
14: my $data = $self->find($html);
15: $self->write($data);
16: }
17:
18: sub fetch {
19: my ($self) = @_;
20:
21: my $ua = LWP::UserAgent->new(
22: agent => 'domms new series finder',
23: timeout => 5,
24: );
25: my $res = $ua->get('http://www.ezrss.it/feed');
26: if ( $res->is_success ) {
27: return $res->decoded_content;
28: }
29: else {
30: die $res->status_line;
31: }
32: }
33:
34: sub find {
35: my ( $self, $html ) = @_;
36: my @data;
37: my $formatter = Number::Format->new;
38: my $feed = XML::Feed->parse( \$html );
39: foreach my $item ( $feed->entries ) {
40: next unless $item->title =~ /\s1x1\s/ || $item->title =~ /s01e01/i;
41: next if $item->enclosure->length > 800_000_000;
42: next if $item->title =~ /720p/i;
43: push(
44: @data,
45: {
46: title => $item->title,
47: size => $formatter->format_bytes( $item->enclosure->length ),
48: url => $item->enclosure->url,
49: }
50: );
51: }
52: return \@data if @data;
53: }
54:
55: sub write {
56: my ( $self, $data ) = @_;
57:
58: my $tt = Template->new( INCLUDE_PATH => $FindBin::Bin . '/../tt/', );
59: my $out;
60: $tt->process( 'new_series.tt', { data => $data }, \$out )
61: || die $tt->error();
62: return $out;
63: }
64:
65: __PACKAGE__->meta->make_immutable;
66: 1;