feat: 脚本parseRss改为实际解析RSS XML,返回items列表
This commit is contained in:
@@ -157,10 +157,39 @@ private Map parseDownloadPage(context) {
|
|||||||
|
|
||||||
// ==================== RSS ====================
|
// ==================== RSS ====================
|
||||||
|
|
||||||
/** RSS 页面解析:默认不做 XML 解析,由 Java 层 parseRssXml 处理。
|
/** RSS 页面解析:解析 NexusPHP 标准 RSS XML,返回 items 列表 */
|
||||||
* 站点如需要自定义 RSS 解析,可覆盖此方法返回 items 列表。 */
|
|
||||||
private Map parseRssPage(context) {
|
private Map parseRssPage(context) {
|
||||||
return [pageName: 'RSS', matched: true, message: 'RSS 内容由 Java 层解析']
|
def xml = context.content
|
||||||
|
if (!xml) return [pageName: 'RSS', matched: false, message: '无内容']
|
||||||
|
|
||||||
|
// 解析 RSS XML
|
||||||
|
def rss = new XmlSlurper().parseText(xml)
|
||||||
|
def items = []
|
||||||
|
rss.channel.item.each { item ->
|
||||||
|
// 下载链接优先从 enclosure url 获取
|
||||||
|
def dlUrl = ''
|
||||||
|
def size = 0
|
||||||
|
def enclosure = item.enclosure
|
||||||
|
if (enclosure && enclosure.@url) {
|
||||||
|
dlUrl = enclosure.@url.text()
|
||||||
|
try { size = enclosure.@length.toLong() } catch (e) {}
|
||||||
|
}
|
||||||
|
if (!dlUrl) dlUrl = item.link.text()
|
||||||
|
|
||||||
|
def title = item.title.text()
|
||||||
|
|
||||||
|
items << [
|
||||||
|
title: title,
|
||||||
|
detailUrl: item.link.text(),
|
||||||
|
downloadUrl: dlUrl,
|
||||||
|
torrentUrl: dlUrl,
|
||||||
|
size: size,
|
||||||
|
publishDate: item.pubDate.text(),
|
||||||
|
category: item.category.text(),
|
||||||
|
author: item.author.text(),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return [pageName: 'RSS', matched: !items.isEmpty(), items: items]
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 工具方法 ====================
|
// ==================== 工具方法 ====================
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ 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()
|
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss(content)
|
||||||
|
|
||||||
return [pageName: '未知页面', message: "未配置: ${url}"]
|
return [pageName: '未知页面', message: "未配置: ${url}"]
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseRss() {
|
private Map parseRss(String xml) {
|
||||||
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
|
return [pageName: 'RSS', matched: true, message: 'RSS 内容由 Java 层解析']
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseUserInfo(doc) {
|
private Map parseUserInfo(doc) {
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ 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()
|
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss(content)
|
||||||
|
|
||||||
return [pageName: '未知接口', message: "未配置: ${url}"]
|
return [pageName: '未知接口', message: "未配置: ${url}"]
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseRss() {
|
private Map parseRss(String xml) {
|
||||||
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
|
return [pageName: 'RSS', matched: true, message: 'RSS 内容由 Java 层解析']
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseProfile(d) {
|
private Map parseProfile(d) {
|
||||||
|
|||||||
@@ -9,13 +9,40 @@ 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)
|
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss(content)
|
||||||
|
|
||||||
return [pageName: '未知页面', message: "未配置: ${url}"]
|
return [pageName: '未知页面', message: "未配置: ${url}"]
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseRss(doc) {
|
private Map parseRss(String xml) {
|
||||||
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
|
if (!xml) return [pageName: 'RSS', matched: false, message: '无内容']
|
||||||
|
try {
|
||||||
|
def rss = new XmlSlurper().parseText(xml)
|
||||||
|
def items = []
|
||||||
|
rss.channel.item.each { item ->
|
||||||
|
def dlUrl = ''
|
||||||
|
long size = 0
|
||||||
|
def enclosure = item.enclosure
|
||||||
|
if (enclosure && enclosure.@url) {
|
||||||
|
dlUrl = enclosure.@url.text()
|
||||||
|
try { size = enclosure.@length.toLong() } catch (e) {}
|
||||||
|
}
|
||||||
|
if (!dlUrl) dlUrl = item.link.text()
|
||||||
|
items << [
|
||||||
|
title: item.title.text(),
|
||||||
|
detailUrl: item.link.text(),
|
||||||
|
downloadUrl: dlUrl,
|
||||||
|
torrentUrl: dlUrl,
|
||||||
|
size: size,
|
||||||
|
publishDate: item.pubDate.text(),
|
||||||
|
category: item.category.text(),
|
||||||
|
author: item.author.text(),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return [pageName: 'RSS', matched: !items.isEmpty(), items: items]
|
||||||
|
} catch (e) {
|
||||||
|
return [pageName: 'RSS', matched: false, message: "解析失败: ${e.message}"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseUserInfo(doc) {
|
private Map parseUserInfo(doc) {
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ Map parse(String content, String url) {
|
|||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss()
|
if (url.contains('/torrentrss.php') || url.contains('/rss')) return parseRss(content)
|
||||||
|
|
||||||
return [pageName: '未知页面', message: "未配置: ${url}"]
|
return [pageName: '未知页面', message: "未配置: ${url}"]
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseRss() {
|
private Map parseRss(String xml) {
|
||||||
return [pageName: 'RSS', message: 'RSS 内容由 Java 层解析']
|
return [pageName: 'RSS', matched: true, message: 'RSS 内容由 Java 层解析']
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseApiData(d, url) {
|
private Map parseApiData(d, url) {
|
||||||
|
|||||||
Reference in New Issue
Block a user