Skip to content

Commit

Permalink
fix(route/bilibili): fix manga updates
Browse files Browse the repository at this point in the history
  • Loading branch information
yan12125 committed Feb 7, 2025
1 parent 1618b57 commit 74d3184
Show file tree
Hide file tree
Showing 3 changed files with 672 additions and 4 deletions.
2 changes: 2 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ export default [{
'assets/build/radar-rules.js',
'lib/routes-deprecated',
'lib/router.js',
// A copy of https://github.com/golang/go/blob/master/lib/wasm/wasm_exec.js
'lib/routes/bilibili/wasm-exec.js',
'**/babel.config.js',
'scripts/docker/minify-docker.js',
],
Expand Down
32 changes: 28 additions & 4 deletions lib/routes/bilibili/manga-update.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Route } from '@/types';
import got from '@/utils/got';
import './wasm-exec.js';

export const route: Route = {
path: '/manga/update/:comicid',
Expand All @@ -24,18 +25,41 @@ export const route: Route = {
handler,
};

// Based on https://github.com/SocialSisterYi/bilibili-API-collect/issues/1168#issuecomment-2620749895
async function genReqSign(query, body) {
const wasm_resp = await got('https://s1.hdslb.com/bfs/manga-static/manga-pc/6732b1bf426cfc634293.wasm', {
responseType: 'arrayBuffer',
});

const go = new Go();
const { instance } = await WebAssembly.instantiate(wasm_resp.data, go.importObject);
go.run(instance);
if (void 0 === globalThis.genReqSign) {
throw new Error('WASM function not available');
}

const signature = globalThis.genReqSign(query, body, Date.now());

return signature.sign;
}

async function handler(ctx) {
const comic_id = ctx.req.param('comicid').startsWith('mc') ? ctx.req.param('comicid').replace('mc', '') : ctx.req.param('comicid');
const link = `https://manga.bilibili.com/detail/mc${comic_id}`;

const spi_response = await got('https://api.bilibili.com/x/frontend/finger/spi');

const query = 'device=pc&platform=web&nov=25';
const body = JSON.stringify({
comic_id: Number(comic_id),
});

const ultra_sign = await genReqSign(query, body);

const response = await got({
method: 'POST',
url: `https://manga.bilibili.com/twirp/comic.v2.Comic/ComicDetail?device=pc&platform=web`,
json: {
comic_id: Number(comic_id),
},
url: `https://manga.bilibili.com/twirp/comic.v2.Comic/ComicDetail?${query}&ultra_sign=${ultra_sign}`,
body,
headers: {
Referer: link,
Cookie: `buvid3=${spi_response.data.data.b_3}; buvid4=${spi_response.data.data.b_4}`,
Expand Down
Loading

0 comments on commit 74d3184

Please sign in to comment.