From 18ca136a9e7e46780e6a9f1100da32ac8d308b22 Mon Sep 17 00:00:00 2001 From: Harry Zhang <1056373864@qq.com> Date: Fri, 15 May 2020 18:15:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ebilibili=E7=83=AD=E9=97=A8?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alltv/controller/BilibiliController.java | 15 ++++++++++- .../alltv/controller/TopController.java | 12 +++++++-- .../alltv/enumType/BilibiliOpenApi.java | 2 +- .../com/debugers/alltv/model/LiveRoom.java | 12 ++++----- .../debugers/alltv/model/dto/BilibiliDTO.java | 26 +++++++++++++++++++ .../alltv/service/BilibiliService.java | 25 ++++++++++++++++++ 6 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/debugers/alltv/model/dto/BilibiliDTO.java diff --git a/src/main/java/com/debugers/alltv/controller/BilibiliController.java b/src/main/java/com/debugers/alltv/controller/BilibiliController.java index 41c4595..029fe56 100644 --- a/src/main/java/com/debugers/alltv/controller/BilibiliController.java +++ b/src/main/java/com/debugers/alltv/controller/BilibiliController.java @@ -1,5 +1,6 @@ package com.debugers.alltv.controller; +import com.debugers.alltv.model.LiveRoom; import com.debugers.alltv.result.Result; import com.debugers.alltv.service.BilibiliService; import io.swagger.annotations.Api; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; +import java.util.List; import java.util.Map; @Api(tags = "Bilibili直播") @@ -28,11 +30,22 @@ public BilibiliController(BilibiliService bilibiliService) { @ApiImplicitParam(name = "roomId", value = "房间号,.com后面的那一串数字", required = true, dataType = "String"), }) @GetMapping("real_url/{roomId}") - public Result> getRealUrl(@PathVariable(value = "roomId", required = true) String roomId){ + public Result> getRealUrl(@PathVariable(value = "roomId") String roomId){ Map result = new HashMap<>(); result.put("realUrl", bilibiliService.getRealUrl(roomId)); return Result.success(result); } + @ApiOperation("获取bilibili热门房间") + @ApiImplicitParams({ + @ApiImplicitParam(name = "areaId", value = "B站区域id", required = true, dataType = "int"), + @ApiImplicitParam(name = "pageSize", value = "pageSize", required = true, dataType = "int"), + @ApiImplicitParam(name = "page", value = "page", required = true, dataType = "int") + }) + @GetMapping("rank") + public Result> getTopRooms(Integer areaId,Integer pageSize,Integer page){ + List topRooms = bilibiliService.getTopRooms(areaId, pageSize, page); + return Result.success(topRooms); + } @ApiOperation("github bilibili api") @GetMapping("getmore") public String getMoreApi(){ diff --git a/src/main/java/com/debugers/alltv/controller/TopController.java b/src/main/java/com/debugers/alltv/controller/TopController.java index 8ae6d95..3918204 100644 --- a/src/main/java/com/debugers/alltv/controller/TopController.java +++ b/src/main/java/com/debugers/alltv/controller/TopController.java @@ -2,6 +2,7 @@ import com.debugers.alltv.model.LiveRoom; import com.debugers.alltv.result.Result; +import com.debugers.alltv.service.BilibiliService; import com.debugers.alltv.service.DouYuService; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; @@ -14,13 +15,20 @@ @RequestMapping("api/top") public class TopController { private final DouYuService douYuService; + private final BilibiliService bilibiliService; - public TopController(DouYuService douYuService) { + public TopController(DouYuService douYuService, BilibiliService bilibiliService) { this.douYuService = douYuService; + this.bilibiliService = bilibiliService; } @GetMapping("live/{cid}") - public Result> getTopRooms(@PathVariable("cid") String cid, @RequestParam(defaultValue = "0") Integer pageNum){ + public Result> getTopRooms(@PathVariable("cid") String cid, @RequestParam(defaultValue = "1") Integer pageNum){ List rooms = douYuService.getTopRoomsByCid(cid, 20, pageNum); + //暂时不知道怎么映射 各个平台的分类关系 + if ("0".equals(cid)){ + List topRooms = bilibiliService.getTopRooms(0, 10, pageNum); + rooms.addAll(topRooms); + } Collections.sort(rooms); return Result.success(rooms); } diff --git a/src/main/java/com/debugers/alltv/enumType/BilibiliOpenApi.java b/src/main/java/com/debugers/alltv/enumType/BilibiliOpenApi.java index ccca342..379d505 100644 --- a/src/main/java/com/debugers/alltv/enumType/BilibiliOpenApi.java +++ b/src/main/java/com/debugers/alltv/enumType/BilibiliOpenApi.java @@ -10,7 +10,7 @@ public enum BilibiliOpenApi { SERVER_CONFIG("https://api.live.bilibili.com/room/v1/Danmu/getConf?id="), ROOM_INIT("https://api.live.bilibili.com/room/v1/Room/room_init?id="), PLAY_URL("https://api.live.bilibili.com/room/v1/Room/playUrl?cid="), - RANK("https://api.live.bilibili.com/room/v1/RoomRecommend/biliIndexRecList") + RANK("https://api.live.bilibili.com/room/v1/Area/getListByAreaID") ; private String url; diff --git a/src/main/java/com/debugers/alltv/model/LiveRoom.java b/src/main/java/com/debugers/alltv/model/LiveRoom.java index 2f2236c..59211c4 100644 --- a/src/main/java/com/debugers/alltv/model/LiveRoom.java +++ b/src/main/java/com/debugers/alltv/model/LiveRoom.java @@ -6,16 +6,16 @@ @Data public class LiveRoom implements Comparable { - private String roomId; + private String roomId;//房间号 private String com;//哪个平台 - private String cateId; - private String roomThumb; + private String cateId;//分类id + private String roomThumb;//房间缩略图 private String cateName;//分类名 - private String roomName; + private String roomName;//房间名 private Integer roomStatus; //1 开播 2 未开播 private Date startTime; - private String ownerName; - private String avatar; + private String ownerName;//主播名 + private String avatar;//主播头像 private Long online; //热度 private String realUrl; //真是直播地址 diff --git a/src/main/java/com/debugers/alltv/model/dto/BilibiliDTO.java b/src/main/java/com/debugers/alltv/model/dto/BilibiliDTO.java new file mode 100644 index 0000000..f784af8 --- /dev/null +++ b/src/main/java/com/debugers/alltv/model/dto/BilibiliDTO.java @@ -0,0 +1,26 @@ +package com.debugers.alltv.model.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +@Data +public class BilibiliDTO { + @JSONField(name = "roomid") + private String roomId; + @JSONField(name = "area") + private String area; + @JSONField(name = "area_v2_id") + private String area_v2_id; + @JSONField(name = "cover") + private String roomThumb; + @JSONField(name = "area_v2_name") + private String cateName;//分类名 + @JSONField(name = "title") + private String roomName; + @JSONField(name = "uname") + private String ownerName; + @JSONField(name = "face") + private String avatar; + @JSONField(name = "online") + private Long online; //热度 +} diff --git a/src/main/java/com/debugers/alltv/service/BilibiliService.java b/src/main/java/com/debugers/alltv/service/BilibiliService.java index a738dbc..54a0538 100644 --- a/src/main/java/com/debugers/alltv/service/BilibiliService.java +++ b/src/main/java/com/debugers/alltv/service/BilibiliService.java @@ -4,9 +4,15 @@ import com.alibaba.fastjson.JSONObject; import com.debugers.alltv.enumType.BilibiliOpenApi; import com.debugers.alltv.model.BilibiliServerConfig; +import com.debugers.alltv.model.LiveRoom; +import com.debugers.alltv.model.dto.BilibiliDTO; import com.debugers.alltv.util.http.HttpRequest; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service public class BilibiliService { public JSONObject getRealRoomId(String rid) { @@ -29,7 +35,26 @@ public BilibiliServerConfig getRoomConfig(String rid) { JSONObject response = HttpRequest.create(configUrl).get().getBodyJson(); return response.getObject("data",BilibiliServerConfig.class); } + public List getTopRooms(Integer areaId,Integer pageSize,Integer page){ + //?areaId=0&sort=online&pageSize=10&page=1 + JSONObject bodyJson = HttpRequest.create(BilibiliOpenApi.RANK.getValue()) + .appendParameter("sort","online") + .appendParameter("areaId",areaId) + .appendParameter("pageSize",pageSize) + .appendParameter("page",page) + .get().getBodyJson(); + List data = bodyJson.getJSONArray("data").toJavaList(BilibiliDTO.class); + return data.stream().map(this::convertToLiveRoom).collect(Collectors.toList()); + } + private LiveRoom convertToLiveRoom(BilibiliDTO dto){ + LiveRoom liveRoom = new LiveRoom(); + BeanUtils.copyProperties(dto, liveRoom); + liveRoom.setCom("bilibili"); + liveRoom.setRoomStatus(1); + liveRoom.setCateId(dto.getArea()+"-"+dto.getArea_v2_id()); + return liveRoom; + } public String getRealUrl(String rid) { JSONObject roomInfo = getRealRoomId(rid);