@@ -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