Skip to content

Commit 7addf52

Browse files
committed
修复哔哩哔哩推荐、分类加载失败
1 parent 07b394d commit 7addf52

1 file changed

Lines changed: 53 additions & 30 deletions

File tree

simple_live_core/lib/src/bilibili_site.dart

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,24 @@ class BiliBiliSite implements LiveSite {
3232
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0";
3333
static const String kDefaultReferer = "https://live.bilibili.com/";
3434

35-
Map<String, String> getHeader() {
35+
String buvid3 = "";
36+
String buvid4 = "";
37+
Future<Map<String, String>> getHeader() async {
38+
if (buvid3.isEmpty) {
39+
var buvidInfo = await getBuvid();
40+
buvid3 = buvidInfo["b_3"] ?? "";
41+
buvid4 = buvidInfo["b_4"] ?? "";
42+
}
3643
return cookie.isEmpty
37-
? {"user-agent": kDefaultUserAgent, "referer": kDefaultReferer}
44+
? {
45+
"user-agent": kDefaultUserAgent,
46+
"referer": kDefaultReferer,
47+
"cookie": 'buvid3=$buvid3;buvid4=$buvid4;',
48+
}
3849
: {
39-
"cookie": cookie,
50+
"cookie": cookie.contains("buvid3")
51+
? cookie
52+
: "$cookie;buvid3=$buvid3;buvid4=$buvid4;",
4053
"user-agent": kDefaultUserAgent,
4154
"referer": kDefaultReferer,
4255
};
@@ -51,7 +64,7 @@ class BiliBiliSite implements LiveSite {
5164
"need_entrance": 1,
5265
"parent_id": 0,
5366
},
54-
header: getHeader(),
67+
header: await getHeader(),
5568
);
5669
for (var item in result["data"]) {
5770
List<LiveSubCategory> subs = [];
@@ -86,7 +99,7 @@ class BiliBiliSite implements LiveSite {
8699
var result = await HttpClient.instance.getJson(
87100
baseUrl,
88101
queryParameters: queryParams,
89-
header: getHeader(),
102+
header: await getHeader(),
90103
);
91104

92105
var hasMore = result["data"]["has_more"] == 1;
@@ -117,7 +130,7 @@ class BiliBiliSite implements LiveSite {
117130
"codec": "0,1",
118131
"platform": "web",
119132
},
120-
header: getHeader(),
133+
header: await getHeader(),
121134
);
122135
var qualitiesMap = <int, String>{};
123136
for (var item in result["data"]["playurl_info"]["playurl"]["g_qn_desc"]) {
@@ -151,7 +164,7 @@ class BiliBiliSite implements LiveSite {
151164
"platform": "web",
152165
"qn": quality.data,
153166
},
154-
header: getHeader(),
167+
header: await getHeader(),
155168
);
156169
var streamList = result["data"]["playurl_info"]["playurl"]["stream"];
157170
for (var streamItem in streamList) {
@@ -189,7 +202,7 @@ class BiliBiliSite implements LiveSite {
189202
var result = await HttpClient.instance.getJson(
190203
baseUrl,
191204
queryParameters: queryParams,
192-
header: getHeader(),
205+
header: await getHeader(),
193206
);
194207

195208
var hasMore = (result["data"]["list"] as List).isNotEmpty;
@@ -216,13 +229,13 @@ class BiliBiliSite implements LiveSite {
216229
queryParameters: {
217230
"id": realRoomId,
218231
},
219-
header: getHeader(),
232+
header: await getHeader(),
220233
);
221234
List<String> serverHosts = (roomDanmakuResult["data"]["host_list"] as List)
222235
.map<String>((e) => e["host"].toString())
223236
.toList();
224237

225-
var buvid = await getBuvid();
238+
//var buvid = await getBuvid();
226239
return LiveRoomDetail(
227240
roomId: realRoomId,
228241
title: roomInfo["room_info"]["title"].toString(),
@@ -241,7 +254,7 @@ class BiliBiliSite implements LiveSite {
241254
serverHost: serverHosts.isNotEmpty
242255
? serverHosts.first
243256
: "broadcastlv.chat.bilibili.com",
244-
buvid: buvid,
257+
buvid: buvid3,
245258
cookie: cookie,
246259
),
247260
);
@@ -254,7 +267,7 @@ class BiliBiliSite implements LiveSite {
254267
var result = await HttpClient.instance.getJson(
255268
"https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom",
256269
queryParameters: queryParams,
257-
header: getHeader(),
270+
header: await getHeader(),
258271
);
259272
return result["data"];
260273
}
@@ -274,11 +287,7 @@ class BiliBiliSite implements LiveSite {
274287
"single_column": 0,
275288
"page": page
276289
},
277-
header: {
278-
"cookie": cookie.isEmpty ? 'buvid3=infoc;' : cookie,
279-
"user-agent": kDefaultUserAgent,
280-
"referer": kDefaultReferer,
281-
},
290+
header: await getHeader(),
282291
);
283292

284293
var items = <LiveRoomItem>[];
@@ -313,11 +322,7 @@ class BiliBiliSite implements LiveSite {
313322
"single_column": 0,
314323
"page": page
315324
},
316-
header: {
317-
"cookie": cookie.isEmpty ? 'buvid3=infoc;' : cookie,
318-
"user-agent": kDefaultUserAgent,
319-
"referer": kDefaultReferer,
320-
},
325+
header: await getHeader(),
321326
);
322327

323328
var items = <LiveAnchorItem>[];
@@ -343,7 +348,7 @@ class BiliBiliSite implements LiveSite {
343348
queryParameters: {
344349
"room_id": roomId,
345350
},
346-
header: getHeader(),
351+
header: await getHeader(),
347352
);
348353
return (asT<int?>(result["data"]["live_status"]) ?? 0) == 1;
349354
}
@@ -356,7 +361,7 @@ class BiliBiliSite implements LiveSite {
356361
queryParameters: {
357362
"room_id": roomId,
358363
},
359-
header: getHeader(),
364+
header: await getHeader(),
360365
);
361366
List<LiveSuperChatMessage> ls = [];
362367
for (var item in result["data"]?["list"] ?? []) {
@@ -379,20 +384,38 @@ class BiliBiliSite implements LiveSite {
379384
return ls;
380385
}
381386

382-
Future<String> getBuvid() async {
387+
/// 获取 buvid3 和 buvid4
388+
/// 返回buvid3和buvid4
389+
/// ``` json
390+
/// {
391+
/// "b_3": "buvid3",
392+
/// "b_4": "buvid4",
393+
/// }
394+
/// ```
395+
Future<Map> getBuvid() async {
383396
try {
384397
if (cookie.contains("buvid3")) {
385-
return RegExp(r"buvid3=(.*?);").firstMatch(cookie)?.group(1) ?? "";
398+
return {
399+
"b_3": RegExp(r"buvid3=(.*?);").firstMatch(cookie)?.group(1) ?? "",
400+
"b_4": RegExp(r"buvid4=(.*?);").firstMatch(cookie)?.group(1) ?? "",
401+
};
386402
}
387403

388404
var result = await HttpClient.instance.getJson(
389405
"https://api.bilibili.com/x/frontend/finger/spi",
390406
queryParameters: {},
391-
header: getHeader(),
407+
header: {
408+
"user-agent": kDefaultUserAgent,
409+
"referer": kDefaultReferer,
410+
"cookie": cookie,
411+
},
392412
);
393-
return result["data"]["b_3"].toString();
413+
return result["data"];
394414
} catch (e) {
395-
return "";
415+
return {
416+
"b_3": "",
417+
"b_4": "",
418+
};
396419
}
397420
}
398421

@@ -471,7 +494,7 @@ class BiliBiliSite implements LiveSite {
471494
// 获取最新的 img_key 和 sub_key
472495
var resp = await HttpClient.instance.getJson(
473496
'https://api.bilibili.com/x/web-interface/nav',
474-
header: getHeader(),
497+
header: await getHeader(),
475498
);
476499

477500
var imgUrl = resp["data"]["wbi_img"]["img_url"].toString();

0 commit comments

Comments
 (0)