File Coverage

blib/lib/WebService/YDMM.pm
Criterion Covered Total %
statement 90 90 100.0
branch 20 20 100.0
condition 3 3 100.0
subroutine 25 25 100.0
pod 8 8 100.0
total 146 146 100.0


line stmt bran cond sub pod time code
1             package WebService::YDMM;
2 9     9   1979658 use 5.008001;
  9         103  
3 9     9   58 use strict;
  9         24  
  9         212  
4 9     9   62 use warnings;
  9         68  
  9         335  
5 9     9   649 use utf8;
  9         34  
  9         56  
6              
7 9     9   351 use Carp qw/croak/;
  9         19  
  9         518  
8 9     9   5914 use URI;
  9         48065  
  9         373  
9 9     9   7499 use HTTP::Tiny;
  9         478361  
  9         450  
10 9     9   6733 use JSON;
  9         105612  
  9         122  
11              
12             our $VERSION = "0.03";
13              
14              
15             sub new {
16 15     15 1 12881 my ($class, %args) = @_;
17              
18 15 100       330 croak("affiliate_id is required") unless $args{affiliate_id};
19 13 100       149 croak("api_id is required") unless $args{api_id};
20              
21 12         87 _validate_affiliate_id($args{affiliate_id});
22              
23             my $self = {
24             affiliate_id => $args{affiliate_id},
25             api_id => $args{api_id},
26 8         123 _agent => HTTP::Tiny->new( agent => "WebService::YDMM agent $VERSION" ),
27             _base_url => 'https://api.dmm.com/',
28             };
29              
30 8         1008 return bless $self, $class;
31             }
32              
33              
34             sub _validate_affiliate_id {
35 12     12   37 my $account = shift;
36              
37 12 100       85 unless ($account =~ m{99[0-9]$}) {
38 4         424 croak("Postfix of affiliate_id is '990--999'");
39             }
40              
41 8         30 return;
42             }
43              
44             sub _validate_site_name {
45 8     8   19 my $site = shift;
46            
47 8 100 100     57 unless ($site eq 'DMM.com' || $site eq 'DMM.R18'){
48 2         168 croak('Request to Site name for "DMM.com" or "DMM.R18"');
49             }
50 6         18 return $site;
51             }
52              
53              
54             sub _send_get_request {
55 22     22   113 my ($self, $target, $query_param) = @_;
56              
57 22         102 map { $query_param->{$_} = $self->{$_} } qw/affiliate_id api_id/;
  44         247  
58 22         112 $query_param->{output} = "json";
59              
60 22         207 my $uri = URI->new($self->{_base_url});
61 22         80507 $uri->path("affiliate/v3/" . $target);
62 22         1871 $uri->query_form($query_param);
63              
64 22         4907 my $res = $self->{_agent}->get($uri->as_string);
65 22 100       3302 croak("$target API acess failed...") unless $res->{success};
66              
67 14         1315 return decode_json($res->{content});
68             }
69              
70              
71             sub _suggestion_site_param {
72 9 100   9   41 if ( scalar @_ == 2){
73 2         9 return _set_site_param(@_);
74             } else {
75 7         27 return _check_exists_site_param(@_);
76             }
77             }
78              
79             sub _set_site_param {
80 2     2   8 my $site = _validate_site_name(shift);
81 2         8 my $query_param = shift;
82 2         6 $query_param->{site} = $site;
83 2         7 return $query_param;
84             }
85              
86             sub _check_exists_site_param {
87 7     7   19 my $query_param = shift;
88              
89 7 100       24 if (exists $query_param->{site}){
90 6         21 _validate_site_name($query_param->{site});
91             } else {
92 1         208 croak('Require to Sitename for "DMM.com" or "DMM.R18"');
93             }
94              
95 4         14 return $query_param;
96             }
97              
98              
99             sub _suggestion_floor_param {
100              
101 20 100   20   108 if ( scalar @_ == 2 ){
102 8         39 return _set_floor_param(@_);
103             } else {
104 12         52 return _check_exists_floor_param(@_);
105             }
106             }
107              
108              
109             sub _set_floor_param {
110 8     8   40 my ($floor_id,$query_param) = @_;
111              
112 8 100       71 if (! (defined $floor_id)) {
113 4         401 croak('Require to floor_id');
114             }
115 4         19 $query_param->{floor_id} = $floor_id;
116              
117 4         20 return $query_param;
118             }
119              
120             sub _check_exists_floor_param {
121 12     12   29 my $query_param = shift;
122 12 100       57 if (! (exists $query_param->{floor_id}) ){
123 4         955 croak('Require to floor_id');
124             }
125 8         31 return $query_param;
126             }
127              
128             sub item {
129 9     9 1 25636 my $self = shift;
130 9         38 my $query_param = _suggestion_site_param(@_);
131 6         46 return $self->_send_get_request("ItemList", +{ %$query_param })->{result};
132             }
133              
134             sub floor {
135 2     2 1 11223 my $self = shift;
136 2         8 return $self->_send_get_request("FloorList", +{})->{result};
137             }
138              
139             sub actress {
140 2     2 1 17139 my($self,$query_param) = @_;
141 2         24 return $self->_send_get_request("ActressSearch", +{ %$query_param })->{result};
142             }
143              
144             sub genre {
145 5     5 1 26714 my $self = shift;
146 5         31 my $query_param = _suggestion_floor_param(@_);
147 3         38 return $self->_send_get_request("GenreSearch", +{ %$query_param })->{result};
148             }
149              
150             sub maker {
151 5     5 1 16606 my $self = shift;
152 5         18 my $query_param = _suggestion_floor_param(@_);
153 3         23 return $self->_send_get_request("MakerSearch", +{ %$query_param })->{result};
154             }
155              
156             sub series {
157 5     5 1 15512 my $self = shift;
158 5         18 my $query_param = _suggestion_floor_param(@_);
159 3         18 return $self->_send_get_request("SeriesSearch", +{ %$query_param })->{result};
160             }
161              
162             sub author {
163 5     5 1 15711 my $self = shift;
164 5         18 my $query_param = _suggestion_floor_param(@_);
165 3         28 return $self->_send_get_request("AuthorSearch", +{ %$query_param })->{result};
166             }
167              
168              
169              
170             1;
171             __END__