File Coverage

blib/lib/Novel/Robot.pm
Criterion Covered Total %
statement 28 65 43.0
branch 0 20 0.0
condition 2 6 33.3
subroutine 8 13 61.5
pod 0 6 0.0
total 38 110 34.5


line stmt bran cond sub pod time code
1             # ABSTRACT: download novel /bbs thread
2             package Novel::Robot;
3 3     3   221548 use strict;
  3         6  
  3         133  
4 3     3   19 use warnings;
  3         5  
  3         244  
5 3     3   2622 use utf8;
  3         1062  
  3         19  
6              
7 3     3   1912 use Novel::Robot::Parser;
  3         14  
  3         150  
8 3     3   1955 use Novel::Robot::Packer;
  3         22  
  3         185  
9             #use File::Copy;
10 3     3   33 use Encode::Locale;
  3         8  
  3         166  
11 3     3   19 use Encode;
  3         7  
  3         4293  
12              
13             our $VERSION = 0.45;
14              
15             sub new {
16 2     2 0 970539 my ( $self, %opt ) = @_;
17 2   50     18 $opt{max_process_num} ||= 3;
18 2   50     15 $opt{type} ||= 'html';
19              
20 2         21 my $parser = Novel::Robot::Parser->new( %opt );
21 2         25 my $packer = Novel::Robot::Packer->new( %opt );
22 2         38 my $browser = $parser->{browser};
23 2         21 bless { %opt, parser => $parser, packer => $packer, browser => $browser },
24             __PACKAGE__;
25             }
26              
27             sub set_parser {
28 0     0 0   my ( $self, $site ) = @_;
29 0           $self->{site} = $self->{parser}->detect_site( $site );
30 0           $self->{parser} = Novel::Robot::Parser->new( %$self );
31 0           return $self;
32             }
33              
34             sub set_packer {
35 0     0 0   my ( $self, $type ) = @_;
36 0           $self->{type} = $type;
37 0           $self->{packer} = Novel::Robot::Packer->new( %$self );
38 0           return $self;
39             }
40              
41             sub get_page {
42 0     0 0   my ( $self, $page_url, %o ) = @_;
43              
44 0           my $page_ref = $self->{parser}->get_page_ref( $page_url, %o );
45              
46 0           my $dst_f = $self->{packer}->main( $page_ref, \%o );
47 0           my $dst_fname = decode(locale=>$dst_f);
48 0 0         print encode(locale=>"info: $page_ref->{writer}-$page_ref->{book}-1\noutput: $dst_fname\nlast_item_num: 1\n") if ( $o{verbose} );
49            
50 0 0         return wantarray ? ( $dst_f, $page_ref ) : $dst_f;
51             }
52              
53             sub get_novel {
54 0     0 0   my ( $self, $index_url, %o ) = @_;
55              
56 0           my $novel_ref = $self->{parser}->get_novel_ref( $index_url, %o );
57 0 0         return unless ( $novel_ref );
58 0 0         return unless ( @{ $novel_ref->{item_list} } );
  0            
59 0 0         return unless ( grep { $_->{content} } @{ $novel_ref->{item_list} } );
  0            
  0            
60              
61 0           while( ! $novel_ref->{item_list}[-1]{content}){
62 0           pop @{$novel_ref->{item_list}};
  0            
63             }
64              
65             my $last_item_num =
66 0           scalar( @{ $novel_ref->{item_list} } ) > 0
67             ? $novel_ref->{item_list}[-1]{id}
68 0 0 0       : ( $novel_ref->{item_num} || scalar( @{ $novel_ref->{item_list} } ) );
69              
70 0           my $dst_f = $self->{packer}->main( $novel_ref, \%o );
71 0           my $dst_fname = decode(locale=>$dst_f);
72 0 0         print encode(locale=>"info: $novel_ref->{writer}-$novel_ref->{book}-$last_item_num\noutput: $dst_fname\nlast_item_num: $last_item_num\n") if ( $o{verbose} );
73            
74 0 0         return wantarray ? ( $dst_f, $novel_ref ) : $dst_f;
75             } ## end sub get_novel
76              
77              
78             sub split_index {
79 0     0 0   my $s = $_[-1];
80 0 0         return ( $s, $s ) if ( $s =~ /^\d+$/ );
81 0 0         if ( $s =~ /^\d*-\d*$/ ) {
82 0           my ( $min, $max ) = split '-', $s;
83 0           return ( $min, $max );
84             }
85 0           return;
86             }
87              
88             1;
89