diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java index 05470de0..ca7fa180 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java @@ -1,18 +1,22 @@ package me.chanjar.weixin.mp.api; import me.chanjar.weixin.common.exception.WxErrorException; -import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; -import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; import java.util.Date; import java.util.List; /** - * 统计分析相关接口 + * 统计分析相关接口 * Created by Binary Wang on 2016/8/23. * @author binarywang (https://github.com/binarywang) */ public interface WxMpDataCubeService { + //*******************用户分析数据接口***********************// + /** *
* 获取用户增减数据 @@ -23,7 +27,7 @@ public interface WxMpDataCubeService { * @param beginDate 开始时间 * @param endDate 最大时间跨度7天,endDate不能早于begingDate */ - ListgetUserSummary(Date beginDate, Date endDate) throws WxErrorException; + List getUserSummary(Date beginDate, Date endDate) throws WxErrorException; /** * @@ -35,5 +39,75 @@ public interface WxMpDataCubeService { * @param beginDate 开始时间 * @param endDate 最大时间跨度7天,endDate不能早于begingDate */ - ListgetUserCumulate(Date beginDate, Date endDate) throws WxErrorException; + List getUserCumulate(Date beginDate, Date endDate) throws WxErrorException; + + //*******************图文分析数据接口***********************// + + /** + * + * 获取图文群发每日数据(getarticlesummary) + * 详情请见文档:图文分析数据接口 + * 接口url格式:https://api.weixin.qq.com/datacube/getarticlesummary?access_token=ACCESS_TOKEN + *+ * + * @param beginDate 开始时间 + * @param endDate 最大时间跨度1天,endDate不能早于begingDate + */ + ListgetArticleSummary(Date beginDate, Date endDate) throws WxErrorException; + + /** + * + * 获取图文群发总数据(getarticletotal) + * 详情请见文档:图文分析数据接口 + * 接口url格式:https://api.weixin.qq.com/datacube/getarticletotal?access_token=ACCESS_TOKEN + * + * @param beginDate 开始时间 + * @param endDate 最大时间跨度1天,endDate不能早于begingDate + */ + ListgetArticleTotal(Date beginDate, Date endDate) throws WxErrorException; + + /** + * + * 获取图文统计数据(getuserread) + * 详情请见文档:图文分析数据接口 + * 接口url格式:https://api.weixin.qq.com/datacube/getuserread?access_token=ACCESS_TOKEN + * + * @param beginDate 开始时间 + * @param endDate 最大时间跨度3天,endDate不能早于begingDate + */ + ListgetUserRead(Date beginDate, Date endDate) throws WxErrorException; + + /** + * + * 获取图文统计分时数据(getuserreadhour) + * 详情请见文档:图文分析数据接口 + * 接口url格式:https://api.weixin.qq.com/datacube/getuserreadhour?access_token=ACCESS_TOKEN + * + * @param beginDate 开始时间 + * @param endDate 最大时间跨度1天,endDate不能早于begingDate + */ + ListgetUserReadHour(Date beginDate, Date endDate) throws WxErrorException; + + /** + * + * 获取图文分享转发数据(getusershare) + * 详情请见文档:图文分析数据接口 + * 接口url格式:https://api.weixin.qq.com/datacube/getusershare?access_token=ACCESS_TOKEN + * + * @param beginDate 开始时间 + * @param endDate 最大时间跨度7天,endDate不能早于begingDate + */ + ListgetUserShare(Date beginDate, Date endDate) throws WxErrorException; + + /** + * + * 获取图文分享转发分时数据(getusersharehour) + * 详情请见文档:图文分析数据接口 + * 接口url格式:https://api.weixin.qq.com/datacube/getusersharehour?access_token=ACCESS_TOKEN + * + * @param beginDate 开始时间 + * @param endDate 最大时间跨度1天,endDate不能早于begingDate + */ + ListgetUserShareHour(Date beginDate, Date endDate) throws WxErrorException; + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java index 3b577713..329947d2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java @@ -1,24 +1,29 @@ package me.chanjar.weixin.mp.api.impl; -import java.util.Date; -import java.util.List; - import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; - import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.mp.api.WxMpDataCubeService; import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; -import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.List; /** * Created by Binary Wang on 2016/8/23. * @author binarywang (https://github.com/binarywang) */ public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { + protected final Logger log = LoggerFactory.getLogger(WxMpServiceImpl.class); + private static final String API_URL_PREFIX = "https://api.weixin.qq.com/datacube"; private WxMpService wxMpService; @@ -27,26 +32,106 @@ public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { } @Override - public List getUserSummary(Date beginDate, Date endDate) throws WxErrorException { + public List getUserSummary(Date beginDate, Date endDate) throws WxErrorException { String url = API_URL_PREFIX + "/getusersummary"; JsonObject param = new JsonObject(); param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), - new TypeToken >() { + new TypeToken
>() { }.getType()); } @Override - public List
getUserCumulate(Date beginDate, Date endDate) throws WxErrorException { + public List getUserCumulate(Date beginDate, Date endDate) throws WxErrorException { String url = API_URL_PREFIX + "/getusercumulate"; JsonObject param = new JsonObject(); param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); + return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), + new TypeToken >() { + }.getType()); + } + + @Override + public List
getArticleSummary(Date beginDate, Date endDate) throws WxErrorException { + String url = API_URL_PREFIX + "/getarticlesummary"; + JsonObject param = new JsonObject(); + param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); + param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); + String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); + return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), + new TypeToken >() { + }.getType()); + } + + @Override + public List
getArticleTotal(Date beginDate, Date endDate) throws WxErrorException { + String url = API_URL_PREFIX + "/getarticletotal"; + JsonObject param = new JsonObject(); + param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); + param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); + String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); + return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), + new TypeToken >() { + }.getType()); + } + + @Override + public List
getUserRead(Date beginDate, Date endDate) throws WxErrorException { + String url = API_URL_PREFIX + "/getuserread"; + JsonObject param = new JsonObject(); + param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); + param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); + String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); + return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), + new TypeToken >() { + }.getType()); + } + + @Override + public List
getUserReadHour(Date beginDate, Date endDate) throws WxErrorException { + String url = API_URL_PREFIX + "/getuserreadhour"; + JsonObject param = new JsonObject(); + param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); + param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); + String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); + return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), + new TypeToken >() { + }.getType()); + } + + @Override + public List
getUserShare(Date beginDate, Date endDate) throws WxErrorException { + String url = API_URL_PREFIX + "/getusershare"; + JsonObject param = new JsonObject(); + param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); + param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); + String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); + return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), + new TypeToken >() { + }.getType()); + } + + @Override + public List
getUserShareHour(Date beginDate, Date endDate) throws WxErrorException { + String url = API_URL_PREFIX + "/getusersharehour"; + JsonObject param = new JsonObject(); + param.addProperty("begin_date", WxMpService.SIMPLE_DATE_FORMAT.format(beginDate)); + param.addProperty("end_date", WxMpService.SIMPLE_DATE_FORMAT.format(endDate)); + String responseContent = this.wxMpService.post(url, param.toString()); + this.log.debug("\nurl:{}\nparams:{}\nresponse:{}",url, param, responseContent); return WxMpGsonBuilder.INSTANCE.create().fromJson(new JsonParser().parse(responseContent).getAsJsonObject().get("list"), - new TypeToken >() { + new TypeToken
>() { }.getType()); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java index faca1b0e..5be6a3f8 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleResult.java @@ -1,8 +1,102 @@ package me.chanjar.weixin.mp.bean.datacube; +import com.google.gson.annotations.SerializedName; + /** + * 图文分析数据接口返回结果对象 * @author binarywang(https://github.com/binarywang) * Created by Binary Wang on 2016/8/24. */ -public class WxDataCubeArticleResult { +public class WxDataCubeArticleResult extends WxDataCubeBaseResult { + + /** + * ref_hour + * 数据的小时,包括从000到2300,分别代表的是[000,100)到[2300,2400),即每日的第1小时和最后1小时 + */ + @SerializedName("ref_hour") + private Integer refHour; + + /** + * msgid + * 请注意:这里的msgid实际上是由msgid(图文消息id,这也就是群发接口调用后返回的msg_data_id)和index(消息次序索引)组成, 例如12003_3, 其中12003是msgid,即一次群发的消息的id; 3为index,假设该次群发的图文消息共5个文章(因为可能为多图文),3表示5个中的第3个 + */ + @SerializedName("msgid") + private String msgId; + + /** + * title + * 图文消息的标题 + */ + @SerializedName("title") + private String title; + + /** + * int_page_read_user + * 图文页(点击群发图文卡片进入的页面)的阅读人数 + */ + @SerializedName("int_page_read_user") + private Integer intPageReadUser; + + /** + * int_page_read_count + * 图文页的阅读次数 + */ + @SerializedName("int_page_read_count") + private Integer intPageReadCount; + + /** + * ori_page_read_user + * 原文页(点击图文页“阅读原文”进入的页面)的阅读人数,无原文页时此处数据为0 + */ + @SerializedName("ori_page_read_user") + private Integer oriPageReadUser; + + /** + * ori_page_read_count + * 原文页的阅读次数 + */ + @SerializedName("ori_page_read_count") + private Integer oriPageReadCount; + + /** + * share_scene + * 分享的场景 1代表好友转发 2代表朋友圈 3代表腾讯微博 255代表其他 + */ + @SerializedName("share_scene") + private Integer shareScene; + + /** + * share_user + * 分享的人数 + */ + @SerializedName("share_user") + private Integer shareUser; + + /** + * share_count + * 分享的次数 + */ + @SerializedName("share_count") + private Integer shareCount; + + /** + * add_to_fav_user + * 收藏的人数 + */ + @SerializedName("add_to_fav_user") + private Integer addToFavUser; + + /** + * add_to_fav_count + * 收藏的次数 + */ + @SerializedName("add_to_fav_count") + private Integer addToFavCount; + + /** + * user_source + * 在获取图文阅读分时数据时才有该字段,代表用户从哪里进入来阅读该图文。0:会话;1.好友;2.朋友圈;3.腾讯微博;4.历史消息页;5.其他 + */ + @SerializedName("user_source") + private Integer userSource; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java index 6b5e7473..85711d71 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotal.java @@ -2,17 +2,14 @@ package me.chanjar.weixin.mp.bean.datacube; import com.google.gson.annotations.SerializedName; +import java.util.List; + /** * 图文分析数据接口返回结果对象 * @author binarywang(https://github.com/binarywang) * Created by Binary Wang on 2016/8/24. */ -public class WxDataCubeArticleTotal extends WxDataCubeResultBase { - - /** - * ref_hour - * 数据的小时,包括从000到2300,分别代表的是[000,100)到[2300,2400),即每日的第1小时和最后1小时 - */ +public class WxDataCubeArticleTotal extends WxDataCubeBaseResult { /** * msgid @@ -29,72 +26,9 @@ public class WxDataCubeArticleTotal extends WxDataCubeResultBase { private String title; /** - * int_page_read_user - * 图文页(点击群发图文卡片进入的页面)的阅读人数 - */ - @SerializedName("int_page_read_user") - private Integer intPageReadUser; - - /** - * int_page_read_count - * 图文页的阅读次数 - */ - @SerializedName("int_page_read_count") - private Integer intPageReadCount; - - /** - * ori_page_read_user - * 原文页(点击图文页“阅读原文”进入的页面)的阅读人数,无原文页时此处数据为0 - */ - @SerializedName("ori_page_read_user") - private Integer oriPageReadUser; - - /** - * ori_page_read_count - * 原文页的阅读次数 - */ - @SerializedName("ori_page_read_count") - private Integer oriPageReadCount; - - /** - * share_scene - * 分享的场景 1代表好友转发 2代表朋友圈 3代表腾讯微博 255代表其他 - */ - @SerializedName("share_scene") - private Integer shareScene; - - /** - * share_user - * 分享的人数 - */ - @SerializedName("share_user") - private Integer shareUser; - - /** - * share_count - * 分享的次数 - */ - @SerializedName("share_count") - private Integer shareCount; - - /** - * add_to_fav_user - * 收藏的人数 - */ - @SerializedName("add_to_fav_user") - private Integer addToFavUser; - - /** - * add_to_fav_count - * 收藏的次数 - */ - @SerializedName("add_to_fav_count") - private Integer addToFavCount; - - /** - * user_source - * 在获取图文阅读分时数据时才有该字段,代表用户从哪里进入来阅读该图文。0:会话;1.好友;2.朋友圈;3.腾讯微博;4.历史消息页;5.其他 + * details + * 详细信息 */ - @SerializedName("user_source") - private Integer userSource; + @SerializedName("details") + private List
details; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotalDetail.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotalDetail.java index a090cde0..d5f9a323 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotalDetail.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeArticleTotalDetail.java @@ -1,8 +1,194 @@ package me.chanjar.weixin.mp.bean.datacube; +import com.google.gson.annotations.SerializedName; + /** + * 获取图文群发总数据接口(getarticletotal)中的详细字段 * @author binarywang(https://github.com/binarywang) * Created by Binary Wang on 2016/8/24. */ public class WxDataCubeArticleTotalDetail { + + /** + * stat_date + * 统计的日期,在getarticletotal接口中,ref_date指的是文章群发出日期, 而stat_date是数据统计日期 + */ + @SerializedName("stat_date") + private Integer statDate; + + /** + * target_user + * 送达人数,一般约等于总粉丝数(需排除黑名单或其他异常情况下无法收到消息的粉丝) + */ + @SerializedName("target_user") + private Integer targetUser; + + /** + * int_page_read_user + * 图文页(点击群发图文卡片进入的页面)的阅读人数 + */ + @SerializedName("int_page_read_user") + private Integer intPageReadUser; + + /** + * int_page_read_count + * 图文页的阅读次数 + */ + @SerializedName("int_page_read_count") + private Integer intPageReadCount; + + /** + * ori_page_read_user + * 原文页(点击图文页“阅读原文”进入的页面)的阅读人数,无原文页时此处数据为0 + */ + @SerializedName("ori_page_read_user") + private Integer oriPageReadUser; + + /** + * ori_page_read_count + * 原文页的阅读次数 + */ + @SerializedName("ori_page_read_count") + private Integer oriPageReadCount; + + /** + * share_user + * 分享的人数 + */ + @SerializedName("share_user") + private Integer shareUser; + + /** + * share_count + * 分享的次数 + */ + @SerializedName("share_count") + private Integer shareCount; + + /** + * add_to_fav_user + * 收藏的人数 + */ + @SerializedName("add_to_fav_user") + private Integer addToFavUser; + + /** + * add_to_fav_count + * 收藏的次数 + */ + @SerializedName("add_to_fav_count") + private Integer addToFavCount; + + /** + * int_page_from_session_read_user + * 公众号会话阅读人数 + */ + @SerializedName("int_page_from_session_read_user") + private Integer intPageFromSessionReadUser; + + /** + * int_page_from_session_read_count + * 公众号会话阅读次数 + */ + @SerializedName("int_page_from_session_read_count") + private Integer intPageFromSessionReadCount; + + /** + * int_page_from_hist_msg_read_user + * 历史消息页阅读人数 + */ + @SerializedName("int_page_from_hist_msg_read_user") + private Integer intPageFromHistMsgReadUser; + + /** + * int_page_from_hist_msg_read_count + * 历史消息页阅读次数 + */ + @SerializedName("int_page_from_hist_msg_read_count") + private Integer intPageFromHistMsgReadCount; + + /** + * int_page_from_feed_read_user + * 朋友圈阅读人数 + */ + @SerializedName("int_page_from_feed_read_user") + private Integer intPageFromFeedReadUser; + + /** + * int_page_from_feed_read_count + * 朋友圈阅读次数 + */ + @SerializedName("int_page_from_feed_read_count") + private Integer intPageFromFeedReadCount; + + /** + * int_page_from_friends_read_user + * 好友转发阅读人数 + */ + @SerializedName("int_page_from_friends_read_user") + private Integer intPageFromFriendsReadUser; + + /** + * int_page_from_friends_read_count + * 好友转发阅读次数 + */ + @SerializedName("int_page_from_friends_read_count") + private Integer intPageFromFriendsReadCount; + + /** + * int_page_from_other_read_user + * 其他场景阅读人数 + */ + @SerializedName("int_page_from_other_read_user") + private Integer intPageFromOtherReadUser; + + /** + * int_page_from_other_read_count + * 其他场景阅读次数 + */ + @SerializedName("int_page_from_other_read_count") + private Integer intPageFromOtherReadCount; + + /** + * feed_share_from_session_user + * 公众号会话转发朋友圈人数 + */ + @SerializedName("feed_share_from_session_user") + private Integer feedShareFromSessionUser; + + /** + * feed_share_from_session_cnt + * 公众号会话转发朋友圈次数 + */ + @SerializedName("feed_share_from_session_cnt") + private Integer feedShareFromSessionCnt; + + /** + * feed_share_from_feed_user + * 朋友圈转发朋友圈人数 + */ + @SerializedName("feed_share_from_feed_user") + private Integer feedShareFromFeedUser; + + /** + * feed_share_from_feed_cnt + * 朋友圈转发朋友圈次数 + */ + @SerializedName("feed_share_from_feed_cnt") + private Integer feedShareFromFeedCnt; + + /** + * feed_share_from_other_user + * 其他场景转发朋友圈人数 + */ + @SerializedName("feed_share_from_other_user") + private Integer feedShareFromOtherUser; + + /** + * feed_share_from_other_cnt + * 其他场景转发朋友圈次数 + */ + @SerializedName("feed_share_from_other_cnt") + private Integer feedShareFromOtherCnt; + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java index 3f59cd35..429636e2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/datacube/WxDataCubeBaseResult.java @@ -9,7 +9,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; * @author binarywang(https://github.com/binarywang) * Created by Binary Wang on 2016/8/25. */ -public class WxDataCubeResultBase { +public class WxDataCubeBaseResult { @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java index 34570b30..bf920fff 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java @@ -3,6 +3,8 @@ package me.chanjar.weixin.mp.util.json; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import me.chanjar.weixin.mp.bean.*; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; import me.chanjar.weixin.mp.bean.result.*; public class WxMpGsonBuilder { @@ -25,8 +27,8 @@ public class WxMpGsonBuilder { INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter()); INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter()); INSTANCE.registerTypeAdapter(WxMpOAuth2AccessToken.class, new WxMpOAuth2AccessTokenAdapter()); - INSTANCE.registerTypeAdapter(WxMpUserSummary.class, new WxMpUserSummaryGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpUserCumulate.class, new WxMpUserCumulateGsonAdapter()); + INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter()); + INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter()); INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter()); INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter()); INSTANCE.registerTypeAdapter(WxMpMassNews.WxMpMassNewsArticle.class, new WxMpMassNewsArticleGsonAdapter()); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserCumulateGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserCumulateGsonAdapter.java index ab4449a6..991c2043 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserCumulateGsonAdapter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserCumulateGsonAdapter.java @@ -10,9 +10,7 @@ package me.chanjar.weixin.mp.util.json; import com.google.gson.*; import me.chanjar.weixin.common.util.json.GsonHelper; -import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; -import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; -import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; import java.lang.reflect.Type; import java.text.ParseException; @@ -23,12 +21,12 @@ import java.text.SimpleDateFormat; * @author Daniel Qian * */ -public class WxMpUserCumulateGsonAdapter implements JsonDeserializer { +public class WxMpUserCumulateGsonAdapter implements JsonDeserializer { private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); - public WxMpUserCumulate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - WxMpUserCumulate cumulate = new WxMpUserCumulate(); + public WxDataCubeUserCumulate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + WxDataCubeUserCumulate cumulate = new WxDataCubeUserCumulate(); JsonObject summaryJsonObject = json.getAsJsonObject(); try { diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserSummaryGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserSummaryGsonAdapter.java index 9db88884..e869b5c5 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserSummaryGsonAdapter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpUserSummaryGsonAdapter.java @@ -10,8 +10,7 @@ package me.chanjar.weixin.mp.util.json; import com.google.gson.*; import me.chanjar.weixin.common.util.json.GsonHelper; -import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; -import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; import java.lang.reflect.Type; import java.text.ParseException; @@ -20,13 +19,13 @@ import java.text.SimpleDateFormat; /** * @author Daniel Qian */ -public class WxMpUserSummaryGsonAdapter implements JsonDeserializer { +public class WxMpUserSummaryGsonAdapter implements JsonDeserializer { private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); - public WxMpUserSummary deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + public WxDataCubeUserSummary deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - WxMpUserSummary summary = new WxMpUserSummary(); + WxDataCubeUserSummary summary = new WxDataCubeUserSummary(); JsonObject summaryJsonObject = json.getAsJsonObject(); try { diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImplTest.java index ebfdee43..984dcc28 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImplTest.java @@ -1,20 +1,21 @@ package me.chanjar.weixin.mp.api.impl; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - +import com.google.inject.Inject; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.api.ApiTestModule; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; import org.testng.Assert; +import org.testng.annotations.DataProvider; import org.testng.annotations.Guice; import org.testng.annotations.Test; -import com.google.inject.Inject; - -import me.chanjar.weixin.common.exception.WxErrorException; -import me.chanjar.weixin.mp.api.ApiTestModule; -import me.chanjar.weixin.mp.bean.result.WxMpUserCumulate; -import me.chanjar.weixin.mp.bean.result.WxMpUserSummary; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; /** * 测试统计分析相关的接口 @@ -28,24 +29,91 @@ public class WxMpDataCubeServiceImplTest { @Inject protected WxMpServiceImpl wxService; - @Test - public void testGetUserSummary() throws WxErrorException, ParseException { - Date beginDate = simpleDateFormat.parse("2016-08-20"); - Date endDate = simpleDateFormat.parse("2016-08-22"); - List summaries = this.wxService.getDataCubeService() + @DataProvider + public Object[][] oneDay() throws ParseException { + return new Object[][]{{simpleDateFormat.parse("2016-08-22")}}; + } + + @DataProvider + public Object[][] threeDays() throws ParseException { + return new Object[][]{{simpleDateFormat.parse("2016-08-20"), + simpleDateFormat.parse("2016-08-22")}}; + } + + @DataProvider + public Object[][] sevenDays() throws ParseException { + return new Object[][]{{simpleDateFormat.parse("2016-08-16"), + simpleDateFormat.parse("2016-08-22")}}; + } + + @Test(dataProvider = "sevenDays") + public void testGetUserSummary(Date beginDate, Date endDate) + throws WxErrorException { + List summaries = this.wxService.getDataCubeService() .getUserSummary(beginDate, endDate); Assert.assertNotNull(summaries); System.out.println(summaries); } - @Test - public void testGetUserCumulate() throws WxErrorException, ParseException { - Date beginDate = simpleDateFormat.parse("2016-08-21"); - Date endDate = simpleDateFormat.parse("2016-08-22"); - List cumulates = this.wxService.getDataCubeService() + @Test(dataProvider = "sevenDays") + public void testGetUserCumulate(Date beginDate, Date endDate) + throws WxErrorException { + List result = this.wxService.getDataCubeService() .getUserCumulate(beginDate, endDate); - Assert.assertNotNull(cumulates); - System.out.println(cumulates); + Assert.assertNotNull(result); + System.out.println(result); + } + + @Test(dataProvider = "oneDay") + public void testGetArticleSummary(Date date) throws WxErrorException { + List results = this.wxService.getDataCubeService() + .getArticleSummary(date, date); + Assert.assertNotNull(results); + System.out.println(results); + } + + /** + * TODO 该接口,暂时没找到有数据的日期,无法测试验证 + */ + @Test(dataProvider = "oneDay") + public void testGetArticleTotal(Date date) throws WxErrorException { + List results = this.wxService.getDataCubeService() + .getArticleTotal(date, date); + Assert.assertNotNull(results); + System.out.println(results); + } + + @Test(dataProvider = "threeDays") + public void testGetUserRead(Date beginDate, Date endDate) + throws WxErrorException { + List results = this.wxService.getDataCubeService() + .getUserRead(beginDate, endDate); + Assert.assertNotNull(results); + System.out.println(results); + } + + @Test(dataProvider = "oneDay") + public void testGetUserReadHour(Date date) throws WxErrorException { + List results = this.wxService.getDataCubeService() + .getUserReadHour(date, date); + Assert.assertNotNull(results); + System.out.println(results); + } + + @Test(dataProvider = "sevenDays") + public void testGetUserShare(Date beginDate, Date endDate) + throws WxErrorException { + List results = this.wxService.getDataCubeService() + .getUserShare(beginDate, endDate); + Assert.assertNotNull(results); + System.out.println(results); } + @Test(dataProvider = "oneDay") + public void testGetUserShareHour(Date date) throws WxErrorException { + List results = this.wxService.getDataCubeService() + .getUserShareHour(date, date); + Assert.assertNotNull(results); + System.out.println(results); + } } diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfListTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfListTest.java index 05aa1692..0f52ae02 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfListTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/result/WxMpKfListTest.java @@ -4,8 +4,6 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.testng.Assert; import org.testng.annotations.Test; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; - @Test public class WxMpKfListTest {