From cacd99c9ec78af9644baddfc8cf72aadfcdaace7 Mon Sep 17 00:00:00 2001 From: yjwang Date: Sun, 5 Apr 2020 13:57:34 +0800 Subject: [PATCH] =?UTF-8?q?#1429=20=E5=A2=9E=E5=8A=A0=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=9B=B4=E6=92=AD=E7=B1=BB=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wx/miniapp/api/WxMaLiveService.java | 55 ++++++++++++ .../wx/miniapp/api/WxMaService.java | 7 ++ .../miniapp/api/impl/WxMaLiveServiceImpl.java | 74 +++++++++++++++++ .../wx/miniapp/api/impl/WxMaServiceImpl.java | 6 ++ .../wx/miniapp/bean/WxMaGetLiveInfo.java | 83 +++++++++++++++++++ .../api/impl/WxMaLiveServiceImplTest.java | 48 +++++++++++ 6 files changed, 273 insertions(+) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGetLiveInfo.java create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java new file mode 100644 index 0000000000..72712b7af1 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLiveService.java @@ -0,0 +1,55 @@ +package cn.binarywang.wx.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo; +import me.chanjar.weixin.common.error.WxErrorException; + +import java.util.List; + +/** + *
+ *  直播相关操作接口.
+ *  Created by yjwang on 2020/4/5.
+ * 
+ * + * @author yjwang + */ +public interface WxMaLiveService { + String GET_LIVE_INFO = "http://api.weixin.qq.com/wxa/business/getliveinfo"; + + /** + * 获取直播房间列表. + * + * @param start 起始拉取房间,start = 0 表示从第 1 个房间开始拉取 + * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 + * @return . + * @throws WxErrorException . + */ + List getLiveInfo(Integer start, Integer limit) throws WxErrorException; + + /** + * + * 获取直播房间回放数据信息. + * + * @param action 获取回放 + * @param room_id 直播间 id + * @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取 + * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 + * @return + * @throws WxErrorException + */ + List getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException; + + /** + * + * 获取直播房间回放数据信息. + * + * 获取回放 (默认:get_replay) + * @param room_id 直播间 id + * @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取 + * @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内 + * @return + * @throws WxErrorException + */ + List getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException; + +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java index 072907ba12..6b4a715661 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java @@ -287,4 +287,11 @@ public interface WxMaService { * @return . */ WxMaCloudService getCloudService(); + + /** + * 获取直播接口服务对象 + * + * @return . + */ + WxMaLiveService getLiveService(); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java new file mode 100644 index 0000000000..86f1e5a6e2 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImpl.java @@ -0,0 +1,74 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaLiveService; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo; +import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; +import lombok.AllArgsConstructor; +import me.chanjar.weixin.common.WxType; +import me.chanjar.weixin.common.error.WxError; +import me.chanjar.weixin.common.error.WxErrorException; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + *
+ *  Created by yjwang on 2020/4/5.
+ * 
+ * + * @author yjwang + */ +@AllArgsConstructor +public class WxMaLiveServiceImpl implements WxMaLiveService { + private static final JsonParser JSON_PARSER = new JsonParser(); + private WxMaService service; + + @Override + public List getLiveInfo(Integer start, Integer limit) throws WxErrorException { + JsonObject jsonObject = getJsonObject(start, limit, null); + return WxMaGsonBuilder.create().fromJson(jsonObject.get("room_info").toString(), new TypeToken>() { + }.getType()); + } + + @Override + public List getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException { + Map map = new HashMap(4); + map.put("action", action); + map.put("room_id", room_id); + JsonObject jsonObject = getJsonObject(start, limit, map); + return WxMaGsonBuilder.create().fromJson(jsonObject.get("live_replay").toString(), new TypeToken>() { + }.getType()); + } + + @Override + public List getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException { + return getLiveReplay("get_replay", room_id, start, limit); + } + + /** + * 包装一下 + * @param start + * @param limit + * @param map + * @return + * @throws WxErrorException + */ + private JsonObject getJsonObject(Integer start, Integer limit, Map map) throws WxErrorException { + if (map == null) { + map = new HashMap(2); + } + map.put("start", start); + map.put("limit", limit); + String responseContent = service.post(GET_LIVE_INFO, WxMaGsonBuilder.create().toJson(map)); + JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return jsonObject; + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java index a2897a4acc..88984c3533 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java @@ -60,6 +60,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp roomInfos; + /** + * 获取回放源视频列表 + */ + @SerializedName("live_replay") + private List liveReplay; + + /** + * 直播列表 + */ + @Data + public static class RoomInfo implements Serializable { + private static final long serialVersionUID = 7745775280267417154L; + private String name; + private Integer roomid; + @SerializedName("cover_img") + private String coverImg; + @SerializedName("live_satus") + private Integer liveSatus; + @SerializedName("start_time") + private Long startTime; + @SerializedName("end_time") + private Long endTime; + @SerializedName("anchor_name") + private String anchorName; + @SerializedName("anchor_img") + private String anchorImg; + private List goods; + } + + /** + * 商品列表 + */ + @Data + public static class Goods implements Serializable { + private static final long serialVersionUID = 5769245932149287574L; + @SerializedName("cover_img") + private String coverImg; + private String url; + private String price; + private String name; + } + + /** + * 回放数据列表 + */ + @Data + public static class LiveReplay implements Serializable { + private static final long serialVersionUID = 7683927205627536320L; + @SerializedName("expire_time") + private String expireTime; + @SerializedName("create_time") + private String createTime; + @SerializedName("media_url") + private String mediaUrl; + } + + +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java new file mode 100644 index 0000000000..f8de17e80f --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLiveServiceImplTest.java @@ -0,0 +1,48 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; +import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import cn.binarywang.wx.miniapp.test.TestConfig; +import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonObject; +import com.google.inject.Inject; +import me.chanjar.weixin.common.error.WxErrorException; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +/** + * 测试直播相关的接口 + * + * @author yjwang + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaLiveServiceImplTest { + + @Inject + private WxMaService wxService; + + @Test + public void getLiveInfo() throws Exception { + List list = this.wxService.getLiveService().getLiveInfo(0,10); + assertNotNull(list); + System.out.println(list.stream().map(e -> e.getRoomid()).collect(Collectors.toList()).toString()); + } + + @Test + public void getLiveReplay() throws Exception { + // [12, 11, 10, 9, 8, 7, 6, 5, 3, 2] + List list = this.wxService.getLiveService().getLiveReplay(11,0,10); + assertNotNull(list); + System.out.println(list.toString()); + } +}