github.com/line/line-bot-sdk-go/v7@v7.21.0/linebot/insight.go (about) 1 // Copyright 2019 LINE Corporation 2 // 3 // LINE Corporation licenses this file to you under the Apache License, 4 // version 2.0 (the "License"); you may not use this file except in compliance 5 // with the License. You may obtain a copy of the License at: 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations 13 // under the License. 14 15 package linebot 16 17 import ( 18 "context" 19 "fmt" 20 "net/url" 21 ) 22 23 // InsightType type 24 type InsightType string 25 26 // InsightType constants 27 const ( 28 InsightTypeMessageDelivery InsightType = "message/delivery" 29 InsightTypeUserInteractionStats InsightType = "message/event" 30 InsightTypeFollowers InsightType = "followers" 31 InsightTypeDemographic InsightType = "demographic" 32 ) 33 34 // GetNumberMessagesDeliveryCall type 35 type GetNumberMessagesDeliveryCall struct { 36 c *Client 37 ctx context.Context 38 39 date string 40 insightType InsightType 41 } 42 43 // GetNumberMessagesDelivery method 44 func (client *Client) GetNumberMessagesDelivery(date string) *GetNumberMessagesDeliveryCall { 45 return &GetNumberMessagesDeliveryCall{ 46 c: client, 47 date: date, 48 insightType: InsightTypeMessageDelivery, 49 } 50 } 51 52 // WithContext method 53 func (call *GetNumberMessagesDeliveryCall) WithContext(ctx context.Context) *GetNumberMessagesDeliveryCall { 54 call.ctx = ctx 55 return call 56 } 57 58 // Do method 59 func (call *GetNumberMessagesDeliveryCall) Do() (*MessagesNumberDeliveryResponse, error) { 60 endpoint := fmt.Sprintf(APIEndpointInsight, call.insightType) 61 q := url.Values{} 62 if call.date != "" { 63 q.Add("date", call.date) 64 } 65 res, err := call.c.get(call.ctx, call.c.endpointBase, endpoint, q) 66 if err != nil { 67 return nil, err 68 } 69 defer closeResponse(res) 70 return decodeToMessagesNumberDeliveryResponse(res) 71 } 72 73 // GetNumberFollowersCall type 74 type GetNumberFollowersCall struct { 75 c *Client 76 ctx context.Context 77 78 date string 79 insightType InsightType 80 } 81 82 // GetNumberFollowers method 83 func (client *Client) GetNumberFollowers(date string) *GetNumberFollowersCall { 84 return &GetNumberFollowersCall{ 85 c: client, 86 date: date, 87 insightType: InsightTypeFollowers, 88 } 89 } 90 91 // WithContext method 92 func (call *GetNumberFollowersCall) WithContext(ctx context.Context) *GetNumberFollowersCall { 93 call.ctx = ctx 94 return call 95 } 96 97 // Do method 98 func (call *GetNumberFollowersCall) Do() (*MessagesNumberFollowersResponse, error) { 99 endpoint := fmt.Sprintf(APIEndpointInsight, call.insightType) 100 q := url.Values{} 101 if call.date != "" { 102 q.Add("date", call.date) 103 } 104 res, err := call.c.get(call.ctx, call.c.endpointBase, endpoint, q) 105 if err != nil { 106 return nil, err 107 } 108 defer closeResponse(res) 109 return decodeToMessagesNumberFollowersResponse(res) 110 } 111 112 // GetFriendDemographicsCall type 113 type GetFriendDemographicsCall struct { 114 c *Client 115 ctx context.Context 116 117 insightType InsightType 118 } 119 120 // GetFriendDemographics method 121 func (client *Client) GetFriendDemographics() *GetFriendDemographicsCall { 122 return &GetFriendDemographicsCall{ 123 c: client, 124 insightType: InsightTypeDemographic, 125 } 126 } 127 128 // WithContext method 129 func (call *GetFriendDemographicsCall) WithContext(ctx context.Context) *GetFriendDemographicsCall { 130 call.ctx = ctx 131 return call 132 } 133 134 // Do method 135 func (call *GetFriendDemographicsCall) Do() (*MessagesFriendDemographicsResponse, error) { 136 endpoint := fmt.Sprintf(APIEndpointInsight, call.insightType) 137 var q url.Values 138 139 res, err := call.c.get(call.ctx, call.c.endpointBase, endpoint, q) 140 if err != nil { 141 return nil, err 142 } 143 defer closeResponse(res) 144 return decodeToMessagesFriendDemographicsResponse(res) 145 } 146 147 // GetUserInteractionStatsCall type 148 type GetUserInteractionStatsCall struct { 149 c *Client 150 ctx context.Context 151 152 requestID string 153 insightType InsightType 154 } 155 156 // GetUserInteractionStats method 157 func (client *Client) GetUserInteractionStats(requestID string) *GetUserInteractionStatsCall { 158 return &GetUserInteractionStatsCall{ 159 c: client, 160 requestID: requestID, 161 insightType: InsightTypeUserInteractionStats, 162 } 163 } 164 165 // WithContext method 166 func (call *GetUserInteractionStatsCall) WithContext(ctx context.Context) *GetUserInteractionStatsCall { 167 call.ctx = ctx 168 return call 169 } 170 171 // Do method, returns MessagesUserInteractionStatsResponse 172 func (call *GetUserInteractionStatsCall) Do() (*MessagesUserInteractionStatsResponse, error) { 173 endpoint := fmt.Sprintf(APIEndpointInsight, call.insightType) 174 q := url.Values{} 175 if call.requestID != "" { 176 q.Add("requestId", call.requestID) 177 } 178 res, err := call.c.get(call.ctx, call.c.endpointBase, endpoint, q) 179 if err != nil { 180 return nil, err 181 } 182 defer closeResponse(res) 183 return decodeToMessagesUserInteractionStatsResponse(res) 184 }