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