From f0cc2ad4c0f7aca0423ed5e0912ce4ecdf37cb14 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Mon, 6 Jul 2026 09:23:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20PageKey=E5=A2=9E=E5=8A=A0RSS=EF=BC=8C?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=84=9A=E6=9C=AC=E6=A8=A1=E6=9D=BF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0parseRss=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/nexusphp-default.groovy | 9 +++++++++ par-core/src/main/java/com/par/core/enums/PageKey.java | 1 + .../src/main/resources/scripts/default-gazelle.groovy | 5 +++++ .../src/main/resources/scripts/default-mtorrent.groovy | 5 +++++ .../src/main/resources/scripts/default-nexusphp.groovy | 5 +++++ .../src/main/resources/scripts/default-unit3d.groovy | 6 ++++++ 6 files changed, 31 insertions(+) diff --git a/docs/nexusphp-default.groovy b/docs/nexusphp-default.groovy index e5a57e8..4c1536f 100644 --- a/docs/nexusphp-default.groovy +++ b/docs/nexusphp-default.groovy @@ -21,6 +21,7 @@ Map parseSync(context) { Map parseSearch(context) { return checkStatus(context) ?: parseSearchPage(Jsoup.parse(context.content)) } Map parseSignIn(context) { return checkStatus(context) ?: parseSignPage(Jsoup.parse(context.content)) } Map parseDownload(context) { return checkStatus(context) ?: parseDownloadPage(context) } +Map parseRss(context) { return checkStatus(context) ?: parseRssPage(context) } /** 获取资源元数据:搜索 → 详情 → 提取豆瓣链接(Douban 解析由 Java 层负责) */ Map parseMetadata(context) { @@ -154,6 +155,14 @@ private Map parseDownloadPage(context) { return [pageName: '下载', matched: false, error: true, status: context.status, message: "非种子文件 response"] } +// ==================== RSS ==================== + +/** RSS 页面解析:默认不做 XML 解析,由 Java 层 parseRssXml 处理。 + * 站点如需要自定义 RSS 解析,可覆盖此方法返回 items 列表。 */ +private Map parseRssPage(context) { + return [pageName: 'RSS', matched: true, message: 'RSS 内容由 Java 层解析'] +} + // ==================== 工具方法 ==================== /** 从 #info_block 提取原始字段 */ diff --git a/par-core/src/main/java/com/par/core/enums/PageKey.java b/par-core/src/main/java/com/par/core/enums/PageKey.java index 2f042e3..c5ebff3 100644 --- a/par-core/src/main/java/com/par/core/enums/PageKey.java +++ b/par-core/src/main/java/com/par/core/enums/PageKey.java @@ -10,6 +10,7 @@ public enum PageKey { SIGN_IN("signIn", "签到", "POST"), SEARCH("search", "搜索", "GET"), DOWNLOAD("download", "下载", "GET"), + RSS("rss", "RSS", "GET"), // detail 仅供脚本内 context.fetch("detail", ...) 使用,medibo 不直接调用 DETAIL("detail", "资源详情", "GET"); diff --git a/par-core/src/main/resources/scripts/default-gazelle.groovy b/par-core/src/main/resources/scripts/default-gazelle.groovy index 70c2525..f3d821b 100644 --- a/par-core/src/main/resources/scripts/default-gazelle.groovy +++ b/par-core/src/main/resources/scripts/default-gazelle.groovy @@ -8,10 +8,15 @@ Map parse(String content, String url) { if (url.contains('/torrents.php')) return parseSearch(doc) if (url.contains('/torrents.php?id=')) return parseDetail(doc) if (url.contains('/index.php') && !url.contains('?')) return parseUserInfo(doc) + if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss() return [pageName: '未知页面', message: "未配置: ${url}"] } +private Map parseRss() { + return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析'] +} + private Map parseUserInfo(doc) { def fields = [:] def stats = utils.selectFirst(doc, '#userinfo_stats, .user_stats, ul.stats') diff --git a/par-core/src/main/resources/scripts/default-mtorrent.groovy b/par-core/src/main/resources/scripts/default-mtorrent.groovy index 1a3359b..e53b0e8 100644 --- a/par-core/src/main/resources/scripts/default-mtorrent.groovy +++ b/par-core/src/main/resources/scripts/default-mtorrent.groovy @@ -12,10 +12,15 @@ Map parse(String content, String url) { if (url.contains('/api/member/profile')) return parseProfile(root?.data) if (url.contains('/api/tracker/myPeerStatistics')) return parsePeerStats(root?.data) if (url.contains('/api/torrent/search')) return parseSearch(root?.data?.data ?: []) + if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss() return [pageName: '未知接口', message: "未配置: ${url}"] } +private Map parseRss() { + return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析'] +} + private Map parseProfile(d) { if (!d) return [pageName: '用户信息', message: 'data 为空'] return [pageName: '用户信息', fields: [ diff --git a/par-core/src/main/resources/scripts/default-nexusphp.groovy b/par-core/src/main/resources/scripts/default-nexusphp.groovy index a174972..3470dc7 100644 --- a/par-core/src/main/resources/scripts/default-nexusphp.groovy +++ b/par-core/src/main/resources/scripts/default-nexusphp.groovy @@ -9,10 +9,15 @@ Map parse(String content, String url) { if (url.contains('/attendance.php')) return parseSign(doc) if (url.contains('/index.php') && !url.contains('?')) return parseUserInfo(doc) if (url.contains('/usercp.php')) return parseUserPanel(doc) + if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss(doc) return [pageName: '未知页面', message: "未配置: ${url}"] } +private Map parseRss(doc) { + return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析'] +} + private Map parseUserInfo(doc) { def fields = [:] def el = doc.selectFirst('#info_block, td.bottom.clearfix, .userbar') diff --git a/par-core/src/main/resources/scripts/default-unit3d.groovy b/par-core/src/main/resources/scripts/default-unit3d.groovy index e1143f3..4abf392 100644 --- a/par-core/src/main/resources/scripts/default-unit3d.groovy +++ b/par-core/src/main/resources/scripts/default-unit3d.groovy @@ -16,9 +16,15 @@ Map parse(String content, String url) { } catch (e) {} } + if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss() + return [pageName: '未知页面', message: "未配置: ${url}"] } +private Map parseRss() { + return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析'] +} + private Map parseApiData(d, url) { if (url.contains('/user') || url.contains('/profile')) return [pageName: '用户', fields: [username: d?.username, uploaded: d?.uploaded?.toString(), downloaded: d?.downloaded?.toString()]]