feat: 脚本添加parseDetail独立入口,parseDetailPage扩展提取促销信息和豆瓣链接
This commit is contained in:
@@ -22,6 +22,7 @@ Map parseSearch(context) { return checkStatus(context) ?: parseSearchPage(Jsoup
|
|||||||
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) }
|
Map parseRss(context) { return checkStatus(context) ?: parseRssPage(context) }
|
||||||
|
Map parseDetail(context) { return checkStatus(context) ?: parseDetailPage(Jsoup.parse(context.content)) }
|
||||||
|
|
||||||
/** 获取资源元数据:搜索 → 详情 → 提取豆瓣链接(Douban 解析由 Java 层负责) */
|
/** 获取资源元数据:搜索 → 详情 → 提取豆瓣链接(Douban 解析由 Java 层负责) */
|
||||||
Map parseMetadata(context) {
|
Map parseMetadata(context) {
|
||||||
@@ -127,10 +128,18 @@ private Map parseDetailPage(doc) {
|
|||||||
// 提取下载链接
|
// 提取下载链接
|
||||||
def dlUrl = doc.selectFirst('a[href*=download]:not([href*=details])')?.attr('href')
|
def dlUrl = doc.selectFirst('a[href*=download]:not([href*=details])')?.attr('href')
|
||||||
|
|
||||||
|
// 提取促销信息:font.promotion、img.promotion、alt 属性等
|
||||||
|
def freeEl = doc.selectFirst('font.promotion, img.promotion, img[alt*=Free], img[alt*=free]')
|
||||||
|
def free = freeEl?.text() ?: freeEl?.attr('alt')
|
||||||
|
|
||||||
|
// 提取豆瓣链接
|
||||||
|
def dbLink = doc.selectFirst('a[href*=movie.douban.com], a[href*=douban.com/subject]')?.attr('href')
|
||||||
|
if (!dbLink) dbLink = doc.selectFirst('.rowhead:contains(简介) + td a[href*=douban], #kdescr a[href*=douban]')?.attr('href')
|
||||||
|
|
||||||
return [pageName: '种子详情', matched: title != null,
|
return [pageName: '种子详情', matched: title != null,
|
||||||
title: title, subtitle: subtitle, size: parseSize(size),
|
title: title, subtitle: subtitle, size: parseSize(size),
|
||||||
seeders: seeders as int, leechers: leechers as int,
|
seeders: seeders as int, leechers: leechers as int,
|
||||||
downloadUrl: dlUrl
|
downloadUrl: dlUrl, free: free, doubanUrl: dbLink
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ private Map parseSearch(doc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Map parseDetail(doc) {
|
private Map parseDetail(doc) {
|
||||||
return [pageName: '种子详情', fields: [
|
return [pageName: '种子详情', matched: true, fields: [
|
||||||
title: utils.text(utils.selectFirst(doc, '#content h2, h2.header')),
|
title: utils.text(utils.selectFirst(doc, '#content h2, h2.header')),
|
||||||
artist: utils.text(utils.selectFirst(doc, '#content h3 a, .artist_name')),
|
artist: utils.text(utils.selectFirst(doc, '#content h3 a, .artist_name')),
|
||||||
format: utils.text(utils.selectFirst(doc, 'td:contains(Format) + td')),
|
format: utils.text(utils.selectFirst(doc, 'td:contains(Format) + td')),
|
||||||
|
|||||||
@@ -108,13 +108,14 @@ private Map parseSearch(doc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Map parseDetail(doc) {
|
private Map parseDetail(doc) {
|
||||||
return [pageName: '种子详情', fields: [
|
def freeEl = doc.selectFirst('font.promotion, img.promotion, img[alt*=Free], img[alt*=free]')
|
||||||
|
return [pageName: '种子详情', matched: true, fields: [
|
||||||
title: doc.selectFirst('#top h1, h1')?.text(),
|
title: doc.selectFirst('#top h1, h1')?.text(),
|
||||||
subtitle: doc.selectFirst('td.embedded b')?.text(),
|
subtitle: doc.selectFirst('td.embedded b')?.text(),
|
||||||
size: doc.selectFirst('td:has(b:contains(大小)) + td, td.rowhead:contains(大小) + td')?.text(),
|
size: doc.selectFirst('td:has(b:contains(大小)) + td, td.rowhead:contains(大小) + td')?.text(),
|
||||||
seeders: doc.selectFirst('td:contains(做种者) + td')?.text(),
|
seeders: doc.selectFirst('td:contains(做种者) + td')?.text(),
|
||||||
leechers: doc.selectFirst('td:contains(下载者) + td')?.text(),
|
leechers: doc.selectFirst('td:contains(下载者) + td')?.text(),
|
||||||
]]
|
], free: freeEl?.text() ?: freeEl?.attr('alt')]
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map parseSign(doc) {
|
private Map parseSign(doc) {
|
||||||
|
|||||||
@@ -54,13 +54,14 @@ private Map parseSearch(doc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Map parseDetail(doc) {
|
private Map parseDetail(doc) {
|
||||||
return [pageName: '种子详情', fields: [
|
def freeEl = doc.selectFirst('.text-success:contains(FREE), .freeleech, .double-upload')
|
||||||
|
return [pageName: '种子详情', matched: true, fields: [
|
||||||
title: utils.text(utils.selectFirst(doc, 'h1, .torrent-title, .meta-title')),
|
title: utils.text(utils.selectFirst(doc, 'h1, .torrent-title, .meta-title')),
|
||||||
size: utils.text(utils.selectFirst(doc, 'td:contains(Size) + td, .torrent-size')),
|
size: utils.text(utils.selectFirst(doc, 'td:contains(Size) + td, .torrent-size')),
|
||||||
seeders: utils.text(utils.selectFirst(doc, 'td:contains(Seeders) + td, .seeders-count')),
|
seeders: utils.text(utils.selectFirst(doc, 'td:contains(Seeders) + td, .seeders-count')),
|
||||||
leechers: utils.text(utils.selectFirst(doc, 'td:contains(Leechers) + td, .leechers-count')),
|
leechers: utils.text(utils.selectFirst(doc, 'td:contains(Leechers) + td, .leechers-count')),
|
||||||
description:utils.text(utils.selectFirst(doc, '.torrent-description, #description')).take(200),
|
description:utils.text(utils.selectFirst(doc, '.torrent-description, #description')).take(200),
|
||||||
]]
|
], free: freeEl?.text()]
|
||||||
}
|
}
|
||||||
|
|
||||||
Map sync(PluginContext ctx) {
|
Map sync(PluginContext ctx) {
|
||||||
|
|||||||
Reference in New Issue
Block a user