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   1461482 use strict;
  9         17  
  9         342  
3 9     9   45 use warnings;
  9         14  
  9         459  
4              
5 9     9   4166 use LINE::Bot::API::Client;
  9         31  
  9         330  
6 9     9   4728 use LINE::Bot::API::Response::Common;
  9         47  
  9         286  
7 9     9   4753 use LINE::Bot::API::Response::AudienceMultipleData;
  9         30  
  9         375  
8 9     9   4488 use LINE::Bot::API::Response::AudienceData;
  9         31  
  9         351  
9 9     9   4408 use LINE::Bot::API::Response::AudienceGroupForUploadingUserId;
  9         27  
  9         336  
10 9     9   4688 use LINE::Bot::API::Response::AudienceGroupForClickRetargeting;
  9         29  
  9         326  
11 9     9   4523 use LINE::Bot::API::Response::AudienceGroupForImpressionRetargeting;
  9         29  
  9         325  
12 9     9   4450 use LINE::Bot::API::Response::AudienceAuthorityLevel;
  9         33  
  9         450  
13              
14             use constant {
15 9         719 DEFAULT_MESSAGING_API_ENDPOINT => 'https://api.line.me/v2/bot/',
16 9     9   61 };
  9         17  
17 9     9   4304 use Furl;
  9         44053  
  9         420  
18 9     9   68 use Carp 'croak';
  9         50  
  9         567  
19 9     9   5820 use URI;
  9         58518  
  9         362  
20 9     9   3902 use URI::QueryParam;
  9         1103  
  9         7720  
21              
22             sub new {
23 9     9 0 2079296 my($class, %args) = @_;
24              
25 9         122 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     821 messaging_api_endpoint => $args{messaging_api_endpoint} // DEFAULT_MESSAGING_API_ENDPOINT,
31             }, $class;
32             }
33              
34             sub request {
35 11     11 0 56 my ($self, $method, $path, @payload) = @_;
36              
37             return $self->{client}->$method(
38 11         165 $self->{messaging_api_endpoint} . $path,
39             @payload,
40             );
41             }
42              
43             sub rename_audience {
44 1     1 0 1967 my ($self, $opts) = @_;
45              
46             my $res = $self->request(post => 'audienceGroup/'. $opts->{audience_group_id} . '/updateDescription', +{
47             'description' => $opts->{description},
48 1         9 });
49              
50 1         4 LINE::Bot::API::Response::Common->new(%{ $res });
  1         7  
51             }
52              
53             sub create_audience_for_uploading {
54 2     2 0 10062 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         16 });
62 2         9 LINE::Bot::API::Response::AudienceGroupForUploadingUserId->new(%{ $res });
  2         24  
63             }
64              
65             sub create_audience_for_click_based_retartgeting {
66 1     1 0 1954 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         17  
74             }
75              
76             sub create_audience_for_impression_based_retargeting {
77 1     1 0 2049 my ($self, $opts) = @_;
78              
79             my $res = $self->request(post => 'audienceGroup/imp', +{
80             'description' => $opts->{description},
81             'requestId' => $opts->{requestId},
82 1         9 });
83 1         4 LINE::Bot::API::Response::AudienceGroupForImpressionRetargeting->new(%{ $res });
  1         23  
84             }
85              
86             sub get_audience_data {
87 1     1 0 1738 my ($self, $opts) = @_;
88              
89 1         7 my $res = $self->request(get => 'audienceGroup/' . $opts->{audienceGroupId}, +{});
90 1         3 LINE::Bot::API::Response::AudienceData->new(%{ $res });
  1         18  
91             }
92              
93             sub update_authority_level {
94 1     1 0 1961 my ($self, $opts) = @_;
95              
96             my $res = $self->request(put => 'audienceGroup/authorityLevel', +{
97             'authorityLevel' => $opts->{authorityLevel},
98 1         8 });
99 1         4 LINE::Bot::API::Response::Common->new(%{ $res });
  1         9  
100             }
101              
102             sub delete_audience {
103 1     1 0 2048 my ($self, $ops) = @_;
104              
105 1         8 my $res = $self->request(delete => 'audienceGroup/' . $ops->{audienceGroupId}, +{});
106 1         3 LINE::Bot::API::Response::Common->new(%{ $res });
  1         8  
107             }
108              
109             sub get_authority_level {
110 1     1 0 1912 my ($self) = @_;
111              
112 1         24 my $res = $self->request(get => 'audienceGroup/authorityLevel', +{});
113 1         3 LINE::Bot::API::Response::AudienceAuthorityLevel->new(%{ $res });
  1         18  
114             }
115              
116             sub get_data_for_multiple_audience {
117 2     2 0 7553 my ($self, $opts) = @_;
118              
119 2         11 my $uri = URI->new('audienceGroup/list');
120 2   50     5508 $uri->query_param(page => $opts->{page} // 1);
121 2   100     299 $uri->query_param(description => $opts->{description} // '');
122 2   100     259 $uri->query_param(status => $opts->{status} // '');
123 2   100     283 $uri->query_param(size => $opts->{size} // 20);
124 2   100     313 $uri->query_param(includesExternalPublicGroups => $opts->{includesExternalPublicGroups} // '');
125 2   100     460 $uri->query_param(createRoute => $opts->{createRoute} // '');
126              
127 2         593 my $res = $self->request(get => $uri->as_string);
128 2         5 LINE::Bot::API::Response::AudienceMultipleData->new(%{ $res });
  2         25  
129             }
130              
131             1;
132             __END__