update
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class LiveAnchorInfo {
|
||||
/**
|
||||
* {
|
||||
* "title": "挑战最难魂系",
|
||||
* "room_id": 7688602,
|
||||
* "uid": 269415357,
|
||||
* "online": 43171,
|
||||
* "live_time": 1729049421,
|
||||
* "live_status": 1,
|
||||
* "short_id": 0,
|
||||
* "area": 6,
|
||||
* "area_name": "生活娱乐",
|
||||
* "area_v2_id": 745,
|
||||
* "area_v2_name": "虚拟Gamer",
|
||||
* "area_v2_parent_name": "虚拟主播",
|
||||
* "area_v2_parent_id": 9,
|
||||
* "uname": "花花Haya",
|
||||
* "face": "https://i0.hdslb.com/bfs/face/a269de03af269453d14eaf0dc7cc23240d69da6c.jpg",
|
||||
* "tag_name": "日常,学习,萌宠,厨艺,手机直播",
|
||||
* "tags": "唱见,虚拟主播,虚拟up主",
|
||||
* "cover_from_user": "https://i0.hdslb.com/bfs/live/new_room_cover/925b98639a8d3b62462bc699c6dbb833e27e17d5.jpg",
|
||||
* "keyframe": "https://i0.hdslb.com/bfs/live-key-frame/keyframe101614360000076886025wzvg0.jpg",
|
||||
* "lock_till": "0000-00-00 00:00:00",
|
||||
* "hidden_till": "0000-00-00 00:00:00",
|
||||
* "broadcast_type": 0
|
||||
* }
|
||||
*/
|
||||
@JSONField(name = "title")
|
||||
private String title;
|
||||
@JSONField(name = "room_id")
|
||||
private BigInteger roomId;
|
||||
@JSONField(name = "uid")
|
||||
private BigInteger uid;
|
||||
@JSONField(name = "online")
|
||||
private int online;
|
||||
@JSONField(name = "live_time")
|
||||
private long liveTime;
|
||||
@JSONField(name = "live_status")
|
||||
private int liveStatus;
|
||||
@JSONField(name = "short_id")
|
||||
private int shortId;
|
||||
@JSONField(name = "area")
|
||||
private int area;
|
||||
@JSONField(name = "area_name")
|
||||
private String areaName;
|
||||
@JSONField(name = "area_v2_id")
|
||||
private int areaV2Id;
|
||||
@JSONField(name = "area_v2_name")
|
||||
private String areaV2Name;
|
||||
@JSONField(name = "area_v2_parent_id")
|
||||
private int areaV2ParentId;
|
||||
@JSONField(name = "area_v2_parent_name")
|
||||
private String areaV2ParentName;
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
@JSONField(name = "face")
|
||||
private String face;//头像
|
||||
@JSONField(name = "cover_from_user")
|
||||
private String coverFromUser;//直播封面
|
||||
@JSONField(name = "tag_name")
|
||||
private String tagName;
|
||||
@JSONField(name = "tags")
|
||||
private String tags;
|
||||
@JSONField(name = "keyframe")
|
||||
private String keyframe;//直播关键帧
|
||||
@JSONField(name = "lock_till")
|
||||
private Date lockTill;
|
||||
@JSONField(name = "hidden_till")
|
||||
private Date hiddenTill;
|
||||
@JSONField(name = "broadcast_type")
|
||||
private int broadcastType;
|
||||
|
||||
}
|
||||
46
src/main/java/com/yutou/biliapi/bean/live/LiveDanmuInfo.java
Normal file
46
src/main/java/com/yutou/biliapi/bean/live/LiveDanmuInfo.java
Normal file
@@ -0,0 +1,46 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class LiveDanmuInfo {
|
||||
@JSONField(name = "group")
|
||||
private String group;
|
||||
|
||||
@JSONField(name = "business_id")
|
||||
private int businessId;
|
||||
|
||||
@JSONField(name = "refresh_row_factor")
|
||||
private double refreshRowFactor;
|
||||
|
||||
@JSONField(name = "refresh_rate")
|
||||
private int refreshRate;
|
||||
|
||||
@JSONField(name = "max_delay")
|
||||
private int maxDelay;
|
||||
|
||||
@JSONField(name = "token")
|
||||
private String token;
|
||||
|
||||
@JSONField(name = "host_list")
|
||||
private List<Host> hostList;
|
||||
|
||||
@Data
|
||||
public static class Host {
|
||||
|
||||
@JSONField(name = "host")
|
||||
private String host;
|
||||
|
||||
@JSONField(name = "port")
|
||||
private int port;
|
||||
|
||||
@JSONField(name = "wss_port")
|
||||
private int wssPort;
|
||||
|
||||
@JSONField(name = "ws_port")
|
||||
private int wsPort;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Objects;
|
||||
|
||||
@Data
|
||||
public class LiveRoomConfig {
|
||||
String loginUid;
|
||||
BigInteger roomId;
|
||||
String anchorName;
|
||||
boolean isLogin;
|
||||
LiveDanmuInfo liveInfo;
|
||||
LiveRoomInfo roomInfo;
|
||||
|
||||
public String getLoginUid() {
|
||||
if("null".equals(loginUid)){
|
||||
loginUid=null;
|
||||
}
|
||||
return loginUid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
LiveRoomConfig that = (LiveRoomConfig) o;
|
||||
return Objects.equals(roomId, that.roomId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(roomId);
|
||||
}
|
||||
}
|
||||
235
src/main/java/com/yutou/biliapi/bean/live/LiveRoomInfo.java
Normal file
235
src/main/java/com/yutou/biliapi/bean/live/LiveRoomInfo.java
Normal file
@@ -0,0 +1,235 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class LiveRoomInfo {
|
||||
@JSONField(name = "uid")
|
||||
private BigInteger uid;
|
||||
|
||||
@JSONField(name = "room_id")
|
||||
private BigInteger roomId;
|
||||
|
||||
@JSONField(name = "short_id")
|
||||
private int shortId;
|
||||
|
||||
@JSONField(name = "attention")
|
||||
private int attention;
|
||||
|
||||
@JSONField(name = "online")
|
||||
private int online;
|
||||
|
||||
@JSONField(name = "is_portrait")
|
||||
private boolean isPortrait;
|
||||
|
||||
@JSONField(name = "description")
|
||||
private String description;
|
||||
|
||||
@JSONField(name = "live_status")
|
||||
private int liveStatus;
|
||||
|
||||
@JSONField(name = "area_id")
|
||||
private int areaId;
|
||||
|
||||
@JSONField(name = "parent_area_id")
|
||||
private int parentAreaId;
|
||||
|
||||
@JSONField(name = "parent_area_name")
|
||||
private String parentAreaName;
|
||||
|
||||
@JSONField(name = "old_area_id")
|
||||
private int oldAreaId;
|
||||
|
||||
@JSONField(name = "background")
|
||||
private String background;
|
||||
|
||||
@JSONField(name = "title")
|
||||
private String title;
|
||||
|
||||
@JSONField(name = "user_cover")
|
||||
private String userCover;
|
||||
|
||||
@JSONField(name = "keyframe")
|
||||
private String keyframe;
|
||||
|
||||
@JSONField(name = "is_strict_room")
|
||||
private boolean isStrictRoom;
|
||||
|
||||
@JSONField(name = "live_time")
|
||||
private String liveTime;
|
||||
|
||||
@JSONField(name = "tags")
|
||||
private String tags;
|
||||
|
||||
@JSONField(name = "is_anchor")
|
||||
private int isAnchor;
|
||||
|
||||
@JSONField(name = "room_silent_type")
|
||||
private String roomSilentType;
|
||||
|
||||
@JSONField(name = "room_silent_level")
|
||||
private int roomSilentLevel;
|
||||
|
||||
@JSONField(name = "room_silent_second")
|
||||
private int roomSilentSecond;
|
||||
|
||||
@JSONField(name = "area_name")
|
||||
private String areaName;
|
||||
|
||||
@JSONField(name = "pendants")
|
||||
private String pendants;
|
||||
|
||||
@JSONField(name = "area_pendants")
|
||||
private String areaPendants;
|
||||
|
||||
@JSONField(name = "hot_words")
|
||||
private List<String> hotWords;
|
||||
|
||||
@JSONField(name = "hot_words_status")
|
||||
private int hotWordsStatus;
|
||||
|
||||
@JSONField(name = "verify")
|
||||
private String verify;
|
||||
|
||||
@JSONField(name = "new_pendants")
|
||||
private NewPendants newPendants;
|
||||
|
||||
@JSONField(name = "up_session")
|
||||
private String upSession;
|
||||
|
||||
@JSONField(name = "pk_status")
|
||||
private int pkStatus;
|
||||
|
||||
@JSONField(name = "pk_id")
|
||||
private int pkId;
|
||||
|
||||
@JSONField(name = "battle_id")
|
||||
private int battleId;
|
||||
|
||||
@JSONField(name = "allow_change_area_time")
|
||||
private int allowChangeAreaTime;
|
||||
|
||||
@JSONField(name = "allow_upload_cover_time")
|
||||
private int allowUploadCoverTime;
|
||||
|
||||
@JSONField(name = "studio_info")
|
||||
private StudioInfo studioInfo;
|
||||
|
||||
@Data
|
||||
public static class NewPendants {
|
||||
@JSONField(name = "frame")
|
||||
private Frame frame;
|
||||
|
||||
@JSONField(name = "badge")
|
||||
private Badge badge;
|
||||
|
||||
@JSONField(name = "mobile_frame")
|
||||
private MobileFrame mobileFrame;
|
||||
@JSONField(name = "mobile_badge")
|
||||
private MobileBadge mobileBadge;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Frame {
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
|
||||
@JSONField(name = "value")
|
||||
private String value;
|
||||
|
||||
@JSONField(name = "position")
|
||||
private int position;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
|
||||
@JSONField(name = "area")
|
||||
private int area;
|
||||
|
||||
@JSONField(name = "area_old")
|
||||
private int areaOld;
|
||||
|
||||
@JSONField(name = "bg_color")
|
||||
private String bgColor;
|
||||
|
||||
@JSONField(name = "bg_pic")
|
||||
private String bgPic;
|
||||
|
||||
@JSONField(name = "use_old_area")
|
||||
private boolean useOldArea;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Badge {
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
|
||||
@JSONField(name = "position")
|
||||
private int position;
|
||||
|
||||
@JSONField(name = "value")
|
||||
private String value;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class MobileFrame {
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
|
||||
@JSONField(name = "value")
|
||||
private String value;
|
||||
|
||||
@JSONField(name = "position")
|
||||
private int position;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
|
||||
@JSONField(name = "area")
|
||||
private int area;
|
||||
|
||||
@JSONField(name = "area_old")
|
||||
private int areaOld;
|
||||
|
||||
@JSONField(name = "bg_color")
|
||||
private String bgColor;
|
||||
|
||||
@JSONField(name = "bg_pic")
|
||||
private String bgPic;
|
||||
|
||||
@JSONField(name = "use_old_area")
|
||||
private boolean useOldArea;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class MobileBadge {
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
|
||||
@JSONField(name = "position")
|
||||
private int position;
|
||||
|
||||
@JSONField(name = "value")
|
||||
private String value;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class StudioInfo {
|
||||
@JSONField(name = "status")
|
||||
private int status;
|
||||
|
||||
@JSONField(name = "master_list")
|
||||
private List<String> masterList;
|
||||
}
|
||||
|
||||
}
|
||||
232
src/main/java/com/yutou/biliapi/bean/live/LiveRoomPlayInfo.java
Normal file
232
src/main/java/com/yutou/biliapi/bean/live/LiveRoomPlayInfo.java
Normal file
@@ -0,0 +1,232 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveRoomPlayInfo extends BaseBean {
|
||||
@JSONField(name = "room_id")
|
||||
private BigInteger roomId;
|
||||
|
||||
@JSONField(name = "short_id")
|
||||
private int shortId;
|
||||
|
||||
@JSONField(name = "uid")
|
||||
private BigInteger uid;
|
||||
|
||||
@JSONField(name = "is_hidden")
|
||||
private boolean isHidden;
|
||||
|
||||
@JSONField(name = "is_locked")
|
||||
private boolean isLocked;
|
||||
|
||||
@JSONField(name = "is_portrait")
|
||||
private boolean isPortrait;
|
||||
|
||||
@JSONField(name = "live_status")
|
||||
private int liveStatus;
|
||||
|
||||
@JSONField(name = "hidden_till")
|
||||
private int hiddenTill;
|
||||
|
||||
@JSONField(name = "lock_till")
|
||||
private int lockTill;
|
||||
|
||||
@JSONField(name = "encrypted")
|
||||
private boolean encrypted;
|
||||
|
||||
@JSONField(name = "pwd_verified")
|
||||
private boolean pwdVerified;
|
||||
|
||||
@JSONField(name = "live_time")
|
||||
private int liveTime;
|
||||
|
||||
@JSONField(name = "room_shield")
|
||||
private int roomShield;
|
||||
|
||||
@JSONField(name = "all_special_types")
|
||||
private List<Integer> allSpecialTypes;
|
||||
|
||||
@JSONField(name = "playurl_info")
|
||||
private PlayurlInfo playurlInfo;
|
||||
|
||||
@JSONField(name = "official_type")
|
||||
private int officialType;
|
||||
|
||||
@JSONField(name = "official_room_id")
|
||||
private int officialRoomId;
|
||||
|
||||
@JSONField(name = "risk_with_delay")
|
||||
private int riskWithDelay;
|
||||
|
||||
@Data
|
||||
public static class PlayurlInfo {
|
||||
@JSONField(name = "conf_json")
|
||||
private String confJson;
|
||||
|
||||
@JSONField(name = "playurl")
|
||||
private Playurl playurl;
|
||||
|
||||
@JSONField(name = "dolby_qn")
|
||||
private Integer dolbyQn;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Playurl {
|
||||
@JSONField(name = "cid")
|
||||
private int cid;
|
||||
|
||||
@JSONField(name = "g_qn_desc")
|
||||
private List<QnDesc> gQnDesc;
|
||||
|
||||
@JSONField(name = "stream")
|
||||
private List<Stream> stream;
|
||||
|
||||
@JSONField(name = "p2p_data")
|
||||
private P2pData p2pData;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class QnDesc {
|
||||
@JSONField(name = "qn")
|
||||
private int qn;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
|
||||
@JSONField(name = "hdr_desc")
|
||||
private String hdrDesc;
|
||||
|
||||
@JSONField(name = "attr_desc")
|
||||
private Object attrDesc;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Stream {
|
||||
@JSONField(name = "protocol_name")
|
||||
private String protocolName;
|
||||
|
||||
@JSONField(name = "format")
|
||||
private List<Format> format;
|
||||
|
||||
@JSONField(name = "p2p_type")
|
||||
private int p2pType;
|
||||
|
||||
@JSONField(name = "free_type")
|
||||
private int freeType;
|
||||
|
||||
@JSONField(name = "mid")
|
||||
private int mid;
|
||||
|
||||
@JSONField(name = "sid")
|
||||
private String sid;
|
||||
|
||||
@JSONField(name = "chash")
|
||||
private int chash;
|
||||
|
||||
@JSONField(name = "bmt")
|
||||
private int bmt;
|
||||
|
||||
@JSONField(name = "sche")
|
||||
private String sche;
|
||||
|
||||
@JSONField(name = "score")
|
||||
private int score;
|
||||
|
||||
@JSONField(name = "pp")
|
||||
private String pp;
|
||||
|
||||
@JSONField(name = "source")
|
||||
private String source;
|
||||
|
||||
@JSONField(name = "trace")
|
||||
private int trace;
|
||||
|
||||
@JSONField(name = "site")
|
||||
private String site;
|
||||
@JSONField(name = "zoneid_l")
|
||||
private int zoneidL;
|
||||
|
||||
@JSONField(name = "sid_l")
|
||||
private String sidL;
|
||||
|
||||
@JSONField(name = "order")
|
||||
private int order;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Format {
|
||||
@JSONField(name = "format_name")
|
||||
private String formatName;
|
||||
|
||||
@JSONField(name = "codec")
|
||||
private List<Codec> codec;
|
||||
|
||||
@JSONField(name = "hdr_qn")
|
||||
private Integer hdrQn;
|
||||
|
||||
@JSONField(name = "dolby_type")
|
||||
private int dolbyType;
|
||||
|
||||
@JSONField(name = "attr_name")
|
||||
private String attrName;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Codec {
|
||||
@JSONField(name = "codec_name")
|
||||
private String codecName;
|
||||
|
||||
@JSONField(name = "current_qn")
|
||||
private int currentQn;
|
||||
|
||||
@JSONField(name = "accept_qn")
|
||||
private List<Integer> acceptQn;
|
||||
|
||||
@JSONField(name = "base_url")
|
||||
private String baseUrl;
|
||||
|
||||
@JSONField(name = "url_info")
|
||||
private List<UrlInfo> urlInfo;
|
||||
|
||||
@JSONField(name = "hdr_desc")
|
||||
private String hdrDesc;
|
||||
|
||||
@JSONField(name = "attr_desc")
|
||||
private Object attrDesc;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class UrlInfo {
|
||||
@JSONField(name = "host")
|
||||
private String host;
|
||||
|
||||
@JSONField(name = "extra")
|
||||
private String extra;
|
||||
|
||||
@JSONField(name = "stream_ttl")
|
||||
private int streamTtl;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class P2pData {
|
||||
@JSONField(name = "p2p")
|
||||
private boolean p2p;
|
||||
|
||||
@JSONField(name = "p2p_type")
|
||||
private int p2pType;
|
||||
|
||||
@JSONField(name = "m_p2p")
|
||||
private boolean mP2p;
|
||||
|
||||
@JSONField(name = "m_servers")
|
||||
private List<String> mServers;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
@Data
|
||||
public class LiveRoomStatus {
|
||||
@JSONField(name = "roomStatus")
|
||||
private int roomStatus;
|
||||
|
||||
@JSONField(name = "roundStatus")
|
||||
private int roundStatus;
|
||||
|
||||
@JSONField(name = "liveStatus")
|
||||
private int liveStatus;
|
||||
|
||||
@JSONField(name = "url")
|
||||
private String url;
|
||||
|
||||
@JSONField(name = "title")
|
||||
private String title;
|
||||
|
||||
@JSONField(name = "cover")
|
||||
private String cover;
|
||||
|
||||
@JSONField(name = "online")
|
||||
private int online;
|
||||
|
||||
@JSONField(name = "roomid")
|
||||
private BigInteger roomid;
|
||||
|
||||
@JSONField(name = "broadcast_type")
|
||||
private int broadcastType;
|
||||
|
||||
@JSONField(name = "online_hidden")
|
||||
private int onlineHidden;
|
||||
}
|
||||
100
src/main/java/com/yutou/biliapi/bean/live/MasterInfoBean.java
Normal file
100
src/main/java/com/yutou/biliapi/bean/live/MasterInfoBean.java
Normal file
@@ -0,0 +1,100 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class MasterInfoBean extends BaseBean {
|
||||
@JSONField(name = "info")
|
||||
private Info info;
|
||||
|
||||
@JSONField(name = "exp")
|
||||
private Exp exp;
|
||||
|
||||
@JSONField(name = "follower_num")
|
||||
private int followerNum;
|
||||
|
||||
@JSONField(name = "room_id")
|
||||
private int roomId;
|
||||
|
||||
@JSONField(name = "medal_name")
|
||||
private String medalName;
|
||||
|
||||
@JSONField(name = "glory_count")
|
||||
private int gloryCount;
|
||||
|
||||
@JSONField(name = "pendant")
|
||||
private String pendant;
|
||||
|
||||
@JSONField(name = "link_group_num")
|
||||
private int linkGroupNum;
|
||||
|
||||
@JSONField(name = "room_news")
|
||||
private RoomNews roomNews;
|
||||
|
||||
@Data
|
||||
public static class Info {
|
||||
@JSONField(name = "uid")
|
||||
private BigInteger uid;
|
||||
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
|
||||
@JSONField(name = "face")
|
||||
private String face;
|
||||
|
||||
@JSONField(name = "official_verify")
|
||||
private OfficialVerify officialVerify;
|
||||
|
||||
@JSONField(name = "gender")
|
||||
private int gender;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Exp {
|
||||
@JSONField(name = "master_level")
|
||||
private MasterLevel masterLevel;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class MasterLevel {
|
||||
@JSONField(name = "level")
|
||||
private int level;
|
||||
|
||||
@JSONField(name = "color")
|
||||
private int color;
|
||||
|
||||
@JSONField(name = "current")
|
||||
private List<Integer> current;
|
||||
|
||||
@JSONField(name = "next")
|
||||
private List<Integer> next;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class OfficialVerify {
|
||||
@JSONField(name = "type")
|
||||
private int type;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class RoomNews {
|
||||
@JSONField(name = "content")
|
||||
private String content;
|
||||
|
||||
@JSONField(name = "ctime")
|
||||
private String ctime;
|
||||
|
||||
@JSONField(name = "ctime_text")
|
||||
private String ctimeText;
|
||||
}
|
||||
}
|
||||
12
src/main/java/com/yutou/biliapi/bean/live/SpiBean.java
Normal file
12
src/main/java/com/yutou/biliapi/bean/live/SpiBean.java
Normal file
@@ -0,0 +1,12 @@
|
||||
package com.yutou.biliapi.bean.live;
|
||||
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class SpiBean extends BaseBean {
|
||||
private String b_3;
|
||||
private String b_4;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveConfigDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "live_room_id")
|
||||
private BigInteger roomId;
|
||||
@JSONField(name = "anchorUid")
|
||||
private BigInteger anchorUid;
|
||||
@JSONField(name = "anchorName")
|
||||
private String anchorName;
|
||||
@JSONField(name = "anchorFace")
|
||||
private String anchorFace;
|
||||
@JSONField(name = "recordLive")
|
||||
private boolean isRecordLive;
|
||||
@JSONField(name = "recordDanmu")
|
||||
private boolean isRecordDanmu;
|
||||
@JSONField(name = "keyword")
|
||||
private List<String> keywordList;
|
||||
@JSONField(name = "recordUid")
|
||||
private String recordUid;
|
||||
@JSONField(name = "recordDanmuDate")
|
||||
private String recordDanmuDate="* * *";// * * * 分 时 星期 | 周日是1
|
||||
@JSONField(name = "recordLiveDate")
|
||||
private String recordLiveDate="* * *";// * * * 分 时 星期 | 周日是1
|
||||
|
||||
|
||||
public LiveConfigDatabaseBean() {
|
||||
super("live_config",System.currentTimeMillis());
|
||||
}
|
||||
public boolean checkRecordDanmuTime(){
|
||||
return checkRecordTime(recordDanmuDate);
|
||||
}
|
||||
public boolean checkRecordLiveTime(){
|
||||
return checkRecordTime(recordLiveDate);
|
||||
}
|
||||
private boolean checkRecordTime(String recordDate){
|
||||
int _length = recordDate.length();
|
||||
boolean isFullDate=(_length-recordDate.replace("*","").length())==3;
|
||||
if(isFullDate){
|
||||
return true;
|
||||
}
|
||||
String[] split=recordDate.split(" ");
|
||||
String minute=split[0];
|
||||
String hour=split[1];
|
||||
String day=split[2];
|
||||
boolean isFullMinute= "*".equals(minute);
|
||||
boolean isFullHour= "*".equals(hour);
|
||||
boolean isFullDay= "*".equals(day);
|
||||
Calendar today=Calendar.getInstance();
|
||||
if(!isFullDay){
|
||||
if(today.get(Calendar.DAY_OF_WEEK)!=Integer.parseInt(day)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(!isFullHour) {
|
||||
if (today.get(Calendar.HOUR_OF_DAY) != Integer.parseInt(hour)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(!isFullMinute){
|
||||
if(today.get(Calendar.MINUTE)!=Integer.parseInt(minute)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.biliapi.bean.websocket.live.WSDanmuData;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveDanmuDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "id")
|
||||
int id;
|
||||
@JSONField(name = "danmu")
|
||||
private String danmu;
|
||||
@JSONField(name = "model")
|
||||
private int model;// 1~3 滚动弹幕 4 底端弹幕 5 顶端弹幕 6 逆向弹幕 7 精准定位 8 高级弹幕
|
||||
@JSONField(name = "fontSize")
|
||||
private int fontSize;
|
||||
@JSONField(name = "color")
|
||||
private String fontColor;
|
||||
@JSONField(name = "time")
|
||||
private long time;
|
||||
@JSONField(name = "uid")
|
||||
private BigInteger uid;
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
|
||||
|
||||
|
||||
public LiveDanmuDatabaseBean() {
|
||||
super("danmu",System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public LiveDanmuDatabaseBean(WSDanmuData danmu) {
|
||||
super("danmu",danmu.getWs_timer());
|
||||
this.danmu = danmu.getDanmu();
|
||||
model = danmu.getModel();
|
||||
fontSize = danmu.getFontSize();
|
||||
fontColor = danmu.getFontColor();
|
||||
time = danmu.getTime();
|
||||
uid = danmu.getUid();
|
||||
uname = danmu.getUname();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.biliapi.bean.websocket.live.WSSendGift;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveGiftDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "id")
|
||||
int id;
|
||||
@JSONField(name = "gift_id")
|
||||
private int giftId;
|
||||
@JSONField(name = "gift_name")
|
||||
private String giftName;
|
||||
@JSONField(name = "price")
|
||||
private long price;
|
||||
@JSONField(name = "coin_type")
|
||||
private String coinType;
|
||||
@JSONField(name = "icon")
|
||||
private String icon;
|
||||
@JSONField(name = "gift_num")
|
||||
private int giftNum;
|
||||
@JSONField(name = "sender_uid")
|
||||
private long senderUid;
|
||||
@JSONField(name = "sender_name")
|
||||
private String senderName;
|
||||
@JSONField(name = "sender_face")
|
||||
private String senderFace;
|
||||
@JSONField(name = "send_time")
|
||||
private long sendTime;
|
||||
@JSONField(name = "action")
|
||||
private String action;
|
||||
|
||||
|
||||
public LiveGiftDatabaseBean() {
|
||||
super("gift",System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public LiveGiftDatabaseBean(WSSendGift gift) {
|
||||
super("gift",gift.getWs_timer());
|
||||
giftId = gift.getData().getGiftId();
|
||||
giftName = gift.getData().getGiftName();
|
||||
price = gift.getData().getPrice();
|
||||
coinType = gift.getData().getCoinType();
|
||||
icon = gift.getData().getGiftInfo().getWebp();
|
||||
if (gift.getData().getComboSend() != null) {
|
||||
giftNum = gift.getData().getComboSend().getGiftNum();
|
||||
} else {
|
||||
giftNum = 1;
|
||||
}
|
||||
senderUid = gift.getData().getSenderUinfo().getUid();
|
||||
senderName = gift.getData().getSenderUinfo().getBase().getName();
|
||||
senderFace = gift.getData().getSenderUinfo().getBase().getFace();
|
||||
sendTime = gift.getData().getTimestamp();
|
||||
action = gift.getData().getAction();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.biliapi.bean.live.LiveRoomInfo;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveInfoDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "id")
|
||||
int id;
|
||||
@JSONField(name = "roomId")
|
||||
private BigInteger roomId;
|
||||
@JSONField(name = "anchorUid")
|
||||
private BigInteger anchorUid;
|
||||
@JSONField(name = "title")
|
||||
private String title;
|
||||
@JSONField(name = "record_time_start")
|
||||
private long recordTimeStart;
|
||||
@JSONField(name = "record_time_end")
|
||||
private long recordTimeEnd;
|
||||
@JSONField(name = "cover")
|
||||
private String cover;
|
||||
@JSONField(name = "room_info")
|
||||
private String roomInfo;
|
||||
|
||||
public LiveInfoDatabaseBean(LiveRoomInfo info) {
|
||||
super("info", System.currentTimeMillis());
|
||||
roomId = info.getRoomId();
|
||||
roomInfo = JSONObject.toJSONString(info);
|
||||
recordTimeStart = System.currentTimeMillis();
|
||||
anchorUid = info.getUid();
|
||||
title = info.getTitle();
|
||||
cover = info.getUserCover();
|
||||
}
|
||||
|
||||
|
||||
public LiveInfoDatabaseBean() {
|
||||
super("info", System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
List<Field> list = new LiveInfoDatabaseBean().getFields();
|
||||
for (Field field : list) {
|
||||
System.out.println(field.getName());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.biliapi.bean.websocket.live.WSInteractWord;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveInteractWordDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "id")
|
||||
int id;
|
||||
@JSONField(name = "uid")
|
||||
private long uid;
|
||||
@JSONField(name = "type")
|
||||
private int type; //1为进场,2为关注
|
||||
@JSONField(name = "room_id")
|
||||
private long roomId;
|
||||
@JSONField(name = "timer")
|
||||
private long timer;
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
@JSONField(name = "uname_color")
|
||||
private String uname_color;
|
||||
@JSONField(name = "face")
|
||||
private String face;
|
||||
|
||||
public LiveInteractWordDatabaseBean() {
|
||||
super("InteractWord",System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public LiveInteractWordDatabaseBean(WSInteractWord bean) {
|
||||
super("InteractWord", bean.getWs_timer());
|
||||
uid = bean.getUid();
|
||||
type = bean.getType();
|
||||
roomId = bean.getRoomId();
|
||||
timer = bean.getTimer();
|
||||
uname = bean.getUname();
|
||||
uname_color = bean.getUname_color();
|
||||
face = bean.getFace();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.biliapi.bean.websocket.live.WSData;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveSourceDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "id")
|
||||
int id;
|
||||
@JSONField(name = "type")
|
||||
private String type;
|
||||
@JSONField(name = "json")
|
||||
private String json;
|
||||
|
||||
public LiveSourceDatabaseBean() {
|
||||
super("source",System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public LiveSourceDatabaseBean(WSData bean) {
|
||||
super("source",bean.getWs_timer());
|
||||
this.json = bean.getJson();
|
||||
type = bean.getCmd();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.yutou.biliapi.bean.live.database;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.biliapi.bean.websocket.live.WSSuperChatMessage;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LiveSuperChatDatabaseBean extends AbsDatabasesBean {
|
||||
@JSONField(name = "id")
|
||||
private int id;
|
||||
@JSONField(name = "price")
|
||||
private long price;
|
||||
@JSONField(name = "uid")
|
||||
private long uid;
|
||||
@JSONField(name = "start_time")
|
||||
private long start_time;
|
||||
@JSONField(name = "end_time")
|
||||
private long end_time;
|
||||
@JSONField(name = "message")
|
||||
private String message;
|
||||
@JSONField(name = "message_trans")
|
||||
private String message_trans;
|
||||
@JSONField(name = "message_font_color")
|
||||
private String message_font_color;
|
||||
|
||||
public LiveSuperChatDatabaseBean() {
|
||||
super("superChat",System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public LiveSuperChatDatabaseBean(WSSuperChatMessage bean) {
|
||||
super("superChat",bean.getWs_timer());
|
||||
price = bean.getPrice();
|
||||
uid = bean.getUid();
|
||||
start_time = bean.getStart_time();
|
||||
end_time = bean.getEnd_time();
|
||||
message = bean.getMessage();
|
||||
message_trans = bean.getMessage_trans();
|
||||
message_font_color = bean.getMessage_font_color();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.yutou.biliapi.bean.login;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class CheckCookieBean extends BaseBean {
|
||||
@JSONField(name = "refresh")
|
||||
boolean refresh;
|
||||
@JSONField(name = "timestamp")
|
||||
long timestamp;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.yutou.biliapi.bean.login;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LoginCookieDatabaseBean extends AbsDatabasesBean {
|
||||
|
||||
@JSONField(name = "SESSDATA")
|
||||
String sessdta;
|
||||
@JSONField(name = "Path")
|
||||
String path;
|
||||
@JSONField(name = "DedeUserID")
|
||||
String dedeUserID;
|
||||
@JSONField(name = "DedeUserID__ckMd5")
|
||||
String dedeUserIDCkMd5;
|
||||
@JSONField(name = "bili_jct")
|
||||
String biliJct;
|
||||
@JSONField(name = "Expires")
|
||||
String expires;
|
||||
@JSONField(name = "Domain")
|
||||
String domain;
|
||||
@JSONField(name = "sid")
|
||||
String sid;
|
||||
@JSONField(name = "gourl")
|
||||
String gourl;
|
||||
|
||||
public LoginCookieDatabaseBean() {
|
||||
super("login_cookie", System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.yutou.biliapi.bean.login;
|
||||
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LoginInfoBean extends BaseBean {
|
||||
private String url;
|
||||
private String refresh_token;
|
||||
private long timestamp;
|
||||
private int code;
|
||||
private String message;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.yutou.biliapi.bean.login;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.alibaba.fastjson2.util.DateUtils;
|
||||
import com.yutou.common.databases.AbsDatabasesBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LoginUserDatabaseBean extends AbsDatabasesBean {
|
||||
UserInfoBean userInfo;
|
||||
|
||||
public LoginUserDatabaseBean(UserInfoBean userInfo) {
|
||||
super("login_user",System.currentTimeMillis());
|
||||
this.userInfo=userInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject toJson() {
|
||||
if(userInfo==null){
|
||||
return new JSONObject();
|
||||
}
|
||||
JSONObject json= JSONObject.parseObject(JSONObject.toJSONString(userInfo));
|
||||
json.put("sql_time", DateUtils.format(getSql_time(), "yyyy-MM-dd HH:mm:ss.SSS"));
|
||||
return json;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Field> getFields() {
|
||||
List<Field> fields = new ArrayList<>(List.of(UserInfoBean.class.getDeclaredFields()));
|
||||
for (Field field : super.getFields()) {
|
||||
if(!field.getName().contains("userInfo")){
|
||||
fields.add(field);
|
||||
}
|
||||
}
|
||||
return fields;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.yutou.biliapi.bean.login;
|
||||
|
||||
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class QRCodeGenerateBean extends BaseBean {
|
||||
|
||||
private String url;
|
||||
private String qrcode_key;
|
||||
|
||||
}
|
||||
288
src/main/java/com/yutou/biliapi/bean/login/UserInfoBean.java
Normal file
288
src/main/java/com/yutou/biliapi/bean/login/UserInfoBean.java
Normal file
@@ -0,0 +1,288 @@
|
||||
package com.yutou.biliapi.bean.login;
|
||||
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class UserInfoBean extends BaseBean {
|
||||
|
||||
@JSONField(name = "isLogin")
|
||||
private boolean isLogin;
|
||||
|
||||
@JSONField(name = "email_verified")
|
||||
private int emailVerified;
|
||||
|
||||
@JSONField(name = "face")
|
||||
private String face;
|
||||
|
||||
@JSONField(name = "face_nft")
|
||||
private int faceNft;
|
||||
|
||||
@JSONField(name = "face_nft_type")
|
||||
private int faceNftType;
|
||||
|
||||
@JSONField(name = "level_info")
|
||||
private LevelInfo levelInfo;
|
||||
|
||||
@JSONField(name = "mid")
|
||||
private BigInteger mid;
|
||||
|
||||
@JSONField(name = "mobile_verified")
|
||||
private int mobileVerified;
|
||||
|
||||
@JSONField(name = "money")
|
||||
private double money;
|
||||
|
||||
@JSONField(name = "moral")
|
||||
private int moral;
|
||||
|
||||
@JSONField(name = "official")
|
||||
private Official official;
|
||||
|
||||
@JSONField(name = "officialVerify")
|
||||
private OfficialVerify officialVerify;
|
||||
|
||||
@JSONField(name = "pendant")
|
||||
private Pendant pendant;
|
||||
|
||||
@JSONField(name = "scores")
|
||||
private int scores;
|
||||
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
|
||||
@JSONField(name = "vipDueDate")
|
||||
private Date vipDueDate;
|
||||
|
||||
@JSONField(name = "vipStatus")
|
||||
private int vipStatus;
|
||||
|
||||
@JSONField(name = "vipType")
|
||||
private int vipType;
|
||||
|
||||
@JSONField(name = "vip_pay_type")
|
||||
private int vipPayType;
|
||||
|
||||
@JSONField(name = "vip_theme_type")
|
||||
private int vipThemeType;
|
||||
|
||||
@JSONField(name = "vip_label")
|
||||
private VipLabel vipLabel;
|
||||
|
||||
@JSONField(name = "vip_avatar_subscript")
|
||||
private int vipAvatarSubscript;
|
||||
|
||||
@JSONField(name = "vip_nickname_color")
|
||||
private String vipNicknameColor;
|
||||
|
||||
@JSONField(name = "vip")
|
||||
private Vip vip;
|
||||
|
||||
@JSONField(name = "wallet")
|
||||
private Wallet wallet;
|
||||
|
||||
@JSONField(name = "has_shop")
|
||||
private boolean hasShop;
|
||||
|
||||
@JSONField(name = "shop_url")
|
||||
private String shopUrl;
|
||||
|
||||
@JSONField(name = "allowance_count")
|
||||
private int allowanceCount;
|
||||
|
||||
@JSONField(name = "answer_status")
|
||||
private int answerStatus;
|
||||
|
||||
@JSONField(name = "is_senior_member")
|
||||
private boolean isSeniorMember;
|
||||
|
||||
@JSONField(name = "wbi_img")
|
||||
private WbiImg wbiImg;
|
||||
|
||||
@JSONField(name = "is_jury")
|
||||
private boolean isJury;
|
||||
|
||||
// 省略了getters和setters
|
||||
|
||||
// level_info的内部数据结构
|
||||
@Data
|
||||
public static class LevelInfo {
|
||||
@JSONField(name = "current_level")
|
||||
private int currentLevel;
|
||||
|
||||
@JSONField(name = "current_min")
|
||||
private int currentMin;
|
||||
|
||||
@JSONField(name = "current_exp")
|
||||
private int currentExp;
|
||||
|
||||
@JSONField(name = "next_exp")
|
||||
private String nextExp;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// official的结构
|
||||
@Data
|
||||
public static class Official {
|
||||
@JSONField(name = "role")
|
||||
private int role;
|
||||
|
||||
@JSONField(name = "title")
|
||||
private String title;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
|
||||
@JSONField(name = "type")
|
||||
private int type;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// officialVerify的结构
|
||||
@Data
|
||||
public static class OfficialVerify {
|
||||
@JSONField(name = "type")
|
||||
private int type;
|
||||
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// pendant的结构
|
||||
@Data
|
||||
public static class Pendant {
|
||||
@JSONField(name = "pid")
|
||||
private int pid;
|
||||
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
|
||||
@JSONField(name = "image")
|
||||
private String image;
|
||||
|
||||
@JSONField(name = "expire")
|
||||
private int expire;
|
||||
|
||||
@JSONField(name = "image_enhance")
|
||||
private String imageEnhance;
|
||||
|
||||
@JSONField(name = "image_enhance_frame")
|
||||
private String imageEnhanceFrame;
|
||||
|
||||
@JSONField(name = "n_pid")
|
||||
private int nPid;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// vipLabel的结构
|
||||
@Data
|
||||
public static class VipLabel {
|
||||
@JSONField(name = "path")
|
||||
private String path;
|
||||
|
||||
@JSONField(name = "text")
|
||||
private String text;
|
||||
|
||||
@JSONField(name = "label_theme")
|
||||
private String labelTheme;
|
||||
|
||||
@JSONField(name = "text_color")
|
||||
private String textColor;
|
||||
|
||||
@JSONField(name = "bg_style")
|
||||
private String bgStyle;
|
||||
|
||||
@JSONField(name = "bg_color")
|
||||
private String bgColor;
|
||||
|
||||
@JSONField(name = "border_color")
|
||||
private String borderColor;
|
||||
|
||||
@JSONField(name = "use_img_label")
|
||||
private boolean useImgLabel;
|
||||
|
||||
@JSONField(name = "img_label_uri_hans")
|
||||
private String imgLabelUriHans;
|
||||
|
||||
@JSONField(name = "img_label_uri_hant")
|
||||
private String imgLabelUriHant;
|
||||
|
||||
@JSONField(name = "img_label_uri_hans_static")
|
||||
private String imgLabelUriHansStatic;
|
||||
|
||||
@JSONField(name = "img_label_uri_hant_static")
|
||||
private String imgLabelUriHantStatic;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// vip的结构,和vipLabel类似
|
||||
@Data
|
||||
public static class Vip {
|
||||
@JSONField(name = "type")
|
||||
private int type;
|
||||
|
||||
@JSONField(name = "status")
|
||||
private int status;
|
||||
|
||||
@JSONField(name = "due_date")
|
||||
private Date dueDate;
|
||||
|
||||
@JSONField(name = "vip_pay_type")
|
||||
private int vipPayType;
|
||||
|
||||
@JSONField(name = "theme_type")
|
||||
private int themeType;
|
||||
|
||||
@JSONField(name = "label")
|
||||
private VipLabel label;
|
||||
|
||||
@JSONField(name = "avatar_subscript")
|
||||
private int avatarSubscript;
|
||||
|
||||
@JSONField(name = "nickname_color")
|
||||
private String nicknameColor;
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// wallet的结构
|
||||
@Data
|
||||
public static class Wallet {
|
||||
@JSONField(name = "mid")
|
||||
private long mid;
|
||||
|
||||
@JSONField(name = "bcoin_balance")
|
||||
private int bcoinBalance;
|
||||
|
||||
@JSONField(name = "coupon_balance")
|
||||
private int couponBalance;
|
||||
|
||||
@JSONField(name = "coupon_due_time")
|
||||
private int couponDueTime;
|
||||
// getters and setters
|
||||
}
|
||||
|
||||
// WbiImg的结构
|
||||
@Data
|
||||
public static class WbiImg {
|
||||
@JSONField(name = "img_url")
|
||||
private String imgUrl;
|
||||
|
||||
@JSONField(name = "sub_url")
|
||||
private String subUrl;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.yutou.biliapi.bean.websocket;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class WebSocketBody {
|
||||
List<JSONObject> bodyList;
|
||||
|
||||
public WebSocketBody(byte[] bytes) {
|
||||
bodyList = new ArrayList<>();
|
||||
addBody(bytes, 0);
|
||||
}
|
||||
|
||||
private void addBody(byte[] bytes, int offset) {
|
||||
if (offset >= bytes.length) {
|
||||
return;
|
||||
}
|
||||
byte[] headerByte = new byte[16];
|
||||
System.arraycopy(bytes, offset, headerByte, 0, headerByte.length);
|
||||
WebSocketHeader header = new WebSocketHeader(headerByte);
|
||||
byte[] data = new byte[header.getDataSize() - header.getHeaderSize()];
|
||||
System.arraycopy(bytes, offset + header.getHeaderSize(), data, 0, data.length);
|
||||
try {
|
||||
bodyList.add(JSONObject.parseObject(new String(data)));
|
||||
} catch (Exception e) {
|
||||
System.out.println(header + "|" + new String(data));
|
||||
}
|
||||
addBody(bytes, offset + header.dataSize);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.yutou.biliapi.bean.websocket;
|
||||
|
||||
import com.yutou.biliapi.utils.BytesUtils;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class WebSocketHeader {
|
||||
int dataSize;
|
||||
int agree;
|
||||
int headerSize;
|
||||
int cmdData;
|
||||
|
||||
public WebSocketHeader(byte[] bytes) {
|
||||
byte[] size = new byte[4];
|
||||
byte[] header = new byte[4];
|
||||
byte[] cmd = new byte[4];
|
||||
byte[] agreement = new byte[4];
|
||||
System.arraycopy(bytes, 0, size, 0, 4);
|
||||
System.arraycopy(bytes, 8, cmd, 0, 4);
|
||||
System.arraycopy(bytes, 6, agreement, 2, 2);
|
||||
System.arraycopy(bytes, 4, header, 2, 2);
|
||||
dataSize = BytesUtils.bytesToInt2(size, 0);
|
||||
agree = BytesUtils.bytesToInt2(agreement, 0);
|
||||
headerSize = BytesUtils.bytesToInt2(header, 0);
|
||||
cmdData = BytesUtils.bytesToInt2(cmd, 0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yutou.common.utils.Log;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
/**
|
||||
* 弹幕信息
|
||||
* <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/live/message_stream.md#%E5%BC%B9%E5%B9%95">弹幕</a>
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WSDanmuData extends WSData {
|
||||
private String dm_v2;
|
||||
private int id;
|
||||
private int model;// 1~3 滚动弹幕 4 底端弹幕 5 顶端弹幕 6 逆向弹幕 7 精准定位 8 高级弹幕
|
||||
private int fontSize;
|
||||
private String fontColor;
|
||||
private long time;
|
||||
private String uCode;
|
||||
private String danmu;
|
||||
private BigInteger uid;
|
||||
private String uname;
|
||||
private WSUserMedal medal;
|
||||
|
||||
public WSDanmuData(JSONObject json) {
|
||||
super(json);
|
||||
JSONArray infoData = json.getJSONArray("info");
|
||||
setModel(infoData.getJSONArray(0).getInteger(1));
|
||||
setFontSize(infoData.getJSONArray(0).getInteger(2));
|
||||
setFontColor(Integer.toHexString(infoData.getJSONArray(0).getInteger(3)));
|
||||
setTime(infoData.getJSONArray(0).getLong(4));
|
||||
setUCode(infoData.getJSONArray(0).getString(7));
|
||||
setDanmu(infoData.getString(1));
|
||||
setUid(infoData.getJSONArray(2).getBigInteger(0));
|
||||
setUname(infoData.getJSONArray(2).getString(1));
|
||||
try {
|
||||
medal = WSUserMedal.create(infoData.getJSONArray(3));
|
||||
} catch (Exception e) {
|
||||
Log.i("弹幕信息解析失败:" + json);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "弹幕 = " + "用户:" + getUname() + " 发送了: " + getDanmu() +" | json = "+jsonSrc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yutou.common.inter.ISqlDatabaseBean;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class WSData implements Serializable, ISqlDatabaseBean {
|
||||
public String cmd;
|
||||
public String jsonSrc;
|
||||
public long ws_timer;
|
||||
|
||||
@Deprecated
|
||||
public WSData() {
|
||||
throw new NullPointerException("需要传入json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WSData{" +
|
||||
"cmd='" + cmd + '\'' +
|
||||
", jsonSrc='" + jsonSrc + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
public WSData(JSONObject json) {
|
||||
this.cmd = json.getString("cmd");
|
||||
ws_timer = System.currentTimeMillis();
|
||||
this.jsonSrc = json.toString();
|
||||
}
|
||||
|
||||
public static WSData parse(JSONObject json) {
|
||||
String cmd = json.getString("cmd");
|
||||
return switch (cmd) {
|
||||
case "DANMU_MSG" -> new WSDanmuData(json);
|
||||
case "DM_INTERACTION" -> new WSDmInteraction(json);
|
||||
case "SEND_GIFT" -> new WSSendGift(json);
|
||||
case "INTERACT_WORD" -> new WSInteractWord(json);
|
||||
case "GUARD_BUY" -> new WSGuardBuy(json);
|
||||
default -> new WSData(json);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJson(){
|
||||
return jsonSrc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 连续弹幕消息
|
||||
* <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/live/message_stream.md#%E8%BF%9E%E7%BB%AD%E5%BC%B9%E5%B9%95%E6%B6%88%E6%81%AF">连续弹幕消息</a>
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WSDmInteraction extends WSData{
|
||||
public final static int TYPE_ZAN=106;//点赞
|
||||
public final static int TYPE_SHARE=105;//分享
|
||||
public final static int TYPE_DANMU=102;//弹幕
|
||||
private ComboData combo;
|
||||
private int type;
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSONObject json=JSONObject.parseObject("{\"cmd\":\"DM_INTERACTION\",\"data\":{\"data\":\"{\\\"fade_duration\\\":10000,\\\"cnt\\\":5,\\\"card_appear_interval\\\":0,\\\"suffix_text\\\":\\\"人正在点赞\\\",\\\"reset_cnt\\\":1,\\\"display_flag\\\":1}\",\"dmscore\":36,\"id\":53793047788032,\"status\":4,\"type\":106}}");
|
||||
WSDmInteraction wsDmInteraction=new WSDmInteraction(json);
|
||||
System.out.println(wsDmInteraction);
|
||||
}
|
||||
public WSDmInteraction(JSONObject json) {
|
||||
super(json);
|
||||
JSONObject data=json.getJSONObject("data");
|
||||
JSONObject comboJson=JSONObject.parseObject(data.getString("data"));
|
||||
combo=JSONObject.parseObject(data.getString("data"), ComboData.class);
|
||||
type=data.getIntValue("type");
|
||||
if(type==106){
|
||||
combo.setContent(comboJson.getString("suffix_text"));
|
||||
}
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class ComboData implements Serializable {
|
||||
String content;
|
||||
String guide;
|
||||
int cnt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WSDmInteraction{" +
|
||||
"combo=" + combo +
|
||||
", cmd='" + cmd + '\'' +
|
||||
", jsonSrc='" + jsonSrc + '\'' +
|
||||
", ws_timer=" + ws_timer +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 大航海购买
|
||||
* <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/live/message_stream.md#%E4%B8%8A%E8%88%B0%E9%80%9A%E7%9F%A5">上舰通知</a>
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WSGuardBuy extends WSData{
|
||||
private long uid;
|
||||
private String username;
|
||||
private long guardLevel;
|
||||
private long num;
|
||||
private long price;
|
||||
private long giftID;
|
||||
private String giftName;
|
||||
private long startTime;
|
||||
private long endTime;
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSONObject json=JSONObject.parseObject("{\"cmd\":\"GUARD_BUY\",\"data\":{\"uid\":5427372,\"username\":\"李湜渰\",\"guard_level\":3,\"num\":1,\"price\":198000,\"gift_id\":10003,\"gift_name\":\"舰长\",\"start_time\":1724985039,\"end_time\":1724985039}}");
|
||||
WSGuardBuy wsguardBuy = new WSGuardBuy(json);
|
||||
System.out.println(wsguardBuy);
|
||||
}
|
||||
public WSGuardBuy(JSONObject json) {
|
||||
super(json);
|
||||
JSONObject data = json.getJSONObject("data");
|
||||
uid = data.getLong("uid");
|
||||
username = data.getString("username");
|
||||
guardLevel = data.getLong("guard_level");
|
||||
num = data.getLong("num");
|
||||
price = data.getLong("price");
|
||||
giftID = data.getLong("gift_id");
|
||||
giftName = data.getString("gift_name");
|
||||
startTime = data.getLong("start_time");
|
||||
endTime = data.getLong("end_time");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* 进场信息
|
||||
* <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/live/message_stream.md#%E8%BF%9B%E5%9C%BA%E6%88%96%E5%85%B3%E6%B3%A8%E6%B6%88%E6%81%AF">进场</a>
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WSInteractWord extends WSData {
|
||||
public final static int TYPE_ENTER = 1;
|
||||
public final static int TYPE_FOLLOW = 2;
|
||||
private long uid;
|
||||
private int type; //1为进场,2为关注
|
||||
private long roomId;
|
||||
private long timer;
|
||||
private String uname;
|
||||
private String uname_color;
|
||||
private String face;
|
||||
private WSUserMedal medal;
|
||||
|
||||
|
||||
public WSInteractWord(JSONObject json) {
|
||||
super(json);
|
||||
JSONObject data = json.getJSONObject("data");
|
||||
JSONObject medalJson = data.containsKey("fans_medal") ? data.getJSONObject("fans_medal"):null;
|
||||
type = data.getIntValue("msg_type");
|
||||
roomId = data.getLong("roomid");
|
||||
timer = data.getLong("score");
|
||||
uid = data.getLong("uid");
|
||||
uname = data.getString("uname");
|
||||
uname_color = data.getString("uname_color");
|
||||
face = data.getJSONObject("uinfo").getJSONObject("base").getString("face");
|
||||
if (medalJson != null) {
|
||||
medal = new WSUserMedal();
|
||||
medal.setUid(medalJson.getLong("anchor_roomid"));
|
||||
medal.setMedal_name(medalJson.getString("medal_name"));
|
||||
medal.setMedal_color(Integer.toHexString(medalJson.getIntValue("medal_color")));
|
||||
medal.setMedal_level(medalJson.getIntValue("medal_level"));
|
||||
}
|
||||
}
|
||||
|
||||
public String getUname_color() {
|
||||
if (StringUtils.hasLength(uname_color)) {
|
||||
uname_color = "FFFFFF";
|
||||
}
|
||||
return uname_color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WSInteractWord{" +
|
||||
"type=" + type +
|
||||
", roomId=" + roomId +
|
||||
", timer=" + timer +
|
||||
", medal=" + medal +
|
||||
", uid=" + uid +
|
||||
", uname='" + uname + '\'' +
|
||||
", uname_color='" + uname_color + '\'' +
|
||||
", face='" + face + '\'' +
|
||||
", cmd='" + cmd + '\'' +
|
||||
", jsonSrc='" + jsonSrc + '\'' +
|
||||
", ws_timer=" + ws_timer +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.yutou.common.okhttp.BaseBean;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WSMedalInfo extends BaseBean {
|
||||
@JSONField(name = "anchor_roomid")
|
||||
private long anchorRoomid;
|
||||
@JSONField(name = "anchor_uname")
|
||||
private String anchorUname;
|
||||
@JSONField(name = "guard_level")
|
||||
private long guardLevel;
|
||||
@JSONField(name = "icon_id")
|
||||
private long iconID;
|
||||
@JSONField(name = "is_lighted")
|
||||
private long isLighted;
|
||||
@JSONField(name = "medal_color")
|
||||
private long medalColor;
|
||||
@JSONField(name = "medal_color_border")
|
||||
private long medalColorBorder;
|
||||
@JSONField(name = "medal_color_end")
|
||||
private long medalColorEnd;
|
||||
@JSONField(name = "medal_color_start")
|
||||
private long medalColorStart;
|
||||
@JSONField(name = "medal_level")
|
||||
private long medalLevel;
|
||||
@JSONField(name = "medal_name")
|
||||
private String medalName;
|
||||
@JSONField(name = "special")
|
||||
private String special;
|
||||
@JSONField(name = "target_id")
|
||||
private long targetID;
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@lombok.Data
|
||||
public class WSSendGift extends WSData {
|
||||
private Data data;
|
||||
|
||||
public WSSendGift(JSONObject json) {
|
||||
super(json);
|
||||
data = JSONObject.parseObject(json.getJSONObject("data").toString(), Data.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WSSendGift{" +
|
||||
"data=" + data +
|
||||
", cmd='" + cmd + '\'' +
|
||||
", jsonSrc='" + jsonSrc + '\'' +
|
||||
", ws_timer=" + ws_timer +
|
||||
'}';
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class Data implements Serializable {
|
||||
@JSONField(name = "action")
|
||||
private String action;
|
||||
@JSONField(name = "batch_combo_id")
|
||||
private String batchComboID;
|
||||
@JSONField(name = "batch_combo_send")
|
||||
private ComboSend batchComboSend;
|
||||
@JSONField(name = "combo_send")
|
||||
private ComboSend comboSend;
|
||||
@JSONField(name = "beatId")
|
||||
private String beatID;
|
||||
@JSONField(name = "biz_source")
|
||||
private String bizSource;
|
||||
@JSONField(name = "broadcast_id")
|
||||
private long broadcastID;
|
||||
@JSONField(name = "coin_type")
|
||||
private String coinType;
|
||||
@JSONField(name = "combo_resources_id")
|
||||
private long comboResourcesID;
|
||||
@JSONField(name = "combo_stay_time")
|
||||
private long comboStayTime;
|
||||
@JSONField(name = "combo_total_coin")
|
||||
private long comboTotalCoin;
|
||||
@JSONField(name = "crit_prob")
|
||||
private long critProb;
|
||||
@JSONField(name = "demarcation")
|
||||
private long demarcation;
|
||||
@JSONField(name = "discount_price")
|
||||
private long discountPrice;
|
||||
@JSONField(name = "dmscore")
|
||||
private long dmscore;
|
||||
@JSONField(name = "draw")
|
||||
private long draw;
|
||||
@JSONField(name = "effect")
|
||||
private long effect;
|
||||
@JSONField(name = "effect_block")
|
||||
private long effectBlock;
|
||||
@JSONField(name = "face")
|
||||
private String face;
|
||||
@JSONField(name = "face_effect_id")
|
||||
private long faceEffectID;
|
||||
@JSONField(name = "face_effect_type")
|
||||
private long faceEffectType;
|
||||
@JSONField(name = "face_effect_v2")
|
||||
private FaceEffectV2 faceEffectV2;
|
||||
@JSONField(name = "float_sc_resource_id")
|
||||
private long floatScResourceID;
|
||||
@JSONField(name = "giftId")
|
||||
private int giftId;
|
||||
@JSONField(name = "giftName")
|
||||
private String giftName;
|
||||
@JSONField(name = "giftType")
|
||||
private long giftType;
|
||||
@JSONField(name = "gift_info")
|
||||
private GiftInfo giftInfo;
|
||||
@JSONField(name = "gift_tag")
|
||||
private List<Long> giftTag;
|
||||
@JSONField(name = "gold")
|
||||
private long gold;
|
||||
@JSONField(name = "guard_level")
|
||||
private long guardLevel;
|
||||
@JSONField(name = "is_first")
|
||||
private boolean isFirst;
|
||||
@JSONField(name = "is_join_receiver")
|
||||
private boolean isJoinReceiver;
|
||||
@JSONField(name = "is_naming")
|
||||
private boolean isNaming;
|
||||
@JSONField(name = "is_special_batch")
|
||||
private long isSpecialBatch;
|
||||
@JSONField(name = "magnification")
|
||||
private long magnification;
|
||||
@JSONField(name = "medal_info")
|
||||
private WSMedalInfo medalInfo;
|
||||
@JSONField(name = "name_color")
|
||||
private String nameColor;
|
||||
@JSONField(name = "num")
|
||||
private long num;
|
||||
@JSONField(name = "original_gift_name")
|
||||
private String originalGiftName;
|
||||
@JSONField(name = "price")
|
||||
private long price;
|
||||
@JSONField(name = "rcost")
|
||||
private long rcost;
|
||||
@JSONField(name = "receive_user_info")
|
||||
private ReceiveUserInfo receiveUserInfo;
|
||||
@JSONField(name = "receiver_uinfo")
|
||||
private ErUinfo receiverUinfo;
|
||||
@JSONField(name = "remain")
|
||||
private long remain;
|
||||
@JSONField(name = "rnd")
|
||||
private String rnd;
|
||||
@JSONField(name = "sender_uinfo")
|
||||
private ErUinfo senderUinfo;
|
||||
@JSONField(name = "silver")
|
||||
private long silver;
|
||||
@JSONField(name = "super")
|
||||
private long dataSuper;
|
||||
@JSONField(name = "super_batch_gift_num")
|
||||
private long superBatchGiftNum;
|
||||
@JSONField(name = "super_gift_num")
|
||||
private long superGiftNum;
|
||||
@JSONField(name = "svga_block")
|
||||
private long svgaBlock;
|
||||
@JSONField(name = "switch")
|
||||
private boolean dataSwitch;
|
||||
@JSONField(name = "tag_image")
|
||||
private String tagImage;
|
||||
@JSONField(name = "tid")
|
||||
private String tid;
|
||||
@JSONField(name = "timestamp")
|
||||
private long timestamp;
|
||||
@JSONField(name = "total_coin")
|
||||
private long totalCoin;
|
||||
@JSONField(name = "uid")
|
||||
private long uid;
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
@JSONField(name = "wealth_level")
|
||||
private long wealthLevel;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class FaceEffectV2 implements Serializable {
|
||||
@JSONField(name = "id")
|
||||
private long id;
|
||||
@JSONField(name = "type")
|
||||
private long type;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class GiftInfo implements Serializable {
|
||||
@JSONField(name = "effect_id")
|
||||
private long effectID;
|
||||
@JSONField(name = "has_imaged_gift")
|
||||
private long hasImagedGift;
|
||||
@JSONField(name = "img_basic")
|
||||
private String imgBasic;
|
||||
@JSONField(name = "webp")
|
||||
private String webp;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class ReceiveUserInfo implements Serializable {
|
||||
@JSONField(name = "uid")
|
||||
private long uid;
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class ErUinfo implements Serializable {
|
||||
@JSONField(name = "base")
|
||||
private Base base;
|
||||
@JSONField(name = "uid")
|
||||
private long uid;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class Base implements Serializable {
|
||||
@JSONField(name = "face")
|
||||
private String face;
|
||||
@JSONField(name = "is_mystery")
|
||||
private boolean isMystery;
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
@JSONField(name = "name_color")
|
||||
private long nameColor;
|
||||
@JSONField(name = "name_color_str")
|
||||
private String nameColorStr;
|
||||
@JSONField(name = "official_info")
|
||||
private OfficialInfo officialInfo;
|
||||
@JSONField(name = "origin_info")
|
||||
private Info originInfo;
|
||||
@JSONField(name = "risk_ctrl_info")
|
||||
private Info riskCtrlInfo;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class OfficialInfo implements Serializable {
|
||||
@JSONField(name = "desc")
|
||||
private String desc;
|
||||
@JSONField(name = "role")
|
||||
private long role;
|
||||
@JSONField(name = "title")
|
||||
private String title;
|
||||
@JSONField(name = "type")
|
||||
private long type;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class Info implements Serializable {
|
||||
@JSONField(name = "face")
|
||||
private String face;
|
||||
@JSONField(name = "name")
|
||||
private String name;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class ComboSend implements Serializable {
|
||||
@JSONField(name = "action")
|
||||
private String action;
|
||||
@JSONField(name = "combo_id")
|
||||
private String comboID;
|
||||
@JSONField(name = "combo_num")
|
||||
private int comboNum;
|
||||
@JSONField(name = "gift_id")
|
||||
private long giftID;
|
||||
@JSONField(name = "gift_name")
|
||||
private String giftName;
|
||||
@JSONField(name = "gift_num")
|
||||
private int giftNum;
|
||||
@JSONField(name = "uid")
|
||||
private long uid;
|
||||
@JSONField(name = "uname")
|
||||
private String uname;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 超级留言
|
||||
* <a href="https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/live/message_stream.md#%E9%86%92%E7%9B%AE%E7%95%99%E8%A8%80-super_chat_message">醒目留言</a>
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WSSuperChatMessage extends WSData{
|
||||
private long price;
|
||||
private long rate;
|
||||
private long uid;
|
||||
private long start_time;
|
||||
private long end_time;
|
||||
private String message;
|
||||
private String message_trans;
|
||||
private String message_font_color;
|
||||
private WSMedalInfo medal_info;
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSONObject json=JSONObject.parseObject("{\"cmd\":\"SUPER_CHAT_MESSAGE\",\"data\":{\"background_bottom_color\":\"#2A60B2\",\"background_color\":\"#EDF5FF\",\"background_color_end\":\"#405D85\",\"background_color_start\":\"#3171D2\",\"background_icon\":\"\",\"background_image\":\"\",\"background_price_color\":\"#7497CD\",\"color_point\":0.7,\"dmscore\":616,\"end_time\":1724997230,\"gift\":{\"gift_id\":12000,\"gift_name\":\"醒目留言\",\"num\":1},\"group_medal\":{\"is_lighted\":0,\"medal_id\":0,\"name\":\"\"},\"id\":10427329,\"is_mystery\":false,\"is_ranked\":0,\"is_send_audit\":1,\"medal_info\":{\"anchor_roomid\":81004,\"anchor_uname\":\"艾尔莎_Channel\",\"guard_level\":0,\"icon_id\":0,\"is_lighted\":1,\"medal_color\":\"#1a544b\",\"medal_color_border\":1725515,\"medal_color_end\":5414290,\"medal_color_start\":1725515,\"medal_level\":21,\"medal_name\":\"艾薯条\",\"special\":\"\",\"target_id\":1521415},\"message\":\"莎莎,想安利你个植物大战僵尸的改版叫植物大战僵尸:肉鸽,具体情况私信你了,辛苦了\",\"message_font_color\":\"#A3F6FF\",\"message_trans\":\"サーシャ、あなたのPlantsvs.Zombiesの改版をPlantsvs.Zombiesと言いたい:肉鳩、具体的な状況は私的にあなたを信じて、お疲れ様でした\",\"price\":30,\"rate\":1000,\"start_time\":1724997170,\"time\":60,\"token\":\"9925C118\",\"trans_mark\":0,\"ts\":1724997170,\"uid\":100002175,\"uinfo\":{\"base\":{\"face\":\"https://i1.hdslb.com/bfs/face/b5ec3b1f7025b5546225ae0f36941d55ddef405b.jpg\",\"is_mystery\":false,\"name\":\"中吴同学\",\"name_color\":0,\"name_color_str\":\"#666666\",\"official_info\":{\"desc\":\"\",\"role\":0,\"title\":\"\",\"type\":-1},\"origin_info\":{\"face\":\"https://i1.hdslb.com/bfs/face/b5ec3b1f7025b5546225ae0f36941d55ddef405b.jpg\",\"name\":\"中吴同学\"}},\"guard\":{\"expired_str\":\"\",\"level\":0},\"medal\":{\"color\":1725515,\"color_border\":1725515,\"color_end\":5414290,\"color_start\":1725515,\"guard_icon\":\"\",\"guard_level\":0,\"honor_icon\":\"\",\"id\":0,\"is_light\":1,\"level\":21,\"name\":\"艾薯条\",\"ruid\":1521415,\"score\":50001980,\"typ\":0,\"user_receive_count\":0,\"v2_medal_color_border\":\"#5FC7F4FF\",\"v2_medal_color_end\":\"#43B3E3CC\",\"v2_medal_color_level\":\"#00308C99\",\"v2_medal_color_start\":\"#43B3E3CC\",\"v2_medal_color_text\":\"#FFFFFFFF\"},\"title\":{\"old_title_css_id\":\"\",\"title_css_id\":\"\"},\"uid\":100002175},\"user_info\":{\"face\":\"https://i1.hdslb.com/bfs/face/b5ec3b1f7025b5546225ae0f36941d55ddef405b.jpg\",\"face_frame\":\"\",\"guard_level\":0,\"is_main_vip\":1,\"is_svip\":0,\"is_vip\":0,\"level_color\":\"#5896de\",\"manager\":0,\"name_color\":\"#666666\",\"title\":\"\",\"uname\":\"中吴同学\",\"user_level\":25}},\"is_report\":true,\"msg_id\":\"19106780029655552:1000:1000\",\"p_is_ack\":true,\"p_msg_type\":1,\"send_time\":1724997170767}");
|
||||
WSSuperChatMessage message=new WSSuperChatMessage(json);
|
||||
System.out.println(message);
|
||||
}
|
||||
public WSSuperChatMessage(JSONObject json) {
|
||||
super(json);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.yutou.biliapi.bean.websocket.live;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class WSUserMedal {
|
||||
private long uid;
|
||||
private String medal_name;
|
||||
private String medal_color = "FFFFFF";
|
||||
private String medal_anchor;
|
||||
private int medal_level;
|
||||
|
||||
public static WSUserMedal create(JSONArray array) {
|
||||
if (array.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
WSUserMedal medal = new WSUserMedal();
|
||||
medal.setUid(array.getIntValue(3));
|
||||
medal.setMedal_name(array.getString(1));
|
||||
medal.setMedal_anchor(array.getString(2));
|
||||
medal.setMedal_level(array.getIntValue(0));
|
||||
return medal;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user