From 54a4aa88a17d63898636145fdbd6a100393f09e9 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Mon, 26 Aug 2024 23:14:37 +0800 Subject: [PATCH] opt: liveRoom getBuvid --- lib/http/init.dart | 27 +++++++++++++++++++++++++-- lib/pages/live_room/controller.dart | 4 +++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/http/init.dart b/lib/http/init.dart index 231414cd..851f194e 100644 --- a/lib/http/init.dart +++ b/lib/http/init.dart @@ -29,7 +29,7 @@ class Request { late String systemProxyPort; static final RegExp spmPrefixExp = RegExp(r''); - static late String buvid; + static String? buvid; /// 设置cookie static setCookie() async { @@ -72,7 +72,6 @@ class Request { .map((Cookie cookie) => '${cookie.name}=${cookie.value}') .join('; '); - buvid = cookie.firstWhere((e) => e.name == 'buvid3').value; dio.options.headers['cookie'] = cookieString; } @@ -87,6 +86,30 @@ class Request { return token; } + static Future getBuvid() async { + if (buvid != null) { + return buvid!; + } + + final List cookies = await cookieManager.cookieJar + .loadForRequest(Uri.parse(HttpString.baseUrl)); + buvid = cookies.firstWhere((cookie) => cookie.name == 'buvid3').value; + if (buvid == null) { + try { + var result = await Request().get( + "${HttpString.apiBaseUrl}/x/frontend/finger/spi", + ); + buvid = result["data"]["b_3"].toString(); + } catch (e) { + // 处理请求错误 + buvid = ''; + print("Error fetching buvid: $e"); + } + } + + return buvid!; + } + static setOptionsHeaders(userInfo, bool status) { if (status) { dio.options.headers['x-bili-mid'] = userInfo.mid.toString(); diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart index 99025dce..5d4e2b67 100644 --- a/lib/pages/live_room/controller.dart +++ b/lib/pages/live_room/controller.dart @@ -47,6 +47,7 @@ class LiveRoomController extends GetxController { RxMap joinRoomTip = {'userName': '', 'message': ''}.obs; // 直播间弹幕开关 默认打开 RxBool danmakuSwitch = true.obs; + late String buvid; @override void onInit() { @@ -63,6 +64,7 @@ class LiveRoomController extends GetxController { if (liveItem != null && liveItem.cover != null && liveItem.cover != '') { cover = liveItem.cover; } + Request.getBuvid().then((value) => buvid = value); } // CDN优化 enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true); @@ -249,7 +251,7 @@ class LiveRoomController extends GetxController { "uid": userId, "roomid": roomId, "protover": 3, - "buvid": Request.buvid, + "buvid": buvid, "platform": "web", "type": 2, "key": token,