From 5a49fc831a38c80749a8679a97c0b93e5ae2b3fc Mon Sep 17 00:00:00 2001 From: yutou Date: Mon, 24 May 2021 15:45:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E8=BD=AE=E8=AF=A2=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E7=8A=B6=E6=80=81=20=E6=96=B0=E5=A2=9EgetLiveState?= =?UTF-8?q?=E6=9D=A5=E8=8E=B7=E5=8F=96=E7=9B=B4=E6=92=AD=E7=8A=B6=E6=80=81?= =?UTF-8?q?=20=E7=9B=B4=E6=92=AD=E7=8A=B6=E6=80=81=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=94=B9=E6=88=90=E5=9C=A8=E5=BF=83=E8=B7=B3=E5=8C=85=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yutou/bilibili/BiliBili/Live.java | 114 ++++++++++-------- .../yutou/bilibili/BiliBili/LiveUtils.java | 60 +-------- .../bilibili/BiliBili/Tools/SaveLive.java | 2 - .../yutou/bilibili/BilibiliApplication.java | 2 +- .../yutou/bilibili/QQBot/QQBotManager.java | 6 +- .../yutou/bilibili/Tools/ApplicationInit.java | 1 - .../com/yutou/bilibili/Tools/RedisTools.java | 1 - 7 files changed, 74 insertions(+), 112 deletions(-) diff --git a/src/main/java/com/yutou/bilibili/BiliBili/Live.java b/src/main/java/com/yutou/bilibili/BiliBili/Live.java index d25c8c2..7482750 100644 --- a/src/main/java/com/yutou/bilibili/BiliBili/Live.java +++ b/src/main/java/com/yutou/bilibili/BiliBili/Live.java @@ -17,6 +17,7 @@ import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliLiveData; import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliLiveInfo; import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliUpInfo; import com.yutou.bilibili.sqlite.BiliBiliLiveDatabasesManager; +import lombok.Data; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,7 @@ public class Live implements ApplicationContextAware { IBiliBiliLiveService service; - public static Map lives = new HashMap<>(); + public static Map lives = new HashMap<>(); private int roomId; @@ -49,7 +50,15 @@ public class Live implements ApplicationContextAware { private BilibiliUpInfo upData; private Timer heartBeattimer; public BiliBiliLiveDatabasesManager danmuManager = null; - public Timer checkLiveTimer; + private LiveInfo liveInfo; + + public LiveInfo getLiveInfo() { + return liveInfo; + } + + public void setLiveInfo(LiveInfo liveInfo) { + this.liveInfo = liveInfo; + } @PostConstruct public void init() { @@ -74,8 +83,8 @@ public class Live implements ApplicationContextAware { * @param isLogin 是否登录用户 */ public void add(int roomId, boolean isLogin) { - if(Live.lives.containsKey(roomId)){ - Log.i("已经在统计:"+roomId); + if (Live.lives.containsKey(roomId)) { + Log.i("已经在统计:" + roomId); return; } this.roomId = roomId; @@ -86,16 +95,10 @@ public class Live implements ApplicationContextAware { info.setGiftuser(0); info.setVipuserindex(0); info.setUserindex(0); - Live.lives.put(roomId,this); + Live.lives.put(roomId, this); updateUpInfo(); com.yutou.bilibili.Tools.Log.i("roomId = " + roomId + ", isLogin = " + isLogin); - checkLiveTimer = new Timer(); - checkLiveTimer.schedule(new TimerTask() { - @Override - public void run() { - checkLive(); - } - }, 0, 1000); + } private void updateUpInfo() { @@ -133,7 +136,7 @@ public class Live implements ApplicationContextAware { stop(); return; } - startTime=new Date(); + startTime = new Date(); HashMap header = new HashMap<>(); header.put("Sec-WebSocket-Extensions", "permessage-deflate; client_max_window_bits"); header.put("Sec-WebSocket-Key", "tORCZd8AI6xIyvqvgvI1Vw=="); @@ -181,7 +184,7 @@ public class Live implements ApplicationContextAware { public void onClose(int i, String s, boolean b) { com.yutou.bilibili.Tools.Log.i("连接时间:" + (System.currentTimeMillis() - time)); if (upData.getOfflinelistening() == 1) { - Log.i(roomId + " 断开连接,重连..."); + Log.i(roomId + " 断开连接,重连..."); try { init = true; heartBeattimer.cancel(); @@ -227,9 +230,6 @@ public class Live implements ApplicationContextAware { if (SaveLive.getInstance().checkLive(roomId)) { SaveLive.getInstance().stop(roomId); } - if (checkLiveTimer != null) { - checkLiveTimer.cancel(); - } Live.lives.remove(roomId); com.yutou.bilibili.Tools.Log.i("退出" + roomId + "直播间"); } @@ -241,7 +241,7 @@ public class Live implements ApplicationContextAware { */ private void likeLive() throws Exception { JSONObject tmp = LiveUtils.http_get("https://api.bilibili.com/x/web-interface/nav"); - if (tmp!=null&&tmp.getInteger("code") == -101) { + if (tmp != null && tmp.getInteger("code") == -101) { if (isLogin) { new File("cookies.json").deleteOnExit(); upData.setLive(0); @@ -251,11 +251,11 @@ public class Live implements ApplicationContextAware { } else { userId = 0; } - } else if (tmp!=null&&tmp.getInteger("code") == 0) { + } else if (tmp != null && tmp.getInteger("code") == 0) { userId = tmp.getJSONObject("data").getInteger("mid"); } JSONObject http = LiveUtils.http_get("https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id=" + roomId + "&type=0"); - if(http==null){ + if (http == null) { stop(); return; } @@ -289,18 +289,17 @@ public class Live implements ApplicationContextAware { if (data.length > 32) { List list = LiveUtils.getMsgList(LiveUtils.dec(bytes), new ArrayList<>(), true); - String tmp=""; - for (String str : list) { - processData(str, data); - tmp+=str.substring(0,16)+" | "; + String tmp = ""; + for (int i=0;i " + (json.getJSONObject("data").getJSONObject("room_info").getInteger("live_status") == 1) + " 录播器:" + liveContains(upData)); - return json.getJSONObject("data").getJSONObject("room_info").getInteger("live_status") == 1; + return json.getJSONObject("data").getInteger("live_status") == 1; } private static void checkLiveSave(int roomId) { @@ -422,55 +419,6 @@ public class LiveUtils { } - public static class LiveInfoManager { - private static LiveInfoManager manager; - private Map infoMap; - - public static LiveInfoManager getInstance() { - if (manager == null) { - manager = new LiveInfoManager(); - } - return manager; - } - - private LiveInfoManager() { - infoMap = new HashMap<>(); - } - - public synchronized void check(List list) { - for (BilibiliUpInfo upInfo : list) { - JSONObject json = getLiveInfo(upInfo.getRoomid()); - if (json != null) { - infoMap.put(upInfo.getRoomid(), json); - } - try { - Thread.sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - Log.i("信息map数量:"+infoMap.size()); - } - - public synchronized void check(int roomId) { - JSONObject json = getLiveInfo(roomId); - if (json != null) { - Log.i("登记直播:"+roomId); - infoMap.put(roomId, json); - }else{ - infoMap.remove(roomId); - } - } - - public synchronized JSONObject getInfo(int roomId) { - if (!infoMap.containsKey(roomId)) { - //check(roomId); - return null; - } - return infoMap.get(roomId); - } - } - public static void main(String[] args) { int index=1000; for (int i = 0; i < index; i++) { diff --git a/src/main/java/com/yutou/bilibili/BiliBili/Tools/SaveLive.java b/src/main/java/com/yutou/bilibili/BiliBili/Tools/SaveLive.java index 64e324e..b68ab30 100644 --- a/src/main/java/com/yutou/bilibili/BiliBili/Tools/SaveLive.java +++ b/src/main/java/com/yutou/bilibili/BiliBili/Tools/SaveLive.java @@ -78,7 +78,6 @@ public class SaveLive { heartbeats.get(roomId).cancel(); heartbeats.remove(roomId); } - LiveUtils.LiveInfoManager.getInstance().check(roomId); } @@ -134,7 +133,6 @@ public class SaveLive { if (!(e instanceof FileNotFoundException)) { Log.i("录制发生意外:" + e.getMessage()); QQBotManager.getInstance().sendMessage("录制发生意外:" + e.getLocalizedMessage()); - LiveUtils.LiveInfoManager.getInstance().check(roomId); } } SaveLive.this.stop(roomId); diff --git a/src/main/java/com/yutou/bilibili/BilibiliApplication.java b/src/main/java/com/yutou/bilibili/BilibiliApplication.java index 9774f7c..1376f5c 100644 --- a/src/main/java/com/yutou/bilibili/BilibiliApplication.java +++ b/src/main/java/com/yutou/bilibili/BilibiliApplication.java @@ -13,7 +13,7 @@ import org.springframework.context.annotation.Import; @SpringBootApplication public class BilibiliApplication { - public static String version="0.7.1"; + public static String version="0.7.4.1"; public static void main(String[] args) { QQBotManager.getInstance().init(); diff --git a/src/main/java/com/yutou/bilibili/QQBot/QQBotManager.java b/src/main/java/com/yutou/bilibili/QQBot/QQBotManager.java index bfba0ef..d615276 100644 --- a/src/main/java/com/yutou/bilibili/QQBot/QQBotManager.java +++ b/src/main/java/com/yutou/bilibili/QQBot/QQBotManager.java @@ -264,15 +264,15 @@ public class QQBotManager implements ApplicationContextAware { builder.append("当前正在记录数据的直播间:"); builder.append("\n"); for (Live live : Live.lives.values()) { - JSONObject liveJson = LiveUtils.LiveInfoManager.getInstance().getInfo(live.getInfo().getRoomid()); + Live.LiveInfo info=live.getLiveInfo(); if (LiveUtils.isLivePlayer(live.getInfo().getRoomid())) { builder.append("【直播中】"); } builder .append("名字:").append(live.geData().getName()).append(" ") .append(" roomId:").append(live.geData().getRoomid()).append(" "); - if (liveJson != null) { - builder.append("标题:").append(liveJson.getJSONObject("data").getJSONObject("room_info").getString("title")).append("\n"); + if (info != null) { + builder.append("标题:").append(info.getTitle()).append("\n"); } else { builder.append("\n"); } diff --git a/src/main/java/com/yutou/bilibili/Tools/ApplicationInit.java b/src/main/java/com/yutou/bilibili/Tools/ApplicationInit.java index 76c4421..f3fb0f1 100644 --- a/src/main/java/com/yutou/bilibili/Tools/ApplicationInit.java +++ b/src/main/java/com/yutou/bilibili/Tools/ApplicationInit.java @@ -90,7 +90,6 @@ public class ApplicationInit implements ApplicationRunner { saveData(time); break; } - LiveUtils.LiveInfoManager.getInstance().check(service.getUpInfo()); } private void checkLive() { diff --git a/src/main/java/com/yutou/bilibili/Tools/RedisTools.java b/src/main/java/com/yutou/bilibili/Tools/RedisTools.java index 00d21dd..29ae94d 100644 --- a/src/main/java/com/yutou/bilibili/Tools/RedisTools.java +++ b/src/main/java/com/yutou/bilibili/Tools/RedisTools.java @@ -42,7 +42,6 @@ public class RedisTools { Jedis jedis = getRedis(); jedis.select(dbIndex); String ret = jedis.set(key, value); - Log.i("Redis set =" + ret); jedis.close(); } catch (Exception e) { // TODO: handle exception