merge: fix/m-search-filter
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
commit
88f98386e8
21 files changed
+1955
-140
No files matched your search
+874
@@ -0,0 +1,874 @@
|
||||
[
|
||||
{
|
||||
"id": "1139946",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01E25-E48 2023 1080p BluRay x265 10bit FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと / The Apothecary Diaries [25-48Fin] 【简|繁字幕】",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "880803",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p CR WEB-DL H.264 AAC-RLWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 藥師少女的獨語 / 薬屋のひとりごと 第1季 全24集 【简繁英多国字幕】",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "333808",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay x265 10bit FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries / 薬屋のひとりごと 【简日|繁日|简|繁|日字幕】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "991924",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 1080p NF WEB-DL H.264 AAC 2.0-FROGWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと 第2季 | 类型:动画 剧情 悬疑 | 语言:日本語 | *内封简繁英多国软字幕* 第2季",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "816044",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay x265 10bit FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries / 薬屋のひとりごと 【简日|繁日|简|繁|日字幕】",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "273708",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p CR WEB-DL H.264 AAC-RLWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 藥師少女的獨語 / 薬屋のひとりごと / Kusuriya no Hitorigoto 第1季 全24集 【简繁英多国字幕】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "624759",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01E25-E48 2023 1080p BluRay x265 10bit FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと / The Apothecary Diaries [25-48Fin] 【简|繁字幕】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "822279",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 1080p BluRay x265 FLAC 2.0-7³ACG",
|
||||
"subtitle": "药屋少女的呢喃/薬屋のひとりごと | 01-24 日语+简繁字幕",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "501794",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S02 2025 1080p NF WEB-DL x264 AAC-ADWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季 薬屋のひとりごと 第2期 全24集 | 类型: 动画",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "991690",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 Complete 1080p NF WEB-DL H.264 AAC 2.0-UBWEB",
|
||||
"subtitle": "2025年1月新番 | 药屋少女的呢喃 第二季/药师少女的独语 第2期/Kusuriya no Hitorigoto Season 2 | 全24集 [日语/多语字幕]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "768448",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S01 2023 1080p CR WEB-DL x264 AAC-ADWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries *第一季 全24集* | 类别:动画 古装",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1043334",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 1080p NF WEB-DL x264 AAC 2.0-ADWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季 薬屋のひとりごと 第2期 全24集 | 类型: 动画",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "887758",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p NF WEB-DL H.264 AAC-FROGWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと / 药师少女的独语 / 类型: 动画 / 古装 / 第1季 完结 全24集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "950711",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E16 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第16集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "562127",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01E25-E48 2023 1080p BluRay Remux AVC FLAC 2.0-AnimeF@ADE",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと / The Apothecary Diaries [25-48Fin] [中日双语字幕]",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "941215",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E14 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第14集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "934440",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E11 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第11集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "353484",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 1080p BluRay x265 FLAC 2.0-7³ACG@OurBits",
|
||||
"subtitle": "药屋少女的呢喃/薬屋のひとりごと | 01-24 日语+简繁字幕",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "924132",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E10 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第10集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "920137",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E09 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第9集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "916395",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E08 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第8集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "900711",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E04 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第4集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "897035",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E01 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第1集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1157922",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2023 S01 WEB-DL NF 1080p H.264 DDP2.0-ZmWeb",
|
||||
"subtitle": "药屋少女的呢喃 全24集 | 药师少女的独语 | The Apothecary Diaries | 内封多语言字幕 |",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1157450",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S02 2026 1080p BluRay x265 FLAC2.0-Nekomoe kissaten&VCB-Studio",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと 第2期 | TV 25-48",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1059159",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01E25-E48 2023 1080p BluRay Remux AVC FLAC 2.0-AnimeF@ADE",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと / The Apothecary Diaries [25-48Fin] [中日双语字幕]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "934441",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E12 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第12集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "897563",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E03 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第3集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "500809",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S02 2025 1080p CR WEB-DL x264 AAC-AnimeS@ADWeb",
|
||||
"subtitle": "2025年1月新番 药师少女的独语 第二季 / 薬屋のひとりごと 第2期 全24集 *内封简繁英多国软字幕*",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "954445",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E17 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第17集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "897036",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E02 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第2集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1247063",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2023 S01 Complete 1080p CR WEB-DL H264 AAC AAC2.0-UBWEB",
|
||||
"subtitle": "2023年10月新番 | 药屋少女的呢喃/药师少女的独语 | 全24集 [日语/多语字幕]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "986950",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E23 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第23集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "904012",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E05 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第5集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1247057",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 Complete 1080p CR WEB-DL H264 AAC AAC2.0-UBWEB",
|
||||
"subtitle": "2025年1月新番 | 药屋少女的呢喃 第二季/药师少女的独语 第2期/Kusuriya no Hitorigoto Season 2 | 全24集 [日语/多语字幕]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "515981",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries 2025 S02 Complete 1080p NF WEB-DL H.264 AAC-UBWEB",
|
||||
"subtitle": "2025年1月新番 | 药屋少女的呢喃 第二季/药师少女的独语 第2期/Kusuriya no Hitorigoto Season 2 | 全24集 [日语/多语字幕]",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "974052",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E21 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第21集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "958298",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E18 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第18集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "946869",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E15 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第15集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "936817",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E13 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第13集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "274379",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S01 2023 1080p AMZN WEB-DL H.264 DDP2.0-ADWeb",
|
||||
"subtitle": "2023年10月新番 药屋少女的呢喃 / 薬屋のひとりごと | 全24集 | 类型: 动画 / 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "912161",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E07 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第7集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "908251",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E06 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第6集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "890406",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2023 S01 Complete 1080p CR WEB-DL H.264 AAC 2.0-QHstudIo",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 全24集【内封简繁中字】【导演:长沼范裕 | 配音: 悠木碧 | 大塚刚央 | 小西克幸 | 种崎敦美】QHstudIo小组作品",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1088513",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S02 1080p BluRay x265 OPUS 2.0-7³ACG@OurBits",
|
||||
"subtitle": "药师少女的独语第2季/薬屋のひとりごと 第2期 | 01-24(25-48) 日语+简繁字幕",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "978618",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E22 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第22集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "322717",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay AVC LPCM 2.0-DIY@Audies",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと / The Apothecary Diaries 【DIY / 双语简繁字幕】【正片全24集+特典全24集】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1059522",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto Season 2 2025 BDRip 1080p TV 01-24(25-48) Fin+SP H264 FLAC 2.0-jsum@U2",
|
||||
"subtitle": "[药师少女的独语第2季][Kusuriya no Hitorigoto Season 2][薬屋のひとりごと 第2期][BDRip][1920x1080][TV 01-24(25-48) Fin+SP][H264 FLAC MKV]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "562150",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01E01-E24 2023 1080p BluRay Remux AVC FLAC 2.0-AnimeF@ADE",
|
||||
"subtitle": "药屋少女的呢喃 第一季 / 薬屋のひとりごと / The Apothecary Diaries [01-24Fin] [中日双语字幕]",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "971111",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E20 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第20集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "815968",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay Remux AVC FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries / 薬屋のひとりごと 【简日|繁日|简|繁|日字幕】",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "791154",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2023 S01E24 2160P TV WEB-DL MPEG-4 AVC1 - Native D3D9 DXVA Decoder VLD AAC LC -Kisssub",
|
||||
"subtitle": "药屋少女的呢喃 薬屋のひとりごと (2023) 2160P TVS01 [01-24](AI增强1080P转2160P) AVC1 @5160kbps AAC @128kbps",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "585310",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S02 1080p BluRay AV1 OPUS 2.0-7³ACG@OurBits",
|
||||
"subtitle": "药师少女的独语第2季/薬屋のひとりごと 第2期 | 01-24(25-48) 日语+简繁字幕",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1062507",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S02 2025 1080p CR WEB-DL x264 AAC 2.0-AnimeS@ADWeb",
|
||||
"subtitle": "2025年1月新番 药师少女的独语 第二季 / 薬屋のひとりごと 第2期 全24集 *内封简繁英多国软字幕*",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1012256",
|
||||
"site": "馒头",
|
||||
"title": "药屋少女的呢喃 The Apothecary Diaries 2023 S01-S24 WEB-DL 1080p H.264 DDP2.0-ZmWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The.Apothecary.Diaries|季度全24集 导演:长沼范裕 | 主演:悠木碧 / 大刚央 / 小西克",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "971109",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E19 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第19集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "939884",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p NF WEB-DL AAC2.0 x.264-HHWEB",
|
||||
"subtitle": "药屋少女的呢喃 | 全24集 | 1080p | 类型: 动画/古装 | 导演: 长沼范裕 | 主演: 悠木碧/大塚刚央/小西克幸/种崎敦美/石川由依 | ARDTU | By ATU_Tool",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "804792",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay AVC LPCM 2.0-DIY@Audies",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと / The Apothecary Diaries 【DIY / 双语简繁字幕】【正片全24集+特典全24集】",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1109851",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S02 1080p BluRay AV1 OPUS 2.0-7³ACG@OurBits",
|
||||
"subtitle": "药师少女的独语第2季/薬屋のひとりごと 第2期 | 01-24(25-48) 日语+简繁字幕",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "991501",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E24 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季/薬屋のひとりごと 第2期 | 2025 | 日本 | 动画 | 长沼范裕 笔坂明规 | 悠木碧 大塚刚央 | 第2季第24集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "941489",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 part1 1080p NF WEB-DL H.264 AAC-FROGWeb",
|
||||
"subtitle": "薬屋のひとりごと 第2期 / 药屋少女的呢喃 第二季 / 药师少女的独语 第2期 / 类型: 动画 / 第2季 第01-12集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "935566",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2023 S01 Complete 1080p NF WEB-DL H.264 AAC-UBWEB",
|
||||
"subtitle": "药屋少女的呢喃/药师少女的独语 | 全24集 | 导演: 长沼范裕 | 主演: 悠木碧 大塚刚央 小西克幸 种崎敦美 [日语/中英日字幕]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "804876",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto 2023 BDRip 1080p AVC FLAC@U2",
|
||||
"subtitle": "药师少女的呢喃/Kusuriya no Hitorigoto/薬屋のひとりごと 1080p 自压(附相关专辑) TV 01-24 Fin+SP",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "301225",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S01 2023 1080p NF WEB-DL x264 DDP2.0-ADWeb",
|
||||
"subtitle": "2023年10月新番 药屋少女的呢喃 薬屋のひとりごと 全24集 | 类型: 动画 / 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "641057",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S02 2025 1080p BluRay x265 FLAC2.0-Nekomoekissaten&VCB-Studio",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと 第2期 | TV 25-48",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "994487",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto 1080p BDRip x265 FLAC@Nekomoe kissaten&VCB-Studio",
|
||||
"subtitle": "[喵萌奶茶屋&VCB-Studio] 药师少女的独语 / Kusuriya no Hitorigoto / 薬屋のひとりごと 10-bit 1080p HEVC BDRip [S1 Fin]",
|
||||
"category": "动画",
|
||||
"resolved": null
|
||||
},
|
||||
{
|
||||
"id": "274416",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S01 2023 1080p CR WEB-DL x264 AAC-AnimeS@ADWeb",
|
||||
"subtitle": "2023年10月新番 药师少女的独语 / 薬屋のひとりごと 全24集 *内封简繁英多国软字幕*",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "728125",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S03E01 1080p CR WEB-DL DDP 2.0 H.264-Kitsune",
|
||||
"subtitle": "药屋少女的呢喃 [第三季 第01集] / 药师少女的独语 / The Apothecary Diaries | 类型:动画 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "965726",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S01 1080p Crunchyroll WEB-DL H.264 AAC-CHDWEB",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと 全24集 内封中字",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "333798",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay Remux AVC FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries / 薬屋のひとりごと 【简日|繁日|简|繁|日字幕】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1135207",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries aka Kusuriya no Hitorigoto Season 2 2025 BDRip 1080p x265 FLAC 2.0-AI-Raws@U2",
|
||||
"subtitle": "药屋少女的呢喃 第二季 薬屋のひとりごと 第2期 TV S2 01-24(25-48)+SP Fin HEVC",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1058988",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01E01-E24 2023 1080p BluRay Remux AVC FLAC 2.0-AnimeF@ADE",
|
||||
"subtitle": "药屋少女的呢喃 第一季 / 薬屋のひとりごと / The Apothecary Diaries [01-24Fin] [中日双语字幕]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1047858",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no hitorigoto 2023 S01 Complete 1080p NF WEB-DL x264 AAC-PTerWEB",
|
||||
"subtitle": "药屋少女的呢喃/The Apothecary Diaries/药师少女的独语 全24集 | 导演: 长沼范裕 主演: 悠木碧 大塚刚央 小西克幸 [日语中字] | ARDTU",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "968958",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E19 2025 1080p NF WEB-DL x264 AAC-ADWeb",
|
||||
"subtitle": "药屋少女的呢喃 第二季 薬屋のひとりごと 第2期 第19集 | 类型: 动画",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "322404",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto 2023 S01 1080p JPN Blu-ray AVC LPCM 2.0-TheM14@U2",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと | Vol.1-4 Fin | TheM14@U2 自购自抓自扫 | Team HAYAKU | Animate全卷特典附",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1214134",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 1080p BluRay REMUX AVC FLAC 2.0 2Audios-NAN0",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 药师少女的独语 第2期 / The Apothecary Diaries season 2 | 动画 | 全24集 | 简繁英字幕",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "954567",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto 2025 S02 1080p Bluray H.264 LPCM-@U2",
|
||||
"subtitle": "自购自抓自扫 | Team HAYAKU | Animate特典附 | TBR35041D 药屋少女的呢喃 第二季",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "890418",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S02E01 1080p CR WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃/薬屋のひとりごと | 2023 | 日本 | 动画 古装 | 长沼范裕 | 悠木碧 大塚刚央 | 第2季第1集",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "823729",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S01 1080p BluRay x265 FLAC 2.0-Snow-Raws",
|
||||
"subtitle": "药屋少女的呢喃 / 薬屋のひとりごと | TV 01-24 Fin",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "624758",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01E25-E48 2023 1080p BluRay x264 FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと / The Apothecary Diaries [25-48Fin] 【简|繁字幕】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1059286",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S02 2025 Blu-ray 1080p AVC LPCM 2Audio-@U2",
|
||||
"subtitle": "Team HAYAKU | Animate全卷特典附 药屋少女的呢喃 第二季",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1021945",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries Vol.3 2025 BDMV 1080p AVC LPCM 2.0-Arri-RAWS@U2",
|
||||
"subtitle": "U2 Exclusive, RIPs welcomed with credits | 制作RIP请注明出处 | 药屋少女的呢喃/药师少女的独语 S2",
|
||||
"category": null,
|
||||
"resolved": null
|
||||
},
|
||||
{
|
||||
"id": "516439",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries 2023 S01 WEB-DL 1080p AVC AAC2.0-ZmWeb",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The.Apothecary.Diaries|季度全24集 导演:长沼范裕 | 主演:悠木碧 / 大刚央 / 小西克",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "433512",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S01 Complete 2023 1080p Blu-ray x264 FLAC-jsum@U2",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / 薬屋のひとりごと",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "918584",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 1080p NF WEB-DL AAC2.0 H.264-MWeb",
|
||||
"subtitle": "药屋少女的呢喃/薬屋のひとりごと | 2023 | 日本 | 动画 古装 | 长沼范裕 | 悠木碧 大塚刚央",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "804941",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto 2023 Bluray 1080p AVC LPCM@U2",
|
||||
"subtitle": "药屋少女的呢喃/Kusuriya no Hitorigoto/薬屋のひとりごと 1080p 自购自抓自扫 Team HAYAKU Animate全卷特典附 Vol.1-4 Fin",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1219881",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 1080p CR WEB-DL AAC2.0 H.264 DUAL-BiOMA",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries 内封多语言字幕/ 葡语/日语",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1142641",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2023 S01 1080p Blu-ray AVC LPCM 2.0-U2",
|
||||
"subtitle": "药屋少女的呢喃 第二季 | 类别:动画 转自U2",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1140018",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01E25-E48 2023 1080p BluRay x264 FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと / The Apothecary Diaries [25-48Fin] 【简|繁字幕】",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "562440",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S02 2025 Blu-ray 1080p AVC LPCM-@U2",
|
||||
"subtitle": "Team HAYAKU | Animate全卷特典附 药屋少女的呢喃 第二季",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "946749",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 E14-E15 1080p CR WEB-DL x264 AAC-PTerWEB",
|
||||
"subtitle": "药屋少女的呢喃 第二季/The Apothecary Diaries season 2/药师少女的独语 第2期 第14-15集 | 导演: 长沼范裕 主演: 悠木碧 大塚刚央 小西克幸 | [日语中字]",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "816042",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay x264 FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries / 薬屋のひとりごと 【简日|繁日|简|繁|日字幕】",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "812090",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p Blu-ray Remux AVC FLAC-7³ACG@OurBits",
|
||||
"subtitle": "药屋少女的呢喃/薬屋のひとりごと | 01-24 日语+简繁字幕",
|
||||
"category": "动画",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "728045",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries AKA Kusuriya no Hitorigoto S03E01 1080p CR WEB-DL AAC 2.0 H.264-VARYG",
|
||||
"subtitle": "药屋少女的呢喃 [第三季 第01集] / 药师少女的独语 / The Apothecary Diaries | 类型:动画 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "926704",
|
||||
"site": "馒头",
|
||||
"title": "Channel U ESCL-6057~9 2023 BDMV 1080p FLAC-@U2",
|
||||
"subtitle": "緑黄色社会 5th Album | TVアニメ『ダンジョン飯』ED1 | TVアニメ『薬屋のひとりごと』OP1 | 初回生産限定盤A | Amazon.co.jp 限定特典付 XLD",
|
||||
"category": "音乐",
|
||||
"resolved": "迷宫饭"
|
||||
},
|
||||
{
|
||||
"id": "768303",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries Vol 2 2023 1080p BluRay AVC LPCM 2.0-DIY@Audies",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries 【Vol.2】【正片第07-12集+特典12集】 【DIY / 双语简繁字幕】",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "717999",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S02 1080p BluRay AVC LPCM 2.0-HAYAKU",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと 第2期 | Vol.3 2Audio",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "1049675",
|
||||
"site": "馒头",
|
||||
"title": "Kusuriya no Hitorigoto S02 Vol 3 1080p Blu-ray AVC LPCM 2.0 2Audio-HAYAKU",
|
||||
"subtitle": "药屋少女的呢喃 第二季 / 薬屋のひとりごと 第2期 | Vol.3",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "946967",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries 2025 S02 BDMV 1080p Vol.1 AVC LPCM-Arri-RAWS@U2",
|
||||
"subtitle": "U2 Exclusive, RIPs welcomed with credits | 自购自抓 药屋少女的呢喃/药师少女的独语 S2",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "788913",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries Vol 3 2023 1080p BluRay AVC LPCM 2.0-DIY@Audies",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries 【Vol.3】【正片第13-18集】 【DIY / 双语简繁字幕】",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "585335",
|
||||
"site": "观众",
|
||||
"title": "Kusuriya no Hitorigoto S02 1080p BluRay x265 OPUS 2.0-7³ACG@OurBits",
|
||||
"subtitle": "药师少女的独语第2季/薬屋のひとりごと 第2期 | 01-24(25-48) 日语+简繁字幕",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "578760",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S02 1080p AMZN WEB-DL DUAL DDP 2.0 H.264-ToonsHub",
|
||||
"subtitle": "药屋少女的呢喃 [第二季] / 药师少女的独语 / The Apothecary Diaries | 类型:动画 古装 | 2025",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "541534",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 REPACK2 1080p CR WEB-DL DUAL DDP 2.0 H.264-Kitsune",
|
||||
"subtitle": "药屋少女的呢喃 [第一季] / 药师少女的独语 / The Apothecary Diaries | 类型:动画 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "506365",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S02 1080p CR WEB-DL Dual-Audio DDP 2.0 H.264-Kitsune",
|
||||
"subtitle": "药屋少女的呢喃 [第二季] / 药师少女的独语 / The Apothecary Diaries | 类型:动画 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "403592",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries AKA Kusuriya no Hitorigoto S01 1080p CR WEB-DL Dual-Audio DDP 2.0 H.264-Kitsune",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries *第一季 全24集* | 类别:动画 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "333806",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p BluRay x264 FLAC 2.0-ADE",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries / 薬屋のひとりごと 【简日|繁日|简|繁|日字幕】",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "330499",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries S01 2023 1080p Blu-ray Remux AVC FLAC-7³ACG@OurBits",
|
||||
"subtitle": "药屋少女的呢喃/薬屋のひとりごと | 01-24 日语+简繁字幕",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "278786",
|
||||
"site": "观众",
|
||||
"title": "The Apothecary Diaries (Kusuriya no Hitorigoto) S01 2023 1080p WEB-DL AVC AAC 2.0 Dual Audio -ZR-",
|
||||
"subtitle": "药屋少女的呢喃 [第一季] / 药师少女的独语 / The Apothecary Diaries | 类型:动画 古装",
|
||||
"category": "剧集",
|
||||
"resolved": "药屋少女的呢喃"
|
||||
},
|
||||
{
|
||||
"id": "769727",
|
||||
"site": "馒头",
|
||||
"title": "The Apothecary Diaries Vol 1 2023 1080p BluRay AVC LPCM 2.0-DIY@Audies",
|
||||
"subtitle": "药屋少女的呢喃 / 药师少女的独语 / The Apothecary Diaries 【Vol.1】【第1-6集】 【DIY / 双语简繁字幕】",
|
||||
"category": null,
|
||||
"resolved": "药屋少女的呢喃"
|
||||
}
|
||||
]
|
||||
@@ -289,13 +289,20 @@ describe.skipIf(!up)("全局搜索", () => {
|
||||
expect(rows.length).toBe(3);
|
||||
});
|
||||
|
||||
it("30s 内相同查询命中缓存,不再请求站点", async () => {
|
||||
it("30s 内相同查询:成功的站点命中缓存不再请求;超时的站点不缓存,每次重试", async () => {
|
||||
const before = [nexusSearches(), mteamSearches(), slowCalls];
|
||||
const r = await req("/search?q=%20dune%20&scope=releases");
|
||||
expect(r.body.data.releases).toMatchObject({ cached: true, total: 3, partial: true });
|
||||
// 超时的站点重新查了一次,所以整体不算缓存结果
|
||||
expect(r.body.data.releases).toMatchObject({ cached: false, total: 3, partial: true });
|
||||
expect([nexusSearches(), mteamSearches()]).toEqual(before.slice(0, 2));
|
||||
expect(slowCalls).toBe(before[2]! + 1);
|
||||
const page = await req("/search/releases?q=Dune");
|
||||
expect(page.body.data).toMatchObject({ cached: true, total: 3 });
|
||||
expect([nexusSearches(), mteamSearches(), slowCalls]).toEqual(before);
|
||||
expect(page.body.data).toMatchObject({ cached: false, total: 3, partial: true });
|
||||
expect([nexusSearches(), mteamSearches()]).toEqual(before.slice(0, 2));
|
||||
expect(slowCalls).toBe(before[2]! + 2);
|
||||
// 只查成功过的站点:全部命中缓存
|
||||
const okOnly = await req(`/search/releases?q=Dune&sites=${sites.nexus},${sites.mteam}`);
|
||||
expect(okOnly.body.data).toMatchObject({ cached: true, total: 3, partial: false });
|
||||
// refresh=true 跳过缓存
|
||||
const fresh = await req("/search/releases?q=Dune&refresh=true");
|
||||
expect(fresh.body.data.cached).toBe(false);
|
||||
@@ -387,7 +394,9 @@ describe.skipIf(!up)("全局搜索", () => {
|
||||
});
|
||||
|
||||
it("筛选 / 排序 / 游标 / 分面", async () => {
|
||||
const q = (s: string) => req(`/search/releases?q=Dune&${s}`).then((r) => r.body.data);
|
||||
// 只查成功的两站(超时站点不缓存,每次重试会拖慢用例)
|
||||
const ok = `sites=${sites.nexus},${sites.mteam}`;
|
||||
const q = (s: string) => req(`/search/releases?q=Dune&${ok}&${s}`).then((r) => r.body.data);
|
||||
let d = await q("resolution=2160p");
|
||||
expect(d.items.map((i: Loose) => i.siteReleaseId).sort()).toEqual(["812345", "990001"]);
|
||||
expect(d).toMatchObject({ total: 2, unfilteredTotal: 3 });
|
||||
@@ -399,7 +408,7 @@ describe.skipIf(!up)("全局搜索", () => {
|
||||
|
||||
d = await q("source=web-dl,REMUX&free=false");
|
||||
expect(d.items.map((i: Loose) => i.siteReleaseId).sort()).toEqual(["900001", "990001"]);
|
||||
d = await q(`sites=${sites.mteam}`);
|
||||
d = (await req(`/search/releases?q=Dune&sites=${sites.mteam}`)).body.data;
|
||||
expect(d.items.map((i: Loose) => i.siteReleaseId)).toEqual(["990001"]);
|
||||
d = await q(`minSize=${10 * 1024 ** 3}&maxSize=${50 * 1024 ** 3}`);
|
||||
expect(d.items.map((i: Loose) => i.siteReleaseId)).toEqual(["990001"]);
|
||||
@@ -420,21 +429,24 @@ describe.skipIf(!up)("全局搜索", () => {
|
||||
});
|
||||
|
||||
it("快速筛选 qf(SEARCH-3):分面计数、同维度 OR / 跨维度 AND、分页一致", async () => {
|
||||
const ok = `sites=${sites.nexus},${sites.mteam}`;
|
||||
const q = (qf: string, extra = "") =>
|
||||
req(`/search/releases?q=Dune&qf=${encodeURIComponent(qf)}${extra}`).then((r) => r.body.data);
|
||||
req(`/search/releases?q=Dune&${ok}&qf=${encodeURIComponent(qf)}${extra}`).then((r) => r.body.data);
|
||||
const counts = (opts: Loose[]) => Object.fromEntries(opts.map((o) => [o.value, o.count]));
|
||||
const ids = (d: Loose) => d.items.map((i: Loose) => i.siteReleaseId).sort();
|
||||
|
||||
let d = await q("");
|
||||
expect(d.total).toBe(3);
|
||||
expect(counts(d.facets.resolution)).toEqual({ "2160p": 2, "1080p": 1, "720p": 0 });
|
||||
expect(counts(d.facets.videoCodec)).toEqual({ "H.265": 2, "H.264": 1, AV1: 0 });
|
||||
expect(counts(d.facets.releaseType)).toEqual({ disc: 0, remux: 1, encode: 0, webdl: 2, hdtv: 0 });
|
||||
// 只列结果里有的档位
|
||||
expect(counts(d.facets.resolution)).toEqual({ "2160p": 2, "1080p": 1 });
|
||||
expect(counts(d.facets.videoCodec)).toEqual({ "H.265": 2, "H.264": 1 });
|
||||
expect(counts(d.facets.releaseType)).toEqual({ remux: 1, webdl: 2 });
|
||||
expect(counts(d.facets.site)).toEqual({ [sites.nexus]: 2, [sites.mteam]: 1 });
|
||||
expect(d.facets.site.find((f: Loose) => f.value === sites.nexus).label).toBe("观众");
|
||||
expect(counts(d.facets.releaseGroup)).toEqual({ FraMeSToR: 1, GRP: 1, FLUX: 1 });
|
||||
expect(d.facets.hdr.find((f: Loose) => f.value === "SDR").count).toBe(2);
|
||||
expect(d.facets.season).toEqual([]);
|
||||
expect(d.facets.seasonEpisode).toEqual([]);
|
||||
expect(d.facets.hr.reduce((n: number, f: Loose) => n + f.count, 0)).toBe(3);
|
||||
// 旧分面仍在
|
||||
expect(d.facets.resolutions.length).toBe(2);
|
||||
@@ -490,10 +502,8 @@ describe.skipIf(!up)("全局搜索", () => {
|
||||
d = await list("resolution:1080p");
|
||||
expect(d.items.map((i: Loose) => i.siteReleaseId)).toEqual(["900001"]);
|
||||
expect(d).toMatchObject({ total: 1, unfilteredTotal: 2 });
|
||||
expect(d.facets.releaseGroup.map((f: Loose) => [f.value, f.count])).toEqual([
|
||||
["FraMeSToR", 0],
|
||||
["GRP", 1],
|
||||
]);
|
||||
// 在 1080p 下没有资源的制作组不列
|
||||
expect(d.facets.releaseGroup.map((f: Loose) => [f.value, f.count])).toEqual([["GRP", 1]]);
|
||||
// 分页
|
||||
const p1 = await req(`/sites/${sites.nexus}/releases?q=Dune&live=false&limit=1`).then((r) => r.body.data);
|
||||
expect(p1.items.length).toBe(1);
|
||||
|
||||
@@ -32,21 +32,32 @@ const up = await pgAvailable();
|
||||
type Loose = any;
|
||||
|
||||
describe("searchTerms", () => {
|
||||
it("电影:原名带年份 + 译名;同名只留一个;剧集不带年份", () => {
|
||||
it("中文作品名在前、原名第二;拉丁名在电影上带年份;同名只留一个;剧集不带年份", () => {
|
||||
expect(searchTerms({ title: "星际穿越", originalTitle: "Interstellar", year: 2014, movie: true })).toEqual([
|
||||
"Interstellar 2014",
|
||||
"星际穿越",
|
||||
"Interstellar 2014",
|
||||
]);
|
||||
expect(searchTerms({ title: "流浪地球2", originalTitle: "流浪地球2", year: 2023, movie: true })).toEqual([
|
||||
"流浪地球2",
|
||||
]);
|
||||
expect(searchTerms({ title: "熊家餐馆", originalTitle: "The Bear", year: 2022, movie: false })).toEqual([
|
||||
"The Bear",
|
||||
"熊家餐馆",
|
||||
"The Bear",
|
||||
]);
|
||||
expect(searchTerms({ title: "Oppenheimer", originalTitle: null, year: 2023, movie: true })).toEqual([
|
||||
"Oppenheimer 2023",
|
||||
]);
|
||||
// 日文原名:中文名在前,原名第二
|
||||
expect(
|
||||
searchTerms({ title: "药屋少女的呢喃", originalTitle: "薬屋のひとりごと", year: 2023, movie: false }),
|
||||
).toEqual(["药屋少女的呢喃", "薬屋のひとりごと"]);
|
||||
// 繁简只差字形的算同一个
|
||||
expect(searchTerms({ title: "无间道", originalTitle: "無間道", year: 2002, movie: true })).toEqual(["无间道"]);
|
||||
// 作品名没有中文译名(仍是英文)时原名在前
|
||||
expect(
|
||||
searchTerms({ title: "The Apothecary Diaries", originalTitle: "薬屋のひとりごと", year: 2023, movie: false }),
|
||||
).toEqual(["薬屋のひとりごと", "The Apothecary Diaries"]);
|
||||
expect(searchTerms({ title: " ", originalTitle: null, year: null, movie: false })).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -89,7 +100,14 @@ describe.skipIf(!up)("两阶段搜索(SEARCH-2)", () => {
|
||||
snatched: "10",
|
||||
uploadedAt: "2026-09-20 10:00:00",
|
||||
};
|
||||
a = await createMockNexusPhpSite({ releases: [...AUDIENCES_FIXTURE_RELEASES, release] });
|
||||
// 按作品搜时的归属判定:同名蓝光(属于)、剧集(作品是电影)、1984 年的前作、名字对不上的(识别后才算属于)
|
||||
const nearby = [
|
||||
{ ...release, id: "700002", title: "Dune.Part.Two.2024.1080p.BluRay.x264-GRP2", subtitle: "沙丘2 | 简繁字幕" },
|
||||
{ ...release, id: "700003", title: "Dune Prophecy S01 2024 1080p WEB-DL H264-TV", subtitle: "沙丘2 衍生剧" },
|
||||
{ ...release, id: "700004", title: "Dune 1984 1080p BluRay x264-OLD", subtitle: "沙丘2 前作" },
|
||||
{ ...release, id: "700005", title: "Arrakis Chronicles 2024 1080p WEB-DL H264-ZZ", subtitle: "沙丘2特别版" },
|
||||
];
|
||||
a = await createMockNexusPhpSite({ releases: [...AUDIENCES_FIXTURE_RELEASES, release, ...nearby] });
|
||||
b = await createMockNexusPhpSite({ releases: [{ ...release, id: "800001" }] });
|
||||
tmdb = await createMockTmdb();
|
||||
|
||||
@@ -287,24 +305,77 @@ describe.skipIf(!up)("两阶段搜索(SEARCH-2)", () => {
|
||||
await db.deleteFrom("settings").where("key", "=", "search").execute();
|
||||
});
|
||||
|
||||
it("按作品搜资源:服务端用原名 + 年份 / 译名生成查询词,每站每词一次", async () => {
|
||||
it("按作品搜资源:服务端用中文名 / 原名 + 年份生成查询词,每站每词一次", async () => {
|
||||
const before = counts();
|
||||
const r = await req(`/search/releases?tmdb=movie:693134&sites=${sites.a}`);
|
||||
expect(r.status).toBe(200);
|
||||
expect(r.body.data.queries).toEqual(["Dune: Part Two 2024", "沙丘2"]);
|
||||
expect(r.body.data.q).toBe("Dune: Part Two 2024");
|
||||
expect(r.body.data.queries).toEqual(["沙丘2", "Dune: Part Two 2024"]);
|
||||
expect(r.body.data.q).toBe("沙丘2");
|
||||
const sent = searches(a).slice(before[0]);
|
||||
expect(sent).toHaveLength(2);
|
||||
expect(r.body.data.sites[0]).toMatchObject({ siteId: sites.a, status: "ok" });
|
||||
|
||||
const byEntity = await req(`/search/releases?entityId=${dune}&sites=${sites.a}`);
|
||||
expect(byEntity.body.data.queries).toEqual(["Dune: Part Two 2024", "沙丘2"]);
|
||||
expect(byEntity.body.data.queries).toEqual(["沙丘2", "Dune: Part Two 2024"]);
|
||||
expect(byEntity.body.data.cached).toBe(true);
|
||||
|
||||
expect((await req(`/search/releases?sites=${sites.a}`)).status).toBe(422);
|
||||
expect((await req(`/search/releases?tmdb=movie:999999999`)).status).toBe(404);
|
||||
});
|
||||
|
||||
it("按作品搜:不属于这部作品的不参与筛选与分面,第一页单独给出;已识别的按识别结果;关键词搜索不判定", async () => {
|
||||
const ids = (xs: Loose[]) => xs.map((i) => i.siteReleaseId).sort();
|
||||
const page = async (extra = "") =>
|
||||
(await req(`/search/releases?entityId=${dune}&sites=${sites.a}${extra}`)).body.data;
|
||||
let d = await page();
|
||||
expect(ids(d.items)).toEqual(["700001", "700002", "812345"]);
|
||||
expect(ids(d.unmatched)).toEqual(["700003", "700004", "700005"]);
|
||||
expect(d).toMatchObject({ total: 3, unfilteredTotal: 3, unmatchedTotal: 3 });
|
||||
// 分面只算属于的:没有 1984 年、没有季集
|
||||
expect(d.facets.year.map((f: Loose) => f.value)).toEqual(["2024"]);
|
||||
expect(d.facets.seasonEpisode).toEqual([]);
|
||||
expect(d.facets.site).toEqual([{ value: sites.a, label: "观众", count: 3 }]);
|
||||
// 筛选只作用于属于的;「可能不是」那组不受影响
|
||||
d = await page(`&qf=${encodeURIComponent("resolution:2160p")}`);
|
||||
expect(ids(d.items)).toEqual(["700001", "812345"]);
|
||||
expect(d.unmatchedTotal).toBe(3);
|
||||
// 只在第一页给出
|
||||
const p1 = await page("&limit=1");
|
||||
expect(p1.unmatched).toHaveLength(3);
|
||||
const p2 = await page(`&limit=1&cursor=${p1.nextCursor}`);
|
||||
expect(p2.unmatched).toEqual([]);
|
||||
expect(p2.unmatchedTotal).toBe(3);
|
||||
|
||||
// 识别结果优先:名字对不上的识别到这部作品后属于;名字对得上的识别到别的作品后不属于
|
||||
const other = (
|
||||
await db
|
||||
.insertInto("media_entity")
|
||||
.values({ kind: "movie", title: "沙丘", original_title: "Dune", year: 1984, status: "active" })
|
||||
.returning("id")
|
||||
.executeTakeFirstOrThrow()
|
||||
).id;
|
||||
const resolve = (id: string, entity: string) =>
|
||||
db
|
||||
.updateTable("source_release")
|
||||
.set({ media_entity_id: entity })
|
||||
.where("site_id", "=", sites.a)
|
||||
.where("site_release_id", "=", id)
|
||||
.execute();
|
||||
await resolve("700005", dune);
|
||||
await resolve("700002", other);
|
||||
d = await page();
|
||||
expect(ids(d.items)).toEqual(["700001", "700005", "812345"]);
|
||||
expect(ids(d.unmatched)).toEqual(["700002", "700003", "700004"]);
|
||||
// 按 TMDB 条目搜同一作品:同样判定
|
||||
const byTmdb = (await req(`/search/releases?tmdb=movie:693134&sites=${sites.a}`)).body.data;
|
||||
expect(ids(byTmdb.items)).toEqual(["700001", "700005", "812345"]);
|
||||
|
||||
// 关键词搜索不判定归属
|
||||
const kw = (await req(`/search/releases?q=${encodeURIComponent("沙丘2")}&sites=${sites.a}`)).body.data;
|
||||
expect(kw.unmatched).toBeUndefined();
|
||||
expect(kw.total).toBe(6);
|
||||
});
|
||||
|
||||
it("GET /media/tmdb/{type}/{id}:TMDB 信息 + 季列表 + 库存对比 + 是否已建档", async () => {
|
||||
const before = counts();
|
||||
const movie = await req(`/media/tmdb/movie/872585`);
|
||||
@@ -320,7 +391,7 @@ describe.skipIf(!up)("两阶段搜索(SEARCH-2)", () => {
|
||||
inventory: { state: "not_collected" },
|
||||
mediaServers: null,
|
||||
seasons: [],
|
||||
queries: ["Oppenheimer 2023", "奥本海默"],
|
||||
queries: ["奥本海默", "Oppenheimer 2023"],
|
||||
externalIds: { imdb: "tt15398776" },
|
||||
});
|
||||
|
||||
@@ -338,7 +409,7 @@ describe.skipIf(!up)("两阶段搜索(SEARCH-2)", () => {
|
||||
[2, 10, null],
|
||||
[3, 10, null],
|
||||
]);
|
||||
expect(tv.body.data.queries).toEqual(["The Bear", "熊家餐馆"]);
|
||||
expect(tv.body.data.queries).toEqual(["熊家餐馆", "The Bear"]);
|
||||
|
||||
expect((await req(`/media/tmdb/movie/999999999`)).status).toBe(404);
|
||||
expect((await req(`/media/tmdb/person/1`)).status).toBe(422);
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
import type { ReleaseSearchQuery } from "@umt/contracts";
|
||||
import { normalizeTitle, parseRelease } from "@umt/domain";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { type BaseRelease, quickFilter } from "../../src/modules/search/releases.ts";
|
||||
import { belongsToWork, type ReleaseLink, type WorkTarget } from "../../src/modules/search/work-match.ts";
|
||||
import samples from "../fixtures/search-apothecary.json" with { type: "json" };
|
||||
|
||||
// 按作品搜资源的归属判定(对照 MP TorrentHelper.match_torrent)。样本是站点搜索「药屋少女的呢喃」的真实结果(109 条),
|
||||
// 按「刚搜到、还没识别」处理:只靠名字 / 类型 / 年份 / 季集判定。
|
||||
|
||||
const base = (o: { id: string; title: string; subtitle: string | null; category: string | null }): BaseRelease => {
|
||||
const p = parseRelease(o.title, o.subtitle ? { subtitle: o.subtitle } : {});
|
||||
return {
|
||||
key: `s:${o.id}`,
|
||||
sourceReleaseId: null,
|
||||
siteId: "00000000-0000-4000-8000-000000000001",
|
||||
siteName: "站",
|
||||
siteReleaseId: o.id,
|
||||
title: o.title,
|
||||
subtitle: o.subtitle,
|
||||
category: { id: null, name: o.category },
|
||||
sizeBytes: null,
|
||||
seeders: 1,
|
||||
leechers: 0,
|
||||
snatched: 0,
|
||||
promotion: { type: "none", downloadFactor: 1, uploadFactor: 1, expiresAt: null },
|
||||
free: false,
|
||||
hr: "unknown",
|
||||
uploadedAt: null,
|
||||
detailUrl: "http://x/",
|
||||
observedAt: "2026-10-06T00:00:00.000Z",
|
||||
parsed: {
|
||||
titleCn: p.titleCn ?? null,
|
||||
titleEn: p.titleEn ?? null,
|
||||
year: p.year ?? null,
|
||||
season: p.season ?? null,
|
||||
seasonEnd: p.seasonEnd ?? null,
|
||||
episodes: p.episodes ? { start: p.episodes.start, end: p.episodes.end } : null,
|
||||
resolution: p.resolution ?? null,
|
||||
source: p.source ?? null,
|
||||
videoCodec: p.videoCodec ?? null,
|
||||
hdr: [...p.hdr],
|
||||
releaseGroup: p.releaseGroup?.name ?? null,
|
||||
audio: [...p.audio],
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const set = (xs: string[]) => new Set(xs.map(normalizeTitle));
|
||||
// 本地作品与别名表(取自真实库里这部作品的 TMDB 别名)
|
||||
const apothecary: WorkTarget = {
|
||||
entityId: "e-apothecary",
|
||||
tmdb: "tv:220542",
|
||||
movie: false,
|
||||
titles: set(["药屋少女的呢喃", "薬屋のひとりごと"]),
|
||||
names: set([
|
||||
"The Apothecary Diaries",
|
||||
"药师少女的独语",
|
||||
"Kusuriya no Hitorigoto",
|
||||
"Kusuriya no Hitorigoto 2nd Season",
|
||||
"薬屋のひとりごと(第3期)",
|
||||
"Apothecary's Soliloquy",
|
||||
"Les Carnets de l'apothicaire",
|
||||
]),
|
||||
year: 2023,
|
||||
seasons: [
|
||||
{ season: 1, year: 2023, episodes: 24 },
|
||||
{ season: 2, year: 2025, episodes: 24 },
|
||||
{ season: 3, year: 2026, episodes: null },
|
||||
],
|
||||
};
|
||||
|
||||
const rows = samples.map(base);
|
||||
const byId = (id: string) => rows.find((r) => r.siteReleaseId === id)!;
|
||||
const ALBUM = "926704"; // Channel U(《迷宫饭》片尾曲专辑,简介里提到这部作品的片头曲)
|
||||
const S01_S24 = "1012256"; // 标题写成 S01-S24(实为 24 集),超出作品的季范围
|
||||
const out = (t: WorkTarget, links: Map<string, ReleaseLink> = new Map()) =>
|
||||
rows.filter((r) => !belongsToWork(t, r, links.get(r.key) ?? null)).map((r) => r.siteReleaseId);
|
||||
|
||||
describe("按作品判定归属(未识别,真实样本)", () => {
|
||||
it("109 条里只有专辑与季范围不可能的那条不属于;其余(S01 / S02 / S03、Vol 原盘、无年份标题)都属于", () => {
|
||||
expect(samples).toHaveLength(109);
|
||||
expect(out(apothecary).sort()).toEqual([S01_S24, ALBUM].sort());
|
||||
// 逐类抽查不被误伤
|
||||
for (const [id, why] of [
|
||||
["1139946", "S01E25-E48 绝对集号"],
|
||||
["728125", "S03E01"],
|
||||
["954567", "S02 自购自抓原盘,中文名解析成「自购自抓自扫」,靠英文名 / 副标题"],
|
||||
["1021945", "Vol.3 BDMV,英文名带 Vol 3、没识别"],
|
||||
["768303", "Vol 2 原盘"],
|
||||
["994487", "没有年份没有季号(VCB BDRip)"],
|
||||
["1157450", "S02 2026(蓝光发行年份)"],
|
||||
] as const) {
|
||||
const r = byId(id);
|
||||
expect(r, why).toBeTruthy();
|
||||
expect(belongsToWork(apothecary, r, null), `${why}:${r.title}`).toBe(true);
|
||||
}
|
||||
});
|
||||
|
||||
it("没拿到 TMDB 季信息时不核对季集范围,只排除专辑", () => {
|
||||
expect(out({ ...apothecary, seasons: null })).toEqual([ALBUM]);
|
||||
});
|
||||
|
||||
it("专辑没有分类也靠名字排除:简介里『』括起的作品名不算命中", () => {
|
||||
const album = { ...byId(ALBUM), category: { id: null, name: null } };
|
||||
expect(belongsToWork(apothecary, album, null)).toBe(false);
|
||||
});
|
||||
|
||||
it("已识别:同一作品或同一 TMDB 身份属于;识别到别的作品不属于(哪怕名字对得上)", () => {
|
||||
const album = byId(ALBUM);
|
||||
const s1 = rows[0]!;
|
||||
expect(belongsToWork(apothecary, album, { entityId: "e-dungeon", tmdb: "tv:209867" })).toBe(false);
|
||||
expect(belongsToWork(apothecary, s1, { entityId: "e-dungeon", tmdb: null })).toBe(false);
|
||||
expect(belongsToWork(apothecary, s1, { entityId: "e-apothecary", tmdb: null })).toBe(true);
|
||||
expect(belongsToWork(apothecary, byId(S01_S24), { entityId: "e-apothecary", tmdb: null })).toBe(true);
|
||||
// 本地有重复建档,但 TMDB 身份相同
|
||||
expect(belongsToWork(apothecary, s1, { entityId: "e-dup", tmdb: "tv:220542" })).toBe(true);
|
||||
// 只在 TMDB 上的作品:按 TMDB 身份比
|
||||
const tmdbOnly = { ...apothecary, entityId: null };
|
||||
expect(belongsToWork(tmdbOnly, s1, { entityId: "e-any", tmdb: "tv:220542" })).toBe(true);
|
||||
expect(belongsToWork(tmdbOnly, s1, { entityId: "e-any", tmdb: null })).toBe(false);
|
||||
});
|
||||
|
||||
it("不属于的不进筛选与分面:原盘只剩这部作品的", () => {
|
||||
const mine = rows.filter((r) => belongsToWork(apothecary, r, null));
|
||||
const q = { sort: "default", order: "desc", limit: 50, qf: "releaseType:disc" } as ReleaseSearchQuery;
|
||||
const all = quickFilter(rows, q, Date.now());
|
||||
const kept = quickFilter(mine, q, Date.now());
|
||||
expect(all.items.map((r) => r.siteReleaseId)).toContain(ALBUM);
|
||||
expect(kept.items.map((r) => r.siteReleaseId)).not.toContain(ALBUM);
|
||||
// 「自购自抓自扫」那条按原盘计
|
||||
expect(kept.items.map((r) => r.siteReleaseId)).toContain("954567");
|
||||
expect(kept.items).toHaveLength(all.items.length - 1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("按作品判定归属(规则)", () => {
|
||||
const mk = (title: string, subtitle: string | null = null, category: string | null = null) =>
|
||||
base({ id: title, title, subtitle, category });
|
||||
|
||||
it("别的作品:名字对不上的不属于(迷宫饭)", () => {
|
||||
expect(
|
||||
belongsToWork(apothecary, mk("Delicious in Dungeon S01 2024 1080p NF WEB-DL", "迷宫饭 / ダンジョン飯"), null),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("剧集:年份与任一季首播相差 1 年以内;季号超出范围不属于;集号可按绝对集号", () => {
|
||||
expect(belongsToWork(apothecary, mk("Kusuriya no Hitorigoto S01 2019 1080p WEB-DL"), null)).toBe(false);
|
||||
expect(belongsToWork(apothecary, mk("Kusuriya no Hitorigoto S01 2024 1080p BluRay x265"), null)).toBe(true);
|
||||
expect(belongsToWork(apothecary, mk("Kusuriya no Hitorigoto S05 1080p WEB-DL"), null)).toBe(false);
|
||||
expect(belongsToWork(apothecary, mk("Kusuriya no Hitorigoto S01E30 1080p WEB-DL"), null)).toBe(true);
|
||||
expect(belongsToWork(apothecary, mk("Kusuriya no Hitorigoto S01E60 1080p WEB-DL"), null)).toBe(false);
|
||||
// 没有季信息时,只排除早于首播一年以上的
|
||||
const noSeasons = { ...apothecary, seasons: null };
|
||||
expect(belongsToWork(noSeasons, mk("Kusuriya no Hitorigoto 2030 1080p WEB-DL"), null)).toBe(true);
|
||||
expect(belongsToWork(noSeasons, mk("Kusuriya no Hitorigoto 2019 1080p WEB-DL"), null)).toBe(false);
|
||||
});
|
||||
|
||||
it("名字:标题拆词只比非英文词与作品名 / 原名;副标题拆词也比别名;英文单词不拆着比", () => {
|
||||
// 标题里的中文名
|
||||
expect(belongsToWork(apothecary, mk("[药屋少女的呢喃][S02E05][1080p]"), null)).toBe(true);
|
||||
// 副标题里的别名
|
||||
expect(belongsToWork(apothecary, mk("KnH 2023 S01 1080p WEB-DL", "药师少女的独语 | 全24集"), null)).toBe(true);
|
||||
// 英文单词片段不算
|
||||
expect(belongsToWork(apothecary, mk("Diaries of a Pharmacist S01 2023 1080p WEB-DL", "The Diaries"), null)).toBe(
|
||||
false,
|
||||
);
|
||||
// 非音视频分类
|
||||
expect(belongsToWork(apothecary, mk("Kusuriya no Hitorigoto OST 2023 FLAC", null, "音乐"), null)).toBe(false);
|
||||
});
|
||||
|
||||
it("电影:年份上下 1 年,没写年份不属于(MP 同);剧集资源或剧集分类不属于电影", () => {
|
||||
const dune: WorkTarget = {
|
||||
entityId: "e-dune",
|
||||
tmdb: "movie:693134",
|
||||
movie: true,
|
||||
titles: set(["沙丘2", "Dune: Part Two"]),
|
||||
names: set(["Dune 2", "沙丘:第二部"]),
|
||||
year: 2024,
|
||||
seasons: null,
|
||||
};
|
||||
expect(belongsToWork(dune, mk("Dune.Part.Two.2024.2160p.WEB-DL"), null)).toBe(true);
|
||||
expect(belongsToWork(dune, mk("Dune.Part.Two.2025.2160p.BluRay"), null)).toBe(true);
|
||||
expect(belongsToWork(dune, mk("Dune.Part.Two.2160p.WEB-DL"), null)).toBe(false);
|
||||
expect(belongsToWork(dune, mk("Dune 1984 1080p BluRay", "沙丘2 前作"), null)).toBe(false);
|
||||
expect(belongsToWork(dune, mk("Dune Part Two S01 2024 1080p WEB-DL"), null)).toBe(false);
|
||||
expect(belongsToWork(dune, mk("Dune.Part.Two.2024.1080p.WEB-DL", null, "剧集"), null)).toBe(false);
|
||||
expect(belongsToWork(dune, mk("Some Movie 2024 1080p WEB-DL", "沙丘2"), null)).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user