github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/datacube/article.go (about) 1 package datacube 2 3 import ( 4 "errors" 5 6 "github.com/chanxuehong/wechat/mp/core" 7 ) 8 9 type ArticleBaseData struct { 10 IntPageReadUser int `json:"int_page_read_user"` // 图文页(点击群发图文卡片进入的页面)的阅读人数 11 IntPageReadCount int `json:"int_page_read_count"` // 图文页的阅读次数 12 OriPageReadUser int `json:"ori_page_read_user"` // 原文页(点击图文页"阅读原文"进入的页面)的阅读人数, 无原文页时此处数据为0 13 OriPageReadCount int `json:"ori_page_read_count"` // 原文页的阅读次数 14 ShareUser int `json:"share_user"` // 分享的人数 15 ShareCount int `json:"share_count"` // 分享的次数 16 AddToFavUser int `json:"add_to_fav_user"` // 收藏的人数 17 AddToFavCount int `json:"add_to_fav_count"` // 收藏的次数 18 } 19 20 // 图文群发每日数据 21 type ArticleSummaryData struct { 22 RefDate string `json:"ref_date"` // 数据的日期, YYYY-MM-DD 格式 23 UserSource int `json:"user_source"` // 返回的 json 有这个字段, 文档中没有, 都是 0 值, 可能没有实际意义!!! 24 25 // 这里的msgid实际上是由msgid(图文消息id)和index(消息次序索引)组成, 26 // 例如12003_3, 其中12003是msgid, 即一次群发的id消息的; 27 // 3为index, 假设该次群发的图文消息共5个文章(因为可能为多图文), 3表示5个中的第3个 28 MsgId string `json:"msgid"` 29 Title string `json:"title"` // 图文消息的标题 30 ArticleBaseData 31 } 32 33 // 获取图文群发每日数据. 34 func GetArticleSummary(clt *core.Client, req *Request) (list []ArticleSummaryData, err error) { 35 if req == nil { 36 err = errors.New("nil Request") 37 return 38 } 39 40 var result struct { 41 core.Error 42 List []ArticleSummaryData `json:"list"` 43 } 44 45 incompleteURL := "https://api.weixin.qq.com/datacube/getarticlesummary?access_token=" 46 if err = clt.PostJSON(incompleteURL, req, &result); err != nil { 47 return 48 } 49 50 if result.ErrCode != core.ErrCodeOK { 51 err = &result.Error 52 return 53 } 54 list = result.List 55 return 56 } 57 58 // 图文群发总数据 59 type ArticleTotalData struct { 60 RefDate string `json:"ref_date"` // 数据的日期, YYYY-MM-DD 格式 61 UserSource int `json:"user_source"` // 返回的 json 有这个字段, 文档中没有, 都是 0 值, 可能没有实际意义!!! 62 MsgId string `json:"msgid"` // 同 ArticleSummaryData.MsgId 63 Title string `json:"title"` 64 Details []struct { 65 StatDate string `json:"stat_date"` // 统计的日期, 在getarticletotal接口中, ref_date指的是文章群发出日期, 而stat_date是数据统计日期 66 TargetUser int `json:"target_user"` // 送达人数, 一般约等于总粉丝数(需排除黑名单或其他异常情况下无法收到消息的粉丝) 67 ArticleBaseData 68 } `json:"details"` 69 } 70 71 // 获取图文群发总数据. 72 func GetArticleTotal(clt *core.Client, req *Request) (list []ArticleTotalData, err error) { 73 if req == nil { 74 err = errors.New("nil Request") 75 return 76 } 77 78 var result struct { 79 core.Error 80 List []ArticleTotalData `json:"list"` 81 } 82 83 incompleteURL := "https://api.weixin.qq.com/datacube/getarticletotal?access_token=" 84 if err = clt.PostJSON(incompleteURL, req, &result); err != nil { 85 return 86 } 87 88 if result.ErrCode != core.ErrCodeOK { 89 err = &result.Error 90 return 91 } 92 list = result.List 93 return 94 } 95 96 // 图文统计数据 97 type UserReadData struct { 98 RefDate string `json:"ref_date"` // 数据的日期, YYYY-MM-DD 格式 99 UserSource int `json:"user_source"` 100 ArticleBaseData 101 } 102 103 // 获取图文统计数据. 104 func GetUserRead(clt *core.Client, req *Request) (list []UserReadData, err error) { 105 if req == nil { 106 err = errors.New("nil Request") 107 return 108 } 109 110 var result struct { 111 core.Error 112 List []UserReadData `json:"list"` 113 } 114 115 incompleteURL := "https://api.weixin.qq.com/datacube/getuserread?access_token=" 116 if err = clt.PostJSON(incompleteURL, req, &result); err != nil { 117 return 118 } 119 120 if result.ErrCode != core.ErrCodeOK { 121 err = &result.Error 122 return 123 } 124 list = result.List 125 return 126 } 127 128 // 图文统计分时数据 129 type UserReadHourData struct { 130 RefHour int `json:"ref_hour"` // 数据的小时, 包括从000到2300, 分别代表的是[000,100)到[2300,2400), 即每日的第1小时和最后1小时 131 TotalOnlineTime int64 `json:"total_online_time"` // 返回的 json 有这个字段, 文档中没有, 都是 0 值, 可能没有实际意义!!! 132 UserReadData 133 } 134 135 // 获取图文统计分时数据. 136 func GetUserReadHour(clt *core.Client, req *Request) (list []UserReadHourData, err error) { 137 if req == nil { 138 err = errors.New("nil Request") 139 return 140 } 141 142 var result struct { 143 core.Error 144 List []UserReadHourData `json:"list"` 145 } 146 147 incompleteURL := "https://api.weixin.qq.com/datacube/getuserreadhour?access_token=" 148 if err = clt.PostJSON(incompleteURL, req, &result); err != nil { 149 return 150 } 151 152 if result.ErrCode != core.ErrCodeOK { 153 err = &result.Error 154 return 155 } 156 list = result.List 157 return 158 } 159 160 // 图文分享转发数据 161 type UserShareData struct { 162 RefDate string `json:"ref_date"` // 数据的日期, YYYY-MM-DD 格式 163 UserSource int `json:"user_source"` // 返回的 json 有这个字段, 文档中没有, 都是 0 值, 可能没有实际意义!!! 164 ShareScene int `json:"share_scene"` // 分享的场景, 1代表好友转发 2代表朋友圈 3代表腾讯微博 255代表其他 165 ShareCount int `json:"share_count"` // 分享的次数 166 ShareUser int `json:"share_user"` // 分享的人数 167 } 168 169 // 获取图文分享转发数据. 170 func GetUserShare(clt *core.Client, req *Request) (list []UserShareData, err error) { 171 if req == nil { 172 err = errors.New("nil Request") 173 return 174 } 175 176 var result struct { 177 core.Error 178 List []UserShareData `json:"list"` 179 } 180 181 incompleteURL := "https://api.weixin.qq.com/datacube/getusershare?access_token=" 182 if err = clt.PostJSON(incompleteURL, req, &result); err != nil { 183 return 184 } 185 186 if result.ErrCode != core.ErrCodeOK { 187 err = &result.Error 188 return 189 } 190 list = result.List 191 return 192 } 193 194 // 图文分享转发分时数据 195 type UserShareHourData struct { 196 RefHour int `json:"ref_hour"` // 数据的小时, 包括从000到2300, 分别代表的是[000,100)到[2300,2400), 即每日的第1小时和最后1小时 197 UserShareData 198 } 199 200 // 获取图文分享转发分时数据. 201 func GetUserShareHour(clt *core.Client, req *Request) (list []UserShareHourData, err error) { 202 if req == nil { 203 err = errors.New("nil Request") 204 return 205 } 206 207 var result struct { 208 core.Error 209 List []UserShareHourData `json:"list"` 210 } 211 212 incompleteURL := "https://api.weixin.qq.com/datacube/getusersharehour?access_token=" 213 if err = clt.PostJSON(incompleteURL, req, &result); err != nil { 214 return 215 } 216 217 if result.ErrCode != core.ErrCodeOK { 218 err = &result.Error 219 return 220 } 221 list = result.List 222 return 223 }