| blib/lib/Net/CDDBSearch.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 60 | 97 | 61.8 |
| branch | 12 | 42 | 28.5 |
| condition | 0 | 6 | 0.0 |
| subroutine | 13 | 15 | 86.6 |
| pod | 2 | 8 | 25.0 |
| total | 87 | 168 | 51.7 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | package Net::CDDBSearch; | ||||||
| 2 | |||||||
| 3 | require 5.005_62; | ||||||
| 4 | 1 | 1 | 827 | use strict; | |||
| 1 | 2 | ||||||
| 1 | 37 | ||||||
| 5 | |||||||
| 6 | 1 | 1 | 704 | use LWP::Simple; | |||
| 1 | 101932 | ||||||
| 1 | 9 | ||||||
| 7 | 1 | 1 | 419 | use URI::Escape; | |||
| 1 | 7 | ||||||
| 1 | 1275 | ||||||
| 8 | |||||||
| 9 | require Exporter; | ||||||
| 10 | |||||||
| 11 | our @ISA = qw/Exporter/; | ||||||
| 12 | |||||||
| 13 | our @EXPORT = qw//; | ||||||
| 14 | |||||||
| 15 | our @EXPORT_OK = qw/new get_albums_artist get_albums_album get_songs_album albums tracks info url/; | ||||||
| 16 | |||||||
| 17 | our $VERSION = '2.01'; | ||||||
| 18 | |||||||
| 19 | |||||||
| 20 | sub new { | ||||||
| 21 | 3 | 3 | 0 | 167 | my $class = shift; | ||
| 22 | 3 | 16 | my $self = { | ||||
| 23 | DEBUG => undef, | ||||||
| 24 | @_ | ||||||
| 25 | }; | ||||||
| 26 | 3 | 9 | bless($self, $class); | ||||
| 27 | 3 | 50 | 18 | $self ? return $self : return undef; | |||
| 28 | } | ||||||
| 29 | |||||||
| 30 | |||||||
| 31 | sub albums { | ||||||
| 32 | 2 | 2 | 1 | 9 | my $self = shift; | ||
| 33 | 2 | 9 | return $self->{ALBUMS}; | ||||
| 34 | } | ||||||
| 35 | |||||||
| 36 | |||||||
| 37 | sub tracks { | ||||||
| 38 | 1 | 1 | 0 | 7 | my $self = shift; | ||
| 39 | 1 | 4 | return $self->{TRACKS}; | ||||
| 40 | } | ||||||
| 41 | |||||||
| 42 | sub info { | ||||||
| 43 | 1 | 1 | 1 | 3 | my $self = shift; | ||
| 44 | 1 | 11 | return {'Title' => $self->{TITLE}, | ||||
| 45 | 'Artist' => $self->{ARTIST}, | ||||||
| 46 | 'Year' => $self->{YEAR}, | ||||||
| 47 | 'Genre' => $self->{GENRE}, | ||||||
| 48 | 'Tracks' => $self->{TRACKN}, | ||||||
| 49 | 'Time' => $self->{TIME}}; | ||||||
| 50 | } | ||||||
| 51 | |||||||
| 52 | |||||||
| 53 | sub url { | ||||||
| 54 | 0 | 0 | 0 | 0 | my $self = shift; | ||
| 55 | 0 | 0 | my $line = lc(shift); | ||||
| 56 | |||||||
| 57 | 0 | 0 | 0 | if($self->{TYPE} eq 'artist') { | |||
| 0 | |||||||
| 58 | 0 | 0 | foreach (keys %{$self->{ALBUMS}}) { | ||||
| 0 | 0 | ||||||
| 59 | 0 | 0 | 0 | 0 | return $_ if (lc($self->{ALBUMS}->{$_}[0]) eq lc($self->{QUERY}) && lc($self->{ALBUMS}->{$_}[1]) eq $line); | ||
| 60 | } | ||||||
| 61 | } elsif($self->{TYPE} eq 'disc') { | ||||||
| 62 | 0 | 0 | foreach (keys %{$self->{ALBUMS}}) { | ||||
| 0 | 0 | ||||||
| 63 | 0 | 0 | 0 | 0 | return $_ if (lc($self->{ALBUMS}->{$_}[1]) eq lc($self->{QUERY}) && lc($self->{ALBUMS}->{$_}[0]) eq $line); | ||
| 64 | } | ||||||
| 65 | } | ||||||
| 66 | 0 | 0 | return undef; | ||||
| 67 | } | ||||||
| 68 | |||||||
| 69 | |||||||
| 70 | sub get_albums_artist { | ||||||
| 71 | 1 | 1 | 0 | 6 | my $self = shift; | ||
| 72 | 1 | 2 | $self->{QUERY}= shift; | ||||
| 73 | |||||||
| 74 | 1 | 50 | 4 | if ($self->{QUERY}) { | |||
| 75 | 1 | 7 | $self->{URL} = uri_escape($self->{QUERY}); | ||||
| 76 | 1 | 37 | $self->{ERROR} = undef; | ||||
| 77 | 1 | 3 | $self->{TYPE} = 'artist'; | ||||
| 78 | 1 | 50 | 4 | print "$self >> Calling _get_albums();\n" if $self->{DEBUG}; | |||
| 79 | 1 | 5 | $self = _get_albums($self); | ||||
| 80 | 1 | 50 | 8 | defined $self->{ERROR} ? return undef : return $self; | |||
| 81 | } | ||||||
| 82 | 0 | 0 | $self->{ERROR} = 'No query provided'; | ||||
| 83 | 0 | 0 | return undef; | ||||
| 84 | } | ||||||
| 85 | |||||||
| 86 | sub get_albums_album { | ||||||
| 87 | 1 | 1 | 0 | 2 | my $self = shift; | ||
| 88 | 1 | 3 | $self->{QUERY}= shift; | ||||
| 89 | |||||||
| 90 | 1 | 50 | 6 | if ($self->{QUERY}) { | |||
| 91 | 1 | 7 | $self->{URL} = uri_escape($self->{QUERY}); | ||||
| 92 | 1 | 15 | $self->{ERROR} = undef; | ||||
| 93 | 1 | 3 | $self->{TYPE} = 'title'; | ||||
| 94 | 1 | 50 | 3 | print "$self >> Calling _get_albums();\n" if $self->{DEBUG}; | |||
| 95 | 1 | 5 | $self = _get_albums($self); | ||||
| 96 | 1 | 50 | 10 | defined $self->{ERROR} ? return undef : return $self; | |||
| 97 | } | ||||||
| 98 | 0 | 0 | $self->{ERROR} = 'No query provided'; | ||||
| 99 | 0 | 0 | return undef; | ||||
| 100 | } | ||||||
| 101 | |||||||
| 102 | |||||||
| 103 | sub get_songs_album { | ||||||
| 104 | 1 | 1 | 0 | 3 | my $self = shift; | ||
| 105 | 1 | 5 | $self->{URL}= shift; | ||||
| 106 | |||||||
| 107 | 1 | 50 | 6 | if ($self->{URL}) { | |||
| 108 | 0 | 0 | $self->{ERROR} = undef; | ||||
| 109 | 0 | 0 | $self->{TYPE} = 'track'; | ||||
| 110 | 0 | 0 | 0 | print "$self >> Calling _get_songs();\n" if defined $self->{DEBUG}; | |||
| 111 | 0 | 0 | $self = _get_songs($self); | ||||
| 112 | 0 | 0 | 0 | defined $self->{ERROR} ? return undef : return $self; | |||
| 113 | } | ||||||
| 114 | 1 | 4 | $self->{ERROR} = 'No url provided'; | ||||
| 115 | 1 | 3 | return undef; | ||||
| 116 | } | ||||||
| 117 | |||||||
| 118 | |||||||
| 119 | sub DESTROY { | ||||||
| 120 | 2 | 2 | 14 | my $self = shift; | |||
| 121 | 2 | 6 | $self = {}; | ||||
| 122 | 2 | 24 | return 1; | ||||
| 123 | } | ||||||
| 124 | |||||||
| 125 | sub _get_url { | ||||||
| 126 | 2 | 2 | 3 | my $self = shift; | |||
| 127 | 2 | 50 | 8 | unless ($self->{URL} =~ /^http/) { | |||
| 128 | 2 | 7 | $self->{URL} = 'http://www.freedb.org/freedb_search.php?allfields=NO&allcats=YES&grouping=none&words=' . $self->{URL}; | ||||
| 129 | 2 | 7 | $self->{URL} .= '&fields=' . $self->{TYPE}; | ||||
| 130 | } | ||||||
| 131 | |||||||
| 132 | 2 | 50 | 21 | print "$self >> URL: $self->{URL}\n" if $self->{DEBUG}; | |||
| 133 | 2 | 13 | my $data = get($self->{URL}); | ||||
| 134 | |||||||
| 135 | 2 | 1244131 | $self->{DATA} = $data; | ||||
| 136 | 2 | 8 | return $self; | ||||
| 137 | } | ||||||
| 138 | |||||||
| 139 | sub _get_albums { | ||||||
| 140 | 2 | 2 | 4 | my $self = shift; | |||
| 141 | |||||||
| 142 | 2 | 4 | my($line, $n1, $n2, $n3, $n4); | ||||
| 143 | |||||||
| 144 | 2 | 50 | 8 | print "$self >> Calling _get_url();\n" if $self->{DEBUG}; | |||
| 145 | 2 | 7 | $self = _get_url($self); | ||||
| 146 | |||||||
| 147 | 2 | 50 | 10 | return $self if (!$self->{DATA}); | |||
| 148 | |||||||
| 149 | 2 | 3562 | while ($self->{DATA} =~ m!([^<]+)\s+\/\s+([^<]+)!ig) { | ||||
| 150 | 0 | 0 | ($n1,$n2,$n3,$n4) = ($1,$2,$3,$4); | ||||
| 151 | 0 | 0 | $self->{ALBUMS}->{$n1.'/freedb_search_fmt.php?'.$n2} = [$n3,$n4]; | ||||
| 152 | } | ||||||
| 153 | 2 | 9 | return $self; | ||||
| 154 | } | ||||||
| 155 | |||||||
| 156 | |||||||
| 157 | sub _get_songs { | ||||||
| 158 | 0 | 0 | my $self = shift; | ||||
| 159 | |||||||
| 160 | 0 | my($line, $n1, $n2, $n3, $n4); | |||||
| 161 | |||||||
| 162 | 0 | 0 | print "$self >> Calling _get_url();\n" if defined $self->{DEBUG}; | ||||
| 163 | |||||||
| 164 | 0 | $self = _get_url($self); | |||||
| 165 | |||||||
| 166 | 0 | 0 | return $self if (!$self->{DATA}); | ||||
| 167 | |||||||
| 168 | 0 | 0 | if ($self->{DATA} =~ m!([^<]+)\s+\/\s+([^<]+)\s*tracks:\s+([^<]*)\s*total time:\s+([^<]*) \s*year:\s+([^<]*) \s*genre:\s+([^<]*)!is) { |
||||
| 169 | 0 | $self->{ARTIST} = $1; | |||||
| 170 | 0 | $self->{TITLE} = $2; | |||||
| 171 | 0 | $self->{GENRE} = $6; | |||||
| 172 | 0 | $self->{YEAR} = $5; | |||||
| 173 | 0 | $self->{TRACKN} = $3; | |||||
| 174 | 0 | $self->{TIME} = $4; | |||||
| 175 | } | ||||||
| 176 | |||||||
| 177 | 0 | while ($self->{DATA} =~ m! | |||||
| \s*(\d+)\. | ([^<]*) | ([^>]+)!g) { | |||||
| 178 | 0 | $self->{TRACKS}->{$1} = $3; | |||||
| 179 | } | ||||||
| 180 | 0 | $self->{DATA} = undef; | |||||
| 181 | 0 | return $self; | |||||
| 182 | } | ||||||
| 183 | |||||||
| 184 | 1; | ||||||
| 185 | |||||||
| 186 | __END__ |