forked from royalrick/weapp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
analysis_retain.go
84 lines (67 loc) · 2.66 KB
/
analysis_retain.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package weapp
import "github.com/ericnts/weapp/v3/request"
const (
apiGetMonthlyRetain = "/datacube/getweanalysisappidmonthlyretaininfo"
apiGetWeeklyRetain = "/datacube/getweanalysisappidweeklyretaininfo"
apiGetDailyRetain = "/datacube/getweanalysisappiddailyretaininfo"
)
// Retain 用户留存
type Retain struct {
Key uint8 `json:"key"` // 标识,0开始,表示当月,1表示1月后。key取值分别是:0,1
Value uint `json:"value"` // key对应日期的新增用户数/活跃用户数(key=0时)或留存用户数(k>0时)
}
// RetainResponse 生物认证秘钥签名验证请求返回数据
type RetainResponse struct {
request.CommonError
RefDate string `json:"ref_date"` // 时间,月格式为 yyyymm | 周格式为 yyyymmdd-yyyymmdd | 天格式为 yyyymmdd
VisitUV []Retain `json:"visit_uv"` // 活跃用户留存
VisitUVNew []Retain `json:"visit_uv_new"` // 新增用户留存
}
// GetMonthlyRetain 获取用户访问小程序月留存
// begin 开始日期,为自然月第一天。格式为 yyyymmdd
// end 结束日期,为自然月最后一天,限定查询一个月数据。格式为 yyyymmdd
func (cli *Client) GetMonthlyRetain(begin, end string) (*RetainResponse, error) {
api := baseURL + apiGetMonthlyRetain
accessToken, err := cli.AccessToken()
if err != nil {
return nil, err
}
return cli.getRetain(accessToken, begin, end, api)
}
// GetWeeklyRetain 获取用户访问小程序周留存
// begin 开始日期,为自然月第一天。格式为 yyyymmdd
// end 结束日期,为周日日期,限定查询一周数据。格式为 yyyymmdd
func (cli *Client) GetWeeklyRetain(begin, end string) (*RetainResponse, error) {
api := baseURL + apiGetWeeklyRetain
accessToken, err := cli.AccessToken()
if err != nil {
return nil, err
}
return cli.getRetain(accessToken, begin, end, api)
}
// GetDailyRetain 获取用户访问小程序日留存
// begin 开始日期,为自然月第一天。格式为 yyyymmdd
// end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd
func (cli *Client) GetDailyRetain(begin, end string) (*RetainResponse, error) {
api := baseURL + apiGetDailyRetain
accessToken, err := cli.AccessToken()
if err != nil {
return nil, err
}
return cli.getRetain(accessToken, begin, end, api)
}
func (cli *Client) getRetain(accessToken, begin, end, api string) (*RetainResponse, error) {
url, err := tokenAPI(api, accessToken)
if err != nil {
return nil, err
}
params := dateRange{
BeginDate: begin,
EndDate: end,
}
res := new(RetainResponse)
if err := cli.request.Post(url, params, res); err != nil {
return nil, err
}
return res, nil
}