feat: PageKey增加RSS,默认脚本模板增加parseRss方法

This commit is contained in:
mediabot-pt
2026-07-06 09:23:27 +08:00
parent 0ef8080dd8
commit f0cc2ad4c0
6 changed files with 31 additions and 0 deletions

View File

@@ -21,6 +21,7 @@ Map parseSync(context) {
Map parseSearch(context) { return checkStatus(context) ?: parseSearchPage(Jsoup.parse(context.content)) } Map parseSearch(context) { return checkStatus(context) ?: parseSearchPage(Jsoup.parse(context.content)) }
Map parseSignIn(context) { return checkStatus(context) ?: parseSignPage(Jsoup.parse(context.content)) } Map parseSignIn(context) { return checkStatus(context) ?: parseSignPage(Jsoup.parse(context.content)) }
Map parseDownload(context) { return checkStatus(context) ?: parseDownloadPage(context) } Map parseDownload(context) { return checkStatus(context) ?: parseDownloadPage(context) }
Map parseRss(context) { return checkStatus(context) ?: parseRssPage(context) }
/** 获取资源元数据:搜索 → 详情 → 提取豆瓣链接(Douban 解析由 Java 层负责) */ /** 获取资源元数据:搜索 → 详情 → 提取豆瓣链接(Douban 解析由 Java 层负责) */
Map parseMetadata(context) { Map parseMetadata(context) {
@@ -154,6 +155,14 @@ private Map parseDownloadPage(context) {
return [pageName: '下载', matched: false, error: true, status: context.status, message: "非种子文件 response"] 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 提取原始字段 */ /** 从 #info_block 提取原始字段 */

View File

@@ -10,6 +10,7 @@ public enum PageKey {
SIGN_IN("signIn", "签到", "POST"), SIGN_IN("signIn", "签到", "POST"),
SEARCH("search", "搜索", "GET"), SEARCH("search", "搜索", "GET"),
DOWNLOAD("download", "下载", "GET"), DOWNLOAD("download", "下载", "GET"),
RSS("rss", "RSS", "GET"),
// detail 仅供脚本内 context.fetch("detail", ...) 使用,medibo 不直接调用 // detail 仅供脚本内 context.fetch("detail", ...) 使用,medibo 不直接调用
DETAIL("detail", "资源详情", "GET"); DETAIL("detail", "资源详情", "GET");

View File

@@ -8,10 +8,15 @@ Map parse(String content, String url) {
if (url.contains('/torrents.php')) return parseSearch(doc) if (url.contains('/torrents.php')) return parseSearch(doc)
if (url.contains('/torrents.php?id=')) return parseDetail(doc) if (url.contains('/torrents.php?id=')) return parseDetail(doc)
if (url.contains('/index.php') && !url.contains('?')) return parseUserInfo(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}"] return [pageName: '未知页面', message: "未配置: ${url}"]
} }
private Map parseRss() {
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
}
private Map parseUserInfo(doc) { private Map parseUserInfo(doc) {
def fields = [:] def fields = [:]
def stats = utils.selectFirst(doc, '#userinfo_stats, .user_stats, ul.stats') def stats = utils.selectFirst(doc, '#userinfo_stats, .user_stats, ul.stats')

View File

@@ -12,10 +12,15 @@ Map parse(String content, String url) {
if (url.contains('/api/member/profile')) return parseProfile(root?.data) if (url.contains('/api/member/profile')) return parseProfile(root?.data)
if (url.contains('/api/tracker/myPeerStatistics')) return parsePeerStats(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('/api/torrent/search')) return parseSearch(root?.data?.data ?: [])
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss()
return [pageName: '未知接口', message: "未配置: ${url}"] return [pageName: '未知接口', message: "未配置: ${url}"]
} }
private Map parseRss() {
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
}
private Map parseProfile(d) { private Map parseProfile(d) {
if (!d) return [pageName: '用户信息', message: 'data 为空'] if (!d) return [pageName: '用户信息', message: 'data 为空']
return [pageName: '用户信息', fields: [ return [pageName: '用户信息', fields: [

View File

@@ -9,10 +9,15 @@ Map parse(String content, String url) {
if (url.contains('/attendance.php')) return parseSign(doc) if (url.contains('/attendance.php')) return parseSign(doc)
if (url.contains('/index.php') && !url.contains('?')) return parseUserInfo(doc) if (url.contains('/index.php') && !url.contains('?')) return parseUserInfo(doc)
if (url.contains('/usercp.php')) return parseUserPanel(doc) if (url.contains('/usercp.php')) return parseUserPanel(doc)
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss(doc)
return [pageName: '未知页面', message: "未配置: ${url}"] return [pageName: '未知页面', message: "未配置: ${url}"]
} }
private Map parseRss(doc) {
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
}
private Map parseUserInfo(doc) { private Map parseUserInfo(doc) {
def fields = [:] def fields = [:]
def el = doc.selectFirst('#info_block, td.bottom.clearfix, .userbar') def el = doc.selectFirst('#info_block, td.bottom.clearfix, .userbar')

View File

@@ -16,9 +16,15 @@ Map parse(String content, String url) {
} catch (e) {} } catch (e) {}
} }
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss()
return [pageName: '未知页面', message: "未配置: ${url}"] return [pageName: '未知页面', message: "未配置: ${url}"]
} }
private Map parseRss() {
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
}
private Map parseApiData(d, url) { private Map parseApiData(d, url) {
if (url.contains('/user') || url.contains('/profile')) if (url.contains('/user') || url.contains('/profile'))
return [pageName: '用户', fields: [username: d?.username, uploaded: d?.uploaded?.toString(), downloaded: d?.downloaded?.toString()]] return [pageName: '用户', fields: [username: d?.username, uploaded: d?.uploaded?.toString(), downloaded: d?.downloaded?.toString()]]