附近小店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

analysis.go 6.7 KiB

3 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package weapp
  2. type dateRange struct {
  3. BeginDate string `json:"begin_date"`
  4. EndDate string `json:"end_date"`
  5. }
  6. const (
  7. apiGetUserPortrait = "/datacube/getweanalysisappiduserportrait"
  8. apiGetVisitDistribution = "/datacube/getweanalysisappidvisitdistribution"
  9. apiGetVisitPage = "/datacube/getweanalysisappidvisitpage"
  10. apiGetDailySummary = "/datacube/getweanalysisappiddailysummarytrend"
  11. )
  12. // UserPortrait response data of get user portrait
  13. type UserPortrait struct {
  14. CommonError
  15. RefDate string `json:"ref_date"`
  16. VisitUV Portrait `json:"visit_uv"` // 活跃用户画像
  17. VisitUVNew Portrait `json:"visit_uv_new"` // 新用户画像
  18. }
  19. // Portrait 肖像
  20. type Portrait struct {
  21. Index uint `json:"index"` // 分布类型
  22. Province []Attribute `json:"province"` // 省份,如北京、广东等
  23. City []Attribute `json:"city"` // 城市,如北京、广州等
  24. Genders []Attribute `json:"genders"` // 性别,包括男、女、未知
  25. Platforms []Attribute `json:"platforms"` // 终端类型,包括 iPhone,android,其他
  26. Devices []Attribute `json:"devices"` // 机型,如苹果 iPhone 6,OPPO R9 等
  27. Ages []Attribute `json:"ages"` // 年龄,包括17岁以下、18-24岁等区间
  28. }
  29. // Attribute 描述内容
  30. type Attribute struct {
  31. ID uint `json:"id"` // 属性值id
  32. Name string `json:"name"` // 属性值名称,与id对应。如属性为 province 时,返回的属性值名称包括「广东」等。
  33. Value uint `json:"value"`
  34. // TODO: 确认后删除该字段
  35. AccessSourceVisitUV uint `json:"access_source_visit_uv"` // 该场景访问uv
  36. }
  37. // GetUserPortrait 获取小程序新增或活跃用户的画像分布数据。
  38. // 时间范围支持昨天、最近7天、最近30天。
  39. // 其中,新增用户数为时间范围内首次访问小程序的去重用户数,活跃用户数为时间范围内访问过小程序的去重用户数。
  40. // begin 开始日期。格式为 yyyymmdd
  41. // end 结束日期,开始日期与结束日期相差的天数限定为0/6/29,分别表示查询最近1/7/30天数据,允许设置的最大值为昨日。格式为 yyyymmdd
  42. func GetUserPortrait(accessToken, begin, end string) (*UserPortrait, error) {
  43. api := baseURL + apiGetUserPortrait
  44. return getUserPortrait(accessToken, begin, end, api)
  45. }
  46. func getUserPortrait(accessToken, begin, end, api string) (*UserPortrait, error) {
  47. api, err := tokenAPI(api, accessToken)
  48. if err != nil {
  49. return nil, err
  50. }
  51. params := dateRange{
  52. BeginDate: begin,
  53. EndDate: end,
  54. }
  55. res := new(UserPortrait)
  56. if err := postJSON(api, params, res); err != nil {
  57. return nil, err
  58. }
  59. return res, nil
  60. }
  61. // VisitDistribution 用户小程序访问分布数据
  62. type VisitDistribution struct {
  63. CommonError
  64. RefDate string `json:"ref_date"`
  65. List []Distribution `json:"list"`
  66. }
  67. // Distribution 分布数据
  68. type Distribution struct {
  69. // 分布类型
  70. // index 的合法值
  71. // access_source_session_cnt 访问来源分布
  72. // access_staytime_info 访问时长分布
  73. // access_depth_info 访问深度的分布
  74. Index string `json:"index"`
  75. ItemList []DistributionItem `json:"item_list"` // 分布数据列表
  76. }
  77. // DistributionItem 分布数据项
  78. type DistributionItem struct {
  79. Key uint `json:"key"` // 场景 id,定义在各个 index 下不同,具体参见下方表格
  80. Value uint `json:"value"` // 该场景 id 访问 pv
  81. // TODO: 确认后删除该字段
  82. AccessSourceVisitUV uint `json:"access_source_visit_uv"` // 该场景 id 访问 uv
  83. }
  84. // GetVisitDistribution 获取用户小程序访问分布数据
  85. // begin 开始日期。格式为 yyyymmdd
  86. // end 结束日期,限定查询 1 天数据,允许设置的最大值为昨日。格式为 yyyymmdd
  87. func GetVisitDistribution(accessToken, begin, end string) (*VisitDistribution, error) {
  88. api := baseURL + apiGetVisitDistribution
  89. return getVisitDistribution(accessToken, begin, end, api)
  90. }
  91. func getVisitDistribution(accessToken, begin, end, api string) (*VisitDistribution, error) {
  92. url, err := tokenAPI(api, accessToken)
  93. if err != nil {
  94. return nil, err
  95. }
  96. params := dateRange{
  97. BeginDate: begin,
  98. EndDate: end,
  99. }
  100. res := new(VisitDistribution)
  101. if err := postJSON(url, params, res); err != nil {
  102. return nil, err
  103. }
  104. return res, nil
  105. }
  106. // VisitPage 页面访问数据
  107. type VisitPage struct {
  108. CommonError
  109. RefDate string `json:"ref_date"`
  110. List []Page `json:"list"`
  111. }
  112. // Page 页面
  113. type Page struct {
  114. PagePath string `json:"Page_path"` // 页面路径
  115. PageVisitPV uint `json:"Page_visit_pv"` // 访问次数
  116. PageVisitUV uint `json:"Page_visit_uv"` // 访问人数
  117. PageStaytimePV float64 `json:"page_staytime_pv"` // 次均停留时长
  118. EntrypagePV uint `json:"entrypage_pv"` // 进入页次数
  119. ExitpagePV uint `json:"exitpage_pv"` // 退出页次数
  120. PageSharePV uint `json:"page_share_pv"` // 转发次数
  121. PageShareUV uint `json:"page_share_uv"` // 转发人数
  122. }
  123. // GetVisitPage 访问页面。
  124. // 目前只提供按 page_visit_pv 排序的 top200。
  125. // begin 开始日期。格式为 yyyymmdd
  126. // end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd
  127. func GetVisitPage(accessToken, begin, end string) (*VisitPage, error) {
  128. api := baseURL + apiGetVisitPage
  129. return getVisitPage(accessToken, begin, end, api)
  130. }
  131. func getVisitPage(accessToken, begin, end, api string) (*VisitPage, error) {
  132. url, err := tokenAPI(api, accessToken)
  133. if err != nil {
  134. return nil, err
  135. }
  136. params := dateRange{
  137. BeginDate: begin,
  138. EndDate: end,
  139. }
  140. res := new(VisitPage)
  141. if err := postJSON(url, params, res); err != nil {
  142. return nil, err
  143. }
  144. return res, nil
  145. }
  146. // DailySummary 用户访问小程序数据概况
  147. type DailySummary struct {
  148. CommonError
  149. List []Summary `json:"list"`
  150. }
  151. // Summary 概况
  152. type Summary struct {
  153. RefDate string `json:"ref_date"` // 日期,格式为 yyyymmdd
  154. VisitTotal uint `json:"visit_total"` // 累计用户数
  155. SharePV uint `json:"share_pv"` // 转发次数
  156. ShareUV uint `json:"share_uv"` // 转发人数
  157. }
  158. // GetDailySummary 获取用户访问小程序数据概况
  159. // begin 开始日期。格式为 yyyymmdd
  160. // end 结束日期,限定查询1天数据,允许设置的最大值为昨日。格式为 yyyymmdd
  161. func GetDailySummary(accessToken, begin, end string) (*DailySummary, error) {
  162. api := baseURL + apiGetDailySummary
  163. return getDailySummary(accessToken, begin, end, api)
  164. }
  165. func getDailySummary(accessToken, begin, end, api string) (*DailySummary, error) {
  166. url, err := tokenAPI(api, accessToken)
  167. if err != nil {
  168. return nil, err
  169. }
  170. params := dateRange{
  171. BeginDate: begin,
  172. EndDate: end,
  173. }
  174. res := new(DailySummary)
  175. if err := postJSON(url, params, res); err != nil {
  176. return nil, err
  177. }
  178. return res, nil
  179. }