Files
rootandClaude Opus 5.5 591cc78c7d test(porting): differential tests against MoviePilot Rust-accelerated parsers
Snapshot differential tests (known deviations registered, current state passes):
- title/path recognition: 216 samples vs MP MetaInfo/MetaInfoPath
- filter rules: 42 rules x 28 torrents vs MP FilterModule
- RSS/indexer parsing: 15 feeds, 72 indexer samples
- zhconv: 69 samples
Generator: scripts/mp-sync/gen-differential.py; report: docs/porting/mp-rust-logic-parity.md

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 22:44:11 +08:00

1063 lines
34 KiB
JSON

{
"kind": "rss",
"generatedFrom": {
"repo": "MoviePilot",
"commit": "e6820a83ab05e8a00eb0e14adf0f357faa965c7e",
"function": "app/application/rss.py RssHelper._parse_impl (lxml fallback; parser port -> None)",
"rust": "moviepilot_rust.parse_rss_items_fast (reference only)",
"tz": "UTC",
"generator": "gen-differential.py rss"
},
"fields": ["title", "description", "link", "enclosure", "size", "pubdate", "nickname"],
"samples": [
{
"id": "hw-atom-nons",
"input": {
"file": "inputs/rss/hw-atom-nons.xml",
"sha256": "688a445573de61dcae4982cfaf1bab6164578ef7d1c7e0d179d6fad2bf132fdd"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Atom.Entry.One",
"description": "atom summary",
"link": "https://e.x/details?id=1",
"enclosure": "https://e.x/details?id=1",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "2026-09-26T13:14:03Z",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "<b>Atom.Entry.Two</b>",
"description": "",
"link": "https://e.x/details?id=2",
"enclosure": "https://e.x/details?id=2",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "2026-09-26T21:14:03+08:00",
"wall": "2026-09-26T21:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Atom.Entry.One",
"enclosure": "https://e.x/details?id=1",
"size": 0,
"description": "atom summary",
"link": "https://e.x/details?id=1",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "<b>Atom.Entry.Two</b>",
"enclosure": "https://e.x/details?id=2",
"size": 0,
"description": "",
"link": "https://e.x/details?id=2",
"pubdate": "2026-09-26T13:14:03+00:00"
}
]
}
},
{
"id": "hw-expired",
"input": {
"file": "inputs/rss/hw-expired.txt",
"sha256": "4be5a56cf3dd539992cfaec516a0635e10c8f8c6ee24850dbafa3123bef8cf01"
},
"mp": {
"status": "false_error",
"items": []
},
"mp_rust": {
"status": "not_called",
"note": "RssHelper.__parse_with_rust 对非 < 开头内容直接返回 None"
}
},
{
"id": "hw-rdf",
"input": {
"file": "inputs/rss/hw-rdf.xml",
"sha256": "a84984a7debba7ce9927f0a0323fbcbd4503f74112e6c7b0441654704ee3464a"
},
"mp": {
"status": "ok",
"items": []
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "RDF.Item.One",
"enclosure": "https://e.x/1",
"size": 0,
"description": "rdf desc",
"link": "https://e.x/1",
"pubdate": "",
"nickname": "alice"
}
]
}
},
{
"id": "hw-rss-broken",
"input": {
"file": "inputs/rss/hw-rss-broken.xml",
"sha256": "dced074189dcf0a871fbd5d4fdec78f3c2310117d1900a7bb629434d12479df1"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Good.One",
"description": "",
"link": "https://e.x/1",
"enclosure": "https://e.x/1",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Unclosed",
"description": "",
"link": "https://e.x/2",
"enclosure": "https://e.x/2",
"size": 0,
"pubdate": {
"kind": "absent"
}
}
]
},
"mp_rust": {
"status": "error",
"error": "ValueError: ill-formed document: expected `</title>`, but `</item>` was found"
}
},
{
"id": "hw-rss-cdata",
"input": {
"file": "inputs/rss/hw-rss-cdata.xml",
"sha256": "ab3d319aec7b1cd8775b7144c7ebf848178d7cc3cfe6210d938b098ba7560cfa"
},
"mp": {
"status": "ok",
"items": [
{
"title": "[BDMV] 奥本海默 Oppenheimer 2023 <UHD> & more",
"description": "<p>Size: 78.42 GB</p><img src=\"x.jpg\"/>",
"link": "https://pt.example.com/details.php?id=1",
"enclosure": "https://pt.example.com/download.php?id=1&passkey=abcdef0123456789",
"size": 84203386470,
"nickname": "豆瓣用户A",
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 21:14:03 +0800",
"wall": "2026-09-26T21:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "Plain & Escaped <Title> 中文",
"description": "desc & more",
"link": "https://pt.example.com/details.php?id=2&hit=1",
"enclosure": "https://pt.example.com/download.php?id=2",
"size": 1024,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 13:14:03 GMT",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "[BDMV] 奥本海默 Oppenheimer 2023 <UHD> & more",
"enclosure": "https://pt.example.com/download.php?id=1&passkey=abcdef0123456789",
"size": 84203386470,
"description": "<p>Size: 78.42 GB</p><img src=\"x.jpg\"/>",
"link": "https://pt.example.com/details.php?id=1",
"pubdate": "2026-09-26T13:14:03+00:00",
"nickname": "豆瓣用户A"
},
{
"title": "Plain & Escaped <Title> 中文",
"enclosure": "https://pt.example.com/download.php?id=2",
"size": 1024,
"description": "desc & more",
"link": "https://pt.example.com/details.php?id=2&hit=1",
"pubdate": "2026-09-26T13:14:03+00:00"
}
]
}
},
{
"id": "hw-rss-dtd",
"input": {
"file": "inputs/rss/hw-rss-dtd.xml",
"sha256": "b45ee3007c1d8eff9ff1e1f0e262d859826e4dcfaec3ea3a7130508bd1e82c17"
},
"mp": {
"status": "ok",
"items": []
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "&brand; Title",
"enclosure": "https://e.x/1",
"size": 0,
"description": "",
"link": "https://e.x/1",
"pubdate": ""
}
]
}
},
{
"id": "hw-rss-entities",
"input": {
"file": "inputs/rss/hw-rss-entities.xml",
"sha256": "a8a0d91ca3f75dd6b97d5ad1d19f88319f581d3274aefa69d5a0ef8aa85d6898"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Nbsp",
"description": "",
"link": "https://e.x/1",
"enclosure": "https://e.x/1",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Normal.After.Bad",
"description": "",
"link": "https://e.x/2",
"enclosure": "https://e.x/2",
"size": 0,
"pubdate": {
"kind": "absent"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Nbsp&nbsp;Title&copy;2026",
"enclosure": "https://e.x/1",
"size": 0,
"description": "",
"link": "https://e.x/1",
"pubdate": ""
},
{
"title": "Normal.After.Bad",
"enclosure": "https://e.x/2",
"size": 0,
"description": "",
"link": "https://e.x/2",
"pubdate": ""
}
]
}
},
{
"id": "hw-rss-link-fallback",
"input": {
"file": "inputs/rss/hw-rss-link-fallback.xml",
"sha256": "d46fae0bfc7e3248d368857c8973443a2b65c60a54a1b1069de7ed84c73e3864"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Only.Link.Item",
"description": "",
"link": "https://pt.example.com/download.php?id=10",
"enclosure": "https://pt.example.com/download.php?id=10",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Enclosure.Only",
"description": "",
"link": "",
"enclosure": "magnet:?xt=urn:btih:0123456789abcdef0123456789abcdef01234567&dn=x",
"size": 0,
"pubdate": {
"kind": "absent"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Only.Link.Item",
"enclosure": "https://pt.example.com/download.php?id=10",
"size": 0,
"description": "",
"link": "https://pt.example.com/download.php?id=10",
"pubdate": ""
},
{
"title": "Enclosure.Only",
"enclosure": "magnet:?xt=urn:btih:0123456789abcdef0123456789abcdef01234567&dn=x",
"size": 0,
"description": "",
"link": "",
"pubdate": ""
}
]
}
},
{
"id": "hw-rss-nested",
"input": {
"file": "inputs/rss/hw-rss-nested.xml",
"sha256": "41559a6d1dfd2ccbf1ecda6bbb10dfc5518aea2fb56ed2c59052d4782c6766cf"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Source.Title.First",
"description": "",
"link": "https://e.x/1",
"enclosure": "https://e.x/1",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Two.Enclosures",
"description": "",
"link": "",
"enclosure": "https://e.x/a.torrent",
"size": 100,
"pubdate": {
"kind": "absent"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Source.Title.First",
"enclosure": "https://e.x/1",
"size": 0,
"description": "",
"link": "https://e.x/1",
"pubdate": ""
},
{
"title": "Two.Enclosures",
"enclosure": "https://e.x/a.torrent",
"size": 100,
"description": "",
"link": "",
"pubdate": ""
}
]
}
},
{
"id": "hw-rss-nyaa",
"input": {
"file": "inputs/rss/hw-rss-nyaa.xml",
"sha256": "0e7a8b8b0fa321c6e2b5242b3bba8bdb40a005640111b2efe064b737fbbf86df"
},
"mp": {
"status": "ok",
"items": [
{
"title": "[Group] Show - 01 [1080p].mkv",
"description": "<a href=\"https://nyaa.example/view/1\">#1</a> | 1.2 GiB",
"link": "https://nyaa.example/download/1.torrent",
"enclosure": "https://nyaa.example/download/1.torrent",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 13:14:03 -0000",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "[Group] Show - 01 [1080p].mkv",
"enclosure": "https://nyaa.example/download/1.torrent",
"size": 0,
"description": "<a href=\"https://nyaa.example/view/1\">#1</a> | 1.2 GiB",
"link": "https://nyaa.example/download/1.torrent",
"pubdate": "2026-09-26T13:14:03+00:00"
}
]
}
},
{
"id": "hw-rss-pubdate",
"input": {
"file": "inputs/rss/hw-rss-pubdate.xml",
"sha256": "7ce9c000674a73e96ec5408260e4b6292bfecf7578b242706d3d62c7ccd48fb0"
},
"mp": {
"status": "ok",
"items": [
{
"title": "rfc822-gmt",
"description": "",
"link": "https://e.x/1",
"enclosure": "https://e.x/1",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 13:14:03 GMT",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "rfc822-offset",
"description": "",
"link": "https://e.x/2",
"enclosure": "https://e.x/2",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 21:14:03 +0800",
"wall": "2026-09-26T21:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "rfc822-no-seconds",
"description": "",
"link": "https://e.x/3",
"enclosure": "https://e.x/3",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 21:14 +0800",
"wall": "2026-09-26T21:14:00",
"utc": "2026-09-26T13:14:00.000Z"
}
},
{
"title": "rfc822-cst",
"description": "",
"link": "https://e.x/4",
"enclosure": "https://e.x/4",
"size": 0,
"pubdate": {
"kind": "naive",
"text": "Sat, 26 Sep 2026 21:14:03 CST",
"wall": "2026-09-26T21:14:03",
"utc": "2026-09-26T21:14:03.000Z"
}
},
{
"title": "iso-z",
"description": "",
"link": "https://e.x/5",
"enclosure": "https://e.x/5",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "2026-09-26T13:14:03Z",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "iso-offset",
"description": "",
"link": "https://e.x/6",
"enclosure": "https://e.x/6",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "2026-09-26T21:14:03+08:00",
"wall": "2026-09-26T21:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "naive-space",
"description": "",
"link": "https://e.x/7",
"enclosure": "https://e.x/7",
"size": 0,
"pubdate": {
"kind": "naive",
"text": "2026-09-26 21:14:03",
"wall": "2026-09-26T21:14:03",
"utc": "2026-09-26T21:14:03.000Z"
}
},
{
"title": "date-only",
"description": "",
"link": "https://e.x/8",
"enclosure": "https://e.x/8",
"size": 0,
"pubdate": {
"kind": "naive",
"text": "2026-09-26",
"wall": "2026-09-26T00:00:00",
"utc": "2026-09-26T00:00:00.000Z"
}
},
{
"title": "chinese",
"description": "",
"link": "https://e.x/9",
"enclosure": "https://e.x/9",
"size": 0,
"pubdate": {
"kind": "unparsed",
"text": "2026年09月26日 21:14:03"
}
},
{
"title": "garbage",
"description": "",
"link": "https://e.x/10",
"enclosure": "https://e.x/10",
"size": 0,
"pubdate": {
"kind": "unparsed",
"text": "3小时前"
}
},
{
"title": "no-weekday",
"description": "",
"link": "https://e.x/11",
"enclosure": "https://e.x/11",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "26 Sep 2026 13:14:03 +0000",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "wrong-weekday",
"description": "",
"link": "https://e.x/12",
"enclosure": "https://e.x/12",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "Mon, 26 Sep 2026 13:14:03 GMT",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "epoch-like",
"description": "",
"link": "https://e.x/13",
"enclosure": "https://e.x/13",
"size": 0,
"pubdate": {
"kind": "unparsed",
"text": "1790428443"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "rfc822-gmt",
"enclosure": "https://e.x/1",
"size": 0,
"description": "",
"link": "https://e.x/1",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "rfc822-offset",
"enclosure": "https://e.x/2",
"size": 0,
"description": "",
"link": "https://e.x/2",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "rfc822-no-seconds",
"enclosure": "https://e.x/3",
"size": 0,
"description": "",
"link": "https://e.x/3",
"pubdate": "2026-09-26T13:14:00+00:00"
},
{
"title": "rfc822-cst",
"enclosure": "https://e.x/4",
"size": 0,
"description": "",
"link": "https://e.x/4",
"pubdate": "2026-09-27T03:14:03+00:00"
},
{
"title": "iso-z",
"enclosure": "https://e.x/5",
"size": 0,
"description": "",
"link": "https://e.x/5",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "iso-offset",
"enclosure": "https://e.x/6",
"size": 0,
"description": "",
"link": "https://e.x/6",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "naive-space",
"enclosure": "https://e.x/7",
"size": 0,
"description": "",
"link": "https://e.x/7",
"pubdate": "2026-09-26T21:14:03+00:00"
},
{
"title": "date-only",
"enclosure": "https://e.x/8",
"size": 0,
"description": "",
"link": "https://e.x/8",
"pubdate": "2026-09-26T00:00:00+00:00"
},
{
"title": "chinese",
"enclosure": "https://e.x/9",
"size": 0,
"description": "",
"link": "https://e.x/9",
"pubdate": ""
},
{
"title": "garbage",
"enclosure": "https://e.x/10",
"size": 0,
"description": "",
"link": "https://e.x/10",
"pubdate": ""
},
{
"title": "no-weekday",
"enclosure": "https://e.x/11",
"size": 0,
"description": "",
"link": "https://e.x/11",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "wrong-weekday",
"enclosure": "https://e.x/12",
"size": 0,
"description": "",
"link": "https://e.x/12",
"pubdate": ""
},
{
"title": "epoch-like",
"enclosure": "https://e.x/13",
"size": 0,
"description": "",
"link": "https://e.x/13",
"pubdate": ""
}
]
}
},
{
"id": "hw-rss-size",
"input": {
"file": "inputs/rss/hw-rss-size.xml",
"sha256": "da6e7e28c5a7731d56b56c326fc9809309a5ccdc64a816f013dc10c4cb764898"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Size.In.Description",
"description": "[Size: 1.50 GB] [Seeders: 12]",
"link": "https://pt.example.com/d?id=20",
"enclosure": "https://pt.example.com/d?id=20",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Length.NonDigit",
"description": "",
"link": "",
"enclosure": "https://pt.example.com/dl?id=21",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Length.Empty",
"description": "",
"link": "",
"enclosure": "https://pt.example.com/dl?id=22",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Length.Missing",
"description": "",
"link": "",
"enclosure": "https://pt.example.com/dl?id=23",
"size": 0,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Length.Big",
"description": "",
"link": "",
"enclosure": "https://pt.example.com/dl?id=24",
"size": 2199023255552,
"pubdate": {
"kind": "absent"
}
},
{
"title": "Length.Negative",
"description": "",
"link": "",
"enclosure": "https://pt.example.com/dl?id=25",
"size": 0,
"pubdate": {
"kind": "absent"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Size.In.Description",
"enclosure": "https://pt.example.com/d?id=20",
"size": 0,
"description": "[Size: 1.50 GB] [Seeders: 12]",
"link": "https://pt.example.com/d?id=20",
"pubdate": ""
},
{
"title": "Length.NonDigit",
"enclosure": "https://pt.example.com/dl?id=21",
"size": 0,
"description": "",
"link": "",
"pubdate": ""
},
{
"title": "Length.Empty",
"enclosure": "https://pt.example.com/dl?id=22",
"size": 0,
"description": "",
"link": "",
"pubdate": ""
},
{
"title": "Length.Missing",
"enclosure": "https://pt.example.com/dl?id=23",
"size": 0,
"description": "",
"link": "",
"pubdate": ""
},
{
"title": "Length.Big",
"enclosure": "https://pt.example.com/dl?id=24",
"size": 2199023255552,
"description": "",
"link": "",
"pubdate": ""
},
{
"title": "Length.Negative",
"enclosure": "https://pt.example.com/dl?id=25",
"size": -1,
"description": "",
"link": "",
"pubdate": ""
}
]
}
},
{
"id": "hw-rss-whitespace",
"input": {
"file": "inputs/rss/hw-rss-whitespace.xml",
"sha256": "16a5c3be9b772d946d60714105d36251d0e960b27c44255cef1d020dac3c5de9"
},
"mp": {
"status": "ok",
"items": [
{
"title": "\n Spaced.Title.2026.1080p.WEB-DL\n ",
"description": "\n line one\n line two\n ",
"link": "\n https://pt.example.com/details.php?id=3\n ",
"enclosure": " https://pt.example.com/download.php?id=3 ",
"size": 0,
"pubdate": {
"kind": "aware",
"text": "\n Sat, 26 Sep 2026 13:14:03 GMT\n ",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Spaced.Title.2026.1080p.WEB-DL",
"enclosure": "https://pt.example.com/download.php?id=3",
"size": 2048,
"description": "line one\n line two",
"link": "https://pt.example.com/details.php?id=3",
"pubdate": "2026-09-26T13:14:03+00:00"
}
]
}
},
{
"id": "tk-atom-basic",
"input": {
"file": "inputs/rss/tk-atom-basic.xml",
"sha256": "6546bb85daeda86320216bcdd447461ce294e143950c98d800aa792855197cb9"
},
"mp": {
"status": "ok",
"items": []
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Dune.Part.Two.2024.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.Atmos.7.1-FraMeSToR",
"enclosure": "https://audiences.me/details.php?id=812345",
"size": 0,
"description": "沙丘2 / 沙丘:第二部 | <b>杜比视界</b> 国英双语 中字",
"link": "https://audiences.me/details.php?id=812345",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "Keep.Running.S12E01.20240426.2160p.WEB-DL.H265.AAC-LelveTV & Friends",
"enclosure": "https://audiences.me/details.php?id=812346",
"size": 0,
"description": "",
"link": "https://audiences.me/details.php?id=812346",
"pubdate": "2026-09-26T12:00:00+00:00"
},
{
"title": "The.Bear.S03.2160p.DSNP.WEB-DL.DDP5.1.Atmos.DV.H.265-FLUX",
"enclosure": "https://audiences.me/details.php?id=812347",
"size": 0,
"description": "",
"link": "https://audiences.me/details.php?id=812347",
"pubdate": ""
}
]
}
},
{
"id": "tk-rss-basic",
"input": {
"file": "inputs/rss/tk-rss-basic.xml",
"sha256": "89de110d3f33af374eef4e0b7a3c3d1221c44ebb02f5a50f48c9ca143158a8af"
},
"mp": {
"status": "ok",
"items": [
{
"title": "Dune.Part.Two.2024.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.Atmos.7.1-FraMeSToR",
"description": "沙丘2 / 沙丘:第二部 | <b>杜比视界</b> 国英双语 中字",
"link": "https://audiences.me/details.php?id=812345",
"enclosure": "https://audiences.me/download.php?id=812345&passkey=0123456789abcdef",
"size": 84203386470,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 13:14:03 GMT",
"wall": "2026-09-26T13:14:03",
"utc": "2026-09-26T13:14:03.000Z"
}
},
{
"title": "Keep.Running.S12E01.20240426.2160p.WEB-DL.H265.AAC-LelveTV & Friends",
"description": "",
"link": "https://audiences.me/details.php?id=812346",
"enclosure": "https://audiences.me/download.php?id=812346",
"size": 5497558138,
"pubdate": {
"kind": "aware",
"text": "Sat, 26 Sep 2026 12:00:00 GMT",
"wall": "2026-09-26T12:00:00",
"utc": "2026-09-26T12:00:00.000Z"
}
},
{
"title": "The.Bear.S03.2160p.DSNP.WEB-DL.DDP5.1.Atmos.DV.H.265-FLUX",
"description": "",
"link": "https://audiences.me/details.php?id=812347",
"enclosure": "https://audiences.me/details.php?id=812347",
"size": 0,
"pubdate": {
"kind": "absent"
}
}
]
},
"mp_rust": {
"status": "ok",
"items": [
{
"title": "Dune.Part.Two.2024.2160p.UHD.BluRay.REMUX.DV.HDR.HEVC.TrueHD.Atmos.7.1-FraMeSToR",
"enclosure": "https://audiences.me/download.php?id=812345&passkey=0123456789abcdef",
"size": 84203386470,
"description": "沙丘2 / 沙丘:第二部 | <b>杜比视界</b> 国英双语 中字",
"link": "https://audiences.me/details.php?id=812345",
"pubdate": "2026-09-26T13:14:03+00:00"
},
{
"title": "Keep.Running.S12E01.20240426.2160p.WEB-DL.H265.AAC-LelveTV & Friends",
"enclosure": "https://audiences.me/download.php?id=812346",
"size": 5497558138,
"description": "",
"link": "https://audiences.me/details.php?id=812346",
"pubdate": "2026-09-26T12:00:00+00:00"
},
{
"title": "The.Bear.S03.2160p.DSNP.WEB-DL.DDP5.1.Atmos.DV.H.265-FLUX",
"enclosure": "https://audiences.me/details.php?id=812347",
"size": 0,
"description": "",
"link": "https://audiences.me/details.php?id=812347",
"pubdate": ""
}
]
}
}
],
"deviations": {
"hw-expired.status": {
"kind": "mp_bug",
"note": "站点返回纯文本过期提示时,MP _parse_impl 先判\"不是 < 开头\"直接 return False,_rss_expired_msg 只在异常分支比较、实际不可达,调用方 TorrentsChain.rss 永远走不到 None→__renew_rss_url 续期;本项目 parseFeed 先识别过期文案抛 FeedError('expired')。"
},
"hw-rdf.count": {
"kind": "mp_bug",
"note": "RSS 1.0(RDF)默认命名空间 http://purl.org/rss/1.0/,MP Python 回退的 xpath './/item' 不带命名空间 → 0 条(Rust 快路径能解析出 1 条);本项目 removeNSPrefix 后解析出 1 条。"
},
"hw-rss-broken.count": {
"kind": "intentional",
"note": "缺少 </rss> 且含未闭合 <title>:MP lxml recover=True 容错解析出 2 条(第二条标题 'Unclosed');本项目 fast-xml-parser 非容错,只得到 1 条(未抛错)。容错恢复会产出错误字段,不跟随。"
},
"hw-rss-cdata#0.enclosure": {
"kind": "intentional",
"note": "本项目 enclosureUrl 为脱敏形态(passkey=[REDACTED]),真实值由 unredactUrl 在内存还原;MP 原样返回含 passkey 的 URL(SA5/任务书:含 passkey 的 URL 不得入日志/库)。"
},
"hw-rss-dtd.status": {
"kind": "intentional",
"note": "含内部 DTD/ENTITY 声明:MP resolve_entities=False,标题只剩实体引用前文本为空 → 跳过,返回 [](Rust 快路径返回 1 条);本项目预检直接拒绝整份 Feed(FeedError forbidden_dtd,防 XXE/billion laughs)。"
},
"hw-rss-entities#0.title": {
"kind": "intentional",
"note": "未声明的 HTML 实体 &nbsp;/&copy;:MP lxml recover 在未知实体处截断,标题变成 'Nbsp';本项目不展开非 XML 预定义实体,原样保留 '&nbsp;'/'&copy;' 字面量。两边都不是理想结果,本项目不丢信息;可考虑补 HTML 命名实体表。"
},
"hw-rss-nested#0.title": {
"kind": "mp_bug",
"note": "MP 用 './/title'(后代任意层)取第一个,<item> 内 <source><title> 在前时取到来源标题;本项目只取 item 直接子元素 title。"
},
"hw-rss-pubdate#3.pubdate": {
"kind": "intentional",
"note": "'... 21:14:03 CST':dateutil 不认识 CST(UnknownTimezoneWarning)返回 naive → 按 MP 宿主本地时区解释;JS Date.parse 按美国中部时间(-06:00)解析。中国站点写 CST 通常指 +08:00,两边都可能错,建议在 RSS 源配置时区后统一处理。"
},
"hw-rss-pubdate#7.pubdate": {
"kind": "intentional",
"note": "纯日期 '2026-09-26':dateutil → naive 本地午夜;JS Date.parse 按 ISO 规则视为 UTC 午夜。仅宿主时区非 UTC 时出现(condition=local_tz_not_utc)。",
"condition": "local_tz_not_utc"
},
"hw-rss-whitespace#0.description": {
"kind": "intentional",
"note": "同 hw-rss-whitespace#0.title(首尾空白)。"
},
"hw-rss-whitespace#0.enclosure": {
"kind": "intentional",
"note": "enclosure@url 两端空格:MP 原样,本项目属性值同样 trim。"
},
"hw-rss-whitespace#0.link": {
"kind": "intentional",
"note": "同 hw-rss-whitespace#0.title;MP 的 link 带换行,直接用作详情 URL 会失败。"
},
"hw-rss-whitespace#0.size": {
"kind": "intentional",
"note": "enclosure@length=' 2048 ':MP str.isdigit() 不通过 → 0;本项目属性 trim 后为 2048。"
},
"hw-rss-whitespace#0.title": {
"kind": "intentional",
"note": "MP 取 lxml .text 不 strip,保留换行与缩进;本项目 fast-xml-parser trimValues=true 去首尾空白(README 尚未登记,建议补)。"
},
"tk-atom-basic.count": {
"kind": "mp_bug",
"note": "标准 Atom(xmlns=http://www.w3.org/2005/Atom)下 MP Python 回退 './/entry' 匹配不到命名空间元素 → 0 条(Rust 快路径 3 条);本项目 3 条。无命名空间的 Atom 两边一致(见 hw-atom-nons)。"
},
"tk-rss-basic#0.enclosure": {
"kind": "intentional",
"note": "同 hw-rss-cdata#0.enclosure:passkey 脱敏。"
}
}
}