Skip to content
This repository has been archived by the owner on Jun 21, 2023. It is now read-only.

Commit

Permalink
新增bilibili热门直播获取
Browse files Browse the repository at this point in the history
  • Loading branch information
Ha2ryZhang committed May 15, 2020
1 parent 905d33f commit 18ca136
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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直播")
Expand All @@ -28,11 +30,22 @@ public BilibiliController(BilibiliService bilibiliService) {
@ApiImplicitParam(name = "roomId", value = "房间号,.com后面的那一串数字", required = true, dataType = "String"),
})
@GetMapping("real_url/{roomId}")
public Result<Map<String, String>> getRealUrl(@PathVariable(value = "roomId", required = true) String roomId){
public Result<Map<String, String>> getRealUrl(@PathVariable(value = "roomId") String roomId){
Map<String, String> 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<List<LiveRoom>> getTopRooms(Integer areaId,Integer pageSize,Integer page){
List<LiveRoom> topRooms = bilibiliService.getTopRooms(areaId, pageSize, page);
return Result.success(topRooms);
}
@ApiOperation("github bilibili api")
@GetMapping("getmore")
public String getMoreApi(){
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/com/debugers/alltv/controller/TopController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -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<List<LiveRoom>> getTopRooms(@PathVariable("cid") String cid, @RequestParam(defaultValue = "0") Integer pageNum){
public Result<List<LiveRoom>> getTopRooms(@PathVariable("cid") String cid, @RequestParam(defaultValue = "1") Integer pageNum){
List<LiveRoom> rooms = douYuService.getTopRoomsByCid(cid, 20, pageNum);
//暂时不知道怎么映射 各个平台的分类关系
if ("0".equals(cid)){
List<LiveRoom> topRooms = bilibiliService.getTopRooms(0, 10, pageNum);
rooms.addAll(topRooms);
}
Collections.sort(rooms);
return Result.success(rooms);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/com/debugers/alltv/model/LiveRoom.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@

@Data
public class LiveRoom implements Comparable<LiveRoom> {
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; //真是直播地址

Expand Down
26 changes: 26 additions & 0 deletions src/main/java/com/debugers/alltv/model/dto/BilibiliDTO.java
Original file line number Diff line number Diff line change
@@ -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; //热度
}
25 changes: 25 additions & 0 deletions src/main/java/com/debugers/alltv/service/BilibiliService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -29,7 +35,26 @@ public BilibiliServerConfig getRoomConfig(String rid) {
JSONObject response = HttpRequest.create(configUrl).get().getBodyJson();
return response.getObject("data",BilibiliServerConfig.class);
}
public List<LiveRoom> 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<BilibiliDTO> 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);

Expand Down

0 comments on commit 18ca136

Please sign in to comment.