From 0c3c500e14aab17b2c1a4571cd9dfae4915ec012 Mon Sep 17 00:00:00 2001 From: huangxd- <649924757@qq.com> Date: Mon, 22 Sep 2025 23:23:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E5=89=A7?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=B9=E9=85=8D=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=A6=82=E7=8B=82=E9=A3=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ danmu_api/worker.js | 53 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2689b44..b63d439 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,8 @@ Settings > Functions > Advanced Setting > Function Region 切换为 Hong Kong, > 注意:小幻在填写API的时候需要在API后面加上`/api/v2`,如`http://192.168.1.7:9321/87654321/api/v2` +> +> 有很多人问FW能不能用,FW推荐直接使用插件,如果非要使用,则可以配合 `https://raw.githubusercontent.com/huangxd-/ForwardWidgets/refs/heads/main/widgets.fwd` 里的`danmu_api`插件使用 ## 环境变量列表 | 变量名称 | 描述 | diff --git a/danmu_api/worker.js b/danmu_api/worker.js index 05f65af..4006050 100644 --- a/danmu_api/worker.js +++ b/danmu_api/worker.js @@ -1,6 +1,6 @@ // 全局状态(Cloudflare 和 Vercel 都可能重用实例) // ⚠️ 不是持久化存储,每次冷启动会丢失 -const VERSION = "1.1.0"; +const VERSION = "1.1.1"; let animes = []; let episodeIds = []; let episodeNum = 10001; // 全局变量,用于自增 ID @@ -2799,20 +2799,51 @@ async function matchAnime(url, req) { let resAnime; let resEpisode; - for (const anime of searchData.animes) { - if (anime.animeTitle.includes(title)) { + + if (season && episode) { + // 判断剧集 + for (const anime of searchData.animes) { + if (anime.animeTitle.includes(title)) { + let originBangumiUrl = new URL(req.url.replace("/match", `bangumi/${anime.bangumiId}`)); + const bangumiRes = await getBangumi(originBangumiUrl.pathname); + const bangumiData = await bangumiRes.json(); + log("info", "判断剧集", bangumiData); + if (bangumiData.bangumi.episodes.length >= episode) { + // 先判断season + if (matchSeason(anime, title, season)) { + resEpisode = bangumiData.bangumi.episodes[episode-1]; + resAnime = anime; + break; + } + } + } + } + } else { + // 判断电影 + for (const anime of searchData.animes) { + const animeTitle = anime.animeTitle.split("(")[0].trim(); + if (animeTitle === title) { + let originBangumiUrl = new URL(req.url.replace("/match", `bangumi/${anime.bangumiId}`)); + const bangumiRes = await getBangumi(originBangumiUrl.pathname); + const bangumiData = await bangumiRes.json(); + log("info", bangumiData); + if (bangumiData.bangumi.episodes.length > 0) { + resEpisode = bangumiData.bangumi.episodes[0]; + resAnime = anime; + break; + } + } + } + } + + // 如果都没有找到则返回第一个 + if (!resAnime) { + for (const anime of searchData.animes) { let originBangumiUrl = new URL(req.url.replace("/match", `bangumi/${anime.bangumiId}`)); const bangumiRes = await getBangumi(originBangumiUrl.pathname); const bangumiData = await bangumiRes.json(); log("info", bangumiData); - if (season && episode && bangumiData.bangumi.episodes.length >= episode) { - // 先判断season - if (matchSeason(anime, title, season)) { - resEpisode = bangumiData.bangumi.episodes[episode-1]; - resAnime = anime; - break; - } - } else if (bangumiData.bangumi.episodes.length > 0) { + if (bangumiData.bangumi.episodes.length > 0) { resEpisode = bangumiData.bangumi.episodes[0]; resAnime = anime; break;