File Coverage

blib/lib/LINE/Bot/Audience.pm
Criterion Covered Total %
statement 93 93 100.0
branch n/a
condition 12 14 85.7
subroutine 26 26 100.0
pod 0 11 0.0
total 131 144 90.9


line stmt bran cond sub pod time code
1             package LINE::Bot::Audience;
2 9     9   1227283 use strict;
  9         110  
  9         274  
3 9     9   49 use warnings;
  9         15  
  9         321  
4              
5 9     9   3855 use LINE::Bot::API::Client;
  9         27  
  9         254  
6 9     9   3990 use LINE::Bot::API::Response::Common;
  9         22  
  9         231  
7 9     9   3950 use LINE::Bot::API::Response::AudienceMultipleData;
  9         25  
  9         258  
8 9     9   3897 use LINE::Bot::API::Response::AudienceData;
  9         25  
  9         252  
9 9     9   3918 use LINE::Bot::API::Response::AudienceGroupForUploadingUserId;
  9         24  
  9         272  
10 9     9   4071 use LINE::Bot::API::Response::AudienceGroupForClickRetargeting;
  9         25  
  9         258  
11 9     9   3921 use LINE::Bot::API::Response::AudienceGroupForImpressionRetargeting;
  9         26  
  9         250  
12 9     9   3840 use LINE::Bot::API::Response::AudienceAuthorityLevel;
  9         25  
  9         296  
13              
14             use constant {
15 9         566 DEFAULT_MESSAGING_API_ENDPOINT => 'https://api.line.me/v2/bot/',
16 9     9   56 };
  9         18  
17 9     9   4216 use Furl;
  9         37372  
  9         280  
18 9     9   61 use Carp 'croak';
  9         25  
  9         442  
19 9     9   5096 use URI;
  9         42387  
  9         341  
20 9     9   4260 use URI::QueryParam;
  9         6874  
  9         6942  
21              
22             sub new {
23 9     9 0 1060 my($class, %args) = @_;
24              
25 9         84 my $client = LINE::Bot::API::Client->new(%args);
26             bless {
27             client => $client,
28             channel_secret => $args{channel_secret},
29             channel_access_token => $args{channel_access_token},
30 9   50     602 messaging_api_endpoint => $args{messaging_api_endpoint} // DEFAULT_MESSAGING_API_ENDPOINT,
31             }, $class;
32             }
33              
34             sub request {
35 11     11 0 81 my ($self, $method, $path, @payload) = @_;
36              
37             return $self->{client}->$method(
38 11         150 $self->{messaging_api_endpoint} . $path,
39             @payload,
40             );
41             }
42              
43             sub rename_audience {
44 1     1 0 1327 my ($self, $opts) = @_;
45              
46             my $res = $self->request(post => 'audienceGroup/'. $opts->{audience_group_id} . '/updateDescription', +{
47             'description' => $opts->{description},
48 1         8 });
49              
50 1         2 LINE::Bot::API::Response::Common->new(%{ $res });
  1         6  
51             }
52              
53             sub create_audience_for_uploading {
54 2     2 0 7748 my ($self, $opts) = @_;
55              
56             my $res = $self->request(post => 'audienceGroup/upload', +{
57             'description' => $opts->{description},
58             'isIfaAudience' => $opts->{isIfaAudience},
59             'uploadDescription' => $opts->{uploadDescription},
60             'audiences' => $opts->{audiences},
61 2         24 });
62 2         7 LINE::Bot::API::Response::AudienceGroupForUploadingUserId->new(%{ $res });
  2         25  
63             }
64              
65             sub create_audience_for_click_based_retartgeting {
66 1     1 0 1621 my ($self, $opts) = @_;
67              
68             my $res = $self->request(post => 'audienceGroup/click', +{
69             'description' => $opts->{description},
70             'requestId' => $opts->{requestId},
71             'clickUrl' => $opts->{clickUrl},
72 1         8 });
73 1         3 LINE::Bot::API::Response::AudienceGroupForClickRetargeting->new(%{ $res });
  1         15  
74             }
75              
76             sub create_audience_for_impression_based_retargeting {
77 1     1 0 1798 my ($self, $opts) = @_;
78              
79             my $res = $self->request(post => 'audienceGroup/imp', +{
80             'description' => $opts->{description},
81             'requestId' => $opts->{requestId},
82 1         7 });
83 1         3 LINE::Bot::API::Response::AudienceGroupForImpressionRetargeting->new(%{ $res });
  1         16  
84             }
85              
86             sub get_audience_data {
87 1     1 0 1592 my ($self, $opts) = @_;
88              
89 1         7 my $res = $self->request(get => 'audienceGroup/' . $opts->{audienceGroupId}, +{});
90 1         2 LINE::Bot::API::Response::AudienceData->new(%{ $res });
  1         16  
91             }
92              
93             sub update_authority_level {
94 1     1 0 1374 my ($self, $opts) = @_;
95              
96             my $res = $self->request(put => 'audienceGroup/authorityLevel', +{
97             'authorityLevel' => $opts->{authorityLevel},
98 1         7 });
99 1         2 LINE::Bot::API::Response::Common->new(%{ $res });
  1         5  
100             }
101              
102             sub delete_audience {
103 1     1 0 1739 my ($self, $ops) = @_;
104              
105 1         7 my $res = $self->request(delete => 'audienceGroup/' . $ops->{audienceGroupId}, +{});
106 1         3 LINE::Bot::API::Response::Common->new(%{ $res });
  1         7  
107             }
108              
109             sub get_authority_level {
110 1     1 0 1593 my ($self) = @_;
111              
112 1         5 my $res = $self->request(get => 'audienceGroup/authorityLevel', +{});
113 1         3 LINE::Bot::API::Response::AudienceAuthorityLevel->new(%{ $res });
  1         24  
114             }
115              
116             sub get_data_for_multiple_audience {
117 2     2 0 7408 my ($self, $opts) = @_;
118              
119 2         16 my $uri = URI->new('audienceGroup/list');
120 2   50     3967 $uri->query_param(page => $opts->{page} // 1);
121 2   100     330 $uri->query_param(description => $opts->{description} // '');
122 2   100     276 $uri->query_param(status => $opts->{status} // '');
123 2   100     302 $uri->query_param(size => $opts->{size} // 20);
124 2   100     347 $uri->query_param(includesExternalPublicGroups => $opts->{includesExternalPublicGroups} // '');
125 2   100     468 $uri->query_param(createRoute => $opts->{createRoute} // '');
126              
127 2         449 my $res = $self->request(get => $uri->as_string);
128 2         3 LINE::Bot::API::Response::AudienceMultipleData->new(%{ $res });
  2         29  
129             }
130              
131             1;
132             __END__