/*
* @File : 影视大全.js
* @Author : opencode
* @Date : 2026-07-09
* @Desc : 影视大全 (www.iysdq.tv) TVBox T4(JS) 源 —— 自包含,MacCMS shoutu45 模板
*
* 站点结构:
* - 服务端渲染 MacCMS(shoutu45),首页/分类/搜索/详情 HTML 直出,无防护盾。
* - 分类:/vodtype/{tid}.html
* - 搜索:/vodsearch/{词}-------------.html (关键词在开头,共 13 个 '-')
* - 详情:/voddetail/{id}.html
* 线路 tab: .anthology-tab a.swiper-slide(按 DOM 顺序)
* 集数列表: 并列的多个 .anthology-list-play,按 DOM 顺序与 tab 一一对应
* 集数链接: /vodplay/{id}-{sid}-{nid}.html
* - 播放:播放页 player_aaaa.url 为明文 m3u8/mp4 直链。
* - 卡片:div.public-list-box > a.public-list-exp[href=/voddetail/xx.html][title]
* 封面 img data-src;备注 span.public-list-prb。
*/
var IYSDQ_VERSION = "20260709-js-1";
var HOST = "https://www.iysdq.tv";
var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36";
var CLASSES = [
{ type_id: "1", type_name: "电影" },
{ type_id: "2", type_name: "电视剧" },
{ type_id: "3", type_name: "综艺" },
{ type_id: "4", type_name: "动漫" },
{ type_id: "5", type_name: "短剧" }
];
function log(msg) {
try { console.log("[IYSDQ_JS " + IYSDQ_VERSION + "] " + msg); } catch (e) {}
}
/* ---------------- 通用工具 ---------------- */
function toStr(v) { return v === undefined || v === null ? "" : String(v); }
function encode(s) { return encodeURIComponent(toStr(s)); }
function fixUrl(u) {
u = toStr(u).trim();
if (!u) return "";
if (u.indexOf("//") === 0) return "https:" + u;
if (u.charAt(0) === "/") return HOST + u;
return u;
}
function textClean(s) {
return toStr(s)
.replace(/<[^>]+>/g, "")
.replace(/ /g, " ")
.replace(/&/g, "&")
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/\d+;/g, "")
.replace(/\s+/g, " ")
.trim();
}
function attr(tag, name) {
var r = new RegExp(name + "\\s*=\\s*([\"'])([\\s\\S]*?)\\1", "i");
var m = r.exec(tag || "");
return m ? m[2] : "";
}
function requestHtml(url) {
try {
log("fetch " + url);
var res = req(url, {
method: "GET",
headers: { "User-Agent": UA, "Referer": HOST + "/", "Accept": "text/html" },
timeout: 10000
});
var body = (typeof res === "string") ? res : (res && (res.content || res.body || res.data)) || "";
return toStr(body);
} catch (e) {
log("fetch_error " + e);
return "";
}
}
/* ---------------- 封面提取 ---------------- */
function pickPic(tag) {
var p = attr(tag, "data-src") || attr(tag, "data-original");
if (!p || /img-bj-k\.png/i.test(p)) {
var m = /]+data-src="([^"]+)"/i.exec(tag);
if (m) p = m[1];
}
return fixUrl(p);
}
/* ---------------- 列表解析 ---------------- */
// 首页/分类/搜索卡片:div.public-list-box
function parseList(html) {
var list = [];
var seen = {};
// 每个卡片块:从 public-list-box 起,到下一个 public-list-box 或结束
var re = /