File Coverage

blib/lib/WebService/Bandcamp.pm
Criterion Covered Total %
statement 27 52 51.9
branch 0 2 0.0
condition n/a
subroutine 9 16 56.2
pod 0 6 0.0
total 36 76 47.3


line stmt bran cond sub pod time code
1             package WebService::Bandcamp;
2 1     1   1146 use JSON::XS;
  1         4084  
  1         62  
3 1     1   445 use Cache::LRU;
  1         473  
  1         23  
4 1     1   490 use Net::DNS::Lite;
  1         12213  
  1         55  
5 1     1   527 use Furl;
  1         15988  
  1         29  
6 1     1   611 use URI;
  1         3933  
  1         32  
7 1     1   433 use URI::QueryParam;
  1         589  
  1         27  
8 1     1   5 use Carp;
  1         2  
  1         61  
9 1     1   535 use Moo;
  1         11935  
  1         5  
10 1     1   1740 use namespace::clean;
  1         9666  
  1         5  
11             our $VERSION = "0.05";
12              
13              
14             $Net::DNS::Lite::CACHE = Cache::LRU->new( size => 512 );
15              
16             has 'api_key' => (
17             is => 'rw',
18             isa => sub { $_[0] },
19             required => 1,
20             default => sub { $ENV{BANDCAMP_API_KEY} },
21             );
22              
23             has 'http' => (
24             is => 'rw',
25             required => 1,
26             default => sub {
27             my $http = Furl::HTTP->new(
28             inet_aton => \&Net::DNS::Lite::inet_aton,
29             agent => 'WebService::Bandcamp' . $VERSION,
30             headers => [ 'Accept-Encoding' => 'gzip',],
31             );
32             $http->env_proxy;
33             return $http;
34             },
35             );
36              
37              
38             sub band_search {
39 0     0 0   my ($self, %query_param) = @_;
40 0           return $self->_make_request('api/band/3/search', \%query_param);
41             }
42              
43             sub band_discography {
44 0     0 0   my ($self, %query_param) = @_;
45 0           return $self->_make_request('api/band/3/discography', \%query_param);
46             }
47              
48             sub band_info {
49 0     0 0   my ($self, %query_param) = @_;
50 0           return $self->_make_request('api/band/3/info', \%query_param);
51             }
52              
53             sub album_info {
54 0     0 0   my ($self, %query_param) = @_;
55 0           return $self->_make_request('api/album/2/info', \%query_param);
56             }
57              
58             sub track_info {
59 0     0 0   my ($self, %query_param) = @_;
60 0           return $self->_make_request('api/track/3/info', \%query_param);
61             }
62              
63             sub url_info {
64 0     0 0   my ($self, %query_param) = @_;
65 0           return $self->_make_request('api/url/1/info', \%query_param);
66             }
67              
68             sub _make_request {
69 0     0     my ( $self, $path, $query_param ) = @_;
70              
71 0           my $query = URI->new;
72 0           $query->query_param( 'key', $self->api_key );
73 0           map { $query->query_param( $_, $query_param->{$_} ) } keys %$query_param;
  0            
74              
75 0           my ($minor_version, $code, $message, $headers, $content) =
76             $self->http->request(
77             scheme => 'http',
78             host => 'api.bandcamp.com',
79             path_query => "$path$query",
80             method => 'GET',
81             );
82              
83 0           my $data = decode_json( $content );
84 0           warn Dumper $data;
85 0 0         if ( defined $data->{error} ) {
86 0           my $code = $data->{error};
87 0           my $message = $data->{message};
88 0           confess "$code: $message";
89             } else {
90 0           return $data;
91             }
92             }
93              
94              
95             1;
96             __END__