diff --git a/api/src/processing/service-config.js b/api/src/processing/service-config.js index 1c77c7bb..7404b963 100644 --- a/api/src/processing/service-config.js +++ b/api/src/processing/service-config.js @@ -7,6 +7,7 @@ export const services = { bilibili: { patterns: [ "video/:comId", + "video/:comId?p=:episode", "_shortLink/:comShortLink", "_tv/:lang/video/:tvId", "_tv/video/:tvId" diff --git a/api/src/processing/services/bilibili.js b/api/src/processing/services/bilibili.js index 8747a781..e3122674 100644 --- a/api/src/processing/services/bilibili.js +++ b/api/src/processing/services/bilibili.js @@ -17,8 +17,8 @@ function extractBestQuality(dashData) { return [ bestVideo, bestAudio ]; } -async function com_download(id) { - let html = await fetch(`https://bilibili.com/video/${id}`, { +async function com_download(id, episode = 1) { + const html = await fetch(`https://bilibili.com/video/${id}?p=${episode}`, { headers: { "user-agent": genericUserAgent } @@ -87,14 +87,14 @@ async function tv_download(id) { }; } -export default async function({ comId, tvId, comShortLink }) { +export default async function ({ comId, tvId, comShortLink, episode }) { if (comShortLink) { const patternMatch = await resolveRedirectingURL(`https://b23.tv/${comShortLink}`); comId = patternMatch?.comId; } if (comId) { - return com_download(comId); + return com_download(comId, episode); } else if (tvId) { return tv_download(tvId); } diff --git a/api/src/processing/url.js b/api/src/processing/url.js index 86c333f6..8d860a4c 100644 --- a/api/src/processing/url.js +++ b/api/src/processing/url.js @@ -159,6 +159,11 @@ function cleanURL(url) { limitQuery('xsec_token'); } break; + case "bilibili": + if (url.searchParams.get('p')) { + limitQuery('p'); + } + break; } if (stripQuery) {