File Coverage

blib/lib/WebService/SetlistFM.pm
Criterion Covered Total %
statement 27 85 31.7
branch n/a
condition n/a
subroutine 9 27 33.3
pod 17 18 94.4
total 53 130 40.7


line stmt bran cond sub pod time code
1             package WebService::SetlistFM;
2 1     1   1273 use JSON::XS;
  1         4427  
  1         67  
3 1     1   4248 use Cache::LRU;
  1         552  
  1         26  
4 1     1   566 use Net::DNS::Lite;
  1         14880  
  1         58  
5 1     1   588 use Furl;
  1         15903  
  1         30  
6 1     1   7583 use URI;
  1         3667  
  1         37  
7 1     1   410 use URI::QueryParam;
  1         552  
  1         23  
8 1     1   5 use Carp;
  1         2  
  1         65  
9 1     1   472 use Moo;
  1         10875  
  1         6  
10 1     1   1679 use namespace::clean;
  1         9116  
  1         5  
11             our $VERSION = "0.02";
12              
13              
14             $Net::DNS::Lite::CACHE = Cache::LRU->new( size => 512 );
15              
16              
17             has 'http' => (
18             is => 'rw',
19             required => 1,
20             default => sub {
21             my $http = Furl::HTTP->new(
22             inet_aton => \&Net::DNS::Lite::inet_aton,
23             agent => 'WebService::SetlistFM/' . $VERSION,
24             headers => [ 'Accept-Encoding' => 'gzip',],
25             );
26             return $http;
27             },
28             );
29              
30              
31             sub artist {
32 0     0 1   my $self = shift;
33 0           my $mbid = shift;
34 0           return $self->request("artist/$mbid.json");
35             }
36              
37             sub city {
38 0     0 1   my $self = shift;
39 0           my $geoid = shift;
40 0           return $self->request("city/$geoid.json");
41             }
42              
43             sub search_artists {
44 0     0 1   my $self = shift;
45 0           my $query_param = shift;
46 0           return $self->request("search/artists.json", $query_param);
47             }
48              
49             sub search_cities {
50 0     0 1   my $self = shift;
51 0           my $query_param = shift;
52 0           return $self->request("search/cities.json", $query_param);
53             }
54              
55             sub search_countries {
56 0     0 1   my $self = shift;
57 0           my $query_param = shift;
58 0           return $self->request("search/countries.json", $query_param);
59             }
60              
61             sub search_setlists {
62 0     0 1   my $self = shift;
63 0           my $query_param = shift;
64 0           return $self->request("search/setlists.json", $query_param);
65             }
66              
67             sub search_venues {
68 0     0 1   my $self = shift;
69 0           my $query_param = shift;
70 0           return $self->request("search/venues.json", $query_param);
71             }
72              
73             sub setlist {
74 0     0 1   my $self = shift;
75 0           my $setlist_id = shift;
76 0           return $self->request("setlist/$setlist_id.json");
77             }
78              
79             sub user {
80 0     0 1   my $self = shift;
81 0           my $user_id = shift;
82 0           return $self->request("user/$user_id.json");
83             }
84              
85             sub venue {
86 0     0 1   my $self = shift;
87 0           my $venue_id = shift;
88 0           return $self->request("venue/$venue_id.json");
89             }
90              
91             sub artist_setlists {
92 0     0 1   my $self = shift;
93 0           my $mbid = shift;
94 0           return $self->request("artist/$mbid/setlists.json");
95             }
96              
97             sub setlist_lastfm {
98 0     0 1   my $self = shift;
99 0           my $lastfm_event_id = shift;
100 0           return $self->request("setlist/lastFm/$lastfm_event_id.json");
101             }
102              
103             sub setlist_version {
104 0     0 1   my $self = shift;
105 0           my $version_id = shift;
106 0           return $self->request("setlist/version/$version_id.json");
107             }
108              
109             sub user_attended {
110 0     0 1   my $self = shift;
111 0           my $user_id = shift;
112 0           return $self->request("user/$user_id/attended.json");
113             }
114              
115             sub user_edited {
116 0     0 1   my $self = shift;
117 0           my $user_id = shift;
118 0           return $self->request("user/$user_id/edited.json");
119             }
120              
121             sub venue_setlists {
122 0     0 1   my $self = shift;
123 0           my $venue_id = shift;
124 0           return $self->request("venue/$venue_id/setlists.json");
125             }
126              
127             sub artist_tour {
128 0     0 1   my $self = shift;
129 0           my $mbid = shift;
130 0           my $tour = shift;
131 0           return $self->request("artist/$mbid/tour/$tour.json");
132             }
133              
134              
135             sub request {
136 0     0 0   my ( $self, $path, $query_param ) = @_;
137              
138 0           my $query = URI->new;
139 0           map { $query->query_param( $_, $query_param->{$_} ) } keys %$query_param;
  0            
140              
141 0           my ($minor_version, $status_code, $message, $headers, $content) =
142             $self->http->request(
143             scheme => 'http',
144             host => 'api.setlist.fm',
145             path_query => "rest/0.1/$path$query",
146             method => 'GET',
147             );
148              
149 0           return decode_json( $content );
150              
151             }
152              
153              
154             1;
155             __END__