| @@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.api; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeInterfaceResult; | |||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeMsgResult; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeMsgResult; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | ||||
| @@ -189,4 +190,28 @@ public interface WxMpDataCubeService { | |||||
| * @param endDate 最大时间跨度30天,endDate不能早于begingDate | * @param endDate 最大时间跨度30天,endDate不能早于begingDate | ||||
| */ | */ | ||||
| List<WxDataCubeMsgResult> getUpstreamMsgDistMonth(Date beginDate, Date endDate) throws WxErrorException; | List<WxDataCubeMsgResult> getUpstreamMsgDistMonth(Date beginDate, Date endDate) throws WxErrorException; | ||||
| //*******************接口分析数据接口***********************// | |||||
| /** | |||||
| * <pre> | |||||
| * 获取接口分析数据(getinterfacesummary) | |||||
| * 详情请见文档:<a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141086&token=&lang=zh_CN">接口分析数据接口</a> | |||||
| * 接口url格式:https://api.weixin.qq.com/datacube/getinterfacesummary?access_token=ACCESS_TOKEN | |||||
| * | |||||
| * @param beginDate 开始时间 | |||||
| * @param endDate 最大时间跨度30天,endDate不能早于begingDate | |||||
| */ | |||||
| List<WxDataCubeInterfaceResult> getInterfaceSummary(Date beginDate, Date endDate) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 获取接口分析分时数据(getinterfacesummaryhour) | |||||
| * 详情请见文档:<a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141086&token=&lang=zh_CN">接口分析数据接口</a> | |||||
| * 接口url格式:https://api.weixin.qq.com/datacube/getinterfacesummaryhour?access_token=ACCESS_TOKEN | |||||
| * | |||||
| * @param beginDate 开始时间 | |||||
| * @param endDate 最大时间跨度1天,endDate不能早于begingDate | |||||
| */ | |||||
| List<WxDataCubeInterfaceResult> getInterfaceSummaryHour(Date beginDate, Date endDate) throws WxErrorException; | |||||
| } | } | ||||
| @@ -8,6 +8,7 @@ import me.chanjar.weixin.mp.api.WxMpDataCubeService; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeInterfaceResult; | |||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeMsgResult; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeMsgResult; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | ||||
| @@ -233,4 +234,32 @@ public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { | |||||
| new TypeToken<List<WxDataCubeMsgResult>>() { | new TypeToken<List<WxDataCubeMsgResult>>() { | ||||
| }.getType()); | }.getType()); | ||||
| } | } | ||||
| @Override | |||||
| public List<WxDataCubeInterfaceResult> getInterfaceSummary(Date beginDate, | |||||
| Date endDate) throws WxErrorException { | |||||
| String url = API_URL_PREFIX + "/getinterfacesummary"; | |||||
| 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<List<WxDataCubeInterfaceResult>>() { | |||||
| }.getType()); | |||||
| } | |||||
| @Override | |||||
| public List<WxDataCubeInterfaceResult> getInterfaceSummaryHour(Date beginDate, | |||||
| Date endDate) throws WxErrorException { | |||||
| String url = API_URL_PREFIX + "/getinterfacesummaryhour"; | |||||
| 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<List<WxDataCubeInterfaceResult>>() { | |||||
| }.getType()); | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,87 @@ | |||||
| 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/30. | |||||
| */ | |||||
| public class WxDataCubeInterfaceResult extends WxDataCubeBaseResult { | |||||
| /** | |||||
| * ref_hour | |||||
| * 数据的小时,包括从000到2300,分别代表的是[000,100)到[2300,2400),即每日的第1小时和最后1小时 | |||||
| */ | |||||
| @SerializedName("ref_hour") | |||||
| private Integer refHour; | |||||
| /** | |||||
| * callback_count | |||||
| * 通过服务器配置地址获得消息后,被动回复用户消息的次数 | |||||
| */ | |||||
| @SerializedName("callback_count") | |||||
| private Integer callbackCount; | |||||
| /** | |||||
| * fail_count | |||||
| * 上述动作的失败次数 | |||||
| */ | |||||
| @SerializedName("fail_count") | |||||
| private Integer failCount; | |||||
| /** | |||||
| * total_time_cost | |||||
| * 总耗时,除以callback_count即为平均耗时 | |||||
| */ | |||||
| @SerializedName("total_time_cost") | |||||
| private Integer totalTimeCost; | |||||
| /** | |||||
| * max_time_cost | |||||
| * 最大耗时 | |||||
| */ | |||||
| @SerializedName("max_time_cost") | |||||
| private Integer maxTimeCost; | |||||
| public Integer getRefHour() { | |||||
| return this.refHour; | |||||
| } | |||||
| public void setRefHour(Integer refHour) { | |||||
| this.refHour = refHour; | |||||
| } | |||||
| public Integer getCallbackCount() { | |||||
| return this.callbackCount; | |||||
| } | |||||
| public void setCallbackCount(Integer callbackCount) { | |||||
| this.callbackCount = callbackCount; | |||||
| } | |||||
| public Integer getFailCount() { | |||||
| return this.failCount; | |||||
| } | |||||
| public void setFailCount(Integer failCount) { | |||||
| this.failCount = failCount; | |||||
| } | |||||
| public Integer getTotalTimeCost() { | |||||
| return this.totalTimeCost; | |||||
| } | |||||
| public void setTotalTimeCost(Integer totalTimeCost) { | |||||
| this.totalTimeCost = totalTimeCost; | |||||
| } | |||||
| public Integer getMaxTimeCost() { | |||||
| return this.maxTimeCost; | |||||
| } | |||||
| public void setMaxTimeCost(Integer maxTimeCost) { | |||||
| this.maxTimeCost = maxTimeCost; | |||||
| } | |||||
| } | |||||
| @@ -1,24 +1,25 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import java.text.ParseException; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| 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 com.google.inject.Inject; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.ApiTestModule; | import me.chanjar.weixin.mp.api.ApiTestModule; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleResult; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeArticleTotal; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeInterfaceResult; | |||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeMsgResult; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeMsgResult; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; | ||||
| import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; | 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 static org.junit.Assert.fail; | |||||
| import java.text.ParseException; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * 测试统计分析相关的接口 | * 测试统计分析相关的接口 | ||||
| @@ -194,4 +195,20 @@ public class WxMpDataCubeServiceImplTest { | |||||
| Assert.assertNotNull(results); | Assert.assertNotNull(results); | ||||
| System.out.println(results); | System.out.println(results); | ||||
| } | } | ||||
| @Test(dataProvider = "thirtyDays") | |||||
| public void testGetInterfaceSummary(Date beginDate, Date endDate) throws WxErrorException { | |||||
| List<WxDataCubeInterfaceResult> results = this.wxService.getDataCubeService() | |||||
| .getInterfaceSummary(beginDate, endDate); | |||||
| Assert.assertNotNull(results); | |||||
| System.out.println(results); | |||||
| } | |||||
| @Test(dataProvider = "oneDay") | |||||
| public void testGetInterfaceSummaryHour(Date date) throws WxErrorException { | |||||
| List<WxDataCubeInterfaceResult> results = this.wxService.getDataCubeService() | |||||
| .getInterfaceSummaryHour(date, date); | |||||
| Assert.assertNotNull(results); | |||||
| System.out.println(results); | |||||
| } | |||||
| } | } | ||||