mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-05-05 05:07:46 +08:00
🆕 #1429 增加小程序直播类相关接口
* #1429 增加小程序直播类相关接口 * 新增:获取所有直播间列表,区分分页 * 优化代码格式 Co-authored-by: yjwang <yjwang@wisu.com.cn>
This commit is contained in:
parent
458c645fa4
commit
a9766960c3
@ -0,0 +1,62 @@
|
||||
package cn.binarywang.wx.miniapp.api;
|
||||
|
||||
import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
|
||||
import me.chanjar.weixin.common.error.WxErrorException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 直播相关操作接口.
|
||||
* Created by yjwang on 2020/4/5.
|
||||
* </pre>
|
||||
*
|
||||
* @author <a href="https://github.com/yjwang3300300">yjwang</a>
|
||||
*/
|
||||
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 .
|
||||
*/
|
||||
WxMaGetLiveInfo getLiveInfo(Integer start, Integer limit) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 获取所有直播间信息(没有分页直接获取全部)
|
||||
* @return
|
||||
* @throws WxErrorException
|
||||
*/
|
||||
List<WxMaGetLiveInfo.RoomInfo> getLiveinfos() throws WxErrorException;
|
||||
|
||||
/**
|
||||
*
|
||||
* 获取直播房间回放数据信息.
|
||||
*
|
||||
* @param action 获取回放
|
||||
* @param room_id 直播间 id
|
||||
* @param start 起始拉取视频,start = 0 表示从第 1 个视频片段开始拉取
|
||||
* @param limit 每次拉取的个数上限,不要设置过大,建议 100 以内
|
||||
* @return
|
||||
* @throws WxErrorException
|
||||
*/
|
||||
WxMaGetLiveInfo 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
|
||||
*/
|
||||
WxMaGetLiveInfo getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException;
|
||||
|
||||
}
|
@ -287,4 +287,11 @@ public interface WxMaService {
|
||||
* @return .
|
||||
*/
|
||||
WxMaCloudService getCloudService();
|
||||
|
||||
/**
|
||||
* 获取直播接口服务对象
|
||||
*
|
||||
* @return .
|
||||
*/
|
||||
WxMaLiveService getLiveService();
|
||||
}
|
||||
|
@ -0,0 +1,100 @@
|
||||
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 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.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* Created by yjwang on 2020/4/5.
|
||||
* </pre>
|
||||
*
|
||||
* @author <a href="https://github.com/yjwang3300300">yjwang</a>
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
public class WxMaLiveServiceImpl implements WxMaLiveService {
|
||||
private static final JsonParser JSON_PARSER = new JsonParser();
|
||||
private WxMaService service;
|
||||
|
||||
@Override
|
||||
public WxMaGetLiveInfo getLiveInfo(Integer start, Integer limit) throws WxErrorException {
|
||||
JsonObject jsonObject = getJsonObject(start, limit, null);
|
||||
return WxMaGetLiveInfo.fromJson(jsonObject.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WxMaGetLiveInfo.RoomInfo> getLiveinfos() throws WxErrorException {
|
||||
List<WxMaGetLiveInfo.RoomInfo> results = new ArrayList<>();
|
||||
Integer start = 0;
|
||||
Integer limit = 80;
|
||||
Integer tatal = 0;
|
||||
WxMaGetLiveInfo liveInfo = null;
|
||||
do {
|
||||
if (tatal != 0 && tatal <= start) {
|
||||
break;
|
||||
}
|
||||
liveInfo = getLiveInfo(start, limit);
|
||||
if (liveInfo == null) {
|
||||
return null;
|
||||
}
|
||||
results.addAll(liveInfo.getRoomInfos());
|
||||
tatal = liveInfo.getTotal();
|
||||
start = results.size();
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} while (results.size() <= tatal);
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxMaGetLiveInfo getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException {
|
||||
Map<String, Object> map = new HashMap(4);
|
||||
map.put("action", action);
|
||||
map.put("room_id", room_id);
|
||||
JsonObject jsonObject = getJsonObject(start, limit, map);
|
||||
return WxMaGetLiveInfo.fromJson(jsonObject.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxMaGetLiveInfo 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<String, Object> 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;
|
||||
}
|
||||
}
|
@ -60,6 +60,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl
|
||||
private WxMaExpressService expressService = new WxMaExpressServiceImpl(this);
|
||||
private WxMaSubscribeService subscribeService = new WxMaSubscribeServiceImpl(this);
|
||||
private WxMaCloudService cloudService = new WxMaCloudServiceImpl(this);
|
||||
private WxMaLiveService liveService = new WxMaLiveServiceImpl(this);
|
||||
|
||||
private int retrySleepMillis = 1000;
|
||||
private int maxRetryTimes = 5;
|
||||
@ -415,4 +416,9 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl
|
||||
public WxMaCloudService getCloudService() {
|
||||
return this.cloudService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WxMaLiveService getLiveService() {
|
||||
return this.liveService;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,88 @@
|
||||
package cn.binarywang.wx.miniapp.bean;
|
||||
|
||||
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 获取直播房间列表
|
||||
*
|
||||
* @author yjwang
|
||||
* @date 2020/4/5
|
||||
*/
|
||||
@Data
|
||||
public class WxMaGetLiveInfo implements Serializable {
|
||||
private static final long serialVersionUID = 7285263767524755887L;
|
||||
private Integer errcode;
|
||||
private String errmsg;
|
||||
private Integer total;
|
||||
/**
|
||||
* 直播间列表
|
||||
*/
|
||||
@SerializedName("room_info")
|
||||
private List<RoomInfo> roomInfos;
|
||||
/**
|
||||
* 获取回放源视频列表
|
||||
*/
|
||||
@SerializedName("live_replay")
|
||||
private List<LiveReplay> liveReplay;
|
||||
|
||||
public static WxMaGetLiveInfo fromJson(String json) {
|
||||
return WxMaGsonBuilder.create().fromJson(json, WxMaGetLiveInfo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 直播列表
|
||||
*/
|
||||
@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> 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
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 <a href="https://github.com/yjwang3300300">yjwang</a>
|
||||
*/
|
||||
@Test
|
||||
@Guice(modules = ApiTestModule.class)
|
||||
public class WxMaLiveServiceImplTest {
|
||||
|
||||
@Inject
|
||||
private WxMaService wxService;
|
||||
|
||||
@Test
|
||||
public void getLiveInfo() throws Exception {
|
||||
WxMaGetLiveInfo list = this.wxService.getLiveService().getLiveInfo(0,10);
|
||||
assertNotNull(list);
|
||||
System.out.println(list.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLiveReplay() throws Exception {
|
||||
// [12, 11, 10, 9, 8, 7, 6, 5, 3, 2]
|
||||
WxMaGetLiveInfo list = this.wxService.getLiveService().getLiveReplay(11,0,10);
|
||||
assertNotNull(list);
|
||||
System.out.println(list.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getLiveinfos() throws Exception {
|
||||
List<WxMaGetLiveInfo.RoomInfo> list = this.wxService.getLiveService().getLiveinfos();
|
||||
assertNotNull(list);
|
||||
System.out.println(list.toString());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user