refactor: PTTIME搜索改用列索引方式,简洁高效
This commit is contained in:
@@ -41,41 +41,23 @@ private Map parseIndex(doc) {
|
|||||||
|
|
||||||
private Map parseSearch(doc) {
|
private Map parseSearch(doc) {
|
||||||
def rows = []
|
def rows = []
|
||||||
|
// PTTIME 列表列序: 类别|标题|PTR(dn)|评论(dn)|时间|大小|做种|下载|完成|进度|发布者|行为
|
||||||
doc.select('table.torrents tr:has(td.rowfollow):not(:has(.colhead))').each { row ->
|
doc.select('table.torrents tr:has(td.rowfollow):not(:has(.colhead))').each { row ->
|
||||||
def titleEl = utils.selectFirst(row, 'td.embedded a.torrentname_title')
|
def titleEl = utils.selectFirst(row, 'td.embedded a.torrentname_title')
|
||||||
if (!titleEl) return
|
if (!titleEl) return
|
||||||
def catEl = utils.selectFirst(row, 'td.rowfollow a[href*=cat] img, td.rowfollow span.category')
|
def catEl = utils.selectFirst(row, 'td.rowfollow span.category')
|
||||||
def freeEl = utils.selectFirst(row, 'font.promotion')
|
def freeEl = utils.selectFirst(row, 'font.promotion')
|
||||||
def tds = row.select('td.rowfollow')
|
def tds = row.select('td.rowfollow')
|
||||||
// 语义匹配:按内容特征识别字段
|
|
||||||
def size = '', seeders = '', leechers = '', completed = '', time = '', publisher = ''
|
|
||||||
boolean hasSize = false, hasSeed = false, hasLeech = false
|
|
||||||
for (int i = 0; i < tds.size(); i++) {
|
|
||||||
def cell = utils.text(tds.get(i))
|
|
||||||
if (!cell) continue
|
|
||||||
if (!hasSize && (cell.contains('GB')||cell.contains('MB')||cell.contains('TB')||cell.contains('KB'))) {
|
|
||||||
size = cell; hasSize = true
|
|
||||||
} else if (hasSize && !hasSeed && cell ==~ /^\d+$/) {
|
|
||||||
seeders = cell; hasSeed = true
|
|
||||||
} else if (hasSeed && !hasLeech && cell ==~ /^\d+$/) {
|
|
||||||
leechers = cell; hasLeech = true
|
|
||||||
} else if (hasSeed && hasLeech && cell ==~ /^\d+$/) {
|
|
||||||
completed = cell
|
|
||||||
} else if (cell ==~ /^\d+年|^\d+月|^\d+天|^\d+时/) {
|
|
||||||
time = cell
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rows << [
|
rows << [
|
||||||
title: utils.text(titleEl),
|
title: utils.text(titleEl),
|
||||||
detailUrl: utils.attr(titleEl, 'href'),
|
detailUrl: utils.attr(titleEl, 'href'),
|
||||||
category: utils.attr(catEl, 'alt') ?: utils.attr(catEl, 'title') ?: '',
|
category: utils.attr(catEl, 'title') ?: '',
|
||||||
free: utils.text(freeEl),
|
free: utils.text(freeEl),
|
||||||
size: size,
|
size: utils.text(tds.size() > 5 ? tds.get(5) : null),
|
||||||
seeders: seeders,
|
seeders: utils.text(tds.size() > 6 ? tds.get(6) : null),
|
||||||
leechers: leechers,
|
leechers: utils.text(tds.size() > 7 ? tds.get(7) : null),
|
||||||
completed: completed,
|
completed: utils.text(tds.size() > 8 ? tds.get(8) : null),
|
||||||
publishDate: time,
|
publishDate: utils.text(tds.size() > 4 ? tds.get(4) : null),
|
||||||
publisher: publisher,
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
return [pageName: '搜索', extracted: rows, message: "共 ${rows.size()} 条"]
|
return [pageName: '搜索', extracted: rows, message: "共 ${rows.size()} 条"]
|
||||||
@@ -147,28 +129,13 @@ List search(PluginContext ctx, Map params) {
|
|||||||
def titleEl = utils.selectFirst(row, 'td.embedded a.torrentname_title')
|
def titleEl = utils.selectFirst(row, 'td.embedded a.torrentname_title')
|
||||||
if (!titleEl) return
|
if (!titleEl) return
|
||||||
def tds = row.select('td.rowfollow')
|
def tds = row.select('td.rowfollow')
|
||||||
long size = 0; int seeders = 0, leechers = 0, grabs = 0
|
|
||||||
boolean hasSize = false, hasSeed = false, hasLeech = false
|
|
||||||
for (int i = 0; i < tds.size(); i++) {
|
|
||||||
def cell = utils.text(tds.get(i))
|
|
||||||
if (!cell) continue
|
|
||||||
if (!hasSize && (cell.contains('GB')||cell.contains('MB')||cell.contains('TB')||cell.contains('KB'))) {
|
|
||||||
size = parseHtmlSize(cell); hasSize = true
|
|
||||||
} else if (hasSize && !hasSeed && cell ==~ /^\d+$/) {
|
|
||||||
seeders = cell as int; hasSeed = true
|
|
||||||
} else if (hasSeed && !hasLeech && cell ==~ /^\d+$/) {
|
|
||||||
leechers = cell as int; hasLeech = true
|
|
||||||
} else if (hasSeed && hasLeech && cell ==~ /^\d+$/) {
|
|
||||||
grabs = cell as int
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rows << [
|
rows << [
|
||||||
title: utils.text(titleEl),
|
title: utils.text(titleEl),
|
||||||
detailUrl: "${ctx.siteUrl}${utils.attr(titleEl,'href')}",
|
detailUrl: "${ctx.siteUrl}${utils.attr(titleEl,'href')}",
|
||||||
size: size,
|
size: tds.size() > 5 ? parseHtmlSize(utils.text(tds.get(5))) : 0,
|
||||||
seeders: seeders,
|
seeders: tds.size() > 6 ? utils.toInt(utils.text(tds.get(6))) ?: 0 : 0,
|
||||||
leechers: leechers,
|
leechers: tds.size() > 7 ? utils.toInt(utils.text(tds.get(7))) ?: 0 : 0,
|
||||||
grabs: grabs,
|
grabs: tds.size() > 8 ? utils.toInt(utils.text(tds.get(8))) ?: 0 : 0,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
return rows
|
return rows
|
||||||
|
|||||||
Reference in New Issue
Block a user