diff --git a/lib/routes/bilibili/cache.ts b/lib/routes/bilibili/cache.ts index a22d7d15a2a93..34c2502c397c1 100644 --- a/lib/routes/bilibili/cache.ts +++ b/lib/routes/bilibili/cache.ts @@ -5,6 +5,7 @@ import { load } from 'cheerio'; import { config } from '@/config'; import logger from '@/utils/logger'; import puppeteer from '@/utils/puppeteer'; +import { JSDOM } from 'jsdom'; let disableConfigCookie = false; const getCookie = () => { @@ -39,6 +40,26 @@ const clearCookie = () => { disableConfigCookie = true; }; +const getRenderData = (uid) => { + const key = 'bili-web-render-data'; + return cache.tryGet(key, async () => { + const cookie = await getCookie(); + const { data: response } = await got(`https://space.bilibili.com/${uid}`, { + headers: { + Referer: 'https://www.bilibili.com/', + Cookie: cookie, + }, + }); + const dom = new JSDOM(response); + const document = dom.window.document; + const scriptElement = document.querySelector('#__RENDER_DATA__'); + const innerText = scriptElement ? scriptElement.textContent || '{}' : '{}'; + const renderData = JSON.parse(decodeURIComponent(innerText)); + const accessId = renderData.access_id; + return accessId; + }); +}; + const getWbiVerifyString = () => { const key = 'bili-wbi-verify-string'; return cache.tryGet(key, async () => { @@ -262,4 +283,5 @@ export default { getCidFromId, getAidFromBvid, getArticleDataFromCvid, + getRenderData, }; diff --git a/lib/routes/bilibili/utils.ts b/lib/routes/bilibili/utils.ts index 15fd78850a742..2f2f974d2d455 100644 --- a/lib/routes/bilibili/utils.ts +++ b/lib/routes/bilibili/utils.ts @@ -66,6 +66,10 @@ function hexsign(e) { return o; } +function addRenderData(params, renderData) { + return `${params}&w_webid=${encodeURIComponent(renderData)}`; +} + function addWbiVerifyInfo(params, wbiVerifyString) { const searchParams = new URLSearchParams(params); searchParams.sort(); @@ -122,4 +126,5 @@ export default { getDmImgList, addDmVerifyInfo, bvidTime, + addRenderData, }; diff --git a/lib/routes/bilibili/video.ts b/lib/routes/bilibili/video.ts index 221ae715ed347..d230deb8dc159 100644 --- a/lib/routes/bilibili/video.ts +++ b/lib/routes/bilibili/video.ts @@ -35,6 +35,7 @@ async function handler(ctx) { const cookie = await cache.getCookie(); const wbiVerifyString = await cache.getWbiVerifyString(); const dmImgList = utils.getDmImgList(); + const renderData = await cache.getRenderData(uid); const [name, face] = await cache.getUsernameAndFaceFromUID(uid); // await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { @@ -43,7 +44,7 @@ async function handler(ctx) { // Cookie: cookie, // }, // }); - const params = utils.addWbiVerifyInfo(utils.addDmVerifyInfo(`mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&platform=web&web_location=1550101&order_avoided=true`, dmImgList), wbiVerifyString); + const params = utils.addWbiVerifyInfo(utils.addRenderData(utils.addDmVerifyInfo(`mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&platform=web&web_location=1550101&order_avoided=true`, dmImgList), renderData), wbiVerifyString); const response = await got(`https://api.bilibili.com/x/space/wbi/arc/search?${params}`, { headers: { Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`,