/** * SPDX-License-Identifier: GPL-3.0-only * 移植自 MoviePilot(https://github.com/jxxghp/MoviePilot,GPLv3),本文件按 GPLv3 条款提供。 * @mp-source app/modules/indexer/parser/nexus_project.py @ e6820a8 * * NexusProject 站点用户信息解析器,继承 NexusPHP 通用解析。 * * 函数对照(`NexusProjectSiteUserInfo`):`_parse_site_page` → `_parseSitePage`(兼容 `user_detail.php?uid=` 变种)、 * `_parse_user_traffic_info` → `_parseUserTrafficInfo`(兼容 `span#user_info` 无 B 后缀的流量文本)。正则逐字保留。 */ import { reSearch } from "./common.ts"; import { parseHtml } from "./dom.ts"; import { NexusPhpSiteUserInfo, round3 } from "./nexus-php.ts"; import { SiteSchema, type SiteSchemaValue } from "./types.ts"; export class NexusProjectSiteUserInfo extends NexusPhpSiteUserInfo { static override schema: SiteSchemaValue | null = SiteSchema.NexusProject; protected override _parseSitePage(htmlText: string): void { const text = this._prepareHtmlText(htmlText); let userDetail = reSearch(/userdetails\.php\?id=(\d+)/, text); if (userDetail?.[0].trim()) { this._userDetailPage = userDetail[0].trim().replace(/^\/+/, ""); this.userid = userDetail[1]!; } else { // 兼容部分 NexusProject 变种站点(如 star-space.net)的 p_user/user_detail.php?uid= 用户定位格式 userDetail = reSearch(/user_detail\.php\?uid=(\d+)/, text); if (userDetail?.[0].trim()) { this._userDetailPage = userDetail[0].trim().replace(/^\/+/, ""); this.userid = userDetail[1]!; const uname = reSearch(/user_detail\.php\?uid=\d+[^>]*?>\s*<[^>]*>([^<]+)