Sync all projects

This commit is contained in:
github-actions[bot]
2026-07-03 14:44:27 +00:00
parent 76739f4491
commit fe482c649e
52 changed files with 23283 additions and 11320 deletions
Binary file not shown.
+436
View File
@@ -0,0 +1,436 @@
/*
@header({
searchable: 1,
filterable: 0,
quickSearch: 1,
title: '百度短剧',
lang: 'cat'
})
*/
import { Crypto as CryptoJS } from 'assets://js/lib/cat.js';
let key = '百度短剧';
let siteName = '';
let siteKey = '';
let siteType = 0;
let shuaCache = [];
let UA = "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";
let clarity_order = {'蓝光': 1, '超清': 2, '标清': 3};
// ==================== URL配置集中管理 ====================
let rule = {
host: 'https://mbd.baidu.com',
detailHost: 'https://sv.baidu.com',
listUrl: '/feedapi/v1/videoserver/playlets/list?service=bdbox',
searchUrl: '/feedapi/v1/videoserver/playlets/search?service=bdbox',
detailUrl: '/haokan/ui-video/playlet/rec/detail?log=vhk&tn=1020970b&ctn=1008350n&blur=1',
playUrl: '/appui/api?cmd=video/relate&log=vhk&tn=1020970b&ctn=1008350n&blur=1',
};
function init(cfg) {
siteName = (cfg.skey?.split('_')[1] || cfg.skey) || (cfg.key?.split('_')[1] || cfg.key) || '未知';
siteKey = cfg.skey;
siteType = cfg.stype;
}
function home(filter) {
let he = ["全部", "新剧", "限时免费", "精选", "独播"];
let ticailist = [
"神医", "连续剧", "都市", "现代言情", "异能", "逆袭", "甜宠", "总裁", "萌宝", "战神", "宫斗宅斗", "神豪",
"虐恋", "闪婚", "玄幻", "穿越重生", "年代", "家庭伦理", "古代言情", "武侠武打", "赘婿", "单元剧", "青春校园",
"历史架空", "王妃", "鉴宝", "科幻", "军旅战争", "种田"
];
let classes = he.map(name => ({
type_id: name,
type_name: name
}));
classes = classes.concat(ticailist.map(name => ({
type_id: name === "全部" ? "全部题材" : name,
type_name: name
})));
return JSON.stringify({
class: classes,
filters: {}
});
}
async function homeVod() {
const categoryResult = await category('新剧', 1, {}, {});
const categoryList = JSON.parse(categoryResult).list;
return JSON.stringify({
list: [
{
vod_id: 'shua',
vod_name: '发现精彩',
vod_pic: 'https://t8.baidu.com/it/u=615012979,225344800&fm=193'
},
...categoryList
]
});
}
/**
* 合并请求函数 - 统一处理 data 和 body,支持 form-urlencoded 和 JSON
*/
async function request(url, options = {}) {
try {
console.log(`${siteName}${options.method || 'GET'} ${url.split('?')[0]}`);
// 准备基础配置
let requestConfig = {
method: options.method || 'GET',
headers: { "User-Agent": UA, ...options.headers }
};
// 获取内容类型
let contentType = requestConfig.headers['Content-Type'] || '';
// 辅助函数:将对象转换为字符串
function stringifyData(data, format) {
if (format.includes('json')) {
return JSON.stringify(data);
} else {
// 默认 form-urlencoded
const parts = [];
for (let key in data) {
let value = data[key];
if (typeof value === 'object' && value !== null) {
value = JSON.stringify(value);
}
parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
}
return parts.join('&');
}
}
// 处理数据 - 无论 data 还是 body,统一处理
let requestData = options.data || options.body;
if (requestData) {
if (typeof requestData === 'string') {
// 已经是字符串,直接使用
requestConfig.body = requestData;
} else if (typeof requestData === 'object') {
// 对象,根据内容类型转换
if (!contentType) {
// 没有指定内容类型,默认 form-urlencoded
contentType = 'application/x-www-form-urlencoded';
requestConfig.headers['Content-Type'] = contentType;
}
requestConfig.body = stringifyData(requestData, contentType);
}
}
const res = await req(url, requestConfig);
return res.content || '';
} catch (e) {
console.log(`${siteName}】请求失败: ${e.message}`);
return '';
}
}
async function category(tid, pg, filter, extend) {
pg = pg <= 0 ? 1 : pg;
let sub = ["新剧", "限时免费", "精选", "独播"].includes(tid) ? tid : "新剧";
let tcsub = tid === "全部" || tid === "全部题材" ? "" : tid;
let t = Math.floor(Date.now() / 1000);
let version = await md5(t + "v2");
// 直接传对象
let postData = {
'data': {
"data": {
"extRequest": { "flow_tabid": "13" },
"from": "feed",
"page": "channel_video_landing",
"pd": "feed",
"refreshIndex": pg,
"cursor": "",
"theme": "",
"timestamp": t,
"version": version,
"themes": [
{ "kind": "综合", "names": [sub] },
{ "kind": "题材", "names": [tcsub] }
]
}
}
};
let html = await request(`${rule.host}${rule.listUrl}`, {
method: 'POST',
headers: {
"Connection": "Keep-Alive",
'Content-Type': 'application/x-www-form-urlencoded'
},
data: postData // 可以用 data
});
let res = JSON.parse(html);
let items = res.data.items;
let videos = items.map(it => ({
vod_id: it.collId,
vod_name: it.title,
vod_pic: it.img,
vod_remarks: it.updateStatus,
vod_content: it.description
}));
return JSON.stringify({
page: pg,
pagecount: pg + 1,
limit: 20,
total: items.length * (pg + 1),
list: videos
});
}
async function detail(id) {
if (id === 'shua') {
return JSON.stringify({
list: [{
vod_id: 'shua',
vod_name: '发现精彩',
vod_pic: 'https://t8.baidu.com/it/u=615012979,225344800&fm=193',
vod_play_from: '百度短剧',
vod_play_url: '刷刷看$shua',
vod_tag: '[SHUA][JUMP][V]'
}]
});
}
// 也可以用 body
let html = await request(`${rule.detailHost}${rule.detailUrl}`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: { // body 传对象也会自动处理
playlet_id: id,
vid: "undefined"
}
});
let res = JSON.parse(html);
let dthtml = res.data;
let vids = dthtml.vid_list;
let playArr = vids.map((vid, index) => `${index + 1}$${vid}`);
const vod = {
vod_id: id,
vod_name: dthtml.playlet_title,
vod_pic: dthtml.playlet_poster,
vod_content: dthtml.description,
vod_remarks: `${vids.length}集 热度值:${dthtml.hot_value} 集数:${dthtml.episodes_num}`,
vod_director: dthtml.tag_text,
vod_year: dthtml.create_time,
vod_play_from: "百度短剧",
vod_play_url: playArr.join('#')
};
return JSON.stringify({ list: [vod] });
}
async function play(flag, id, flags) {
if (id == 'shua') {
if (shuaCache.length == 0) {
const randomPage = getRnd(1, 20);
const categories = ["新剧", "限时免费", "精选", "独播"];
const randomCate = categories[Math.floor(Math.random() * categories.length)];
const categoryResult = await category(randomCate, randomPage, {}, {});
const res = JSON.parse(categoryResult);
const videos = [];
for (const it of res.list.slice(0, 10)) {
const detailResult = await detail(it.vod_id);
const detailObj = JSON.parse(detailResult);
const vod = detailObj.list[0];
const match = vod.vod_remarks.match(/(\d+)/);
const episodeCount = match[1];
videos.push({
parse: 0,
url: it.vod_id,
shuaTitle: vod.vod_name,
shuaDes: '共' + episodeCount + '集 | ' + vod.vod_content.replace(/\s/g, ''),
shuaActions: { play: it.vod_id },
errorPlayNext: true
});
}
shuaCache.push(...videos);
}
const cache = shuaCache.shift();
const detailResult = await detail(cache.url);
const detailObj = JSON.parse(detailResult);
const vod = detailObj.list[0];
const playUrls = vod.vod_play_url.split('#');
const firstEpisode = playUrls[0];
const vid = firstEpisode.split('$')[1];
const playHtml = await request(`${rule.detailHost}${rule.playUrl}`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: { // 用 data 或 body 都可以
method: "post",
vid: vid
}
});
const playRes = JSON.parse(playHtml);
const playJson = playRes["video/relate"].data.cur_video;
const urls = [];
for (const item of playJson.clarityUrl) {
urls.push({
title: item.title,
url: item.url,
order: clarity_order[item.title] || 999
});
}
urls.sort(function (a, b) { return a.order - b.order; });
cache.url = urls[0].url;
return JSON.stringify(cache);
}
const html = await request(`${rule.detailHost}${rule.playUrl}`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: { // body 传对象
method: "post",
vid: id
}
});
const res = JSON.parse(html);
const json = res["video/relate"].data.cur_video;
const urls = [];
for (const item of json.clarityUrl) {
urls.push({
title: item.title,
url: item.url,
order: clarity_order[item.title] || 999
});
}
urls.sort(function (a, b) { return a.order - b.order; });
const flat = [];
for (const item of urls) {
flat.push(item.title);
flat.push(item.url);
}
return JSON.stringify({
parse: 0,
url: flat,
header: {
'User-Agent': UA,
'Referer': rule.host
}
});
}
async function search(wd, quick, pg) {
pg = pg <= 0 ? 1 : pg;
let postData = {
'data': {
"data": {
"query": wd,
"page": pg,
"attribute": ["title"],
"fe_page_type": "search",
"extra": {
"tab_id": "216",
"flow_tabid": "13",
"shortplay_source": "feed",
"from": "feed",
"tab_type": "搜索",
"sub_template": "playlet_search_result"
}
}
}
};
let html = await request(`${rule.host}${rule.searchUrl}`, {
method: 'POST',
headers: {
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip",
'Content-Type': 'application/x-www-form-urlencoded'
},
data: postData // 用 data
});
let res = JSON.parse(html);
let items = res.data.itemList;
let videos = items.map(it => ({
vod_id: it.nid.split("_")[1],
vod_name: it.title,
vod_pic: it.img,
vod_remarks: it.collNum + '集',
vod_content: it.description
}));
return JSON.stringify({
page: pg,
pagecount: pg + 1,
limit: 20,
total: items.length * (pg + 1),
list: videos
});
}
function getRnd(min, max, hexNum, isUpper) {
var r = parseInt(Math.random() * (max - min + 1) + min, 10);
if (hexNum) {
r = isUpper ? r.toString(hexNum).toUpperCase() : r.toString(hexNum);
}
return r;
}
async function md5(str) {
return CryptoJS.MD5(str).toString(CryptoJS.enc.Hex).toLowerCase();
}
async function action(action, value) {
if (action === 'shuaPlay') {
return JSON.stringify({
action: {
actionId: '__detail__',
ids: value,
keep: true
}
});
}
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
action: action
};
}
-1337
View File
@@ -66,1211 +66,6 @@ CCTV 怀旧剧场频道,http://43.226.38.166:89/dglive/ysp.php?id=cctvhjjc
央卫频道2,#genre#
CCTV1,http://emby.xlangnan.cn:10316/rtp/239.254.200.45:8008
CCTV1,http://wangfei.uno:9999/rtp/225.1.2.47:10276
CCTV1,http://hiliu.myds.me:18088/rtp/239.254.96.96:8550
CCTV1,http://b.xiongnas.top:8888/rtp/239.3.1.129:8008
CCTV1,http://www.sclvip.top:5566/rtp/239.49.8.19:9614
CCTV1,http://youngx.top:4022/rtp/233.18.204.52:5140
CCTV1,http://home.scanflove.com:7788/rtp/235.254.198.51:1480
CCTV1,http://www.maomizi.cn:9530/rtp/239.77.0.86:5146
CCTV1,http://z.d4p.cn:8000/rtp/239.49.8.19:9614
CCTV1,http://liuwenxiaokevin.top:14044/rtp/233.18.204.52:5140
CCTV1,http://hongzhijiaoyu.net:8188/rtp/239.77.0.86:5146
CCTV1,http://www.negative.top:50000/rtp/233.50.201.118:5140
CCTV1,http://nas.lyfkai.cn:19999/rtp/239.254.96.96:8550
CCTV1,http://pr.19760929.xyz:9688/rtp/239.77.0.86:5146
CCTV1,http://www.wjyu.top:4022/rtp/233.18.204.52:5140
CCTV1,http://vp.maomizi.cc:9530/rtp/239.77.0.86:5146
CCTV1,http://ds3622.guangyuan.site:8188/rtp/239.77.0.86:5146
CCTV1,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.86:5146
CCTV1,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.47:10276
CCTV1,http://marcvision.xyz:8000/rtp/238.1.78.166:7200
CCTV1,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.86:5146
CCTV1,http://www.syy3.top:3861/rtp/239.77.0.86:5146
CCTV1,http://alist.guangyuan.site:8188/rtp/239.77.0.86:5146
CCTV1,http://www.marcvision.xyz:8000/rtp/238.1.78.166:7200
CCTV1,http://esxi.juzhijian.com:8822/rtp/239.16.20.1:10010
CCTV1,http://0000505.xyz:8888/rtp/239.76.253.151:9000
CCTV1,http://sdray.gicp.net:8822/rtp/239.16.20.1:10010
CCTV1,http://nas.yzzdxc.cn:16666/rtp/239.37.0.254:5540
CCTV1,http://www.yyf1991.top:9999/rtp/233.18.204.52:5140
CCTV1,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.96:8550
CCTV1,http://server.juzhijian.com:8822/rtp/239.16.20.1:10010
CCTV1,http://zhangkx717.cn:9999/rtp/239.254.96.96:8550
CCTV1,http://a.xiongnas.top:8888/rtp/239.3.1.129:8008
CCTV1,http://nas.iszbd.com:4022/rtp/225.0.4.74:7980
CCTV1,http://www.rongrong.me:14022/rtp/233.18.204.52:5140
CCTV1,http://wmh.wmh.ink:6633/rtp/239.77.0.86:5146
CCTV1,http://x1x.bid:5146/rtp/239.3.1.129:8008
CCTV1,http://iptv.xxika.net:8188/rtp/239.77.0.86:5146
CCTV2,http://emby.xlangnan.cn:10316/rtp/239.254.200.158:6000
CCTV2,http://wangfei.uno:9999/rtp/225.1.2.78:10462
CCTV2,http://hiliu.myds.me:18088/rtp/239.69.1.102:10250
CCTV2,http://b.xiongnas.top:8888/rtp/239.3.1.60:8084
CCTV2,http://www.sclvip.top:5566/rtp/239.49.8.50:9802
CCTV2,http://youngx.top:4022/rtp/233.18.204.68:5140
CCTV2,http://home.scanflove.com:7788/rtp/235.254.198.52:1484
CCTV2,http://liuwenxiaokevin.top:14044/rtp/233.18.204.68:5140
CCTV2,http://hongzhijiaoyu.net:8188/rtp/239.77.0.137:5146
CCTV2,http://www.negative.top:50000/rtp/233.50.201.119:5140
CCTV2,http://nas.lyfkai.cn:19999/rtp/239.69.1.102:10250
CCTV2,http://pr.19760929.xyz:9688/rtp/239.77.0.137:5146
CCTV2,http://www.wjyu.top:4022/rtp/233.18.204.68:5140
CCTV2,http://ds3622.guangyuan.site:8188/rtp/239.77.0.137:5146
CCTV2,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.137:5146
CCTV2,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.78:10462
CCTV2,http://marcvision.xyz:8000/rtp/238.1.78.235:7752
CCTV2,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.137:5146
CCTV2,http://www.syy3.top:3861/rtp/239.77.0.137:5146
CCTV2,http://alist.guangyuan.site:8188/rtp/239.77.0.137:5146
CCTV2,http://www.marcvision.xyz:8000/rtp/238.1.78.235:7752
CCTV2,http://esxi.juzhijian.com:8822/rtp/239.16.20.2:10020
CCTV2,http://0000505.xyz:8888/rtp/239.76.253.152:9000
CCTV2,http://0000505.xyz:8888/rtp/239.76.246.152:1234
CCTV2,http://sdray.gicp.net:8822/rtp/239.16.20.2:10020
CCTV2,http://nas.yzzdxc.cn:16666/rtp/239.37.0.003:5540
CCTV2,http://www.yyf1991.top:9999/rtp/233.18.204.68:5140
CCTV2,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.102:10250
CCTV2,http://server.juzhijian.com:8822/rtp/239.16.20.2:10020
CCTV2,http://zhangkx717.cn:9999/rtp/239.69.1.102:10250
CCTV2,http://a.xiongnas.top:8888/rtp/239.3.1.60:8084
CCTV2,http://nas.iszbd.com:4022/rtp/225.0.4.132:7980
CCTV2,http://www.rongrong.me:14022/rtp/233.18.204.68:5140
CCTV2,http://wmh.wmh.ink:6633/rtp/239.77.0.137:5146
CCTV3,http://emby.xlangnan.cn:10316/rtp/239.254.201.152:7205
CCTV3,http://wangfei.uno:9999/rtp/225.1.2.141:10864
CCTV3,http://hiliu.myds.me:18088/rtp/239.69.1.122:10370
CCTV3,http://b.xiongnas.top:8888/rtp/239.3.1.172:8001
CCTV3,http://www.sclvip.top:5566/rtp/239.49.8.74:8000
CCTV3,http://youngx.top:4022/rtp/233.18.204.69:5140
CCTV3,http://home.scanflove.com:7788/rtp/235.254.198.53:1488
CCTV3,http://www.maomizi.cn:9530/rtp/239.77.0.169:5146
CCTV3,http://z.d4p.cn:8000/rtp/239.49.8.74:8000
CCTV3,http://liuwenxiaokevin.top:14044/rtp/233.18.204.69:5140
CCTV3,http://hongzhijiaoyu.net:8188/rtp/239.77.0.169:5146
CCTV3,http://www.negative.top:50000/rtp/233.50.201.196:5140
CCTV3,http://nas.lyfkai.cn:19999/rtp/239.69.1.122:10370
CCTV3,http://pr.19760929.xyz:9688/rtp/239.77.0.169:5146
CCTV3,http://www.wjyu.top:4022/rtp/233.18.204.69:5140
CCTV3,http://vp.maomizi.cc:9530/rtp/239.77.0.169:5146
CCTV3,http://ds3622.guangyuan.site:8188/rtp/239.77.0.169:5146
CCTV3,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.169:5146
CCTV3,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.141:10864
CCTV3,http://marcvision.xyz:8000/rtp/238.1.78.170:7232
CCTV3,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.169:5146
CCTV3,http://www.syy3.top:3861/rtp/239.77.0.169:5146
CCTV3,http://alist.guangyuan.site:8188/rtp/239.77.0.169:5146
CCTV3,http://www.marcvision.xyz:8000/rtp/238.1.78.170:7232
CCTV3,http://esxi.juzhijian.com:8822/rtp/239.16.20.3:10030
CCTV3,http://0000505.xyz:8888/rtp/239.76.253.153:9000
CCTV3,http://0000505.xyz:8888/rtp/239.76.246.153:1234
CCTV3,http://sdray.gicp.net:8822/rtp/239.16.20.3:10030
CCTV3,http://nas.yzzdxc.cn:16666/rtp/239.37.0.231:5540
CCTV3,http://www.yyf1991.top:9999/rtp/233.18.204.69:5140
CCTV3,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.122:10370
CCTV3,http://server.juzhijian.com:8822/rtp/239.16.20.3:10030
CCTV3,http://zhangkx717.cn:9999/rtp/239.69.1.122:10370
CCTV3,http://a.xiongnas.top:8888/rtp/239.3.1.172:8001
CCTV3,http://www.rongrong.me:14022/rtp/233.18.204.69:5140
CCTV3,http://wmh.wmh.ink:6633/rtp/239.77.0.169:5146
CCTV4,http://emby.xlangnan.cn:10316/rtp/239.254.200.190:6307
CCTV4,http://wangfei.uno:9999/rtp/225.1.2.197:11806
CCTV4,http://hiliu.myds.me:18088/rtp/239.69.1.138:10466
CCTV4,http://b.xiongnas.top:8888/rtp/239.3.1.105:8092
CCTV4,http://www.sclvip.top:5566/rtp/239.49.8.51:9806
CCTV4,http://youngx.top:4022/rtp/233.18.204.70:5140
CCTV4,http://home.scanflove.com:7788/rtp/235.254.198.183:7980
CCTV4,http://www.maomizi.cn:9530/rtp/239.77.0.78:5146
CCTV4,http://liuwenxiaokevin.top:14044/rtp/233.18.204.70:5140
CCTV4,http://hongzhijiaoyu.net:8188/rtp/239.77.0.78:5146
CCTV4,http://www.negative.top:50000/rtp/233.50.200.101:5140
CCTV4,http://nas.lyfkai.cn:19999/rtp/239.69.1.138:10466
CCTV4,http://pr.19760929.xyz:9688/rtp/239.77.0.78:5146
CCTV4,http://www.wjyu.top:4022/rtp/233.18.204.70:5140
CCTV4,http://vp.maomizi.cc:9530/rtp/239.77.0.78:5146
CCTV4,http://ds3622.guangyuan.site:8188/rtp/239.77.0.78:5146
CCTV4,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.78:5146
CCTV4,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.197:11806
CCTV4,http://marcvision.xyz:8000/rtp/238.1.78.236:7760
CCTV4,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.78:5146
CCTV4,http://www.syy3.top:3861/rtp/239.77.0.78:5146
CCTV4,http://alist.guangyuan.site:8188/rtp/239.77.0.78:5146
CCTV4,http://www.marcvision.xyz:8000/rtp/238.1.78.236:7760
CCTV4,http://esxi.juzhijian.com:8822/rtp/239.16.20.4:10040
CCTV4,http://0000505.xyz:8888/rtp/239.76.245.195:1234
CCTV4,http://0000505.xyz:8888/rtp/239.76.246.154:1234
CCTV4,http://sdray.gicp.net:8822/rtp/239.16.20.4:10040
CCTV4,http://www.yyf1991.top:9999/rtp/233.18.204.70:5140
CCTV4,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.138:10466
CCTV4,http://server.juzhijian.com:8822/rtp/239.16.20.4:10040
CCTV4,http://zhangkx717.cn:9999/rtp/239.69.1.138:10466
CCTV4,http://a.xiongnas.top:8888/rtp/239.3.1.105:8092
CCTV4,http://nas.iszbd.com:4022/rtp/225.0.4.176:7980
CCTV5,http://emby.xlangnan.cn:10316/rtp/239.254.201.153:7206
CCTV5,http://wangfei.uno:9999/rtp/225.1.2.48:10282
CCTV5,http://hiliu.myds.me:18088/rtp/239.69.1.123:10376
CCTV5,http://b.xiongnas.top:8888/rtp/239.3.1.173:8001
CCTV5,http://www.sclvip.top:5566/rtp/239.49.8.75:8000
CCTV5,http://youngx.top:4022/rtp/233.18.204.71:5140
CCTV5,http://home.scanflove.com:7788/rtp/235.254.198.54:1492
CCTV5,http://www.maomizi.cn:9530/rtp/239.77.0.170:5146
CCTV5,http://liuwenxiaokevin.top:14044/rtp/233.18.204.71:5140
CCTV5,http://hongzhijiaoyu.net:8188/rtp/239.77.0.170:5146
CCTV5,http://www.negative.top:50000/rtp/233.50.200.108:5140
CCTV5,http://www.negative.top:50000/rtp/233.50.201.194:5140
CCTV5,http://nas.lyfkai.cn:19999/rtp/239.69.1.123:10376
CCTV5,http://pr.19760929.xyz:9688/rtp/239.77.0.170:5146
CCTV5,http://www.wjyu.top:4022/rtp/233.18.204.71:5140
CCTV5,http://vp.maomizi.cc:9530/rtp/239.77.0.170:5146
CCTV5,http://ds3622.guangyuan.site:8188/rtp/239.77.0.170:5146
CCTV5,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.170:5146
CCTV5,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.48:10282
CCTV5,http://marcvision.xyz:8000/rtp/238.1.78.171:7240
CCTV5,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.170:5146
CCTV5,http://www.syy3.top:3861/rtp/239.77.0.170:5146
CCTV5,http://alist.guangyuan.site:8188/rtp/239.77.0.170:5146
CCTV5,http://www.marcvision.xyz:8000/rtp/238.1.78.171:7240
CCTV5,http://esxi.juzhijian.com:8822/rtp/239.16.20.53:10530
CCTV5,http://0000505.xyz:8888/rtp/239.76.253.155:9000
CCTV5,http://0000505.xyz:8888/rtp/239.76.246.155:1234
CCTV5,http://sdray.gicp.net:8822/rtp/239.16.20.53:10530
CCTV5,http://nas.yzzdxc.cn:16666/rtp/239.37.0.232:5540
CCTV5,http://www.yyf1991.top:9999/rtp/233.18.204.71:5140
CCTV5,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.123:10376
CCTV5,http://server.juzhijian.com:8822/rtp/239.16.20.53:10530
CCTV5,http://zhangkx717.cn:9999/rtp/239.69.1.123:10376
CCTV5,http://a.xiongnas.top:8888/rtp/239.3.1.173:8001
CCTV5+,http://emby.xlangnan.cn:10316/rtp/239.254.200.46:8004
CCTV5+,http://hiliu.myds.me:18088/rtp/239.254.96.234:9484
CCTV5+,http://b.xiongnas.top:8888/rtp/239.3.1.130:8004
CCTV5+,http://www.sclvip.top:5566/rtp/239.49.8.18:9610
CCTV5+,http://youngx.top:4022/rtp/233.18.204.67:5140
CCTV5+,http://home.scanflove.com:7788/rtp/235.254.198.122:1764
CCTV5+,http://www.maomizi.cn:9530/rtp/239.77.0.87:5146
CCTV5+,http://liuwenxiaokevin.top:14044/rtp/233.18.204.67:5140
CCTV5+,http://hongzhijiaoyu.net:8188/rtp/239.77.0.87:5146
CCTV5+,http://www.negative.top:50000/rtp/233.50.201.220:5140
CCTV5+,http://nas.lyfkai.cn:19999/rtp/239.254.96.234:9484
CCTV5+,http://pr.19760929.xyz:9688/rtp/239.77.0.87:5146
CCTV5+,http://www.wjyu.top:4022/rtp/233.18.204.67:5140
CCTV5+,http://vp.maomizi.cc:9530/rtp/239.77.0.87:5146
CCTV5+,http://ds3622.guangyuan.site:8188/rtp/239.77.0.87:5146
CCTV5+,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.87:5146
CCTV5+,http://marcvision.xyz:8000/rtp/238.1.78.237:7768
CCTV5+,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.87:5146
CCTV5+,http://www.syy3.top:3861/rtp/239.77.0.87:5146
CCTV5+,http://alist.guangyuan.site:8188/rtp/239.77.0.87:5146
CCTV5+,http://www.marcvision.xyz:8000/rtp/238.1.78.237:7768
CCTV5+,http://esxi.juzhijian.com:8822/rtp/239.16.20.5:10050
CCTV5+,http://0000505.xyz:8888/rtp/239.76.246.168:1234
CCTV5+,http://0000505.xyz:8888/rtp/239.76.254.215:9000
CCTV5+,http://sdray.gicp.net:8822/rtp/239.16.20.5:10050
CCTV5+,http://nas.yzzdxc.cn:16666/rtp/239.37.0.121:5540
CCTV5+,http://www.yyf1991.top:9999/rtp/233.18.204.67:5140
CCTV5+,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.234:9484
CCTV5+,http://server.juzhijian.com:8822/rtp/239.16.20.5:10050
CCTV5+,http://zhangkx717.cn:9999/rtp/239.254.96.234:9484
CCTV5+,http://a.xiongnas.top:8888/rtp/239.3.1.130:8004
CCTV5+,http://nas.iszbd.com:4022/rtp/225.0.4.73:7980
CCTV5+,http://www.rongrong.me:14022/rtp/233.18.204.67:5140
CCTV5+,http://wmh.wmh.ink:6633/rtp/239.77.0.87:5146
CCTV5+,http://iptv.xxika.net:8188/rtp/239.77.0.87:5146
CCTV5+,http://www.taoli.website:23234/rtp/239.3.1.130:8004
CCTV5+,http://yanshifen.top:8889/rtp/239.77.0.87:5146
CCTV6,http://emby.xlangnan.cn:10316/rtp/239.254.201.154:7207
CCTV6,http://wangfei.uno:9999/rtp/225.1.2.143:10876
CCTV6,http://hiliu.myds.me:18088/rtp/239.69.1.124:10382
CCTV6,http://b.xiongnas.top:8888/rtp/239.3.1.174:8001
CCTV6,http://www.sclvip.top:5566/rtp/239.49.8.76:8000
CCTV6,http://youngx.top:4022/rtp/233.18.204.72:5140
CCTV6,http://home.scanflove.com:7788/rtp/235.254.198.55:1496
CCTV6,http://www.maomizi.cn:9530/rtp/239.77.0.171:5146
CCTV6,http://liuwenxiaokevin.top:14044/rtp/233.18.204.72:5140
CCTV6,http://hongzhijiaoyu.net:8188/rtp/239.77.0.171:5146
CCTV6,http://www.negative.top:50000/rtp/233.50.200.109:5140
CCTV6,http://nas.lyfkai.cn:19999/rtp/239.69.1.124:10382
CCTV6,http://pr.19760929.xyz:9688/rtp/239.77.0.171:5146
CCTV6,http://www.wjyu.top:4022/rtp/233.18.204.72:5140
CCTV6,http://vp.maomizi.cc:9530/rtp/239.77.0.171:5146
CCTV6,http://ds3622.guangyuan.site:8188/rtp/239.77.0.171:5146
CCTV6,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.171:5146
CCTV6,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.143:10876
CCTV6,http://marcvision.xyz:8000/rtp/238.1.78.172:7248
CCTV6,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.171:5146
CCTV6,http://www.syy3.top:3861/rtp/239.77.0.171:5146
CCTV6,http://alist.guangyuan.site:8188/rtp/239.77.0.171:5146
CCTV6,http://www.marcvision.xyz:8000/rtp/238.1.78.172:7248
CCTV6,http://esxi.juzhijian.com:8822/rtp/239.16.20.6:10060
CCTV6,http://0000505.xyz:8888/rtp/239.76.253.156:9000
CCTV6,http://sdray.gicp.net:8822/rtp/239.16.20.6:10060
CCTV6,http://nas.yzzdxc.cn:16666/rtp/239.37.0.233:5540
CCTV6,http://www.yyf1991.top:9999/rtp/233.18.204.72:5140
CCTV6,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.124:10382
CCTV6,http://server.juzhijian.com:8822/rtp/239.16.20.6:10060
CCTV6,http://zhangkx717.cn:9999/rtp/239.69.1.124:10382
CCTV6,http://a.xiongnas.top:8888/rtp/239.3.1.174:8001
CCTV6,http://nas.iszbd.com:4022/rtp/225.0.4.144:7980
CCTV6,http://www.rongrong.me:14022/rtp/233.18.204.72:5140
CCTV6,http://wmh.wmh.ink:6633/rtp/239.77.0.171:5146
CCTV7,http://emby.xlangnan.cn:10316/rtp/239.254.200.159:6000
CCTV7,http://wangfei.uno:9999/rtp/225.1.2.79:10468
CCTV7,http://hiliu.myds.me:18088/rtp/239.69.1.103:10256
CCTV7,http://b.xiongnas.top:8888/rtp/239.3.1.61:8104
CCTV7,http://www.sclvip.top:5566/rtp/239.49.0.126:8000
CCTV7,http://youngx.top:4022/rtp/233.18.204.73:5140
CCTV7,http://home.scanflove.com:7788/rtp/235.254.198.56:1500
CCTV7,http://www.maomizi.cn:9530/rtp/239.77.0.138:5146
CCTV7,http://z.d4p.cn:8000/rtp/239.49.0.126:8000
CCTV7,http://liuwenxiaokevin.top:14044/rtp/233.18.204.73:5140
CCTV7,http://hongzhijiaoyu.net:8188/rtp/239.77.0.138:5146
CCTV7,http://www.negative.top:50000/rtp/233.50.200.102:5140
CCTV7,http://nas.lyfkai.cn:19999/rtp/239.69.1.103:10256
CCTV7,http://pr.19760929.xyz:9688/rtp/239.77.0.138:5146
CCTV7,http://www.wjyu.top:4022/rtp/233.18.204.73:5140
CCTV7,http://vp.maomizi.cc:9530/rtp/239.77.0.138:5146
CCTV7,http://ds3622.guangyuan.site:8188/rtp/239.77.0.138:5146
CCTV7,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.138:5146
CCTV7,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.79:10468
CCTV7,http://marcvision.xyz:8000/rtp/238.1.78.239:7784
CCTV7,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.138:5146
CCTV7,http://www.syy3.top:3861/rtp/239.77.0.138:5146
CCTV7,http://alist.guangyuan.site:8188/rtp/239.77.0.138:5146
CCTV7,http://www.marcvision.xyz:8000/rtp/238.1.78.239:7784
CCTV7,http://esxi.juzhijian.com:8822/rtp/239.16.20.51:10510
CCTV7,http://0000505.xyz:8888/rtp/239.76.253.157:9000
CCTV7,http://0000505.xyz:8888/rtp/239.76.246.157:1234
CCTV7,http://sdray.gicp.net:8822/rtp/239.16.20.51:10510
CCTV7,http://www.yyf1991.top:9999/rtp/233.18.204.73:5140
CCTV7,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.103:10256
CCTV7,http://server.juzhijian.com:8822/rtp/239.16.20.51:10510
CCTV7,http://zhangkx717.cn:9999/rtp/239.69.1.103:10256
CCTV7,http://a.xiongnas.top:8888/rtp/239.3.1.61:8104
CCTV7,http://nas.iszbd.com:4022/rtp/225.0.4.127:7980
CCTV7,http://www.rongrong.me:14022/rtp/233.18.204.73:5140
CCTV7,http://wmh.wmh.ink:6633/rtp/239.77.0.138:5146
CCTV7,http://x1x.bid:5146/rtp/239.3.1.61:8104
CCTV7,http://iptv.xxika.net:8188/rtp/239.77.0.138:5146
CCTV8,http://emby.xlangnan.cn:10316/rtp/239.254.201.155:7208
CCTV8,http://wangfei.uno:9999/rtp/225.1.2.144:10882
CCTV8,http://hiliu.myds.me:18088/rtp/239.69.1.125:10388
CCTV8,http://b.xiongnas.top:8888/rtp/239.3.1.175:8001
CCTV8,http://www.sclvip.top:5566/rtp/239.49.8.77:8000
CCTV8,http://youngx.top:4022/rtp/233.18.204.74:5140
CCTV8,http://home.scanflove.com:7788/rtp/235.254.198.57:1504
CCTV8,http://www.maomizi.cn:9530/rtp/239.77.0.172:5146
CCTV8,http://z.d4p.cn:8000/rtp/239.49.8.77:8000
CCTV8,http://liuwenxiaokevin.top:14044/rtp/233.18.204.74:5140
CCTV8,http://hongzhijiaoyu.net:8188/rtp/239.77.0.172:5146
CCTV8,http://nas.lyfkai.cn:19999/rtp/239.69.1.125:10388
CCTV8,http://pr.19760929.xyz:9688/rtp/239.77.0.172:5146
CCTV8,http://www.wjyu.top:4022/rtp/233.18.204.74:5140
CCTV8,http://vp.maomizi.cc:9530/rtp/239.77.0.172:5146
CCTV8,http://ds3622.guangyuan.site:8188/rtp/239.77.0.172:5146
CCTV8,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.172:5146
CCTV8,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.144:10882
CCTV8,http://marcvision.xyz:8000/rtp/238.1.78.173:7256
CCTV8,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.172:5146
CCTV8,http://www.syy3.top:3861/rtp/239.77.0.172:5146
CCTV8,http://alist.guangyuan.site:8188/rtp/239.77.0.172:5146
CCTV8,http://www.marcvision.xyz:8000/rtp/238.1.78.173:7256
CCTV8,http://esxi.juzhijian.com:8822/rtp/239.16.20.8:10080
CCTV8,http://0000505.xyz:8888/rtp/239.76.253.158:9000
CCTV8,http://0000505.xyz:8888/rtp/239.76.246.158:1234
CCTV8,http://sdray.gicp.net:8822/rtp/239.16.20.8:10080
CCTV8,http://nas.yzzdxc.cn:16666/rtp/239.37.0.234:5540
CCTV8,http://www.yyf1991.top:9999/rtp/233.18.204.74:5140
CCTV8,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.125:10388
CCTV8,http://server.juzhijian.com:8822/rtp/239.16.20.8:10080
CCTV8,http://zhangkx717.cn:9999/rtp/239.69.1.125:10388
CCTV8,http://a.xiongnas.top:8888/rtp/239.3.1.175:8001
CCTV8,http://nas.iszbd.com:4022/rtp/225.0.4.137:7980
CCTV8,http://www.rongrong.me:14022/rtp/233.18.204.74:5140
CCTV8,http://wmh.wmh.ink:6633/rtp/239.77.0.172:5146
CCTV9,http://emby.xlangnan.cn:10316/rtp/239.254.200.59:8112
CCTV9,http://wangfei.uno:9999/rtp/225.1.2.80:10474
CCTV9,http://hiliu.myds.me:18088/rtp/239.69.1.104:10262
CCTV9,http://b.xiongnas.top:8888/rtp/239.3.1.62:8112
CCTV9,http://www.sclvip.top:5566/rtp/239.49.8.53:9814
CCTV9,http://youngx.top:4022/rtp/233.18.204.75:5140
CCTV9,http://www.maomizi.cn:9530/rtp/239.77.0.135:5146
CCTV9,http://z.d4p.cn:8000/rtp/239.49.8.53:9814
CCTV9,http://liuwenxiaokevin.top:14044/rtp/233.18.204.75:5140
CCTV9,http://hongzhijiaoyu.net:8188/rtp/239.77.0.135:5146
CCTV9,http://www.negative.top:50000/rtp/233.50.200.23:5140
CCTV9,http://nas.lyfkai.cn:19999/rtp/239.69.1.104:10262
CCTV9,http://pr.19760929.xyz:9688/rtp/239.77.0.135:5146
CCTV9,http://www.wjyu.top:4022/rtp/233.18.204.75:5140
CCTV9,http://ds3622.guangyuan.site:8188/rtp/239.77.0.135:5146
CCTV9,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.135:5146
CCTV9,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.80:10474
CCTV9,http://marcvision.xyz:8000/rtp/238.1.78.240:7792
CCTV9,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.135:5146
CCTV9,http://www.syy3.top:3861/rtp/239.77.0.135:5146
CCTV9,http://alist.guangyuan.site:8188/rtp/239.77.0.135:5146
CCTV9,http://www.marcvision.xyz:8000/rtp/238.1.78.240:7792
CCTV9,http://esxi.juzhijian.com:8822/rtp/239.16.20.9:10090
CCTV9,http://0000505.xyz:8888/rtp/239.76.246.159:1234
CCTV9,http://0000505.xyz:8888/rtp/239.76.253.159:9000
CCTV9,http://sdray.gicp.net:8822/rtp/239.16.20.9:10090
CCTV9,http://nas.yzzdxc.cn:16666/rtp/239.37.0.001:5540
CCTV9,http://www.yyf1991.top:9999/rtp/233.18.204.75:5140
CCTV9,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.104:10262
CCTV9,http://server.juzhijian.com:8822/rtp/239.16.20.9:10090
CCTV9,http://zhangkx717.cn:9999/rtp/239.69.1.104:10262
CCTV9,http://a.xiongnas.top:8888/rtp/239.3.1.62:8112
CCTV9,http://nas.iszbd.com:4022/rtp/225.0.4.131:7980
CCTV9,http://www.rongrong.me:14022/rtp/233.18.204.75:5140
CCTV9,http://wmh.wmh.ink:6633/rtp/239.77.0.135:5146
CCTV10,http://emby.xlangnan.cn:10316/rtp/239.254.200.160:6000
CCTV10,http://wangfei.uno:9999/rtp/225.1.2.81:10480
CCTV10,http://hiliu.myds.me:18088/rtp/239.69.1.105:10268
CCTV10,http://b.xiongnas.top:8888/rtp/239.3.1.63:8116
CCTV10,http://www.sclvip.top:5566/rtp/239.49.8.54:9818
CCTV10,http://youngx.top:4022/rtp/233.18.204.76:5140
CCTV10,http://home.scanflove.com:7788/rtp/235.254.198.59:1512
CCTV10,http://z.d4p.cn:8000/rtp/239.49.8.54:9818
CCTV10,http://liuwenxiaokevin.top:14044/rtp/233.18.204.76:5140
CCTV10,http://hongzhijiaoyu.net:8188/rtp/239.77.0.134:5146
CCTV10,http://www.negative.top:50000/rtp/233.50.200.22:5140
CCTV10,http://nas.lyfkai.cn:19999/rtp/239.69.1.105:10268
CCTV10,http://pr.19760929.xyz:9688/rtp/239.77.0.134:5146
CCTV10,http://www.wjyu.top:4022/rtp/233.18.204.76:5140
CCTV10,http://vp.maomizi.cc:9530/rtp/239.77.0.134:5146
CCTV10,http://ds3622.guangyuan.site:8188/rtp/239.77.0.134:5146
CCTV10,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.134:5146
CCTV10,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.81:10480
CCTV10,http://marcvision.xyz:8000/rtp/238.1.78.241:7800
CCTV10,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.134:5146
CCTV10,http://www.syy3.top:3861/rtp/239.77.0.134:5146
CCTV10,http://alist.guangyuan.site:8188/rtp/239.77.0.134:5146
CCTV10,http://www.marcvision.xyz:8000/rtp/238.1.78.241:7800
CCTV10,http://esxi.juzhijian.com:8822/rtp/239.16.20.10:10100
CCTV10,http://0000505.xyz:8888/rtp/239.76.253.160:9000
CCTV10,http://0000505.xyz:8888/rtp/239.76.246.160:1234
CCTV10,http://sdray.gicp.net:8822/rtp/239.16.20.10:10100
CCTV10,http://nas.yzzdxc.cn:16666/rtp/239.37.0.007:5540
CCTV10,http://www.yyf1991.top:9999/rtp/233.18.204.76:5140
CCTV10,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.105:10268
CCTV10,http://server.juzhijian.com:8822/rtp/239.16.20.10:10100
CCTV10,http://zhangkx717.cn:9999/rtp/239.69.1.105:10268
CCTV10,http://a.xiongnas.top:8888/rtp/239.3.1.63:8116
CCTV10,http://nas.iszbd.com:4022/rtp/225.0.4.130:7980
CCTV10,http://www.rongrong.me:14022/rtp/233.18.204.76:5140
CCTV10,http://wmh.wmh.ink:6633/rtp/239.77.0.134:5146
CCTV11,http://emby.xlangnan.cn:10316/rtp/239.254.201.123:8120
CCTV11,http://wangfei.uno:9999/rtp/225.1.2.220:11434
CCTV11,http://b.xiongnas.top:8888/rtp/239.3.1.152:8120
CCTV11,http://www.sclvip.top:5566/rtp/239.49.0.127:8000
CCTV11,http://youngx.top:4022/rtp/233.18.204.77:5140
CCTV11,http://home.scanflove.com:7788/rtp/235.254.198.7:1304
CCTV11,http://z.d4p.cn:8000/rtp/239.49.0.127:8000
CCTV11,http://liuwenxiaokevin.top:14044/rtp/233.18.204.77:5140
CCTV11,http://hongzhijiaoyu.net:8188/rtp/239.77.1.108:5146
CCTV11,http://www.negative.top:50000/rtp/233.50.200.132:5140
CCTV11,http://nas.lyfkai.cn:19999/rtp/239.69.1.154:10560
CCTV11,http://pr.19760929.xyz:9688/rtp/239.77.1.108:5146
CCTV11,http://www.wjyu.top:4022/rtp/233.18.204.77:5140
CCTV11,http://ds3622.guangyuan.site:8188/rtp/239.77.1.108:5146
CCTV11,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.108:5146
CCTV11,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.220:11434
CCTV11,http://marcvision.xyz:8000/rtp/238.1.78.206:7502
CCTV11,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.108:5146
CCTV11,http://www.syy3.top:3861/rtp/239.77.1.108:5146
CCTV11,http://alist.guangyuan.site:8188/rtp/239.77.1.108:5146
CCTV11,http://www.marcvision.xyz:8000/rtp/238.1.78.206:7502
CCTV11,http://esxi.juzhijian.com:8822/rtp/239.16.20.11:10110
CCTV11,http://0000505.xyz:8888/rtp/239.76.245.251:1234
CCTV11,http://0000505.xyz:8888/rtp/239.76.252.251:9000
CCTV11,http://sdray.gicp.net:8822/rtp/239.16.20.11:10110
CCTV11,http://www.yyf1991.top:9999/rtp/233.18.204.77:5140
CCTV11,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.154:10560
CCTV11,http://server.juzhijian.com:8822/rtp/239.16.20.11:10110
CCTV11,http://zhangkx717.cn:9999/rtp/239.69.1.154:10560
CCTV11,http://a.xiongnas.top:8888/rtp/239.3.1.152:8120
CCTV11,http://nas.iszbd.com:4022/rtp/225.0.4.218:7980
CCTV11,http://www.rongrong.me:14022/rtp/233.18.204.77:5140
CCTV11,http://wmh.wmh.ink:6633/rtp/239.77.1.108:5146
CCTV11,http://x1x.bid:5146/rtp/239.3.1.152:8120
CCTV12,http://emby.xlangnan.cn:10316/rtp/239.254.200.161:6000
CCTV12,http://wangfei.uno:9999/rtp/225.1.2.82:10486
CCTV12,http://b.xiongnas.top:8888/rtp/239.3.1.64:8124
CCTV12,http://www.sclvip.top:5566/rtp/239.49.8.55:9822
CCTV12,http://youngx.top:4022/rtp/233.18.204.78:5140
CCTV12,http://home.scanflove.com:7788/rtp/235.254.198.60:1516
CCTV12,http://liuwenxiaokevin.top:14044/rtp/233.18.204.78:5140
CCTV12,http://hongzhijiaoyu.net:8188/rtp/239.77.0.136:5146
CCTV12,http://www.negative.top:50000/rtp/233.50.200.21:5140
CCTV12,http://nas.lyfkai.cn:19999/rtp/239.69.1.106:10274
CCTV12,http://pr.19760929.xyz:9688/rtp/239.77.0.136:5146
CCTV12,http://www.wjyu.top:4022/rtp/233.18.204.78:5140
CCTV12,http://ds3622.guangyuan.site:8188/rtp/239.77.0.136:5146
CCTV12,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.136:5146
CCTV12,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.82:10486
CCTV12,http://marcvision.xyz:8000/rtp/238.1.78.242:7808
CCTV12,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.136:5146
CCTV12,http://www.syy3.top:3861/rtp/239.77.0.136:5146
CCTV12,http://alist.guangyuan.site:8188/rtp/239.77.0.136:5146
CCTV12,http://www.marcvision.xyz:8000/rtp/238.1.78.242:7808
CCTV12,http://esxi.juzhijian.com:8822/rtp/239.16.20.12:10120
CCTV12,http://0000505.xyz:8888/rtp/239.76.246.162:1234
CCTV12,http://0000505.xyz:8888/rtp/239.76.253.162:9000
CCTV12,http://sdray.gicp.net:8822/rtp/239.16.20.12:10120
CCTV12,http://nas.yzzdxc.cn:16666/rtp/239.37.0.006:5540
CCTV12,http://www.yyf1991.top:9999/rtp/233.18.204.78:5140
CCTV12,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.106:10274
CCTV12,http://server.juzhijian.com:8822/rtp/239.16.20.12:10120
CCTV12,http://zhangkx717.cn:9999/rtp/239.69.1.106:10274
CCTV12,http://a.xiongnas.top:8888/rtp/239.3.1.64:8124
CCTV12,http://nas.iszbd.com:4022/rtp/225.0.4.129:7980
CCTV12,http://www.rongrong.me:14022/rtp/233.18.204.78:5140
CCTV12,http://wmh.wmh.ink:6633/rtp/239.77.0.136:5146
CCTV13,http://emby.xlangnan.cn:10316/rtp/239.254.200.9:8264
CCTV13,http://wangfei.uno:9999/rtp/225.1.2.74:11584
CCTV13,http://b.xiongnas.top:8888/rtp/239.3.1.124:8128
CCTV13,http://www.sclvip.top:5566/rtp/239.49.8.109:8000
CCTV13,http://youngx.top:4022/rtp/233.18.204.79:5140
CCTV13,http://home.scanflove.com:7788/rtp/235.254.198.9:1312
CCTV13,http://www.maomizi.cn:9530/rtp/239.253.43.196:5146
CCTV13,http://z.d4p.cn:8000/rtp/239.49.8.109:8000
CCTV13,http://liuwenxiaokevin.top:14044/rtp/233.18.204.79:5140
CCTV13,http://hongzhijiaoyu.net:8188/rtp/239.253.43.196:5146
CCTV13,http://www.negative.top:50000/rtp/233.50.200.97:5140
CCTV13,http://nas.lyfkai.cn:19999/rtp/239.254.96.161:9040
CCTV13,http://pr.19760929.xyz:9688/rtp/239.253.43.196:5146
CCTV13,http://www.wjyu.top:4022/rtp/233.18.204.79:5140
CCTV13,http://vp.maomizi.cc:9530/rtp/239.253.43.196:5146
CCTV13,http://ds3622.guangyuan.site:8188/rtp/239.253.43.196:5146
CCTV13,http://lbyjlt.vv5678.cn:8880/rtp/239.253.43.196:5146
CCTV13,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.74:11584
CCTV13,http://marcvision.xyz:8000/rtp/238.1.79.35:4392
CCTV13,http://www.hongzhijiaoyu.net:8188/rtp/239.253.43.196:5146
CCTV13,http://www.syy3.top:3861/rtp/239.253.43.196:5146
CCTV13,http://alist.guangyuan.site:8188/rtp/239.253.43.196:5146
CCTV13,http://www.marcvision.xyz:8000/rtp/238.1.79.35:4392
CCTV13,http://esxi.juzhijian.com:8822/rtp/239.16.20.13:10130
CCTV13,http://0000505.xyz:8888/rtp/239.76.253.93:9000
CCTV13,http://0000505.xyz:8888/rtp/239.76.246.93:1234
CCTV13,http://sdray.gicp.net:8822/rtp/239.16.20.13:10130
CCTV13,http://www.yyf1991.top:9999/rtp/233.18.204.79:5140
CCTV13,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.161:9040
CCTV13,http://server.juzhijian.com:8822/rtp/239.16.20.13:10130
CCTV13,http://zhangkx717.cn:9999/rtp/239.254.96.161:9040
CCTV13,http://a.xiongnas.top:8888/rtp/239.3.1.124:8128
CCTV13,http://nas.iszbd.com:4022/rtp/225.0.4.219:7980
CCTV13,http://www.rongrong.me:14022/rtp/233.18.204.79:5140
CCTV13,http://wmh.wmh.ink:6633/rtp/239.253.43.196:5146
CCTV14,http://emby.xlangnan.cn:10316/rtp/239.254.200.162:6000
CCTV14,http://wangfei.uno:9999/rtp/225.1.2.83:10492
CCTV14,http://b.xiongnas.top:8888/rtp/239.3.1.65:8132
CCTV14,http://www.sclvip.top:5566/rtp/239.49.8.56:9826
CCTV14,http://youngx.top:4022/rtp/233.18.204.80:5140
CCTV14,http://home.scanflove.com:7788/rtp/235.254.198.61:1520
CCTV14,http://www.maomizi.cn:9530/rtp/239.77.0.133:5146
CCTV14,http://z.d4p.cn:8000/rtp/239.49.8.56:9826
CCTV14,http://liuwenxiaokevin.top:14044/rtp/233.18.204.80:5140
CCTV14,http://hongzhijiaoyu.net:8188/rtp/239.77.0.133:5146
CCTV14,http://www.negative.top:50000/rtp/233.50.200.103:5140
CCTV14,http://nas.lyfkai.cn:19999/rtp/239.69.1.107:10280
CCTV14,http://pr.19760929.xyz:9688/rtp/239.77.0.133:5146
CCTV14,http://www.wjyu.top:4022/rtp/233.18.204.80:5140
CCTV14,http://vp.maomizi.cc:9530/rtp/239.77.0.133:5146
CCTV14,http://ds3622.guangyuan.site:8188/rtp/239.77.0.133:5146
CCTV14,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.133:5146
CCTV14,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.83:10492
CCTV14,http://marcvision.xyz:8000/rtp/238.1.78.243:7816
CCTV14,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.133:5146
CCTV14,http://www.syy3.top:3861/rtp/239.77.0.133:5146
CCTV14,http://alist.guangyuan.site:8188/rtp/239.77.0.133:5146
CCTV14,http://www.marcvision.xyz:8000/rtp/238.1.78.243:7816
CCTV14,http://esxi.juzhijian.com:8822/rtp/239.16.20.14:10140
CCTV14,http://0000505.xyz:8888/rtp/239.76.246.164:1234
CCTV14,http://0000505.xyz:8888/rtp/239.76.253.164:9000
CCTV14,http://sdray.gicp.net:8822/rtp/239.16.20.14:10140
CCTV14,http://nas.yzzdxc.cn:16666/rtp/239.37.0.005:5540
CCTV14,http://www.yyf1991.top:9999/rtp/233.18.204.80:5140
CCTV14,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.107:10280
CCTV14,http://server.juzhijian.com:8822/rtp/239.16.20.14:10140
CCTV14,http://zhangkx717.cn:9999/rtp/239.69.1.107:10280
CCTV14,http://a.xiongnas.top:8888/rtp/239.3.1.65:8132
CCTV14,http://nas.iszbd.com:4022/rtp/225.0.4.128:7980
CCTV14,http://www.rongrong.me:14022/rtp/233.18.204.80:5140
CCTV14,http://wmh.wmh.ink:6633/rtp/239.77.0.133:5146
CCTV15,http://emby.xlangnan.cn:10316/rtp/239.254.201.124:8136
CCTV15,http://wangfei.uno:9999/rtp/225.1.2.221:11440
CCTV15,http://b.xiongnas.top:8888/rtp/239.3.1.153:8136
CCTV15,http://www.sclvip.top:5566/rtp/239.49.0.128:8000
CCTV15,http://youngx.top:4022/rtp/233.18.204.81:5140
CCTV15,http://home.scanflove.com:7788/rtp/235.254.198.11:1320
CCTV15,http://www.maomizi.cn:9530/rtp/239.77.1.239:5146
CCTV15,http://z.d4p.cn:8000/rtp/239.49.0.128:8000
CCTV15,http://liuwenxiaokevin.top:14044/rtp/233.18.204.81:5140
CCTV15,http://hongzhijiaoyu.net:8188/rtp/239.77.1.239:5146
CCTV15,http://www.negative.top:50000/rtp/233.50.200.133:5140
CCTV15,http://nas.lyfkai.cn:19999/rtp/239.69.1.155:10566
CCTV15,http://pr.19760929.xyz:9688/rtp/239.77.1.239:5146
CCTV15,http://www.wjyu.top:4022/rtp/233.18.204.81:5140
CCTV15,http://vp.maomizi.cc:9530/rtp/239.77.1.239:5146
CCTV15,http://ds3622.guangyuan.site:8188/rtp/239.77.1.239:5146
CCTV15,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.239:5146
CCTV15,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.221:11440
CCTV15,http://marcvision.xyz:8000/rtp/238.1.78.222:7648
CCTV15,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.239:5146
CCTV15,http://www.syy3.top:3861/rtp/239.77.1.239:5146
CCTV15,http://alist.guangyuan.site:8188/rtp/239.77.1.239:5146
CCTV15,http://www.marcvision.xyz:8000/rtp/238.1.78.222:7648
CCTV15,http://esxi.juzhijian.com:8822/rtp/239.16.20.15:10150
CCTV15,http://0000505.xyz:8888/rtp/239.76.252.252:9000
CCTV15,http://0000505.xyz:8888/rtp/239.76.245.252:1234
CCTV15,http://sdray.gicp.net:8822/rtp/239.16.20.15:10150
CCTV15,http://www.yyf1991.top:9999/rtp/233.18.204.81:5140
CCTV15,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.155:10566
CCTV15,http://server.juzhijian.com:8822/rtp/239.16.20.15:10150
CCTV15,http://zhangkx717.cn:9999/rtp/239.69.1.155:10566
CCTV15,http://a.xiongnas.top:8888/rtp/239.3.1.153:8136
CCTV15,http://nas.iszbd.com:4022/rtp/225.0.4.220:7980
CCTV15,http://www.rongrong.me:14022/rtp/233.18.204.81:5140
CCTV15,http://wmh.wmh.ink:6633/rtp/239.77.1.239:5146
CCTV15,http://x1x.bid:5146/rtp/239.3.1.153:8136
CCTV15,http://iptv.xxika.net:8188/rtp/239.77.1.239:5146
CCTV16,http://emby.xlangnan.cn:10316/rtp/239.254.200.61:6344
CCTV16,http://b.xiongnas.top:8888/rtp/239.3.1.184:8001
CCTV16,http://www.sclvip.top:5566/rtp/239.49.8.31:8000
CCTV16,http://youngx.top:4022/rtp/233.18.204.82:5140
CCTV16,http://youngx.top:4022/rtp/233.18.204.114:5140
CCTV16,http://youngx.top:4022/rtp/233.18.204.215:5140
CCTV16,http://www.maomizi.cn:9530/rtp/239.77.0.165:5146
CCTV16,http://z.d4p.cn:8000/rtp/239.49.8.31:8000
CCTV16,http://liuwenxiaokevin.top:14044/rtp/233.18.204.82:5140
CCTV16,http://liuwenxiaokevin.top:14044/rtp/233.18.204.114:5140
CCTV16,http://liuwenxiaokevin.top:14044/rtp/233.18.204.215:5140
CCTV16,http://hongzhijiaoyu.net:8188/rtp/239.77.0.165:5146
CCTV16,http://www.negative.top:50000/rtp/233.50.201.192:5140
CCTV16,http://nas.lyfkai.cn:19999/rtp/239.69.1.247:11124
CCTV16,http://pr.19760929.xyz:9688/rtp/239.77.0.165:5146
CCTV16,http://www.wjyu.top:4022/rtp/233.18.204.82:5140
CCTV16,http://www.wjyu.top:4022/rtp/233.18.204.114:5140
CCTV16,http://www.wjyu.top:4022/rtp/233.18.204.215:5140
CCTV16,http://vp.maomizi.cc:9530/rtp/239.77.0.165:5146
CCTV16,http://ds3622.guangyuan.site:8188/rtp/239.77.0.165:5146
CCTV16,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.165:5146
CCTV16,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.165:5146
CCTV16,http://www.syy3.top:3861/rtp/239.77.0.165:5146
CCTV16,http://alist.guangyuan.site:8188/rtp/239.77.0.165:5146
CCTV16,http://0000505.xyz:8888/rtp/239.76.253.98:9000
CCTV16,http://0000505.xyz:8888/rtp/239.76.246.98:1234
CCTV16,http://www.yyf1991.top:9999/rtp/233.18.204.82:5140
CCTV16,http://www.yyf1991.top:9999/rtp/233.18.204.114:5140
CCTV16,http://www.yyf1991.top:9999/rtp/233.18.204.215:5140
CCTV16,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.247:11124
CCTV16,http://zhangkx717.cn:9999/rtp/239.69.1.247:11124
CCTV16,http://a.xiongnas.top:8888/rtp/239.3.1.184:8001
CCTV17,http://emby.xlangnan.cn:10316/rtp/239.254.201.120:8144
CCTV17,http://wangfei.uno:9999/rtp/225.1.2.53:10312
CCTV17,http://b.xiongnas.top:8888/rtp/239.3.1.151:8144
CCTV17,http://www.sclvip.top:5566/rtp/239.49.8.52:9810
CCTV17,http://youngx.top:4022/rtp/233.18.204.83:5140
CCTV17,http://www.maomizi.cn:9530/rtp/239.77.0.198:5146
CCTV17,http://liuwenxiaokevin.top:14044/rtp/233.18.204.83:5140
CCTV17,http://hongzhijiaoyu.net:8188/rtp/239.77.0.198:5146
CCTV17,http://www.negative.top:50000/rtp/233.50.200.113:5140
CCTV17,http://nas.lyfkai.cn:19999/rtp/239.69.1.152:10548
CCTV17,http://pr.19760929.xyz:9688/rtp/239.77.0.198:5146
CCTV17,http://www.wjyu.top:4022/rtp/233.18.204.83:5140
CCTV17,http://vp.maomizi.cc:9530/rtp/239.77.0.198:5146
CCTV17,http://ds3622.guangyuan.site:8188/rtp/239.77.0.198:5146
CCTV17,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.198:5146
CCTV17,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.53:10312
CCTV17,http://marcvision.xyz:8000/rtp/238.1.78.178:7296
CCTV17,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.198:5146
CCTV17,http://www.syy3.top:3861/rtp/239.77.0.198:5146
CCTV17,http://alist.guangyuan.site:8188/rtp/239.77.0.198:5146
CCTV17,http://www.marcvision.xyz:8000/rtp/238.1.78.178:7296
CCTV17,http://esxi.juzhijian.com:8822/rtp/239.16.20.7:10070
CCTV17,http://0000505.xyz:8888/rtp/239.76.252.238:9000
CCTV17,http://0000505.xyz:8888/rtp/239.76.245.238:1234
CCTV17,http://sdray.gicp.net:8822/rtp/239.16.20.7:10070
CCTV17,http://nas.yzzdxc.cn:16666/rtp/239.37.0.002:5540
CCTV17,http://www.yyf1991.top:9999/rtp/233.18.204.83:5140
CCTV17,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.152:10548
CCTV17,http://server.juzhijian.com:8822/rtp/239.16.20.7:10070
CCTV17,http://zhangkx717.cn:9999/rtp/239.69.1.152:10548
CCTV17,http://a.xiongnas.top:8888/rtp/239.3.1.151:8144
CCTV17,http://nas.iszbd.com:4022/rtp/225.0.4.179:7980
CCTV17,http://www.rongrong.me:14022/rtp/233.18.204.83:5140
CCTV17,http://wmh.wmh.ink:6633/rtp/239.77.0.198:5146
CCTV17,http://x1x.bid:5146/rtp/239.3.1.151:8144
北京卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.47:8024
北京卫视,http://wangfei.uno:9999/rtp/225.1.2.49:10288
北京卫视,http://b.xiongnas.top:8888/rtp/239.3.1.241:8000
北京卫视,http://www.sclvip.top:5566/rtp/239.49.8.11:9414
北京卫视,http://youngx.top:4022/rtp/233.18.204.87:5140
北京卫视,http://home.scanflove.com:7788/rtp/235.254.198.66:1540
北京卫视,http://www.maomizi.cn:9530/rtp/239.77.0.91:5146
北京卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.87:5140
北京卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.91:5146
北京卫视,http://www.negative.top:50000/rtp/233.50.201.107:5140
北京卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.141:8920
北京卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.91:5146
北京卫视,http://www.wjyu.top:4022/rtp/233.18.204.87:5140
北京卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.91:5146
北京卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.91:5146
北京卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.91:5146
北京卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.49:10288
北京卫视,http://marcvision.xyz:8000/rtp/238.1.78.162:7168
北京卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.91:5146
北京卫视,http://www.syy3.top:3861/rtp/239.77.0.91:5146
北京卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.91:5146
北京卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.162:7168
北京卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.76:10760
北京卫视,http://0000505.xyz:8888/rtp/239.76.246.184:1234
北京卫视,http://0000505.xyz:8888/rtp/239.76.253.184:9000
北京卫视,http://sdray.gicp.net:8822/rtp/239.16.20.76:10760
北京卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.050:5540
北京卫视,http://www.yyf1991.top:9999/rtp/233.18.204.87:5140
北京卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.141:8920
北京卫视,http://server.juzhijian.com:8822/rtp/239.16.20.76:10760
北京卫视,http://zhangkx717.cn:9999/rtp/239.254.96.141:8920
北京卫视,http://a.xiongnas.top:8888/rtp/239.3.1.241:8000
北京卫视,http://nas.iszbd.com:4022/rtp/225.0.4.78:7980
北京卫视,http://www.rongrong.me:14022/rtp/233.18.204.87:5140
北京卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.91:5146
浙江卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.53:8036
浙江卫视,http://wangfei.uno:9999/rtp/225.1.2.85:10504
浙江卫视,http://b.xiongnas.top:8888/rtp/239.3.1.137:8036
浙江卫视,http://www.sclvip.top:5566/rtp/239.49.8.20:9618
浙江卫视,http://youngx.top:4022/rtp/233.18.204.84:5140
浙江卫视,http://home.scanflove.com:7788/rtp/235.254.198.63:1528
浙江卫视,http://www.maomizi.cn:9530/rtp/239.77.0.89:5146
浙江卫视,http://z.d4p.cn:8000/rtp/239.49.8.20:9618
浙江卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.84:5140
浙江卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.89:5146
浙江卫视,http://www.negative.top:50000/rtp/233.50.201.100:5140
浙江卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.143:8932
浙江卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.89:5146
浙江卫视,http://www.wjyu.top:4022/rtp/233.18.204.84:5140
浙江卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.89:5146
浙江卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.89:5146
浙江卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.89:5146
浙江卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.85:10504
浙江卫视,http://marcvision.xyz:8000/rtp/238.1.78.164:7184
浙江卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.89:5146
浙江卫视,http://www.syy3.top:3861/rtp/239.77.0.89:5146
浙江卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.89:5146
浙江卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.164:7184
浙江卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.71:10710
浙江卫视,http://0000505.xyz:8888/rtp/239.76.246.182:1234
浙江卫视,http://0000505.xyz:8888/rtp/239.76.253.182:9000
浙江卫视,http://sdray.gicp.net:8822/rtp/239.16.20.71:10710
浙江卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.037:5540
浙江卫视,http://www.yyf1991.top:9999/rtp/233.18.204.84:5140
浙江卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.143:8932
浙江卫视,http://server.juzhijian.com:8822/rtp/239.16.20.71:10710
浙江卫视,http://zhangkx717.cn:9999/rtp/239.254.96.143:8932
浙江卫视,http://a.xiongnas.top:8888/rtp/239.3.1.137:8036
浙江卫视,http://nas.iszbd.com:4022/rtp/225.0.4.81:7980
浙江卫视,http://www.rongrong.me:14022/rtp/233.18.204.84:5140
浙江卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.89:5146
东方卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.52:8032
东方卫视,http://wangfei.uno:9999/rtp/225.1.2.86:10510
东方卫视,http://b.xiongnas.top:8888/rtp/239.3.1.136:8032
东方卫视,http://youngx.top:4022/rtp/233.18.204.51:5140
东方卫视,http://home.scanflove.com:7788/rtp/235.254.198.73:1568
东方卫视,http://www.maomizi.cn:9530/rtp/239.77.1.218:5146
东方卫视,http://z.d4p.cn:8000/rtp/239.49.8.17:9606
东方卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.51:5140
东方卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.1.218:5146
东方卫视,http://www.negative.top:50000/rtp/233.50.201.125:5140
东方卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.142:8926
东方卫视,http://pr.19760929.xyz:9688/rtp/239.77.1.218:5146
东方卫视,http://www.wjyu.top:4022/rtp/233.18.204.51:5140
东方卫视,http://vp.maomizi.cc:9530/rtp/239.77.1.218:5146
东方卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.1.218:5146
东方卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.218:5146
东方卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.86:10510
东方卫视,http://marcvision.xyz:8000/rtp/238.1.78.163:7176
东方卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.218:5146
东方卫视,http://www.syy3.top:3861/rtp/239.77.1.218:5146
东方卫视,http://alist.guangyuan.site:8188/rtp/239.77.1.218:5146
东方卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.163:7176
东方卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.73:10730
东方卫视,http://0000505.xyz:8888/rtp/239.76.246.186:1234
东方卫视,http://0000505.xyz:8888/rtp/239.76.253.186:9000
东方卫视,http://sdray.gicp.net:8822/rtp/239.16.20.73:10730
东方卫视,http://www.yyf1991.top:9999/rtp/233.18.204.51:5140
东方卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.142:8926
东方卫视,http://server.juzhijian.com:8822/rtp/239.16.20.73:10730
东方卫视,http://zhangkx717.cn:9999/rtp/239.254.96.142:8926
东方卫视,http://a.xiongnas.top:8888/rtp/239.3.1.136:8032
东方卫视,http://nas.iszbd.com:4022/rtp/225.0.4.80:7980
东方卫视,http://www.rongrong.me:14022/rtp/233.18.204.51:5140
东方卫视,http://wmh.wmh.ink:6633/rtp/239.77.1.218:5146
湖南卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.48:8012
湖南卫视,http://wangfei.uno:9999/rtp/225.1.2.50:10294
湖南卫视,http://b.xiongnas.top:8888/rtp/239.3.1.132:8012
湖南卫视,http://www.sclvip.top:5566/rtp/239.49.8.12:9418
湖南卫视,http://youngx.top:4022/rtp/233.18.204.86:5140
湖南卫视,http://home.scanflove.com:7788/rtp/235.254.198.62:1524
湖南卫视,http://www.maomizi.cn:9530/rtp/239.77.1.5:5146
湖南卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.86:5140
湖南卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.1.5:5146
湖南卫视,http://www.negative.top:50000/rtp/233.50.201.103:5140
湖南卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.139:8908
湖南卫视,http://pr.19760929.xyz:9688/rtp/239.77.1.5:5146
湖南卫视,http://www.wjyu.top:4022/rtp/233.18.204.86:5140
湖南卫视,http://vp.maomizi.cc:9530/rtp/239.77.1.5:5146
湖南卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.1.5:5146
湖南卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.5:5146
湖南卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.50:10294
湖南卫视,http://marcvision.xyz:8000/rtp/238.1.78.160:7152
湖南卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.5:5146
湖南卫视,http://www.syy3.top:3861/rtp/239.77.1.5:5146
湖南卫视,http://alist.guangyuan.site:8188/rtp/239.77.1.5:5146
湖南卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.160:7152
湖南卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.72:10720
湖南卫视,http://0000505.xyz:8888/rtp/239.76.245.115:1234
湖南卫视,http://0000505.xyz:8888/rtp/239.76.246.101:1234
湖南卫视,http://0000505.xyz:8888/rtp/239.76.253.101:9000
湖南卫视,http://sdray.gicp.net:8822/rtp/239.16.20.72:10720
湖南卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.038:5540
湖南卫视,http://www.yyf1991.top:9999/rtp/233.18.204.86:5140
湖南卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.139:8908
湖南卫视,http://server.juzhijian.com:8822/rtp/239.16.20.72:10720
湖南卫视,http://zhangkx717.cn:9999/rtp/239.254.96.139:8908
湖南卫视,http://a.xiongnas.top:8888/rtp/239.3.1.132:8012
江苏卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.51:8028
江苏卫视,http://wangfei.uno:9999/rtp/225.1.2.84:10498
江苏卫视,http://b.xiongnas.top:8888/rtp/239.3.1.135:8028
江苏卫视,http://www.sclvip.top:5566/rtp/239.49.8.16:9602
江苏卫视,http://youngx.top:4022/rtp/233.18.204.85:5140
江苏卫视,http://home.scanflove.com:7788/rtp/235.254.198.64:1532
江苏卫视,http://www.maomizi.cn:9530/rtp/239.77.1.18:5146
江苏卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.85:5140
江苏卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.1.18:5146
江苏卫视,http://www.negative.top:50000/rtp/233.50.201.106:5140
江苏卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.144:8938
江苏卫视,http://pr.19760929.xyz:9688/rtp/239.77.1.18:5146
江苏卫视,http://www.wjyu.top:4022/rtp/233.18.204.85:5140
江苏卫视,http://vp.maomizi.cc:9530/rtp/239.77.1.18:5146
江苏卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.1.18:5146
江苏卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.18:5146
江苏卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.84:10498
江苏卫视,http://marcvision.xyz:8000/rtp/238.1.78.165:7192
江苏卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.18:5146
江苏卫视,http://www.syy3.top:3861/rtp/239.77.1.18:5146
江苏卫视,http://alist.guangyuan.site:8188/rtp/239.77.1.18:5146
江苏卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.165:7192
江苏卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.74:10740
江苏卫视,http://0000505.xyz:8888/rtp/239.76.253.181:9000
江苏卫视,http://0000505.xyz:8888/rtp/239.76.246.181:1234
江苏卫视,http://sdray.gicp.net:8822/rtp/239.16.20.74:10740
江苏卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.055:5540
江苏卫视,http://www.yyf1991.top:9999/rtp/233.18.204.85:5140
江苏卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.144:8938
江苏卫视,http://server.juzhijian.com:8822/rtp/239.16.20.74:10740
江苏卫视,http://zhangkx717.cn:9999/rtp/239.254.96.144:8938
江苏卫视,http://a.xiongnas.top:8888/rtp/239.3.1.135:8028
江苏卫视,http://nas.iszbd.com:4022/rtp/225.0.4.79:7980
江苏卫视,http://www.rongrong.me:14022/rtp/233.18.204.85:5140
江苏卫视,http://wmh.wmh.ink:6633/rtp/239.77.1.18:5146
深圳卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.50:8020
深圳卫视,http://wangfei.uno:9999/rtp/225.1.2.91:10540
深圳卫视,http://b.xiongnas.top:8888/rtp/239.3.1.134:8020
深圳卫视,http://www.sclvip.top:5566/rtp/239.49.8.15:9430
深圳卫视,http://youngx.top:4022/rtp/233.18.204.89:5140
深圳卫视,http://home.scanflove.com:7788/rtp/235.254.198.71:1560
深圳卫视,http://www.maomizi.cn:9530/rtp/239.77.0.92:5146
深圳卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.89:5140
深圳卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.92:5146
深圳卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.137:8896
深圳卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.92:5146
深圳卫视,http://www.wjyu.top:4022/rtp/233.18.204.89:5140
深圳卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.92:5146
深圳卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.92:5146
深圳卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.92:5146
深圳卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.91:10540
深圳卫视,http://marcvision.xyz:8000/rtp/238.1.78.156:7120
深圳卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.92:5146
深圳卫视,http://www.syy3.top:3861/rtp/239.77.0.92:5146
深圳卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.92:5146
深圳卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.156:7120
深圳卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.77:10770
深圳卫视,http://0000505.xyz:8888/rtp/239.76.246.188:1234
深圳卫视,http://sdray.gicp.net:8822/rtp/239.16.20.77:10770
深圳卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.047:5540
深圳卫视,http://www.yyf1991.top:9999/rtp/233.18.204.89:5140
深圳卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.137:8896
深圳卫视,http://server.juzhijian.com:8822/rtp/239.16.20.77:10770
深圳卫视,http://zhangkx717.cn:9999/rtp/239.254.96.137:8896
深圳卫视,http://a.xiongnas.top:8888/rtp/239.3.1.134:8020
深圳卫视,http://nas.iszbd.com:4022/rtp/225.0.4.202:7980
深圳卫视,http://www.rongrong.me:14022/rtp/233.18.204.89:5140
深圳卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.92:5146
广东卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.56:8048
广东卫视,http://wangfei.uno:9999/rtp/225.1.2.151:10924
广东卫视,http://b.xiongnas.top:8888/rtp/239.3.1.142:8048
广东卫视,http://www.sclvip.top:5566/rtp/239.49.8.13:9422
广东卫视,http://youngx.top:4022/rtp/233.18.204.88:5140
广东卫视,http://home.scanflove.com:7788/rtp/235.254.196.204:1088
广东卫视,http://www.maomizi.cn:9530/rtp/239.77.0.84:5146
广东卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.88:5140
广东卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.84:5146
广东卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.140:8914
广东卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.84:5146
广东卫视,http://www.wjyu.top:4022/rtp/233.18.204.88:5140
广东卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.84:5146
广东卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.84:5146
广东卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.84:5146
广东卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.151:10924
广东卫视,http://marcvision.xyz:8000/rtp/238.1.78.161:7160
广东卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.84:5146
广东卫视,http://www.syy3.top:3861/rtp/239.77.0.84:5146
广东卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.84:5146
广东卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.161:7160
广东卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.98:10980
广东卫视,http://0000505.xyz:8888/rtp/239.76.252.189:9000
广东卫视,http://0000505.xyz:8888/rtp/239.76.245.189:1234
广东卫视,http://sdray.gicp.net:8822/rtp/239.16.20.98:10980
广东卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.033:5540
广东卫视,http://www.yyf1991.top:9999/rtp/233.18.204.88:5140
广东卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.140:8914
广东卫视,http://server.juzhijian.com:8822/rtp/239.16.20.98:10980
广东卫视,http://zhangkx717.cn:9999/rtp/239.254.96.140:8914
广东卫视,http://a.xiongnas.top:8888/rtp/239.3.1.142:8048
广东卫视,http://nas.iszbd.com:4022/rtp/225.0.4.84:7980
广东卫视,http://www.rongrong.me:14022/rtp/233.18.204.88:5140
广东卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.84:5146
广西卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.80:8300
广西卫视,http://wangfei.uno:9999/rtp/225.1.2.34:10198
广西卫视,http://b.xiongnas.top:8888/rtp/239.3.1.39:8300
广西卫视,http://www.sclvip.top:5566/rtp/239.49.8.10:8000
广西卫视,http://youngx.top:4022/rtp/233.18.204.107:5140
广西卫视,http://home.scanflove.com:7788/rtp/235.254.198.38:1428
广西卫视,http://www.maomizi.cn:9530/rtp/239.77.0.139:5146
广西卫视,http://z.d4p.cn:8000/rtp/239.49.8.10:8000
广西卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.107:5140
广西卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.139:5146
广西卫视,http://www.negative.top:50000/rtp/233.50.200.136:5140
广西卫视,http://nas.lyfkai.cn:19999/rtp/239.69.1.191:10788
广西卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.139:5146
广西卫视,http://www.wjyu.top:4022/rtp/233.18.204.107:5140
广西卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.139:5146
广西卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.139:5146
广西卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.139:5146
广西卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.34:10198
广西卫视,http://marcvision.xyz:8000/rtp/238.1.78.70:6432
广西卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.139:5146
广西卫视,http://www.syy3.top:3861/rtp/239.77.0.139:5146
广西卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.139:5146
广西卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.70:6432
广西卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.84:10840
广西卫视,http://0000505.xyz:8888/rtp/239.76.254.54:9000
广西卫视,http://sdray.gicp.net:8822/rtp/239.16.20.84:10840
广西卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.051:5540
广西卫视,http://www.yyf1991.top:9999/rtp/233.18.204.107:5140
广西卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.191:10788
广西卫视,http://server.juzhijian.com:8822/rtp/239.16.20.84:10840
广西卫视,http://zhangkx717.cn:9999/rtp/239.69.1.191:10788
广西卫视,http://a.xiongnas.top:8888/rtp/239.3.1.39:8300
广西卫视,http://www.rongrong.me:14022/rtp/233.18.204.107:5140
广西卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.139:5146
广西卫视,http://x1x.bid:5146/rtp/239.3.1.39:8300
广西卫视,http://www.taoli.website:23234/rtp/239.3.1.39:8300
东南卫视,http://emby.xlangnan.cn:10316/rtp/239.254.201.13:6291
东南卫视,http://wangfei.uno:9999/rtp/225.1.2.226:11470
东南卫视,http://b.xiongnas.top:8888/rtp/239.3.1.156:8148
东南卫视,http://www.sclvip.top:5566/rtp/239.49.8.112:8000
东南卫视,http://youngx.top:4022/rtp/233.18.204.94:5140
东南卫视,http://home.scanflove.com:7788/rtp/235.254.198.129:7980
东南卫视,http://www.maomizi.cn:9530/rtp/239.77.0.146:5146
东南卫视,http://z.d4p.cn:8000/rtp/239.49.8.112:8000
东南卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.94:5140
东南卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.146:5146
东南卫视,http://nas.lyfkai.cn:19999/rtp/239.69.1.108:10286
东南卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.146:5146
东南卫视,http://www.wjyu.top:4022/rtp/233.18.204.94:5140
东南卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.146:5146
东南卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.146:5146
东南卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.146:5146
东南卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.226:11470
东南卫视,http://marcvision.xyz:8000/rtp/238.1.78.22:6104
东南卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.146:5146
东南卫视,http://www.syy3.top:3861/rtp/239.77.0.146:5146
东南卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.146:5146
东南卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.22:6104
东南卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.82:10820
东南卫视,http://0000505.xyz:8888/rtp/239.76.245.190:1234
东南卫视,http://0000505.xyz:8888/rtp/239.76.252.190:9000
东南卫视,http://sdray.gicp.net:8822/rtp/239.16.20.82:10820
东南卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.042:5540
东南卫视,http://www.yyf1991.top:9999/rtp/233.18.204.94:5140
东南卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.108:10286
东南卫视,http://server.juzhijian.com:8822/rtp/239.16.20.82:10820
东南卫视,http://zhangkx717.cn:9999/rtp/239.69.1.108:10286
东南卫视,http://a.xiongnas.top:8888/rtp/239.3.1.156:8148
东南卫视,http://nas.iszbd.com:4022/rtp/225.0.4.200:7980
东南卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.146:5146
海南卫视,http://emby.xlangnan.cn:10316/rtp/239.254.201.125:6288
海南卫视,http://wangfei.uno:9999/rtp/225.1.2.107:11620
海南卫视,http://b.xiongnas.top:8888/rtp/239.3.1.45:8304
海南卫视,http://www.sclvip.top:5566/rtp/239.49.8.83:8000
海南卫视,http://home.scanflove.com:7788/rtp/235.254.198.44:1452
海南卫视,http://www.maomizi.cn:9530/rtp/239.253.43.35:5146
海南卫视,http://hongzhijiaoyu.net:8188/rtp/239.253.43.35:5146
海南卫视,http://www.negative.top:50000/rtp/233.50.200.165:5140
海南卫视,http://nas.lyfkai.cn:19999/rtp/239.69.1.151:10542
海南卫视,http://pr.19760929.xyz:9688/rtp/239.253.43.35:5146
海南卫视,http://vp.maomizi.cc:9530/rtp/239.253.43.35:5146
海南卫视,http://ds3622.guangyuan.site:8188/rtp/239.253.43.35:5146
海南卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.253.43.35:5146
海南卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.107:11620
海南卫视,http://marcvision.xyz:8000/rtp/238.1.79.49:4504
海南卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.253.43.35:5146
海南卫视,http://www.syy3.top:3861/rtp/239.253.43.35:5146
海南卫视,http://alist.guangyuan.site:8188/rtp/239.253.43.35:5146
海南卫视,http://www.marcvision.xyz:8000/rtp/238.1.79.49:4504
海南卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.97:10970
海南卫视,http://sdray.gicp.net:8822/rtp/239.16.20.97:10970
海南卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.035:5540
海南卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.151:10542
海南卫视,http://server.juzhijian.com:8822/rtp/239.16.20.97:10970
海南卫视,http://zhangkx717.cn:9999/rtp/239.69.1.151:10542
海南卫视,http://a.xiongnas.top:8888/rtp/239.3.1.45:8304
海南卫视,http://wmh.wmh.ink:6633/rtp/239.253.43.35:5146
海南卫视,http://iptv.xxika.net:8188/rtp/239.253.43.35:5146
河北卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.174:6000
河北卫视,http://wangfei.uno:9999/rtp/225.1.2.106:11614
河北卫视,http://b.xiongnas.top:8888/rtp/239.3.1.148:8072
河北卫视,http://www.sclvip.top:5566/rtp/239.49.8.114:8000
河北卫视,http://youngx.top:4022/rtp/233.18.204.103:5140
河北卫视,http://home.scanflove.com:7788/rtp/235.254.198.184:7980
河北卫视,http://www.maomizi.cn:9530/rtp/239.77.1.214:5146
河北卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.103:5140
河北卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.1.214:5146
河北卫视,http://www.negative.top:50000/rtp/233.50.201.140:5140
河北卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.113:9616
河北卫视,http://pr.19760929.xyz:9688/rtp/239.77.1.214:5146
河北卫视,http://www.wjyu.top:4022/rtp/233.18.204.103:5140
河北卫视,http://vp.maomizi.cc:9530/rtp/239.77.1.214:5146
河北卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.1.214:5146
河北卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.214:5146
河北卫视,http://marcvision.xyz:8000/rtp/238.1.78.245:7832
河北卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.214:5146
河北卫视,http://www.syy3.top:3861/rtp/239.77.1.214:5146
河北卫视,http://alist.guangyuan.site:8188/rtp/239.77.1.214:5146
河北卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.245:7832
河北卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.88:10880
河北卫视,http://0000505.xyz:8888/rtp/239.76.245.199:1234
河北卫视,http://0000505.xyz:8888/rtp/239.76.252.199:9000
河北卫视,http://sdray.gicp.net:8822/rtp/239.16.20.88:10880
河北卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.052:5540
河北卫视,http://www.yyf1991.top:9999/rtp/233.18.204.103:5140
河北卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.113:9616
河北卫视,http://server.juzhijian.com:8822/rtp/239.16.20.88:10880
河北卫视,http://zhangkx717.cn:9999/rtp/239.254.96.113:9616
河北卫视,http://a.xiongnas.top:8888/rtp/239.3.1.148:8072
河北卫视,http://nas.iszbd.com:4022/rtp/225.0.4.174:7980
河北卫视,http://www.rongrong.me:14022/rtp/233.18.204.103:5140
河北卫视,http://wmh.wmh.ink:6633/rtp/239.77.1.214:5146
河南卫视,http://emby.xlangnan.cn:10316/rtp/239.254.201.16:7174
河南卫视,http://wangfei.uno:9999/rtp/225.1.2.99:10588
河南卫视,http://b.xiongnas.top:8888/rtp/239.3.1.50:8184
河南卫视,http://www.sclvip.top:5566/rtp/239.49.8.29:8000
河南卫视,http://youngx.top:4022/rtp/233.18.204.105:5140
河南卫视,http://home.scanflove.com:7788/rtp/235.254.198.26:1380
河南卫视,http://www.maomizi.cn:9530/rtp/239.77.0.17:5146
河南卫视,http://z.d4p.cn:8000/rtp/239.49.8.29:8000
河南卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.105:5140
河南卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.17:5146
河南卫视,http://www.negative.top:50000/rtp/233.50.201.144:5140
河南卫视,http://nas.lyfkai.cn:19999/rtp/239.69.1.168:10644
河南卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.17:5146
河南卫视,http://www.wjyu.top:4022/rtp/233.18.204.105:5140
河南卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.17:5146
河南卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.17:5146
河南卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.17:5146
河南卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.99:10588
河南卫视,http://marcvision.xyz:8000/rtp/238.1.79.65:4632
河南卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.17:5146
河南卫视,http://www.syy3.top:3861/rtp/239.77.0.17:5146
河南卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.17:5146
河南卫视,http://www.marcvision.xyz:8000/rtp/238.1.79.65:4632
河南卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.21:10210
河南卫视,http://0000505.xyz:8888/rtp/239.76.253.202:9000
河南卫视,http://0000505.xyz:8888/rtp/239.76.246.202:1234
河南卫视,http://sdray.gicp.net:8822/rtp/239.16.20.21:10210
河南卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.056:5540
河南卫视,http://www.yyf1991.top:9999/rtp/233.18.204.105:5140
河南卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.168:10644
河南卫视,http://server.juzhijian.com:8822/rtp/239.16.20.21:10210
湖北卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.164:6000
湖北卫视,http://wangfei.uno:9999/rtp/225.1.2.90:10534
湖北卫视,http://b.xiongnas.top:8888/rtp/239.3.1.138:8044
湖北卫视,http://www.sclvip.top:5566/rtp/239.49.8.8:9632
湖北卫视,http://youngx.top:4022/rtp/233.18.204.92:5140
湖北卫视,http://home.scanflove.com:7788/rtp/235.254.198.72:1564
湖北卫视,http://www.maomizi.cn:9530/rtp/239.77.0.95:5146
湖北卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.92:5140
湖北卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.95:5146
湖北卫视,http://www.negative.top:50000/rtp/233.50.201.114:5140
湖北卫视,http://nas.lyfkai.cn:19999/rtp/239.254.96.115:8664
湖北卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.95:5146
湖北卫视,http://www.wjyu.top:4022/rtp/233.18.204.92:5140
湖北卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.95:5146
湖北卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.95:5146
湖北卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.95:5146
湖北卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.90:10534
湖北卫视,http://marcvision.xyz:8000/rtp/238.1.78.168:7216
湖北卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.95:5146
湖北卫视,http://www.syy3.top:3861/rtp/239.77.0.95:5146
湖北卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.95:5146
湖北卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.168:7216
湖北卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.87:10870
湖北卫视,http://0000505.xyz:8888/rtp/239.76.246.193:1234
湖北卫视,http://0000505.xyz:8888/rtp/239.76.253.193:9000
湖北卫视,http://sdray.gicp.net:8822/rtp/239.16.20.87:10870
湖北卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.040:5540
湖北卫视,http://www.yyf1991.top:9999/rtp/233.18.204.92:5140
湖北卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.254.96.115:8664
湖北卫视,http://server.juzhijian.com:8822/rtp/239.16.20.87:10870
湖北卫视,http://zhangkx717.cn:9999/rtp/239.254.96.115:8664
湖北卫视,http://a.xiongnas.top:8888/rtp/239.3.1.138:8044
湖北卫视,http://nas.iszbd.com:4022/rtp/225.0.4.217:7980
湖北卫视,http://www.rongrong.me:14022/rtp/233.18.204.92:5140
湖北卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.95:5146
江西卫视,http://emby.xlangnan.cn:10316/rtp/239.254.201.12:6290
江西卫视,http://wangfei.uno:9999/rtp/225.1.2.77:11602
江西卫视,http://b.xiongnas.top:8888/rtp/239.3.1.123:8164
江西卫视,http://www.sclvip.top:5566/rtp/239.49.8.111:8000
江西卫视,http://youngx.top:4022/rtp/233.18.204.95:5140
江西卫视,http://home.scanflove.com:7788/rtp/235.254.198.29:1392
江西卫视,http://www.maomizi.cn:9530/rtp/239.77.1.219:5146
江西卫视,http://liuwenxiaokevin.top:14044/rtp/233.18.204.95:5140
江西卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.1.219:5146
江西卫视,http://www.negative.top:50000/rtp/233.50.201.145:5140
江西卫视,http://nas.lyfkai.cn:19999/rtp/239.69.1.126:10394
江西卫视,http://pr.19760929.xyz:9688/rtp/239.77.1.219:5146
江西卫视,http://www.wjyu.top:4022/rtp/233.18.204.95:5140
江西卫视,http://vp.maomizi.cc:9530/rtp/239.77.1.219:5146
江西卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.1.219:5146
江西卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.1.219:5146
江西卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.77:11602
江西卫视,http://marcvision.xyz:8000/rtp/238.1.78.26:6136
江西卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.1.219:5146
江西卫视,http://www.syy3.top:3861/rtp/239.77.1.219:5146
江西卫视,http://alist.guangyuan.site:8188/rtp/239.77.1.219:5146
江西卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.26:6136
江西卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.89:10890
江西卫视,http://0000505.xyz:8888/rtp/239.76.245.225:1234
江西卫视,http://sdray.gicp.net:8822/rtp/239.16.20.89:10890
江西卫视,http://www.yyf1991.top:9999/rtp/233.18.204.95:5140
江西卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.126:10394
江西卫视,http://server.juzhijian.com:8822/rtp/239.16.20.89:10890
江西卫视,http://zhangkx717.cn:9999/rtp/239.69.1.126:10394
江西卫视,http://a.xiongnas.top:8888/rtp/239.3.1.123:8164
江西卫视,http://nas.iszbd.com:4022/rtp/225.0.4.203:7980
江西卫视,http://www.rongrong.me:14022/rtp/233.18.204.95:5140
江西卫视,http://wmh.wmh.ink:6633/rtp/239.77.1.219:5146
四川卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.202:6325
四川卫视,http://wangfei.uno:9999/rtp/225.1.2.108:11626
四川卫视,http://b.xiongnas.top:8888/rtp/239.3.1.29:8288
四川卫视,http://www.sclvip.top:5566/rtp/239.49.8.110:8000
四川卫视,http://home.scanflove.com:7788/rtp/235.254.198.175:7980
四川卫视,http://www.maomizi.cn:9530/rtp/239.77.0.159:5146
四川卫视,http://z.d4p.cn:8000/rtp/239.49.8.110:8000
四川卫视,http://hongzhijiaoyu.net:8188/rtp/239.77.0.159:5146
四川卫视,http://www.negative.top:50000/rtp/233.50.201.139:5140
四川卫视,http://nas.lyfkai.cn:19999/rtp/239.69.1.169:10650
四川卫视,http://pr.19760929.xyz:9688/rtp/239.77.0.159:5146
四川卫视,http://vp.maomizi.cc:9530/rtp/239.77.0.159:5146
四川卫视,http://ds3622.guangyuan.site:8188/rtp/239.77.0.159:5146
四川卫视,http://lbyjlt.vv5678.cn:8880/rtp/239.77.0.159:5146
四川卫视,http://hnzznas.xgpuplay.eu.org:8818/rtp/225.1.2.108:11626
四川卫视,http://marcvision.xyz:8000/rtp/238.1.78.30:6168
四川卫视,http://www.hongzhijiaoyu.net:8188/rtp/239.77.0.159:5146
四川卫视,http://www.syy3.top:3861/rtp/239.77.0.159:5146
四川卫视,http://alist.guangyuan.site:8188/rtp/239.77.0.159:5146
四川卫视,http://www.marcvision.xyz:8000/rtp/238.1.78.30:6168
四川卫视,http://esxi.juzhijian.com:8822/rtp/239.16.20.86:10860
四川卫视,http://0000505.xyz:8888/rtp/239.76.253.91:9000
四川卫视,http://0000505.xyz:8888/rtp/239.76.246.91:1234
四川卫视,http://sdray.gicp.net:8822/rtp/239.16.20.86:10860
四川卫视,http://nas.yzzdxc.cn:16666/rtp/239.37.0.041:5540
四川卫视,http://xu3791vg3503.vicp.fun:8808/rtp/239.69.1.169:10650
四川卫视,http://server.juzhijian.com:8822/rtp/239.16.20.86:10860
四川卫视,http://zhangkx717.cn:9999/rtp/239.69.1.169:10650
四川卫视,http://a.xiongnas.top:8888/rtp/239.3.1.29:8288
四川卫视,http://nas.iszbd.com:4022/rtp/225.0.4.204:7980
四川卫视,http://wmh.wmh.ink:6633/rtp/239.77.0.159:5146
四川卫视,http://x1x.bid:5146/rtp/239.3.1.29:8288
四川卫视,http://iptv.xxika.net:8188/rtp/239.77.0.159:5146
四川卫视,http://www.taoli.website:23234/rtp/239.3.1.29:8288
四川卫视,http://yanshifen.top:8889/rtp/239.77.0.159:5146
重庆卫视,http://emby.xlangnan.cn:10316/rtp/239.254.200.203:6323
重庆卫视,http://wangfei.uno:9999/rtp/225.1.2.75:11590
重庆卫视,http://hiliu.myds.me:18088/rtp/239.69.1.149:10530
重庆卫视,http://b.xiongnas.top:8888/rtp/239.3.1.122:8160
重庆卫视,http://www.sclvip.top:5566/rtp/239.49.8.57:9830
重庆卫视,http://youngx.top:4022/rtp/233.18.204.100:5140
央卫频道3,#genre#
CCTV1,http://39.165.39.49:19901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV2,http://39.165.39.49:19901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV3,http://39.165.39.49:19901/tsfile/live/1003_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV4,http://39.165.39.49:19901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV5,http://39.165.39.49:19901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV6,http://39.165.39.49:19901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV7,http://39.165.39.49:19901/tsfile/live/1007_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV8,http://39.165.39.49:19901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV9,http://39.165.39.49:19901/tsfile/live/1009_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV10,http://39.165.39.49:19901/tsfile/live/1010_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV11,http://39.165.39.49:19901/tsfile/live/1011_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV12,http://39.165.39.49:19901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV13,http://39.165.39.49:19901/tsfile/live/1084_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV14,http://39.165.39.49:19901/tsfile/live/1085_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV15,http://39.165.39.49:19901/tsfile/live/1086_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV17,http://39.165.39.49:19901/tsfile/live/1088_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV5+,http://39.165.39.49:19901/tsfile/live/1089_1.m3u8?key=txiptv&playlive=0&authid=0
中国教育,http://39.165.39.49:19901/tsfile/live/1090_1.m3u8?key=txiptv&playlive=0&authid=0
河南卫视,http://39.165.39.49:19901/tsfile/live/1105_1.m3u8?key=txiptv&playlive=0&authid=0
浙江卫视,http://39.165.39.49:19901/tsfile/live/1127_1.m3u8?key=txiptv&playlive=0&authid=0
东方卫视,http://39.165.39.49:19901/tsfile/live/1128_1.m3u8?key=txiptv&playlive=0&authid=0
江苏卫视,http://39.165.39.49:19901/tsfile/live/1129_1.m3u8?key=txiptv&playlive=0&authid=0
北京卫视,http://39.165.39.49:19901/tsfile/live/1130_1.m3u8?key=txiptv&playlive=0&authid=0
广东卫视,http://39.165.39.49:19901/tsfile/live/1131_1.m3u8?key=txiptv&playlive=0&authid=0
山东卫视,http://39.165.39.49:19901/tsfile/live/1133_1.m3u8?key=txiptv&playlive=0&authid=0
安徽卫视,http://39.165.39.49:19901/tsfile/live/1134_1.m3u8?key=txiptv&playlive=0&authid=0
湖南卫视,http://39.165.39.49:19901/tsfile/live/1140_1.m3u8?key=txiptv&playlive=0&authid=0
深圳卫视,http://39.165.39.49:19901/tsfile/live/1141_1.m3u8?key=txiptv&playlive=0&authid=0
湖北卫视,http://39.165.39.49:19901/tsfile/live/1143_1.m3u8?key=txiptv&playlive=0&authid=0
东南卫视,http://39.165.39.49:19901/tsfile/live/1149_1.m3u8?key=txiptv&playlive=0&authid=0
金鹰卡通,http://39.165.39.49:19901/tsfile/live/1156_1.m3u8?key=txiptv&playlive=0&authid=0
嘉佳卡通,http://39.165.39.49:19901/tsfile/live/1157_1.m3u8?key=txiptv&playlive=0&authid=0
卡酷动画,http://39.165.39.49:19901/tsfile/live/1158_1.m3u8?key=txiptv&playlive=0&authid=0
炫动卡通,http://39.165.39.49:19901/tsfile/live/1159_1.m3u8?key=txiptv&playlive=0&authid=0
优漫卡通,http://39.165.39.49:19901/tsfile/live/1092_1.m3u8?key=txiptv&playlive=0&authid=0
文体旅游,http://39.165.39.49:19901/tsfile/live/1094_1.m3u8?key=txiptv&playlive=0&authid=0
咪咕标清,#genre#
CCTV-01咪咕,http://rihou.cc:555/tv/[mg]CCTV-01
CCTV-02咪咕,http://rihou.cc:555/tv/[mg]CCTV-02
@@ -1314,138 +109,6 @@ CGTN-法咪咕,http://rihou.cc:555/tv/[mg]CGTN-法
咪咕标清2,#genre#
CCTV1综合,http://wfenf.x3322.net:7788/608807420
CCTV2财经,http://wfenf.x3322.net:7788/631780532
CCTV3综艺,http://wfenf.x3322.net:7788/624878271
CCTV4中文国际,http://wfenf.x3322.net:7788/631780421
CCTV5体育,http://wfenf.x3322.net:7788/641886683
CCTV5+体育赛事,http://wfenf.x3322.net:7788/641886773
CCTV6电影,http://wfenf.x3322.net:7788/624878396
CCTV7国防军事,http://wfenf.x3322.net:7788/673168121
CCTV8电视剧,http://wfenf.x3322.net:7788/624878356
CCTV9纪录,http://wfenf.x3322.net:7788/673168140
CCTV10科教,http://wfenf.x3322.net:7788/624878405
CCTV11戏曲,http://wfenf.x3322.net:7788/667987558
CCTV12社会与法,http://wfenf.x3322.net:7788/673168185
CCTV13新闻,http://wfenf.x3322.net:7788/608807423
CCTV14少儿,http://wfenf.x3322.net:7788/624878440
CCTV15音乐,http://wfenf.x3322.net:7788/673168223
CCTV17农业农村,http://wfenf.x3322.net:7788/673168256
CCTV4欧洲,http://wfenf.x3322.net:7788/608807419
CCTV4美洲,http://wfenf.x3322.net:7788/608807416
CGTN外语纪录,http://wfenf.x3322.net:7788/609006487
CGTN阿拉伯语,http://wfenf.x3322.net:7788/609154345
CGTN西班牙语,http://wfenf.x3322.net:7788/609006450
CGTN法语,http://wfenf.x3322.net:7788/609006476
CGTN俄语,http://wfenf.x3322.net:7788/609006446
老故事,http://wfenf.x3322.net:7788/884121956
发现之旅,http://wfenf.x3322.net:7788/624878970
中学生,http://wfenf.x3322.net:7788/708869532
CGTN,http://wfenf.x3322.net:7788/609017205
东方卫视,http://wfenf.x3322.net:7788/651632648
江苏卫视,http://wfenf.x3322.net:7788/623899368
广东卫视,http://wfenf.x3322.net:7788/608831231
北京卫视,http://wfenf.x3322.net:7788/630287636
辽宁卫视,http://wfenf.x3322.net:7788/630291707
河北卫视,http://wfenf.x3322.net:7788/962042070
江西卫视,http://wfenf.x3322.net:7788/783847495
河南卫视,http://wfenf.x3322.net:7788/790187291
陕西卫视,http://wfenf.x3322.net:7788/738910838
大湾区卫视,http://wfenf.x3322.net:7788/608917627
湖北卫视,http://wfenf.x3322.net:7788/947472496
吉林卫视,http://wfenf.x3322.net:7788/947472500
青海卫视,http://wfenf.x3322.net:7788/947472506
东南卫视,http://wfenf.x3322.net:7788/849116810
海南卫视,http://wfenf.x3322.net:7788/947472502
海峡卫视,http://wfenf.x3322.net:7788/849119120
中国农林卫视,http://wfenf.x3322.net:7788/956904896
兵团卫视,http://wfenf.x3322.net:7788/956923145
宁夏卫视,http://wfenf.x3322.net:7788/738910535
重庆卫视,http://wfenf.x3322.net:7788/738910914
三沙卫视,http://wfenf.x3322.net:7788/961023778
上海新闻综合,http://wfenf.x3322.net:7788/651632657
上视东方影视,http://wfenf.x3322.net:7788/617290047
上海第一财经,http://wfenf.x3322.net:7788/608780988
南京新闻综合频道,http://wfenf.x3322.net:7788/838109047
南京教科频道,http://wfenf.x3322.net:7788/838153729
南京十八频道,http://wfenf.x3322.net:7788/838151753
体育休闲频道,http://wfenf.x3322.net:7788/626064707
江苏城市频道,http://wfenf.x3322.net:7788/626064714
江苏国际,http://wfenf.x3322.net:7788/626064674
江苏教育,http://wfenf.x3322.net:7788/628008321
江苏影视频道,http://wfenf.x3322.net:7788/626064697
江苏综艺频道,http://wfenf.x3322.net:7788/626065193
公共新闻频道,http://wfenf.x3322.net:7788/626064693
盐城新闻综合,http://wfenf.x3322.net:7788/639731825
淮安新闻综合,http://wfenf.x3322.net:7788/639731826
泰州新闻综合,http://wfenf.x3322.net:7788/639731818
连云港新闻综合,http://wfenf.x3322.net:7788/639731715
宿迁新闻综合,http://wfenf.x3322.net:7788/639731832
徐州新闻综合,http://wfenf.x3322.net:7788/639731747
优漫卡通频道,http://wfenf.x3322.net:7788/626064703
江阴新闻综合,http://wfenf.x3322.net:7788/955227979
南通新闻综合,http://wfenf.x3322.net:7788/955227985
宜兴新闻综合,http://wfenf.x3322.net:7788/955227996
溧水新闻综合,http://wfenf.x3322.net:7788/639737327
陕西银龄频道,http://wfenf.x3322.net:7788/956909362
陕西都市青春频道,http://wfenf.x3322.net:7788/956909358
陕西秦腔频道,http://wfenf.x3322.net:7788/956909303
陕西新闻资讯频道,http://wfenf.x3322.net:7788/956909289
财富天下,http://wfenf.x3322.net:7788/956923159
镇江新闻综合,http://wfenf.x3322.net:7788/639731783
海南广播电视总台新闻频道,http://wfenf.x3322.net:7788/962067517
海南广播电视总台自贸频道,http://wfenf.x3322.net:7788/962045226
海南广播电视总台社会与法频道,http://wfenf.x3322.net:7788/962045223
海南广播电视总台文旅频道,http://wfenf.x3322.net:7788/962067526
海南广播电视总台少儿频道,http://wfenf.x3322.net:7788/962067523
赛事最经典,http://wfenf.x3322.net:7788/646596895
体坛名栏汇,http://wfenf.x3322.net:7788/629943305
四海钓鱼,http://wfenf.x3322.net:7788/637444975
陕西体育休闲频道,http://wfenf.x3322.net:7788/956909356
24小时城市联赛轮播台,http://wfenf.x3322.net:7788/915512915
武术世界,http://wfenf.x3322.net:7788/958475359
快乐垂钓,http://wfenf.x3322.net:7788/961930263
建党105周年巡礼,http://wfenf.x3322.net:7788/713600957
经典香港电影,http://wfenf.x3322.net:7788/625703337
新片放映厅,http://wfenf.x3322.net:7788/619495952
CHC影迷电影,http://wfenf.x3322.net:7788/952383261
CHC动作电影,http://wfenf.x3322.net:7788/644368714
CHC家庭影院,http://wfenf.x3322.net:7788/644368373
和美乡途轮播台,http://wfenf.x3322.net:7788/713591450
南方影视,http://wfenf.x3322.net:7788/614961829
中国天气,http://wfenf.x3322.net:7788/959986621
CETV1,http://wfenf.x3322.net:7788/923287154
CETV2,http://wfenf.x3322.net:7788/923287211
CETV4,http://wfenf.x3322.net:7788/923287339
山东教育,http://wfenf.x3322.net:7788/609154353
熊猫频道01高清,http://wfenf.x3322.net:7788/609158151
熊猫频道1,http://wfenf.x3322.net:7788/608933610
熊猫频道2,http://wfenf.x3322.net:7788/608933640
熊猫频道3,http://wfenf.x3322.net:7788/608934619
熊猫频道4,http://wfenf.x3322.net:7788/608934721
熊猫频道5,http://wfenf.x3322.net:7788/608935104
熊猫频道6,http://wfenf.x3322.net:7788/608935797
熊猫频道7,http://wfenf.x3322.net:7788/609169286
熊猫频道8,http://wfenf.x3322.net:7788/609169287
熊猫频道9,http://wfenf.x3322.net:7788/609169226
熊猫频道10,http://wfenf.x3322.net:7788/609169285
最强综艺趴,http://wfenf.x3322.net:7788/629942228
嘉佳卡通,http://wfenf.x3322.net:7788/614952364
经典动画大集合,http://wfenf.x3322.net:7788/629942219
新动漫,http://wfenf.x3322.net:7788/961930269
新动力量创一流,http://wfenf.x3322.net:7788/713589837
中华特产,http://wfenf.x3322.net:7788/959986618
环球旅游,http://wfenf.x3322.net:7788/958475356
央卫视频,#genre#
CCTV-1HD,http://38.75.136.137:98/gslb/dsdqpub/cctv1hd.m3u8?auth=testpub
+1729
View File
@@ -0,0 +1,1729 @@
const _0x24a000 = _0x3bf3;
(function (_0x4af1bf, _0x354faf) {
const _0x10067b = _0x3bf3, _0x4787fe = _0x4af1bf();
while (!![]) {
try {
const _0x4356d7 = -parseInt(_0x10067b(0x35d)) / (0x869 * -0x1 + -0x2509 * 0x1 + 0x2d73) * (parseInt(_0x10067b(0x24d)) / (0x112 * 0xe + -0x1d * 0x89 + 0x8b * 0x1)) + -parseInt(_0x10067b(0x3bd)) / (0x3f * -0x5e + 0x1596 + 0x18f) + -parseInt(_0x10067b(0x2f5)) / (0x22aa + -0x255e + -0x57 * -0x8) * (parseInt(_0x10067b(0x1e5)) / (0x1c5d + 0x769 + -0x23c1)) + -parseInt(_0x10067b(0x3c1)) / (0x1 * -0xcff + -0x1e62 + -0x29 * -0x10f) * (parseInt(_0x10067b(0x3ad)) / (0x1b46 * -0x1 + 0xf85 + 0xbc8)) + -parseInt(_0x10067b(0x34a)) / (-0x2576 + -0x1f4d + -0x44cb * -0x1) * (-parseInt(_0x10067b(0x295)) / (-0x2 * 0x7d1 + 0x1 * 0x13d5 + 0x1 * -0x42a)) + parseInt(_0x10067b(0x246)) / (0x43 * 0x59 + -0x2638 + 0x1 * 0xef7) + -parseInt(_0x10067b(0x234)) / (0x2 * 0x11dc + -0x1e02 + 0x1 * -0x5ab) * (-parseInt(_0x10067b(0x21f)) / (0x1 * -0xa75 + 0x119 * 0x15 + -0xc8c));
if (_0x4356d7 === _0x354faf)
break;
else
_0x4787fe['push'](_0x4787fe['shift']());
} catch (_0x531b5c) {
_0x4787fe['push'](_0x4787fe['shift']());
}
}
}(_0x30bd, -0x1 * -0x192eb + -0xa95 * -0x1a7 + -0x7b329));
import {
Crypto,
_
} from 'assets://js/lib/cat.js';
let host = '', header = { 'User-Agent': _0x24a000(0x269) + _0x24a000(0x2e1) }, siteKey = '', siteType = '', siteJx = '';
const urlPattern1 = /api\.php\/.*?\/vod/, urlPattern2 = /api\.php\/.+?\.vod/, parsePattern = /\/.+\\?.+=/, parsePattern1 = /.*(url|v|vid|php\?id)=/, parsePattern2 = /https?:\/\/[^\/]*/, htmlVideoKeyMatch = [
/player=new/,
/<div id="video"/,
/<div id="[^"]*?player"/,
/\/\/视频链接/,
/HlsJsPlayer\(/,
/<iframe[\s\S]*?src="[^"]+?"/,
/<video[\s\S]*?src="[^"]+?"/
], parseUrlMap = new Map();
async function init(_0x251cc1) {
const _0x3f2b5f = _0x24a000, _0x45ef76 = { 'wRtKU': _0x3f2b5f(0x337) };
siteKey = _0x251cc1[_0x3f2b5f(0x1f6)], siteType = _0x251cc1[_0x3f2b5f(0x351)], host = _0x251cc1[_0x3f2b5f(0x338)], _0x251cc1[_0x3f2b5f(0x338)][_0x3f2b5f(0x3b3) + _0x3f2b5f(0x2f2)](_0x45ef76[_0x3f2b5f(0x204)]) && (host = _0x251cc1[_0x3f2b5f(0x338)][_0x3f2b5f(0x337)], siteJx = _0x251cc1[_0x3f2b5f(0x338)]);
}
;
async function request(_0x1922aa, _0x22bcdb, _0x3dfda0 = 0x1f39 * -0x1 + 0xb81e + 0x1b29 * 0x3) {
const _0x341df3 = _0x24a000, _0x56e6da = {
'ePAKK': function (_0x5d5218, _0x1a8370, _0x9b9062) {
return _0x5d5218(_0x1a8370, _0x9b9062);
},
'BIDOf': _0x341df3(0x24f),
'qhbab': _0x341df3(0x3b0) + _0x341df3(0x221) + _0x341df3(0x244) + _0x341df3(0x2d8) + _0x341df3(0x3af) + _0x341df3(0x203) + _0x341df3(0x31a) + _0x341df3(0x37b) + _0x341df3(0x1f9) + _0x341df3(0x264) + _0x341df3(0x2fa) + _0x341df3(0x2d5) + '6'
};
let _0x3869e9 = await _0x56e6da[_0x341df3(0x395)](req, _0x1922aa, {
'method': _0x56e6da[_0x341df3(0x1ec)],
'headers': _0x22bcdb ? _0x22bcdb : { 'User-Agent': _0x56e6da[_0x341df3(0x271)] },
'timeout': _0x3dfda0
});
return _0x3869e9[_0x341df3(0x217)];
}
async function home(_0xa33cbc) {
const _0x2ff6d6 = _0x24a000, _0x2fec26 = {
'IKCWR': _0x2ff6d6(0x288),
'VYHXK': _0x2ff6d6(0x2cf) + 'od',
'mSlqf': function (_0x4c5b77, _0x3a09ed, _0x3fbbd2) {
return _0x4c5b77(_0x3a09ed, _0x3fbbd2);
},
'KRVeJ': function (_0x190297, _0x45264b) {
return _0x190297(_0x45264b);
},
'eRIpS': function (_0xca9da7, _0x4f9386) {
return _0xca9da7(_0x4f9386);
},
'KitoD': function (_0x48bb51, _0x3240c8, _0x3ad21f) {
return _0x48bb51(_0x3240c8, _0x3ad21f);
},
'Udbgi': function (_0x3cd1ee, _0x3ef8c5) {
return _0x3cd1ee(_0x3ef8c5);
},
'fcPwA': _0x2ff6d6(0x2f9),
'XhjKd': _0x2ff6d6(0x394),
'MAPTF': _0x2ff6d6(0x339),
'HHuLq': function (_0x1ed1aa, _0x3ca419, _0x512ce1) {
return _0x1ed1aa(_0x3ca419, _0x512ce1);
},
'jBTDy': function (_0x56e141, _0x4ee936) {
return _0x56e141 < _0x4ee936;
},
'bgAzg': function (_0x5a1b87, _0x5b81d3) {
return _0x5a1b87 != _0x5b81d3;
},
'YfnZq': function (_0x316826, _0x80e0c3) {
return _0x316826 < _0x80e0c3;
},
'MWcjN': function (_0x3f7e11, _0x521db4) {
return _0x3f7e11(_0x521db4);
},
'ofHAn': function (_0x9b4e48, _0x5c839e) {
return _0x9b4e48 === _0x5c839e;
},
'vuXnk': _0x2ff6d6(0x256),
'yKQXX': function (_0x73142b, _0xdf899b) {
return _0x73142b === _0xdf899b;
},
'iZers': _0x2ff6d6(0x27b),
'IpeiC': _0x2ff6d6(0x355),
'nvSRb': function (_0x338866, _0x10950f) {
return _0x338866 < _0x10950f;
},
'zMZmQ': function (_0x5c8e41, _0x3705da) {
return _0x5c8e41(_0x3705da);
},
'IWfGL': function (_0x2e630a, _0x68fcc3) {
return _0x2e630a + _0x68fcc3;
},
'pksWn': _0x2ff6d6(0x202),
'QZvys': _0x2ff6d6(0x22d)
};
try {
if (host[_0x2ff6d6(0x39f)](_0x2fec26[_0x2ff6d6(0x2ef)]) || host[_0x2ff6d6(0x39f)](_0x2fec26[_0x2ff6d6(0x3cc)])) {
const _0x5dddec = host, _0xac6d0f = await _0x2fec26[_0x2ff6d6(0x36a)](request, _0x5dddec, _0x2fec26[_0x2ff6d6(0x319)](getHeaders, _0x5dddec)), _0x3885b5 = JSON[_0x2ff6d6(0x213)](_0xac6d0f), _0x5c6b02 = { 'class': [] };
if (_0x3885b5[_0x2ff6d6(0x2f9)] && Array[_0x2ff6d6(0x315)](_0x3885b5[_0x2ff6d6(0x2f9)]))
for (const _0x31e7ca of _0x3885b5[_0x2ff6d6(0x2f9)]) {
const _0x2d6dd5 = _0x31e7ca[_0x2ff6d6(0x37d)];
if (_0x2fec26[_0x2ff6d6(0x319)](isBan, _0x2d6dd5))
continue;
_0x5c6b02[_0x2ff6d6(0x2f9)][_0x2ff6d6(0x332)]({
'type_id': _0x31e7ca[_0x2ff6d6(0x3c5)],
'type_name': _0x2d6dd5
});
}
return JSON[_0x2ff6d6(0x3a2)](_0x5c6b02);
} else {
let _0x532bb3 = _0x2fec26[_0x2ff6d6(0x368)](getCateUrl, host), _0xf10025 = null;
if (_0x532bb3) {
const _0x4a9315 = await _0x2fec26[_0x2ff6d6(0x201)](request, _0x532bb3, _0x2fec26[_0x2ff6d6(0x223)](getHeaders, _0x532bb3)), _0x4c79fb = JSON[_0x2ff6d6(0x213)](_0x4a9315);
if (_0x4c79fb[_0x2ff6d6(0x3b3) + _0x2ff6d6(0x2f2)](_0x2fec26[_0x2ff6d6(0x28b)]) && Array[_0x2ff6d6(0x315)](_0x4c79fb[_0x2ff6d6(0x2f9)]))
_0xf10025 = _0x4c79fb[_0x2ff6d6(0x2f9)];
else {
if (_0x4c79fb[_0x2ff6d6(0x3b3) + _0x2ff6d6(0x2f2)](_0x2fec26[_0x2ff6d6(0x23e)]) && Array[_0x2ff6d6(0x315)](_0x4c79fb[_0x2ff6d6(0x394)]))
_0xf10025 = _0x4c79fb[_0x2ff6d6(0x394)];
else {
if (_0x4c79fb[_0x2ff6d6(0x3b3) + _0x2ff6d6(0x2f2)](_0x2fec26[_0x2ff6d6(0x33b)]) && _0x4c79fb[_0x2ff6d6(0x339)][_0x2ff6d6(0x3b3) + _0x2ff6d6(0x2f2)](_0x2fec26[_0x2ff6d6(0x23e)]) && Array[_0x2ff6d6(0x315)](_0x4c79fb[_0x2ff6d6(0x339)][_0x2ff6d6(0x394)]))
_0xf10025 = _0x4c79fb[_0x2ff6d6(0x339)][_0x2ff6d6(0x394)];
else
_0x4c79fb[_0x2ff6d6(0x3b3) + _0x2ff6d6(0x2f2)](_0x2fec26[_0x2ff6d6(0x33b)]) && Array[_0x2ff6d6(0x315)](_0x4c79fb[_0x2ff6d6(0x339)]) && (_0xf10025 = _0x4c79fb[_0x2ff6d6(0x339)]);
}
}
} else {
const _0x592327 = _0x2fec26[_0x2ff6d6(0x2a9)](getFilterTypes, _0x532bb3, null), _0x1fc904 = _0x592327[_0x2ff6d6(0x265)]('\x0a')[-0x1e38 + -0x4ac + 0x22e4][_0x2ff6d6(0x265)]('+');
_0xf10025 = [];
for (let _0x2a35a4 = -0x23f3 + -0x1b84 + 0x3f78; _0x2fec26[_0x2ff6d6(0x1e4)](_0x2a35a4, _0x1fc904[_0x2ff6d6(0x2d3)]); _0x2a35a4++) {
const _0x3f713c = _0x1fc904[_0x2a35a4][_0x2ff6d6(0x314)]()[_0x2ff6d6(0x265)]('=');
if (_0x2fec26[_0x2ff6d6(0x1e4)](_0x3f713c[_0x2ff6d6(0x2d3)], -0x3d1 + 0x18cc + -0x5b * 0x3b))
continue;
const _0x101b02 = {
'type_name': _0x3f713c[-0xa12 + 0x5d * -0x5b + 0x2b21][_0x2ff6d6(0x314)](),
'type_id': _0x3f713c[-0x1140 * 0x2 + 0x1 * 0x20fd + 0x2 * 0xc2][_0x2ff6d6(0x314)]()
};
_0xf10025[_0x2ff6d6(0x332)](_0x101b02);
}
}
const _0x4d7ad6 = { 'class': [] };
if (_0x2fec26[_0x2ff6d6(0x1f1)](_0xf10025, null))
for (let _0x29d748 = -0x1d * 0xd3 + -0x2e7 * -0xb + -0x806; _0x2fec26[_0x2ff6d6(0x20c)](_0x29d748, _0xf10025[_0x2ff6d6(0x2d3)]); _0x29d748++) {
const _0xe71e4e = _0xf10025[_0x29d748], _0x14164f = _0xe71e4e[_0x2ff6d6(0x37d)];
if (_0x2fec26[_0x2ff6d6(0x347)](isBan, _0x14164f))
continue;
const _0x52590c = _0xe71e4e[_0x2ff6d6(0x3c5)], _0x8127ab = {
'type_id': _0x52590c,
'type_name': _0x14164f
}, _0x5a5e97 = _0xe71e4e[_0x2ff6d6(0x2e9) + 'd'];
if (_0xa33cbc) {
const _0x2dd17b = _0x2fec26[_0x2ff6d6(0x201)](getFilterTypes, _0x532bb3, _0x5a5e97), _0x25dbda = _0x2dd17b[_0x2ff6d6(0x265)]('\x0a'), _0x409116 = [];
for (let _0x219e87 = _0x532bb3 ? -0x55b + -0x137f + 0x9 * 0x2c3 : 0x9f4 + -0x1 * 0xea2 + -0x257 * -0x2; _0x2fec26[_0x2ff6d6(0x20c)](_0x219e87, _0x25dbda[_0x2ff6d6(0x2d3)]); _0x219e87++) {
const _0x146f59 = _0x25dbda[_0x219e87][_0x2ff6d6(0x314)]();
if (!_0x146f59)
continue;
const _0x3bb665 = _0x146f59[_0x2ff6d6(0x265)]('+');
let _0x128e29 = _0x3bb665[0x204 * 0x10 + 0x19b2 + -0x39f2][_0x2ff6d6(0x314)](), _0x50cbc4 = _0x128e29;
if (_0x128e29[_0x2ff6d6(0x39f)]('筛选')) {
_0x128e29 = _0x128e29[_0x2ff6d6(0x2e5)](/筛选/g, '');
if (_0x2fec26[_0x2ff6d6(0x307)](_0x128e29, _0x2fec26[_0x2ff6d6(0x28b)]))
_0x50cbc4 = '类型';
else {
if (_0x2fec26[_0x2ff6d6(0x307)](_0x128e29, _0x2fec26[_0x2ff6d6(0x3bb)]))
_0x50cbc4 = '地区';
else {
if (_0x2fec26[_0x2ff6d6(0x38f)](_0x128e29, _0x2fec26[_0x2ff6d6(0x3ae)]))
_0x50cbc4 = '语言';
else {
if (_0x2fec26[_0x2ff6d6(0x38f)](_0x128e29, _0x2fec26[_0x2ff6d6(0x31c)]))
_0x50cbc4 = '年份';
}
}
}
}
const _0xb82e8e = {
'key': _0x128e29,
'name': _0x50cbc4,
'value': []
};
for (let _0x5edb78 = -0xfc6 + -0x264c + 0x3613; _0x2fec26[_0x2ff6d6(0x2ba)](_0x5edb78, _0x3bb665[_0x2ff6d6(0x2d3)]); _0x5edb78++) {
const _0x4996ce = _0x3bb665[_0x5edb78][_0x2ff6d6(0x314)](), _0xea216e = _0x4996ce[_0x2ff6d6(0x259)]('=');
if (_0x2fec26[_0x2ff6d6(0x38f)](_0xea216e, -(0x5 * 0x2c1 + -0x817 + -0x5ad * 0x1))) {
if (_0x2fec26[_0x2ff6d6(0x2f8)](isBan, _0x4996ce))
continue;
_0xb82e8e[_0x2ff6d6(0x215)][_0x2ff6d6(0x332)]({
'n': _0x4996ce,
'v': _0x4996ce
});
} else {
const _0x53eb94 = _0x4996ce[_0x2ff6d6(0x353)](0x5a * 0x40 + 0xcf4 + -0x2374, _0xea216e);
if (_0x2fec26[_0x2ff6d6(0x319)](isBan, _0x53eb94))
continue;
_0xb82e8e[_0x2ff6d6(0x215)][_0x2ff6d6(0x332)]({
'n': _0x53eb94[_0x2ff6d6(0x314)](),
'v': _0x4996ce[_0x2ff6d6(0x353)](_0x2fec26[_0x2ff6d6(0x2b3)](_0xea216e, 0xb75 + -0xb * 0x209 + -0x3 * -0x3a5))[_0x2ff6d6(0x314)]()
});
}
}
_0x409116[_0x2ff6d6(0x332)](_0xb82e8e);
}
!_0x4d7ad6[_0x2ff6d6(0x3b3) + _0x2ff6d6(0x2f2)](_0x2fec26[_0x2ff6d6(0x1f7)]) && (_0x4d7ad6[_0x2ff6d6(0x202)] = {}), _0x4d7ad6[_0x2ff6d6(0x202)][_0x52590c] = _0x409116;
}
_0x4d7ad6[_0x2ff6d6(0x2f9)][_0x2ff6d6(0x332)](_0x8127ab);
}
return JSON[_0x2ff6d6(0x3a2)](_0x4d7ad6);
}
} catch (_0x4342ba) {
SpiderDebug[_0x2ff6d6(0x24a)](_0x2fec26[_0x2ff6d6(0x2b3)](_0x2fec26[_0x2ff6d6(0x2f1)], _0x4342ba));
}
return JSON[_0x2ff6d6(0x3a2)]({ 'class': [] });
}
async function homeVod() {
const _0x4ef343 = _0x24a000, _0x3a4f7 = {
'nFrDW': _0x4ef343(0x288),
'umjti': _0x4ef343(0x2cf) + 'od',
'WpxrU': function (_0x4b2ec1, _0xc144ce, _0x5dd372) {
return _0x4b2ec1(_0xc144ce, _0x5dd372);
},
'OIKvw': function (_0xf764d5, _0x2b3261) {
return _0xf764d5(_0x2b3261);
},
'Zelfl': function (_0x24e988, _0x4995a4) {
return _0x24e988(_0x4995a4);
},
'EeHWO': function (_0x26a41a, _0x366d23) {
return _0x26a41a + _0x366d23;
},
'SKgeb': function (_0x5d0c6e, _0x19c7d9) {
return _0x5d0c6e(_0x19c7d9);
},
'FEuLQ': _0x4ef343(0x382) + _0x4ef343(0x2af) + _0x4ef343(0x361) + '=',
'Uqurg': function (_0x408853, _0x35aef7, _0x3b369b) {
return _0x408853(_0x35aef7, _0x3b369b);
},
'mWrNJ': function (_0x1f7197, _0x9a8c24) {
return _0x1f7197(_0x9a8c24);
},
'nQbvl': function (_0x1084e1, _0x1ca4f6) {
return _0x1084e1 < _0x1ca4f6;
},
'uUBbz': function (_0x323e4d, _0x5c53cc, _0x416c5e, _0x1f06cd) {
return _0x323e4d(_0x5c53cc, _0x416c5e, _0x1f06cd);
},
'znjdK': _0x4ef343(0x2d4),
'TmtUN': function (_0x41b69c, _0x2368eb) {
return _0x41b69c === _0x2368eb;
},
'hPgPi': _0x4ef343(0x2ac)
};
try {
if (host[_0x4ef343(0x39f)](_0x3a4f7[_0x4ef343(0x254)]) || host[_0x4ef343(0x39f)](_0x3a4f7[_0x4ef343(0x2b6)])) {
const _0x5bce52 = host + (_0x4ef343(0x324) + _0x4ef343(0x3c8) + '=1'), _0x514244 = await _0x3a4f7[_0x4ef343(0x37f)](request, _0x5bce52, _0x3a4f7[_0x4ef343(0x2d2)](getHeaders, _0x5bce52)), _0x24a0af = JSON[_0x4ef343(0x213)](_0x514244), _0x56d03d = [];
if (_0x24a0af[_0x4ef343(0x394)] && Array[_0x4ef343(0x315)](_0x24a0af[_0x4ef343(0x394)]))
for (const _0x13ff34 of _0x24a0af[_0x4ef343(0x394)]) {
_0x56d03d[_0x4ef343(0x332)]({
'vod_id': _0x13ff34[_0x4ef343(0x3c3)],
'vod_name': _0x13ff34[_0x4ef343(0x2b8)],
'vod_pic': _0x13ff34[_0x4ef343(0x290)] || '',
'vod_remarks': _0x13ff34[_0x4ef343(0x346) + 's'] || ''
});
}
return JSON[_0x4ef343(0x3a2)]({ 'list': _0x56d03d });
} else {
const _0x5ae89d = host;
let _0x298455 = _0x3a4f7[_0x4ef343(0x239)](getRecommendUrl, _0x5ae89d), _0xa3fd7c = ![];
!_0x298455 && (_0x298455 = _0x3a4f7[_0x4ef343(0x359)](_0x3a4f7[_0x4ef343(0x277)](getCateFilterUrlPrefix, _0x5ae89d), _0x3a4f7[_0x4ef343(0x279)]), _0xa3fd7c = !![]);
const _0x431560 = await _0x3a4f7[_0x4ef343(0x233)](request, _0x298455, _0x3a4f7[_0x4ef343(0x25e)](getHeaders, _0x298455)), _0x56c7e8 = JSON[_0x4ef343(0x213)](_0x431560), _0x5853d3 = [];
if (_0xa3fd7c) {
const _0x3997ca = _0x56c7e8[_0x4ef343(0x339)];
for (let _0x29f049 = -0x3a1 * -0x7 + -0x2e2 + -0x1685; _0x3a4f7[_0x4ef343(0x3b2)](_0x29f049, _0x3997ca[_0x4ef343(0x2d3)]); _0x29f049++) {
const _0x260601 = _0x3997ca[_0x29f049], _0x24c0c0 = {
'vod_id': _0x260601[_0x4ef343(0x3b6)],
'vod_name': _0x260601[_0x4ef343(0x1e9)],
'vod_pic': _0x260601[_0x4ef343(0x3ba)],
'vod_remarks': _0x260601[_0x4ef343(0x258)]
};
_0x5853d3[_0x4ef343(0x332)](_0x24c0c0);
}
} else {
const _0x2ab595 = [];
_0x3a4f7[_0x4ef343(0x276)](findJsonArray, _0x56c7e8, _0x3a4f7[_0x4ef343(0x2ed)], _0x2ab595);
_0x3a4f7[_0x4ef343(0x317)](_0x2ab595[_0x4ef343(0x2d3)], 0x176e * -0x1 + -0x6 * 0x20 + -0x182e * -0x1) && _0x3a4f7[_0x4ef343(0x276)](findJsonArray, _0x56c7e8, _0x3a4f7[_0x4ef343(0x344)], _0x2ab595);
const _0x4b7c8b = [];
for (const _0x442e26 of _0x2ab595) {
for (let _0x2b0473 = -0x33b * 0x6 + 0x1 * -0x1f7 + 0x1559; _0x3a4f7[_0x4ef343(0x3b2)](_0x2b0473, _0x442e26[_0x4ef343(0x2d3)]); _0x2b0473++) {
const _0x3dbd8d = _0x442e26[_0x2b0473], _0x5c8547 = _0x3dbd8d[_0x4ef343(0x3c3)];
if (_0x4b7c8b[_0x4ef343(0x39f)](_0x5c8547))
continue;
_0x4b7c8b[_0x4ef343(0x332)](_0x5c8547);
const _0x3523d6 = {
'vod_id': _0x5c8547,
'vod_name': _0x3dbd8d[_0x4ef343(0x2b8)],
'vod_pic': _0x3dbd8d[_0x4ef343(0x290)],
'vod_remarks': _0x3dbd8d[_0x4ef343(0x346) + 's']
};
_0x5853d3[_0x4ef343(0x332)](_0x3523d6);
}
}
}
const _0x21c5c9 = { 'list': _0x5853d3 };
return JSON[_0x4ef343(0x3a2)](_0x21c5c9);
}
} catch (_0x2c9625) {
SpiderDebug[_0x4ef343(0x24a)](_0x2c9625);
}
return '';
}
async function category(_0x17bc49, _0x327387, _0x2f500e, _0x490196) {
const _0x2dea72 = _0x24a000, _0x1eac02 = {
'ghVBe': _0x2dea72(0x288),
'dftSy': _0x2dea72(0x2cf) + 'od',
'NthFz': function (_0x36a38a, _0x2942af, _0xdb7a9c) {
return _0x36a38a(_0x2942af, _0xdb7a9c);
},
'fUjyK': function (_0xa434ff, _0x705e82) {
return _0xa434ff(_0x705e82);
},
'xIbro': function (_0x188c3b, _0x5cc548) {
return _0x188c3b + _0x5cc548;
},
'YmXhB': function (_0x9cc843, _0x4ef04e) {
return _0x9cc843(_0x4ef04e);
},
'xAftd': function (_0x243acc, _0x54bfd9) {
return _0x243acc(_0x54bfd9);
},
'mEBLG': function (_0x276e23, _0x50f675) {
return _0x276e23 !== _0x50f675;
},
'eCaVc': function (_0x42bb55, _0x104923) {
return _0x42bb55 === _0x104923;
},
'IkIJp': _0x2dea72(0x36f),
'xUxPS': function (_0x273158, _0xd54879) {
return _0x273158 !== _0xd54879;
},
'ZuLFK': function (_0x36cbb1, _0x2946b1) {
return _0x36cbb1 === _0x2946b1;
},
'LtQsE': _0x2dea72(0x345),
'bkKAx': function (_0x40b381, _0x4ac366) {
return _0x40b381 !== _0x4ac366;
},
'vgGfV': function (_0x2a64e1, _0x116f66) {
return _0x2a64e1 !== _0x116f66;
},
'qrmQn': function (_0x2a2af5, _0x95b9cb) {
return _0x2a2af5 === _0x95b9cb;
},
'AsjQf': function (_0x7b8eef, _0x33e37f) {
return _0x7b8eef % _0x33e37f;
},
'QDURc': function (_0x39edd0, _0x2b3f5f) {
return _0x39edd0 / _0x2b3f5f;
},
'fmHZd': function (_0x48b5be, _0x57063b) {
return _0x48b5be / _0x57063b;
},
'YTcha': function (_0x39dd2a, _0x3e0046) {
return _0x39dd2a !== _0x3e0046;
},
'bkfnv': function (_0x387233, _0x40a0b1) {
return _0x387233 !== _0x40a0b1;
},
'fBrnR': function (_0x11978c, _0x4dbbc2) {
return _0x11978c !== _0x4dbbc2;
},
'HUsMa': function (_0x3993cf, _0x232042) {
return _0x3993cf !== _0x232042;
},
'xaxYD': function (_0x429fdd, _0xe751e7) {
return _0x429fdd < _0xe751e7;
}
};
try {
if (host[_0x2dea72(0x39f)](_0x1eac02[_0x2dea72(0x32a)]) || host[_0x2dea72(0x39f)](_0x1eac02[_0x2dea72(0x35e)])) {
const _0x5db283 = host + (_0x2dea72(0x324) + _0x2dea72(0x23f)) + _0x17bc49 + _0x2dea72(0x2bd) + _0x327387, _0x50a032 = await _0x1eac02[_0x2dea72(0x20b)](request, _0x5db283, _0x1eac02[_0x2dea72(0x328)](getHeaders, _0x5db283)), _0x1ea1bd = JSON[_0x2dea72(0x213)](_0x50a032), _0x2740e5 = [];
if (_0x1ea1bd[_0x2dea72(0x394)] && Array[_0x2dea72(0x315)](_0x1ea1bd[_0x2dea72(0x394)]))
for (const _0x31d55a of _0x1ea1bd[_0x2dea72(0x394)]) {
_0x2740e5[_0x2dea72(0x332)]({
'vod_id': _0x31d55a[_0x2dea72(0x3c3)],
'vod_name': _0x31d55a[_0x2dea72(0x2b8)],
'vod_pic': _0x31d55a[_0x2dea72(0x290)] || '',
'vod_remarks': _0x31d55a[_0x2dea72(0x346) + 's'] || ''
});
}
return JSON[_0x2dea72(0x3a2)]({
'page': _0x327387,
'pagecount': _0x1ea1bd[_0x2dea72(0x2ce)] || -0x103a + 0x226f + 0x1 * -0x1234,
'limit': _0x1ea1bd[_0x2dea72(0x23c)] || 0x249e + -0xcb * -0x8 + -0x2ae2,
'total': _0x1ea1bd[_0x2dea72(0x399)] || -0xbd2 + 0x7b8 * 0x5 + -0x2 * 0xd63,
'list': _0x2740e5
});
} else {
const _0x125b73 = host;
let _0x24aebb = _0x1eac02[_0x2dea72(0x371)](_0x1eac02[_0x2dea72(0x371)](_0x1eac02[_0x2dea72(0x397)](getCateFilterUrlPrefix, _0x125b73), _0x17bc49), _0x1eac02[_0x2dea72(0x20a)](getCateFilterUrlSuffix, _0x125b73));
_0x24aebb = _0x24aebb[_0x2dea72(0x2e5)](/#PN#/g, _0x327387), _0x24aebb = _0x24aebb[_0x2dea72(0x2e5)](/筛选class/g, _0x490196?.[_0x2dea72(0x2f9)] ?? ''), _0x24aebb = _0x24aebb[_0x2dea72(0x2e5)](/筛选area/g, _0x490196?.[_0x2dea72(0x256)] ?? ''), _0x24aebb = _0x24aebb[_0x2dea72(0x2e5)](/筛选lang/g, _0x490196?.[_0x2dea72(0x27b)] ?? ''), _0x24aebb = _0x24aebb[_0x2dea72(0x2e5)](/筛选year/g, _0x490196?.[_0x2dea72(0x355)] ?? ''), _0x24aebb = _0x24aebb[_0x2dea72(0x2e5)](/排序/g, _0x490196?.['排序'] ?? '');
const _0x30d3a8 = await _0x1eac02[_0x2dea72(0x20b)](request, _0x24aebb, _0x1eac02[_0x2dea72(0x397)](getHeaders, _0x24aebb)), _0x58b8b5 = JSON[_0x2dea72(0x213)](_0x30d3a8);
let _0x41f388 = Infinity;
try {
if (_0x1eac02[_0x2dea72(0x32b)](_0x58b8b5[_0x2dea72(0x388)], undefined) && _0x1eac02[_0x2dea72(0x2b9)](typeof _0x58b8b5[_0x2dea72(0x388)], _0x1eac02[_0x2dea72(0x3c0)]))
_0x41f388 = _0x58b8b5[_0x2dea72(0x388)];
else {
if (_0x1eac02[_0x2dea72(0x39d)](_0x58b8b5[_0x2dea72(0x2ce)], undefined) && _0x1eac02[_0x2dea72(0x2b9)](typeof _0x58b8b5[_0x2dea72(0x2ce)], _0x1eac02[_0x2dea72(0x3c0)]))
_0x41f388 = _0x58b8b5[_0x2dea72(0x2ce)];
else {
if (_0x1eac02[_0x2dea72(0x32b)](_0x58b8b5[_0x2dea72(0x339)], undefined) && _0x1eac02[_0x2dea72(0x35f)](typeof _0x58b8b5[_0x2dea72(0x339)], _0x1eac02[_0x2dea72(0x393)]) && _0x1eac02[_0x2dea72(0x229)](_0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x399)], undefined) && _0x1eac02[_0x2dea72(0x35f)](typeof _0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x399)], _0x1eac02[_0x2dea72(0x3c0)]) && _0x1eac02[_0x2dea72(0x392)](_0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x23c)], undefined) && _0x1eac02[_0x2dea72(0x2b9)](typeof _0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x23c)], _0x1eac02[_0x2dea72(0x3c0)])) {
const _0x2ef68b = _0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x23c)], _0x1bec69 = _0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x399)];
_0x41f388 = _0x1eac02[_0x2dea72(0x2a0)](_0x1eac02[_0x2dea72(0x302)](_0x1bec69, _0x2ef68b), -0x35f + -0xf9 * -0x19 + -0x14f2) ? _0x1eac02[_0x2dea72(0x2d9)](_0x1bec69, _0x2ef68b) : _0x1eac02[_0x2dea72(0x371)](Math[_0x2dea72(0x33d)](_0x1eac02[_0x2dea72(0x33f)](_0x1bec69, _0x2ef68b)), -0x834 + -0x1 * -0x24bc + 0x1c87 * -0x1);
}
}
}
} catch (_0x5c73e6) {
SpiderDebug[_0x2dea72(0x24a)](_0x5c73e6);
}
const _0x42d73c = _0x1eac02[_0x2dea72(0x2e8)](_0x58b8b5[_0x2dea72(0x394)], undefined) ? _0x58b8b5[_0x2dea72(0x394)] : _0x1eac02[_0x2dea72(0x280)](_0x58b8b5[_0x2dea72(0x339)], undefined) && _0x1eac02[_0x2dea72(0x273)](_0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x394)], undefined) ? _0x58b8b5[_0x2dea72(0x339)][_0x2dea72(0x394)] : _0x58b8b5[_0x2dea72(0x339)], _0x35c38d = [];
if (_0x1eac02[_0x2dea72(0x30a)](_0x42d73c, undefined))
for (let _0x124862 = 0xc3d + 0x1ee1 * 0x1 + -0x2b1e; _0x1eac02[_0x2dea72(0x2bf)](_0x124862, _0x42d73c[_0x2dea72(0x2d3)]); _0x124862++) {
const _0xa38597 = _0x42d73c[_0x124862], _0xf5aa7f = {
'vod_id': _0x1eac02[_0x2dea72(0x280)](_0xa38597[_0x2dea72(0x3c3)], undefined) ? _0xa38597[_0x2dea72(0x3c3)] : _0xa38597[_0x2dea72(0x3b6)],
'vod_name': _0x1eac02[_0x2dea72(0x39d)](_0xa38597[_0x2dea72(0x2b8)], undefined) ? _0xa38597[_0x2dea72(0x2b8)] : _0xa38597[_0x2dea72(0x1e9)],
'vod_pic': _0x1eac02[_0x2dea72(0x32b)](_0xa38597[_0x2dea72(0x290)], undefined) ? _0xa38597[_0x2dea72(0x290)] : _0xa38597[_0x2dea72(0x3ba)],
'vod_remarks': _0x1eac02[_0x2dea72(0x273)](_0xa38597[_0x2dea72(0x346) + 's'], undefined) ? _0xa38597[_0x2dea72(0x346) + 's'] : _0xa38597[_0x2dea72(0x258)]
};
_0x35c38d[_0x2dea72(0x332)](_0xf5aa7f);
}
const _0x307572 = {
'page': _0x327387,
'pagecount': _0x41f388,
'limit': 0x5a,
'total': Infinity,
'list': _0x35c38d
};
return JSON[_0x2dea72(0x3a2)](_0x307572);
}
} catch (_0x2a89be) {
SpiderDebug[_0x2dea72(0x24a)](_0x2a89be);
}
return '';
}
async function detail(_0x26f995) {
const _0x8ea006 = _0x24a000, _0x52e3d6 = {
'fIzpG': _0x8ea006(0x288),
'gINFD': _0x8ea006(0x2cf) + 'od',
'MJeua': function (_0x44bc08, _0x173641, _0x19a96a) {
return _0x44bc08(_0x173641, _0x19a96a);
},
'WodPN': function (_0x311305, _0xcfa1c8) {
return _0x311305(_0xcfa1c8);
},
'wpdZs': function (_0x52de8f, _0x5bbd8c) {
return _0x52de8f + _0x5bbd8c;
},
'zFyTh': function (_0x4317fb, _0x28ea86, _0x2e16e5, _0x35fbcc, _0x136e93, _0x19c8f1) {
return _0x4317fb(_0x28ea86, _0x2e16e5, _0x35fbcc, _0x136e93, _0x19c8f1);
}
};
try {
if (host[_0x8ea006(0x39f)](_0x52e3d6[_0x8ea006(0x2f3)]) || host[_0x8ea006(0x39f)](_0x52e3d6[_0x8ea006(0x240)])) {
const _0x31ce10 = host + (_0x8ea006(0x230) + _0x8ea006(0x374)) + _0x26f995, _0x5893d7 = await _0x52e3d6[_0x8ea006(0x253)](request, _0x31ce10, _0x52e3d6[_0x8ea006(0x29a)](getHeaders, _0x31ce10)), _0x1957f1 = JSON[_0x8ea006(0x213)](_0x5893d7), _0x3e04fe = { 'list': [] }, _0x3c884c = {}, _0x391656 = _0x1957f1[_0x8ea006(0x394)] && _0x1957f1[_0x8ea006(0x394)][-0xd79 + 0xea0 + -0x127] ? _0x1957f1[_0x8ea006(0x394)][0x20e * -0x1 + -0x44 * 0x4c + 0x163e * 0x1] : {};
return _0x3c884c[_0x8ea006(0x3c3)] = _0x391656[_0x8ea006(0x3c3)] || _0x26f995, _0x3c884c[_0x8ea006(0x2b8)] = _0x391656[_0x8ea006(0x2b8)] || '', _0x3c884c[_0x8ea006(0x290)] = _0x391656[_0x8ea006(0x290)] || '', _0x3c884c[_0x8ea006(0x37d)] = _0x391656[_0x8ea006(0x37d)] || '', _0x3c884c[_0x8ea006(0x32c)] = _0x391656[_0x8ea006(0x32c)] || '', _0x3c884c[_0x8ea006(0x228)] = _0x391656[_0x8ea006(0x228)] || '', _0x3c884c[_0x8ea006(0x346) + 's'] = _0x391656[_0x8ea006(0x346) + 's'] || '', _0x3c884c[_0x8ea006(0x23d)] = _0x391656[_0x8ea006(0x23d)] || '', _0x3c884c[_0x8ea006(0x2cd) + 'or'] = _0x391656[_0x8ea006(0x2cd) + 'or'] || '', _0x3c884c[_0x8ea006(0x227) + 't'] = _0x391656[_0x8ea006(0x227) + 't'] || '', _0x3c884c[_0x8ea006(0x34d) + _0x8ea006(0x3bf)] = _0x391656[_0x8ea006(0x34d) + _0x8ea006(0x3bf)] || '', _0x3c884c[_0x8ea006(0x3a0) + 'rl'] = _0x391656[_0x8ea006(0x3a0) + 'rl'] || '', _0x3e04fe[_0x8ea006(0x394)][_0x8ea006(0x332)](_0x3c884c), JSON[_0x8ea006(0x3a2)](_0x3e04fe);
} else {
const _0x1352d2 = host, _0x5127a9 = _0x52e3d6[_0x8ea006(0x31e)](_0x52e3d6[_0x8ea006(0x29a)](getPlayUrlPrefix, _0x1352d2), _0x26f995), _0x5f713e = await _0x52e3d6[_0x8ea006(0x253)](request, _0x5127a9, _0x52e3d6[_0x8ea006(0x29a)](getHeaders, _0x5127a9)), _0x3e8d52 = JSON[_0x8ea006(0x213)](_0x5f713e), _0x3536cc = { 'list': [] }, _0x1c7671 = {};
return _0x52e3d6[_0x8ea006(0x30e)](genPlayList, _0x1352d2, _0x3e8d52, _0x5f713e, _0x1c7671, _0x26f995), _0x3536cc[_0x8ea006(0x394)][_0x8ea006(0x332)](_0x1c7671), JSON[_0x8ea006(0x3a2)](_0x3536cc);
}
} catch (_0x40e06f) {
SpiderDebug[_0x8ea006(0x24a)](_0x40e06f);
}
return '';
}
async function play(_0x314f8e, _0x533915, _0x14a1d6) {
const _0x5ed43f = _0x24a000, _0x46895d = {
'rfYvZ': function (_0x146ae4, _0x119a4f) {
return _0x146ae4 === _0x119a4f;
},
'rQSdz': _0x5ed43f(0x2d1) + _0x5ed43f(0x341) + _0x5ed43f(0x349) + _0x5ed43f(0x2db) + _0x5ed43f(0x2ec) + _0x5ed43f(0x218) + _0x5ed43f(0x304),
'zlCKO': function (_0x79100f, _0x50fda5) {
return _0x79100f > _0x50fda5;
},
'AEWJN': function (_0x34e794, _0x24610e, _0x529315, _0x31bacd) {
return _0x34e794(_0x24610e, _0x529315, _0x31bacd);
},
'Knznh': function (_0x4f4e7d, _0x5a0aac) {
return _0x4f4e7d !== _0x5a0aac;
},
'ViinS': function (_0x595f7e, _0x159136) {
return _0x595f7e(_0x159136);
}
};
try {
let _0xabb5ea = siteJx[_0x314f8e];
!_0xabb5ea && (siteJx[_0x5ed43f(0x3b3) + _0x5ed43f(0x2f2)]('*') ? _0xabb5ea = siteJx['*'] : _0xabb5ea = []);
_0x46895d[_0x5ed43f(0x28d)](_0xabb5ea[_0x5ed43f(0x2d3)], 0x6 * -0x2c7 + 0xf * -0x1a5 + 0xdc7 * 0x3) && (_0xabb5ea = [_0x46895d[_0x5ed43f(0x27e)]]);
if (_0x46895d[_0x5ed43f(0x24b)](_0xabb5ea[_0x5ed43f(0x2d3)], -0xf * 0x73 + 0x13df + -0xd22 * 0x1)) {
const _0xc1b189 = await _0x46895d[_0x5ed43f(0x285)](getFinalVideo, _0x314f8e, _0xabb5ea, _0x533915);
if (_0x46895d[_0x5ed43f(0x3c2)](_0xc1b189, null))
return JSON[_0x5ed43f(0x3a2)](_0xc1b189);
}
if (_0x46895d[_0x5ed43f(0x334)](isVideoFormat, _0x533915)) {
const _0x2016c3 = {
'parse': 0x1,
'playUrl': '',
'url': _0x533915
};
return JSON[_0x5ed43f(0x3a2)](_0x2016c3);
} else {
const _0x59b4d5 = {
'parse': 0x1,
'jx': '1',
'url': _0x533915
};
return JSON[_0x5ed43f(0x3a2)](_0x59b4d5);
}
} catch (_0x15f170) {
SpiderDebug[_0x5ed43f(0x24a)](_0x15f170);
}
return '';
}
async function search(_0x15b8fa, _0x588e3d) {
const _0xc070a9 = _0x24a000, _0x24ff97 = {
'rAAqR': _0xc070a9(0x288),
'gHEas': _0xc070a9(0x2cf) + 'od',
'PPjsc': function (_0x4c022d, _0x4ebd2b) {
return _0x4c022d(_0x4ebd2b);
},
'nAAlp': function (_0x1196f9, _0x523142, _0x215206) {
return _0x1196f9(_0x523142, _0x215206);
},
'Yoody': function (_0x40a0f3, _0x527133, _0x5f956b) {
return _0x40a0f3(_0x527133, _0x5f956b);
},
'Qzbyi': function (_0xf70d91, _0x5d6ade) {
return _0xf70d91(_0x5d6ade);
},
'AhyMI': function (_0x42d25e, _0x371898) {
return _0x42d25e instanceof _0x371898;
},
'raJIH': function (_0x2a22fd, _0x2de3f5) {
return _0x2a22fd instanceof _0x2de3f5;
},
'bfaLF': function (_0x8207e7, _0x21fb6c) {
return _0x8207e7 !== _0x21fb6c;
}
};
try {
if (host[_0xc070a9(0x39f)](_0x24ff97[_0xc070a9(0x26f)]) || host[_0xc070a9(0x39f)](_0x24ff97[_0xc070a9(0x28c)])) {
const _0x26ec58 = host + (_0xc070a9(0x324) + _0xc070a9(0x28e)) + _0x24ff97[_0xc070a9(0x294)](encodeURIComponent, _0x15b8fa) + _0xc070a9(0x237), _0x1c1ca8 = await _0x24ff97[_0xc070a9(0x247)](request, _0x26ec58, _0x24ff97[_0xc070a9(0x294)](getHeaders, _0x26ec58)), _0xc6c488 = JSON[_0xc070a9(0x213)](_0x1c1ca8), _0x1ead5c = [];
if (_0xc6c488[_0xc070a9(0x394)] && Array[_0xc070a9(0x315)](_0xc6c488[_0xc070a9(0x394)]))
for (const _0x284ed3 of _0xc6c488[_0xc070a9(0x394)]) {
_0x1ead5c[_0xc070a9(0x332)]({
'vod_id': _0x284ed3[_0xc070a9(0x3c3)],
'vod_name': _0x284ed3[_0xc070a9(0x2b8)],
'vod_pic': _0x284ed3[_0xc070a9(0x290)] || '',
'vod_remarks': _0x284ed3[_0xc070a9(0x346) + 's'] || ''
});
}
return JSON[_0xc070a9(0x3a2)]({ 'list': _0x1ead5c });
} else {
const _0x4c1fc9 = host, _0x3631b2 = _0x24ff97[_0xc070a9(0x247)](getSearchUrl, _0x4c1fc9, _0x24ff97[_0xc070a9(0x294)](encodeURIComponent, _0x15b8fa)), _0x15e390 = await _0x24ff97[_0xc070a9(0x369)](request, _0x3631b2, _0x24ff97[_0xc070a9(0x2a1)](getHeaders, _0x3631b2)), _0x59d1cc = JSON[_0xc070a9(0x213)](_0x15e390);
let _0x136112 = null;
const _0x1337a6 = [];
if (_0x24ff97[_0xc070a9(0x3ac)](_0x59d1cc[_0xc070a9(0x394)], Array))
_0x136112 = _0x59d1cc[_0xc070a9(0x394)];
else {
if (_0x24ff97[_0xc070a9(0x2bc)](_0x59d1cc[_0xc070a9(0x339)], Object) && _0x24ff97[_0xc070a9(0x3ac)](_0x59d1cc[_0xc070a9(0x339)][_0xc070a9(0x394)], Array))
_0x136112 = _0x59d1cc[_0xc070a9(0x339)][_0xc070a9(0x394)];
else
_0x24ff97[_0xc070a9(0x2bc)](_0x59d1cc[_0xc070a9(0x339)], Array) && (_0x136112 = _0x59d1cc[_0xc070a9(0x339)]);
}
if (_0x24ff97[_0xc070a9(0x2ee)](_0x136112, null))
for (const _0x152e86 of _0x136112) {
if (_0x152e86[_0xc070a9(0x3c3)]) {
const _0x49ee8a = {
'vod_id': _0x152e86[_0xc070a9(0x3c3)],
'vod_name': _0x152e86[_0xc070a9(0x2b8)],
'vod_pic': _0x152e86[_0xc070a9(0x290)],
'vod_remarks': _0x152e86[_0xc070a9(0x346) + 's']
};
_0x1337a6[_0xc070a9(0x332)](_0x49ee8a);
} else {
const _0x467d07 = {
'vod_id': _0x152e86[_0xc070a9(0x3b6)],
'vod_name': _0x152e86[_0xc070a9(0x1e9)],
'vod_pic': _0x152e86[_0xc070a9(0x3ba)],
'vod_remarks': _0x152e86[_0xc070a9(0x258)]
};
_0x1337a6[_0xc070a9(0x332)](_0x467d07);
}
}
const _0x1e4c19 = { 'list': _0x1337a6 };
return JSON[_0xc070a9(0x3a2)](_0x1e4c19);
}
} catch (_0x334adf) {
SpiderDebug[_0xc070a9(0x24a)](_0x334adf);
}
return '';
}
async function getFinalVideo(_0x356707, _0x398327, _0x2ef122) {
const _0x12dc27 = _0x24a000, _0x44bf01 = {
'KPgHF': function (_0x55b24f, _0x2ecff3) {
return _0x55b24f === _0x2ecff3;
},
'WCCoT': function (_0x2ce219, _0x446505) {
return _0x2ce219 === _0x446505;
},
'QIbLN': _0x12dc27(0x1fb),
'XjiyL': function (_0x451dd4, _0x2b6510) {
return _0x451dd4 + _0x2b6510;
},
'eFJbi': function (_0xe7aa93, _0x51184b, _0x539572, _0x540f7d) {
return _0xe7aa93(_0x51184b, _0x539572, _0x540f7d);
},
'cchWu': function (_0x5d7821, _0x2a0a3c, _0x143221) {
return _0x5d7821(_0x2a0a3c, _0x143221);
},
'emPiw': function (_0x242abc, _0x178c18) {
return _0x242abc !== _0x178c18;
},
'HHlAe': _0x12dc27(0x366),
'snexY': _0x12dc27(0x2e3),
'oRses': _0x12dc27(0x352)
};
let _0xcd3790 = '';
for (const _0x5cb301 of _0x398327) {
if (_0x44bf01[_0x12dc27(0x200)](_0x5cb301, '') || _0x44bf01[_0x12dc27(0x205)](_0x5cb301, _0x44bf01[_0x12dc27(0x2a5)]))
continue;
const _0x2f83f6 = _0x44bf01[_0x12dc27(0x30c)](_0x5cb301, _0x2ef122), _0x4b7b47 = await _0x44bf01[_0x12dc27(0x219)](request, _0x2f83f6, null, -0x3 * 0x13f + -0x1 * 0x4d12 + 0x243 * 0x35);
let _0x5e80c0 = null;
try {
_0x5e80c0 = _0x44bf01[_0x12dc27(0x2c1)](jsonParse, _0x2ef122, _0x4b7b47);
} catch (_0x684857) {
}
if (_0x44bf01[_0x12dc27(0x2a3)](_0x5e80c0, null) && _0x5e80c0[_0x12dc27(0x3b3) + _0x12dc27(0x2f2)](_0x44bf01[_0x12dc27(0x364)]) && _0x5e80c0[_0x12dc27(0x3b3) + _0x12dc27(0x2f2)](_0x44bf01[_0x12dc27(0x3a7)]))
return _0x5e80c0[_0x12dc27(0x2e3)] = JSON[_0x12dc27(0x3a2)](_0x5e80c0[_0x12dc27(0x2e3)]), _0x5e80c0;
if (_0x4b7b47[_0x12dc27(0x39f)](_0x44bf01[_0x12dc27(0x2df)])) {
let _0x259a20 = ![];
for (const _0x4410e4 of htmlVideoKeyMatch) {
if (_0x4410e4[_0x12dc27(0x36e)](_0x4b7b47)) {
_0x259a20 = !![];
break;
}
}
_0x259a20 && (_0xcd3790 = _0x5cb301);
}
}
if (_0x44bf01[_0x12dc27(0x2a3)](_0xcd3790, '')) {
const _0x425204 = {
'parse': 0x0,
'playUrl': '',
'url': _0x2ef122
};
return JSON[_0x12dc27(0x3a2)](_0x425204);
}
return null;
}
function genPlayList(_0x2a68f0, _0x17eead, _0x2951b7, _0x47b9eb, _0x800257) {
const _0x1d5b05 = _0x24a000, _0x37e1eb = {
'qFCgy': _0x1d5b05(0x288),
'muyni': _0x1d5b05(0x2cf) + 'od',
'VdBFp': _0x1d5b05(0x27c) + 'p',
'fuavN': _0x1d5b05(0x25c),
'nqoHH': _0x1d5b05(0x343),
'TVfJB': function (_0x46f089, _0x2a240f) {
return _0x46f089 > _0x2a240f;
},
'Xavsg': _0x1d5b05(0x2c8)
}, _0x15a66c = [], _0x182550 = [];
if (_0x2a68f0[_0x1d5b05(0x39f)](_0x37e1eb[_0x1d5b05(0x37c)]) || _0x2a68f0[_0x1d5b05(0x39f)](_0x37e1eb[_0x1d5b05(0x383)])) {
const _0x40de27 = _0x17eead[_0x1d5b05(0x394)] && _0x17eead[_0x1d5b05(0x394)][-0x635 + 0x50e * -0x4 + -0x8cf * -0x3] ? _0x17eead[_0x1d5b05(0x394)][0x2 * 0x901 + -0x2382 + 0x1180] : {};
_0x47b9eb[_0x1d5b05(0x3c3)] = _0x40de27[_0x1d5b05(0x3c3)] || _0x800257, _0x47b9eb[_0x1d5b05(0x2b8)] = _0x40de27[_0x1d5b05(0x2b8)] || '', _0x47b9eb[_0x1d5b05(0x290)] = _0x40de27[_0x1d5b05(0x290)] || '', _0x47b9eb[_0x1d5b05(0x37d)] = _0x40de27[_0x1d5b05(0x37d)] || '', _0x47b9eb[_0x1d5b05(0x32c)] = _0x40de27[_0x1d5b05(0x32c)] || '', _0x47b9eb[_0x1d5b05(0x228)] = _0x40de27[_0x1d5b05(0x228)] || '', _0x47b9eb[_0x1d5b05(0x346) + 's'] = _0x40de27[_0x1d5b05(0x346) + 's'] || '', _0x47b9eb[_0x1d5b05(0x23d)] = _0x40de27[_0x1d5b05(0x23d)] || '', _0x47b9eb[_0x1d5b05(0x2cd) + 'or'] = _0x40de27[_0x1d5b05(0x2cd) + 'or'] || '', _0x47b9eb[_0x1d5b05(0x227) + 't'] = _0x40de27[_0x1d5b05(0x227) + 't'] || '', _0x47b9eb[_0x1d5b05(0x34d) + _0x1d5b05(0x3bf)] = _0x40de27[_0x1d5b05(0x34d) + _0x1d5b05(0x3bf)] || '', _0x47b9eb[_0x1d5b05(0x3a0) + 'rl'] = _0x40de27[_0x1d5b05(0x3a0) + 'rl'] || '';
return;
}
if (_0x2a68f0[_0x1d5b05(0x39f)](_0x37e1eb[_0x1d5b05(0x3a8)]) || _0x2a68f0[_0x1d5b05(0x39f)](_0x37e1eb[_0x1d5b05(0x238)])) {
const _0x249ca8 = _0x17eead[_0x1d5b05(0x339)] || {};
_0x47b9eb[_0x1d5b05(0x3c3)] = _0x249ca8[_0x1d5b05(0x3c3)] || _0x800257, _0x47b9eb[_0x1d5b05(0x2b8)] = _0x249ca8[_0x1d5b05(0x2b8)] || '', _0x47b9eb[_0x1d5b05(0x290)] = _0x249ca8[_0x1d5b05(0x290)] || '', _0x47b9eb[_0x1d5b05(0x37d)] = _0x249ca8[_0x1d5b05(0x311)] || '', _0x47b9eb[_0x1d5b05(0x32c)] = _0x249ca8[_0x1d5b05(0x32c)] || '', _0x47b9eb[_0x1d5b05(0x228)] = _0x249ca8[_0x1d5b05(0x228)] || '', _0x47b9eb[_0x1d5b05(0x346) + 's'] = _0x249ca8[_0x1d5b05(0x346) + 's'] || '', _0x47b9eb[_0x1d5b05(0x23d)] = _0x249ca8[_0x1d5b05(0x23d)] || '', _0x47b9eb[_0x1d5b05(0x2cd) + 'or'] = _0x249ca8[_0x1d5b05(0x2cd) + 'or'] || '', _0x47b9eb[_0x1d5b05(0x227) + 't'] = _0x249ca8[_0x1d5b05(0x227) + 't'] || '';
if (_0x249ca8[_0x1d5b05(0x225) + _0x1d5b05(0x251)] && Array[_0x1d5b05(0x315)](_0x249ca8[_0x1d5b05(0x225) + _0x1d5b05(0x251)]))
for (const _0x39d1e3 of _0x249ca8[_0x1d5b05(0x225) + _0x1d5b05(0x251)]) {
let _0x2f80cc = _0x39d1e3[_0x1d5b05(0x330)]?.[_0x1d5b05(0x314)]() || _0x39d1e3[_0x1d5b05(0x214)]?.[_0x1d5b05(0x314)]() || '';
if (!_0x2f80cc)
continue;
_0x182550[_0x1d5b05(0x332)](_0x2f80cc), _0x15a66c[_0x1d5b05(0x332)](_0x39d1e3[_0x1d5b05(0x366)] || '');
if (_0x39d1e3[_0x1d5b05(0x20d)]) {
const _0x2ff516 = parseUrlMap[_0x1d5b05(0x24f)](_0x2f80cc) || [];
!_0x2ff516[_0x1d5b05(0x39f)](_0x39d1e3[_0x1d5b05(0x20d)]) && _0x2ff516[_0x1d5b05(0x332)](_0x39d1e3[_0x1d5b05(0x20d)]), parseUrlMap[_0x1d5b05(0x396)](_0x2f80cc, _0x2ff516);
}
}
} else {
if (_0x2a68f0[_0x1d5b05(0x39f)](_0x37e1eb[_0x1d5b05(0x222)])) {
const _0x37e2c6 = _0x17eead[_0x1d5b05(0x339)] || {};
_0x47b9eb[_0x1d5b05(0x3c3)] = _0x37e2c6[_0x1d5b05(0x3c3)] || _0x800257, _0x47b9eb[_0x1d5b05(0x2b8)] = _0x37e2c6[_0x1d5b05(0x2b8)] || '', _0x47b9eb[_0x1d5b05(0x290)] = _0x37e2c6[_0x1d5b05(0x290)] || '', _0x47b9eb[_0x1d5b05(0x37d)] = _0x37e2c6[_0x1d5b05(0x311)] || '', _0x47b9eb[_0x1d5b05(0x32c)] = _0x37e2c6[_0x1d5b05(0x32c)] || '', _0x47b9eb[_0x1d5b05(0x228)] = _0x37e2c6[_0x1d5b05(0x228)] || '', _0x47b9eb[_0x1d5b05(0x346) + 's'] = _0x37e2c6[_0x1d5b05(0x346) + 's'] || '', _0x47b9eb[_0x1d5b05(0x23d)] = _0x37e2c6[_0x1d5b05(0x23d)] || '', _0x47b9eb[_0x1d5b05(0x2cd) + 'or'] = _0x37e2c6[_0x1d5b05(0x2cd) + 'or'] || '', _0x47b9eb[_0x1d5b05(0x227) + 't'] = _0x37e2c6[_0x1d5b05(0x227) + 't'] || '';
if (_0x37e2c6[_0x1d5b05(0x2f7) + _0x1d5b05(0x3a1)] && Array[_0x1d5b05(0x315)](_0x37e2c6[_0x1d5b05(0x2f7) + _0x1d5b05(0x3a1)]))
for (const _0x1f9806 of _0x37e2c6[_0x1d5b05(0x2f7) + _0x1d5b05(0x3a1)]) {
let _0x292c57 = _0x1f9806[_0x1d5b05(0x377) + 'o']?.[_0x1d5b05(0x3cb)]?.[_0x1d5b05(0x314)]() || _0x1f9806[_0x1d5b05(0x377) + 'o']?.[_0x1d5b05(0x211)]?.[_0x1d5b05(0x314)]() || '';
if (!_0x292c57)
continue;
_0x182550[_0x1d5b05(0x332)](_0x292c57), _0x15a66c[_0x1d5b05(0x332)](_0x1f9806[_0x1d5b05(0x366)] || '');
try {
const _0x4a4bc9 = parseUrlMap[_0x1d5b05(0x24f)](_0x292c57) || [];
if (_0x1f9806[_0x1d5b05(0x377) + 'o']?.[_0x1d5b05(0x213)]) {
const _0x3dac95 = _0x1f9806[_0x1d5b05(0x377) + 'o'][_0x1d5b05(0x213)][_0x1d5b05(0x265)](',');
_0x3dac95[_0x1d5b05(0x1e6)](_0x4dc07e => {
const _0x404f67 = _0x1d5b05;
_0x4dc07e && !_0x4a4bc9[_0x404f67(0x39f)](_0x4dc07e) && _0x4a4bc9[_0x404f67(0x332)](_0x4dc07e);
});
}
if (_0x1f9806[_0x1d5b05(0x377) + 'o']?.[_0x1d5b05(0x32d)]) {
const _0x57c8f0 = _0x1f9806[_0x1d5b05(0x377) + 'o'][_0x1d5b05(0x32d)][_0x1d5b05(0x265)](',');
_0x57c8f0[_0x1d5b05(0x1e6)](_0x522ba3 => {
const _0x5f1935 = _0x1d5b05;
_0x522ba3 && !_0x4a4bc9[_0x5f1935(0x39f)](_0x522ba3) && _0x4a4bc9[_0x5f1935(0x332)](_0x522ba3);
});
}
parseUrlMap[_0x1d5b05(0x396)](_0x292c57, _0x4a4bc9);
} catch (_0x35c48f) {
SpiderDebug[_0x1d5b05(0x24a)](_0x35c48f);
}
}
} else {
if (urlPattern1[_0x1d5b05(0x36e)](_0x2a68f0)) {
const _0x6e5bc5 = _0x17eead[_0x1d5b05(0x394)] && _0x17eead[_0x1d5b05(0x394)][0x1448 + -0x19fc + -0x1 * -0x5b4] ? _0x17eead[_0x1d5b05(0x394)][-0x704 * -0x5 + 0x29 * -0xb5 + -0x617 * 0x1] : {};
_0x47b9eb[_0x1d5b05(0x3c3)] = _0x6e5bc5[_0x1d5b05(0x3c3)] || _0x800257, _0x47b9eb[_0x1d5b05(0x2b8)] = _0x6e5bc5[_0x1d5b05(0x2b8)] || '', _0x47b9eb[_0x1d5b05(0x290)] = _0x6e5bc5[_0x1d5b05(0x290)] || '', _0x47b9eb[_0x1d5b05(0x37d)] = _0x6e5bc5[_0x1d5b05(0x37d)] || '', _0x47b9eb[_0x1d5b05(0x32c)] = _0x6e5bc5[_0x1d5b05(0x32c)] || '', _0x47b9eb[_0x1d5b05(0x228)] = _0x6e5bc5[_0x1d5b05(0x228)] || '', _0x47b9eb[_0x1d5b05(0x346) + 's'] = _0x6e5bc5[_0x1d5b05(0x346) + 's'] || '', _0x47b9eb[_0x1d5b05(0x23d)] = _0x6e5bc5[_0x1d5b05(0x23d)] || '', _0x47b9eb[_0x1d5b05(0x2cd) + 'or'] = _0x6e5bc5[_0x1d5b05(0x2cd) + 'or'] || '', _0x47b9eb[_0x1d5b05(0x227) + 't'] = _0x6e5bc5[_0x1d5b05(0x227) + 't'] || '', _0x47b9eb[_0x1d5b05(0x34d) + _0x1d5b05(0x3bf)] = _0x6e5bc5[_0x1d5b05(0x34d) + _0x1d5b05(0x3bf)] || '', _0x47b9eb[_0x1d5b05(0x3a0) + 'rl'] = _0x6e5bc5[_0x1d5b05(0x3a0) + 'rl'] || '';
}
}
}
_0x37e1eb[_0x1d5b05(0x30d)](_0x182550[_0x1d5b05(0x2d3)], -0x417 * 0x9 + -0x2472 + 0x186b * 0x3) && _0x37e1eb[_0x1d5b05(0x30d)](_0x15a66c[_0x1d5b05(0x2d3)], -0x1bc * 0x15 + -0x26b8 + 0x4b24) && (_0x47b9eb[_0x1d5b05(0x34d) + _0x1d5b05(0x3bf)] = _0x182550[_0x1d5b05(0x365)](_0x37e1eb[_0x1d5b05(0x2be)]), _0x47b9eb[_0x1d5b05(0x3a0) + 'rl'] = _0x15a66c[_0x1d5b05(0x365)](_0x37e1eb[_0x1d5b05(0x2be)]));
}
function jsonParse(_0x2bcad8, _0x2e7bc8) {
const _0x4a9b6b = _0x24a000, _0x54fefc = {
'glzca': _0x4a9b6b(0x339),
'SXiUp': function (_0x5d899b, _0x8ff4ce) {
return _0x5d899b === _0x8ff4ce;
},
'mqFNW': _0x4a9b6b(0x345),
'hXQXU': _0x4a9b6b(0x366),
'qaLZN': function (_0x304f89, _0x4f96a0) {
return _0x304f89 + _0x4f96a0;
},
'SyFuQ': _0x4a9b6b(0x1fd),
'wWTGM': _0x4a9b6b(0x292),
'opiXu': function (_0x16486e, _0x45288d) {
return _0x16486e(_0x45288d);
},
'GMucY': function (_0x55cf35, _0x5b1ec7, _0x56a7e3) {
return _0x55cf35(_0x5b1ec7, _0x56a7e3);
},
'VVWwW': _0x4a9b6b(0x2e3),
'zMWEf': _0x4a9b6b(0x310),
'fuDvD': _0x4a9b6b(0x255),
'AAtXX': _0x4a9b6b(0x39e),
'Ojjqt': _0x4a9b6b(0x2cb),
'rrjLd': _0x4a9b6b(0x261),
'xjYPA': function (_0x138833, _0x134ff4) {
return _0x138833 > _0x134ff4;
},
'UZCOD': _0x4a9b6b(0x2e4),
'PeDZZ': _0x4a9b6b(0x287),
'cCmOD': function (_0xe7c3fe, _0x6c71de) {
return _0xe7c3fe > _0x6c71de;
},
'clYHp': function (_0x34da34, _0x278ac6) {
return _0x34da34 + _0x278ac6;
},
'ZrFqI': function (_0x57a7fe, _0x1920c9, _0x45bdb2, _0x4ed88c) {
return _0x57a7fe(_0x1920c9, _0x45bdb2, _0x4ed88c);
}
};
try {
let _0x654842 = JSON[_0x4a9b6b(0x213)](_0x2e7bc8);
_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x32f)]) && _0x54fefc[_0x4a9b6b(0x27d)](typeof _0x654842[_0x4a9b6b(0x339)], _0x54fefc[_0x4a9b6b(0x325)]) && !_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x1e8)]) && (_0x654842 = _0x654842[_0x4a9b6b(0x339)]);
let _0x100c47 = _0x654842[_0x4a9b6b(0x366)];
_0x100c47[_0x4a9b6b(0x2c6)]('//') && (_0x100c47 = _0x54fefc[_0x4a9b6b(0x2eb)](_0x54fefc[_0x4a9b6b(0x245)], _0x100c47));
if (!_0x100c47[_0x4a9b6b(0x314)]()[_0x4a9b6b(0x2c6)](_0x54fefc[_0x4a9b6b(0x322)]))
return null;
if (_0x54fefc[_0x4a9b6b(0x27d)](_0x100c47, _0x2bcad8)) {
if (_0x54fefc[_0x4a9b6b(0x3b8)](isVip, _0x100c47) || !_0x54fefc[_0x4a9b6b(0x3b8)](isVideoFormat, _0x100c47))
return null;
}
if (_0x54fefc[_0x4a9b6b(0x22e)](isBlackVodUrl, _0x2bcad8, _0x100c47))
return null;
let _0xcda3cd = {};
if (_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x224)]))
_0xcda3cd = _0x654842[_0x4a9b6b(0x2e3)];
else {
if (_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x29e)]))
_0xcda3cd = _0x654842[_0x4a9b6b(0x310)];
else {
if (_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x3ca)]))
_0xcda3cd = _0x654842[_0x4a9b6b(0x255)];
else
_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x39a)]) && (_0xcda3cd = _0x654842[_0x4a9b6b(0x39e)]);
}
}
let _0x2e9070 = '';
if (_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x3b9)]))
_0x2e9070 = _0x654842[_0x54fefc[_0x4a9b6b(0x3b9)]];
else
_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x2a4)]) && (_0x2e9070 = _0x654842[_0x54fefc[_0x4a9b6b(0x2a4)]]);
_0x54fefc[_0x4a9b6b(0x25a)](_0x2e9070[_0x4a9b6b(0x314)]()[_0x4a9b6b(0x2d3)], -0x60f * 0x1 + 0x12 * -0x164 + 0x7 * 0x471) && (_0xcda3cd[_0x54fefc[_0x4a9b6b(0x2a4)]] = _0x54fefc[_0x4a9b6b(0x2eb)]('\x20', _0x2e9070));
let _0x530de6 = '';
if (_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x297)]))
_0x530de6 = _0x654842[_0x4a9b6b(0x2e4)];
else
_0x654842[_0x4a9b6b(0x3b3) + _0x4a9b6b(0x2f2)](_0x54fefc[_0x4a9b6b(0x207)]) && (_0x530de6 = _0x654842[_0x4a9b6b(0x287)]);
_0x54fefc[_0x4a9b6b(0x281)](_0x530de6[_0x4a9b6b(0x314)]()[_0x4a9b6b(0x2d3)], 0x18ce + -0x22ae + 0x9e0) && (_0xcda3cd[_0x54fefc[_0x4a9b6b(0x207)]] = _0x54fefc[_0x4a9b6b(0x1f4)]('\x20', _0x530de6));
_0xcda3cd = _0x54fefc[_0x4a9b6b(0x243)](fixJsonVodHeader, _0xcda3cd, _0x2bcad8, _0x100c47);
const _0x27e9a5 = {
'header': _0xcda3cd,
'url': _0x100c47,
'parse': '0'
};
return _0x27e9a5;
} catch (_0x174821) {
SpiderDebug[_0x4a9b6b(0x24a)](_0x174821);
}
return null;
}
function isVip(_0x12df4f) {
const _0x1cd01d = _0x24a000, _0x2ec382 = {
'updKI': _0x1cd01d(0x2c9),
'XOpkJ': _0x1cd01d(0x3a6),
'iOaGQ': _0x1cd01d(0x306),
'uIZrh': _0x1cd01d(0x2f6),
'maOml': _0x1cd01d(0x21e),
'kJixo': _0x1cd01d(0x2a6),
'UgQzk': _0x1cd01d(0x31d),
'zyeHF': _0x1cd01d(0x22c),
'GPmSe': _0x1cd01d(0x282) + 'om',
'HIEhJ': _0x1cd01d(0x318) + 'm',
'SvZuD': _0x1cd01d(0x2fe),
'SaoFF': function (_0x49391c, _0x475da1) {
return _0x49391c < _0x475da1;
},
'dhhxf': function (_0x4f647c, _0x40da9b) {
return _0x4f647c === _0x40da9b;
},
'SSpmn': _0x1cd01d(0x3c9) + 'a_',
'SajNK': _0x1cd01d(0x3c9) + 'w_',
'IKQGq': _0x1cd01d(0x3c9) + 'v_'
};
try {
let _0x59a0c5 = ![];
const _0x472579 = new URL(_0x12df4f)[_0x1cd01d(0x3b4)], _0x39662c = [
_0x2ec382[_0x1cd01d(0x21c)],
_0x2ec382[_0x1cd01d(0x385)],
_0x2ec382[_0x1cd01d(0x38b)],
_0x2ec382[_0x1cd01d(0x34b)],
_0x2ec382[_0x1cd01d(0x2c0)],
_0x2ec382[_0x1cd01d(0x1f8)],
_0x2ec382[_0x1cd01d(0x26c)],
_0x2ec382[_0x1cd01d(0x2c3)],
_0x2ec382[_0x1cd01d(0x3c7)],
_0x2ec382[_0x1cd01d(0x2dd)],
_0x2ec382[_0x1cd01d(0x391)]
];
for (let _0x587e2f = 0x1168 * -0x1 + -0x2 * -0xffa + -0xe8c; _0x2ec382[_0x1cd01d(0x29f)](_0x587e2f, _0x39662c[_0x1cd01d(0x2d3)]); _0x587e2f++) {
if (_0x472579[_0x1cd01d(0x39f)](_0x39662c[_0x587e2f])) {
if (_0x2ec382[_0x1cd01d(0x358)](_0x39662c[_0x587e2f], _0x2ec382[_0x1cd01d(0x21c)])) {
if (_0x12df4f[_0x1cd01d(0x39f)](_0x2ec382[_0x1cd01d(0x267)]) || _0x12df4f[_0x1cd01d(0x39f)](_0x2ec382[_0x1cd01d(0x33a)]) || _0x12df4f[_0x1cd01d(0x39f)](_0x2ec382[_0x1cd01d(0x333)])) {
_0x59a0c5 = !![];
break;
}
} else {
_0x59a0c5 = !![];
break;
}
}
}
return _0x59a0c5;
} catch (_0x576cf8) {
SpiderDebug[_0x1cd01d(0x24a)](_0x576cf8);
}
return ![];
}
function isBlackVodUrl(_0x307605, _0x697c5d) {
const _0x4a2c61 = _0x24a000, _0x27d7bc = {
'gudMv': _0x4a2c61(0x2ad),
'FRrZt': _0x4a2c61(0x3be)
};
return _0x697c5d[_0x4a2c61(0x39f)](_0x27d7bc[_0x4a2c61(0x34c)]) || _0x697c5d[_0x4a2c61(0x39f)](_0x27d7bc[_0x4a2c61(0x210)]);
}
function fixJsonVodHeader(_0x194079, _0x3e179a, _0x56db4f) {
const _0x555e90 = _0x24a000, _0x3e9dd1 = {
'GlESc': function (_0x2d4a85, _0x14b753) {
return _0x2d4a85 === _0x14b753;
},
'dixTK': _0x555e90(0x2b1) + 'om',
'owLGb': _0x555e90(0x287),
'UKmVu': _0x555e90(0x261),
'wLZlp': _0x555e90(0x1fe) + '.0',
'yLRcH': _0x555e90(0x342),
'hhBdZ': _0x555e90(0x2f4),
'jIZRt': _0x555e90(0x2fb) + _0x555e90(0x2d6) + _0x555e90(0x22f),
'AQtGT': function (_0x35b12f, _0x2200a0) {
return _0x35b12f + _0x2200a0;
},
'tVGhB': _0x555e90(0x3b0) + _0x555e90(0x21d) + _0x555e90(0x2ae) + _0x555e90(0x26d) + _0x555e90(0x24e) + _0x555e90(0x37a) + _0x555e90(0x206) + _0x555e90(0x3c4) + _0x555e90(0x20e) + _0x555e90(0x360) + _0x555e90(0x38c) + _0x555e90(0x2e7)
};
_0x3e9dd1[_0x555e90(0x326)](_0x194079, null) && (_0x194079 = {});
if (_0x3e179a[_0x555e90(0x39f)](_0x3e9dd1[_0x555e90(0x260)]))
_0x194079[_0x3e9dd1[_0x555e90(0x1fc)]] = '\x20', _0x194079[_0x3e9dd1[_0x555e90(0x232)]] = _0x3e9dd1[_0x555e90(0x29b)];
else {
if (_0x56db4f[_0x555e90(0x39f)](_0x3e9dd1[_0x555e90(0x30b)]))
_0x194079[_0x3e9dd1[_0x555e90(0x1fc)]] = '\x20', _0x194079[_0x3e9dd1[_0x555e90(0x232)]] = _0x3e9dd1[_0x555e90(0x29b)];
else
_0x3e179a[_0x555e90(0x39f)](_0x3e9dd1[_0x555e90(0x27a)]) && (_0x194079[_0x3e9dd1[_0x555e90(0x1fc)]] = _0x3e9dd1[_0x555e90(0x209)], _0x194079[_0x3e9dd1[_0x555e90(0x232)]] = _0x3e9dd1[_0x555e90(0x335)]('\x20', _0x3e9dd1[_0x555e90(0x363)]));
}
return _0x194079;
}
const snifferMatch = /http((?!http).){26,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\?.*|http((?!http).){26,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}\/m3u8\?pt=m3u8.*|http((?!http).)*?default\.ixigua\.com\/.*|http((?!http).)*?cdn-tos[^\?]*|http((?!http).)*?\/obj\/tos[^\?]*|http.*?\/player\/m3u8play\.php\?url=.*|http.*?\/player\/.*?[pP]lay\.php\?url=.*|http.*?\/playlist\/m3u8\/\?vid=.*|http.*?\.php\?type=m3u8&.*|http.*?\/download.aspx\?.*|http.*?\/api\/up_api.php\?.*|https.*?\.66yk\.cn.*|http((?!http).)*?netease\.com\/file\/.*/;
function isVideoFormat(_0x5515b3) {
const _0xf7bf44 = _0x24a000, _0x2fce53 = {
'HdgCs': _0xf7bf44(0x3b7),
'iPFTd': _0xf7bf44(0x1ef)
};
if (snifferMatch[_0xf7bf44(0x36e)](_0x5515b3))
return !_0x5515b3[_0xf7bf44(0x39f)](_0x2fce53[_0xf7bf44(0x309)]) || !_0x5515b3[_0xf7bf44(0x39f)](_0x2fce53[_0xf7bf44(0x1ee)]);
return ![];
}
function isVideo(_0x507319) {
const _0x1fc38a = _0x24a000, _0x2030df = {
'zjKSG': _0x1fc38a(0x350),
'omoGP': _0x1fc38a(0x35c)
};
return !_0x507319[_0x1fc38a(0x39f)](_0x2030df[_0x1fc38a(0x357)]) && !_0x507319[_0x1fc38a(0x39f)](_0x2030df[_0x1fc38a(0x248)]);
}
function UA(_0x59c882) {
const _0x1c26ca = _0x24a000, _0x800c4e = {
'KVRHH': _0x1c26ca(0x343),
'FVRLu': _0x1c26ca(0x286) + '.0',
'dZwJv': _0x1c26ca(0x3b0) + _0x1c26ca(0x21d) + _0x1c26ca(0x2ae) + _0x1c26ca(0x26d) + _0x1c26ca(0x24e) + _0x1c26ca(0x37a) + _0x1c26ca(0x206) + _0x1c26ca(0x3c4) + _0x1c26ca(0x20e) + _0x1c26ca(0x360) + _0x1c26ca(0x38c) + _0x1c26ca(0x2e7)
};
if (_0x59c882[_0x1c26ca(0x39f)](_0x800c4e[_0x1c26ca(0x289)]))
return _0x800c4e[_0x1c26ca(0x39c)];
return _0x800c4e[_0x1c26ca(0x305)];
}
function getCateUrl(_0x23db0c) {
const _0x49974e = _0x24a000, _0x37953d = {
'ECjej': _0x49974e(0x27c) + 'p',
'sFIgg': _0x49974e(0x25c),
'TJcyc': function (_0xdc8f68, _0x11b1f5) {
return _0xdc8f68 + _0x11b1f5;
},
'BxtWY': _0x49974e(0x2c4),
'tMugk': _0x49974e(0x343),
'YouNd': function (_0x4b91da, _0x11cfe1) {
return _0x4b91da + _0x11cfe1;
},
'GRdgl': _0x49974e(0x367)
};
if (_0x23db0c[_0x49974e(0x39f)](_0x37953d[_0x49974e(0x2d0)]) || _0x23db0c[_0x49974e(0x39f)](_0x37953d[_0x49974e(0x29c)]))
return _0x37953d[_0x49974e(0x235)](_0x23db0c, _0x37953d[_0x49974e(0x33c)]);
else
return _0x23db0c[_0x49974e(0x39f)](_0x37953d[_0x49974e(0x32e)]) ? _0x37953d[_0x49974e(0x236)](_0x23db0c, _0x37953d[_0x49974e(0x381)]) : '';
}
function getPlayUrlPrefix(_0x5ee424) {
const _0x1bf8f8 = _0x24a000, _0x598264 = {
'FSokj': _0x1bf8f8(0x27c) + 'p',
'FPdLA': _0x1bf8f8(0x25c),
'JQGUp': function (_0xdfc607, _0x448366) {
return _0xdfc607 + _0x448366;
},
'ToKis': _0x1bf8f8(0x348) + _0x1bf8f8(0x2a7),
'NaZIK': _0x1bf8f8(0x343),
'hggTv': function (_0x4737db, _0x8a0e91) {
return _0x4737db + _0x8a0e91;
},
'rcDwJ': _0x1bf8f8(0x30f) + _0x1bf8f8(0x22b)
};
if (_0x5ee424[_0x1bf8f8(0x39f)](_0x598264[_0x1bf8f8(0x323)]) || _0x5ee424[_0x1bf8f8(0x39f)](_0x598264[_0x1bf8f8(0x2a2)]))
return _0x598264[_0x1bf8f8(0x299)](_0x5ee424, _0x598264[_0x1bf8f8(0x3b5)]);
else
return _0x5ee424[_0x1bf8f8(0x39f)](_0x598264[_0x1bf8f8(0x21b)]) ? _0x598264[_0x1bf8f8(0x2de)](_0x5ee424, _0x598264[_0x1bf8f8(0x398)]) : '';
}
function getRecommendUrl(_0x80e8f1) {
const _0x43bed3 = _0x24a000, _0x5b36fd = {
'TOllB': _0x43bed3(0x27c) + 'p',
'PVTeb': _0x43bed3(0x25c),
'zyflE': function (_0x5b4b9d, _0x36c3c2) {
return _0x5b4b9d + _0x36c3c2;
},
'ijImY': _0x43bed3(0x268) + _0x43bed3(0x31b),
'EfLao': _0x43bed3(0x343),
'Sebfw': function (_0x1c1df5, _0x470f1b) {
return _0x1c1df5 + _0x470f1b;
},
'SdUcg': _0x43bed3(0x291)
};
if (_0x80e8f1[_0x43bed3(0x39f)](_0x5b36fd[_0x43bed3(0x354)]) || _0x80e8f1[_0x43bed3(0x39f)](_0x5b36fd[_0x43bed3(0x2ca)]))
return _0x5b36fd[_0x43bed3(0x2b0)](_0x80e8f1, _0x5b36fd[_0x43bed3(0x336)]);
else
return _0x80e8f1[_0x43bed3(0x39f)](_0x5b36fd[_0x43bed3(0x23b)]) ? _0x5b36fd[_0x43bed3(0x3b1)](_0x80e8f1, _0x5b36fd[_0x43bed3(0x2b4)]) : '';
}
function _0x30bd() {
const _0x2b0aa4 = [
'Rhngk',
'0\x20(Macinto',
'nqoHH',
'Udbgi',
'VVWwW',
'vod_url_wi',
'comic+4K=m',
'vod_conten',
'vod_area',
'bkKAx',
'分类+全部=+电影=',
'd_id=',
'acfun.cn',
'分类接口错误:',
'GMucY',
'i.com/',
'?ac=detail',
'hQLKD',
'UKmVu',
'Uqurg',
'11bSKqkq',
'TJcyc',
'YouNd',
'&pg=1',
'fuavN',
'Zelfl',
'+2008+2007',
'EfLao',
'limit',
'vod_actor',
'XhjKd',
'ist&t=',
'gINFD',
'?ac=list&z',
'匪+犯罪+动画+奇幻',
'ZrFqI',
'sh;\x20Intel\x20',
'SyFuQ',
'6057730KXKKrO',
'nAAlp',
'omoGP',
'+2024+2023',
'log',
'zlCKO',
'?type=',
'10ifJwJp',
')\x20AppleWeb',
'get',
'?wd=',
'th_player',
'nDVeB',
'MJeua',
'nFrDW',
'headers',
'area',
'tvplay+综艺=',
'state',
'indexOf',
'xjYPA',
'lass=',
'xgapp',
'search?tex',
'mWrNJ',
'axNZh',
'dixTK',
'User-Agent',
'eXwPu',
'pg=#PN#',
'ome/91.0.4',
'split',
'AdIkD',
'SSpmn',
'index_vide',
'okhttp/3.1',
'+2016+2015',
'&page=#PN#',
'UgQzk',
'Win64;\x20x64',
'RZVZb',
'rAAqR',
'FMcfW',
'qhbab',
'qvaVO',
'fBrnR',
'ts+评分=scor',
'vqyhb',
'uUBbz',
'SKgeb',
'tvshow+动漫=',
'FEuLQ',
'hhBdZ',
'lang',
'api.php/ap',
'SXiUp',
'rQSdz',
'OdHdL',
'bkfnv',
'cCmOD',
'bilibili.c',
'uzruO',
'+2006+2005',
'AEWJN',
'okhttp/4.1',
'Referer',
'/vod',
'KVRHH',
'大+其他\x0a筛选yea',
'fcPwA',
'gHEas',
'rfYvZ',
'ist&wd=',
'KqkGD',
'vod_pic',
'/vodPhbAll',
'http',
'UlRrv',
'PPjsc',
'9IUFsEu',
'+2012+2011',
'UZCOD',
'xVjfI',
'JQGUp',
'WodPN',
'wLZlp',
'sFIgg',
'+大陆+香港+台湾+',
'zMWEf',
'SaoFF',
'qrmQn',
'Qzbyi',
'FPdLA',
'emPiw',
'rrjLd',
'QIbLN',
'mgtv.com',
'il?id=',
'ovie_4k+体育',
'HHuLq',
'+农村+惊悚+惊悚+',
'=tiyu\x0a筛选cl',
'vod_list',
'973973.xyz',
'\x20NT\x2010.0;\x20',
'=1&area=&t',
'zyflE',
'www.mgtv.c',
'+2000',
'IWfGL',
'SdUcg',
'科幻+剧情+战争+警',
'umjti',
'+2018+2017',
'vod_name',
'eCaVc',
'nvSRb',
'fkHDy',
'raJIH',
'&pg=',
'Xavsg',
'xaxYD',
'maOml',
'cchWu',
'class&star',
'zyeHF',
'nav?token=',
'wovvt',
'startsWith',
'VeDky',
'$$$',
'iqiyi.com',
'PVTeb',
'user-agent',
'lpEGG',
'vod_direct',
'pagecount',
'/provide/v',
'ECjej',
'https://ji',
'OIKvw',
'length',
'vlist',
'fari/537.3',
'ww.bilibil',
'ea&type=筛选',
'Mac\x20OS\x20X\x201',
'QDURc',
'伦理+情色+福利+三',
'y=c87681c9',
'筛选area&lan',
'HIEhJ',
'hggTv',
'oRses',
'+爱情+恐怖+动作+',
'2.11',
'jIVVu',
'header',
'referer',
'replace',
'video?tid=',
'37.36',
'YTcha',
'type_exten',
'筛选area+全部=',
'qaLZN',
'3d5e430cac',
'znjdK',
'bfaLF',
'IKCWR',
'g=筛选lang&y',
'QZvys',
'erty',
'fIzpG',
'bilibili',
'4oTuTQS',
'le.com',
'vod_play_l',
'zMZmQ',
'class',
'472.114\x20Sa',
'\x20https://w',
'it=18&page',
'PzBoQ',
'pptv.com',
'JpyoV',
'GGHOc',
'OvREh',
'AsjQf',
'UwOqb',
'1aa5&url=',
'dZwJv',
'youku.com',
'ofHAn',
'ulXQF',
'HdgCs',
'HUsMa',
'yLRcH',
'XjiyL',
'TVfJB',
'zFyTh',
'/detail?vo',
'Header',
'vod_class',
'+2010+2009',
'IFEDw',
'trim',
'isArray',
'eXDqH',
'TmtUN',
'baofeng.co',
'KRVeJ',
'537.36\x20(KH',
'o?token=',
'IpeiC',
'sohu.com',
'wpdZs',
'+2014+2013',
'rDTqC',
'WNSZb',
'wWTGM',
'FSokj',
'?ac=videol',
'mqFNW',
'GlESc',
'EsiSO',
'fUjyK',
'+2002+2001',
'ghVBe',
'mEBLG',
'vod_year',
'parse2',
'tMugk',
'glzca',
'code',
'+2022+2021',
'push',
'IKQGq',
'ViinS',
'AQtGT',
'ijImY',
'host',
'ext',
'data',
'SajNK',
'MAPTF',
'BxtWY',
'floor',
'xIeyb',
'fmHZd',
'ear=筛选year',
'exi.jdyx.p',
'titan.mgtv',
'.vod',
'hPgPi',
'object',
'vod_remark',
'MWcjN',
'video_deta',
'ro/api/?ke',
'11069064LnYXCB',
'uIZrh',
'gudMv',
'vod_play_f',
'VoCNI',
'美国+英国+法国+日',
'.mp4',
'stype',
'<html',
'substring',
'TOllB',
'year',
'+武侠+冒险+枪战+',
'zjKSG',
'dhhxf',
'EeHWO',
'UqvHM',
'time+最热=hi',
'.m3u8',
'280463TzKcwD',
'dftSy',
'ZuLFK',
'.0.4472.12',
'ype=&start',
'XhSQM',
'tVGhB',
'HHlAe',
'join',
'url',
'/types',
'eRIpS',
'Yoody',
'mSlqf',
'lass&area=',
'影+古装+历史+运动',
'+印度+西班牙+加拿',
'test',
'number',
'r+全部=+2025',
'xIbro',
'CWGYP',
'&limit=18&',
'&ids=',
'qFHgN',
'keys',
'player_inf',
'TYodq',
'=#PN#',
'Kit/537.36',
'TML,\x20like\x20',
'qFCgy',
'type_name',
'yCXuy',
'WpxrU',
'fESQm',
'GRdgl',
'movie&page',
'muyni',
'+2020+2019',
'XOpkJ',
'&area=筛选ar',
'+全部=+',
'totalpage',
'amdth',
'sVWid',
'iOaGQ',
'4\x20Safari/5',
'ldHaK',
'IvNmw',
'yKQXX',
'+2004+2003',
'SvZuD',
'vgGfV',
'LtQsE',
'list',
'ePAKK',
'set',
'YmXhB',
'rcDwJ',
'total',
'AAtXX',
'典+青春+文艺+微电',
'FVRLu',
'xUxPS',
'Headers',
'includes',
'vod_play_u',
'ist',
'stringify',
'排序+全部=+最新=',
't=筛选year',
'movie+连续剧=',
'v.qq.com',
'snexY',
'VdBFp',
'rVGaG',
'VpQHj',
'PhMDd',
'AhyMI',
'1810774KTwiyo',
'iZers',
'0_15_7)\x20Ap',
'Mozilla/5.',
'Sebfw',
'nQbvl',
'hasOwnProp',
'hostname',
'ToKis',
'nextlink',
'cdn-tos',
'opiXu',
'Ojjqt',
'pic',
'vuXnk',
'TSUgZ',
'4391967FAEkgj',
'.fit:',
'rom',
'IkIJp',
'18PgCvfM',
'Knznh',
'vod_id',
'ike\x20Gecko)',
'type_id',
'iiExg',
'GPmSe',
'ist&t=1&pg',
'iqiyi.com/',
'fuDvD',
'from',
'VYHXK',
'nHBFf',
'jBTDy',
'3217345tuaNYa',
'forEach',
'恐怖+悬疑+惊悚+经',
'hXQXU',
'title',
'VKbJM',
'级+儿童+网络电影\x0a',
'BIDOf',
'lcxHY',
'iPFTd',
'.js',
'CrXgk',
'bgAzg',
'ass+全部=+喜剧',
'QPVjy',
'clYHp',
'&class=筛选c',
'skey',
'pksWn',
'kJixo',
'Gecko)\x20Chr',
'&page=',
'null',
'owLGb',
'https:',
'\x20Mozilla/5',
'本+韩国+德国+泰国',
'KPgHF',
'KitoD',
'filters',
'pleWebKit/',
'wRtKU',
'WCCoT',
'\x20(KHTML,\x20l',
'PeDZZ',
'UhViA',
'jIZRt',
'xAftd',
'NthFz',
'YfnZq',
'parse_api',
'\x20Chrome/91',
'RvYlw',
'FRrZt',
'show',
'KltAz',
'parse',
'name',
'value',
'?ac=list&c',
'content',
'd351f00e83',
'eFJbi',
'&by=排序&lim',
'NaZIK',
'updKI',
'0\x20(Windows',
'tudou.com',
'36490200zFFXUy'
];
_0x30bd = function () {
return _0x2b0aa4;
};
return _0x30bd();
}
function _0x3bf3(_0x57863f, _0x6af7ec) {
const _0x5c1083 = _0x30bd();
return _0x3bf3 = function (_0x20a234, _0x96f7f4) {
_0x20a234 = _0x20a234 - (0x17 * -0x157 + 0x1726 + 0x98e * 0x1);
let _0xf191c3 = _0x5c1083[_0x20a234];
return _0xf191c3;
}, _0x3bf3(_0x57863f, _0x6af7ec);
}
function getFilterTypes(_0x5a6e13, _0x2b8f18) {
const _0x3bda2f = _0x24a000, _0x23b59c = {
'JpyoV': function (_0x35c539, _0x252050) {
return _0x35c539 !== _0x252050;
},
'xIeyb': function (_0x58ea17, _0x3b5352) {
return _0x58ea17 === _0x3b5352;
},
'yCXuy': _0x3bda2f(0x2f9),
'lcxHY': _0x3bda2f(0x256),
'lpEGG': function (_0x23bff1, _0x3f2179) {
return _0x23bff1 === _0x3f2179;
},
'jIVVu': _0x3bda2f(0x27b),
'Rhngk': _0x3bda2f(0x355),
'GGHOc': function (_0x521589, _0x297d02) {
return _0x521589 + _0x297d02;
},
'xVjfI': function (_0x3f3091, _0x4aeb74) {
return _0x3f3091 + _0x4aeb74;
},
'uzruO': function (_0x5d7d7c, _0xe98ef2) {
return _0x5d7d7c + _0xe98ef2;
},
'amdth': _0x3bda2f(0x387),
'qvaVO': _0x3bda2f(0x343),
'fkHDy': _0x3bda2f(0x3a3) + _0x3bda2f(0x35b) + _0x3bda2f(0x274) + 'e',
'UqvHM': _0x3bda2f(0x27c) + 'p',
'UhViA': _0x3bda2f(0x25c),
'wovvt': _0x3bda2f(0x22a) + _0x3bda2f(0x3a5) + _0x3bda2f(0x257) + _0x3bda2f(0x278) + _0x3bda2f(0x226) + _0x3bda2f(0x2a8) + _0x3bda2f(0x2ab) + _0x3bda2f(0x1f2) + _0x3bda2f(0x2e0) + _0x3bda2f(0x2b5) + _0x3bda2f(0x242) + _0x3bda2f(0x356) + _0x3bda2f(0x1e7) + _0x3bda2f(0x39b) + _0x3bda2f(0x36c) + _0x3bda2f(0x2aa) + _0x3bda2f(0x2da) + _0x3bda2f(0x1eb) + _0x3bda2f(0x2ea) + _0x3bda2f(0x29d) + _0x3bda2f(0x34f) + _0x3bda2f(0x1ff) + _0x3bda2f(0x36d) + _0x3bda2f(0x28a) + _0x3bda2f(0x370) + _0x3bda2f(0x249) + _0x3bda2f(0x331) + _0x3bda2f(0x384) + _0x3bda2f(0x2b7) + _0x3bda2f(0x26a) + _0x3bda2f(0x31f) + _0x3bda2f(0x296) + _0x3bda2f(0x312) + _0x3bda2f(0x23a) + _0x3bda2f(0x284) + _0x3bda2f(0x390) + _0x3bda2f(0x329) + _0x3bda2f(0x2b2)
};
let _0x478f92 = '';
if (_0x23b59c[_0x3bda2f(0x2ff)](_0x2b8f18, null))
for (let _0x15bccf in _0x2b8f18) {
if (_0x23b59c[_0x3bda2f(0x33e)](_0x15bccf, _0x23b59c[_0x3bda2f(0x37e)]) || _0x23b59c[_0x3bda2f(0x33e)](_0x15bccf, _0x23b59c[_0x3bda2f(0x1ed)]) || _0x23b59c[_0x3bda2f(0x2cc)](_0x15bccf, _0x23b59c[_0x3bda2f(0x2e2)]) || _0x23b59c[_0x3bda2f(0x33e)](_0x15bccf, _0x23b59c[_0x3bda2f(0x220)]))
try {
_0x478f92 += _0x23b59c[_0x3bda2f(0x300)](_0x23b59c[_0x3bda2f(0x298)](_0x23b59c[_0x3bda2f(0x283)](_0x23b59c[_0x3bda2f(0x300)]('筛选', _0x15bccf), _0x23b59c[_0x3bda2f(0x389)]), _0x2b8f18[_0x15bccf][_0x3bda2f(0x2e5)](/,/g, '+')), '\x0a');
} catch (_0x1d7e3a) {
}
}
if (_0x5a6e13[_0x3bda2f(0x39f)](_0x23b59c[_0x3bda2f(0x272)]))
_0x478f92 += _0x23b59c[_0x3bda2f(0x298)]('\x0a', _0x23b59c[_0x3bda2f(0x2bb)]);
else {
if (_0x5a6e13[_0x3bda2f(0x39f)](_0x23b59c[_0x3bda2f(0x35a)]) || _0x5a6e13[_0x3bda2f(0x39f)](_0x23b59c[_0x3bda2f(0x208)])) {
} else
_0x478f92 = _0x23b59c[_0x3bda2f(0x2c5)];
}
return _0x478f92;
}
function getCateFilterUrlSuffix(_0x43934c) {
const _0x85df30 = _0x24a000, _0x46e977 = {
'TYodq': _0x85df30(0x27c) + 'p',
'eXwPu': _0x85df30(0x25c),
'CWGYP': _0x85df30(0x1f5) + _0x85df30(0x36b) + _0x85df30(0x2dc) + _0x85df30(0x2f0) + _0x85df30(0x340) + _0x85df30(0x373) + _0x85df30(0x263),
'PzBoQ': _0x85df30(0x343),
'eXDqH': _0x85df30(0x1f5) + _0x85df30(0x36b) + _0x85df30(0x2dc) + _0x85df30(0x2f0) + _0x85df30(0x340) + _0x85df30(0x21a) + _0x85df30(0x2fc) + _0x85df30(0x379),
'ldHaK': _0x85df30(0x26b) + _0x85df30(0x386) + _0x85df30(0x2d7) + _0x85df30(0x2c2) + _0x85df30(0x3a4)
};
if (_0x43934c[_0x85df30(0x39f)](_0x46e977[_0x85df30(0x378)]) || _0x43934c[_0x85df30(0x39f)](_0x46e977[_0x85df30(0x262)]))
return _0x46e977[_0x85df30(0x372)];
else
return _0x43934c[_0x85df30(0x39f)](_0x46e977[_0x85df30(0x2fd)]) ? _0x46e977[_0x85df30(0x316)] : _0x46e977[_0x85df30(0x38d)];
}
function getCateFilterUrlPrefix(_0x4c93b0) {
const _0x3fffd5 = _0x24a000, _0x242566 = {
'UlRrv': _0x3fffd5(0x27c) + 'p',
'XhSQM': _0x3fffd5(0x25c),
'EsiSO': function (_0x42f55a, _0xb7ae1a) {
return _0x42f55a + _0xb7ae1a;
},
'hQLKD': _0x3fffd5(0x2e6),
'QPVjy': _0x3fffd5(0x343),
'VKbJM': function (_0x1ee890, _0x56d819) {
return _0x1ee890 + _0x56d819;
},
'rDTqC': _0x3fffd5(0x24c),
'KltAz': _0x3fffd5(0x216) + _0x3fffd5(0x25b)
};
if (_0x4c93b0[_0x3fffd5(0x39f)](_0x242566[_0x3fffd5(0x293)]) || _0x4c93b0[_0x3fffd5(0x39f)](_0x242566[_0x3fffd5(0x362)]))
return _0x242566[_0x3fffd5(0x327)](_0x4c93b0, _0x242566[_0x3fffd5(0x231)]);
else
return _0x4c93b0[_0x3fffd5(0x39f)](_0x242566[_0x3fffd5(0x1f3)]) ? _0x242566[_0x3fffd5(0x1ea)](_0x4c93b0, _0x242566[_0x3fffd5(0x320)]) : _0x242566[_0x3fffd5(0x1ea)](_0x4c93b0, _0x242566[_0x3fffd5(0x212)]);
}
function isBan(_0x559ee9) {
const _0x593d11 = _0x24a000, _0x1bf583 = {
'KqkGD': function (_0x392b7e, _0x3e9c56) {
return _0x392b7e === _0x3e9c56;
},
'qFHgN': function (_0x5bc06d, _0xd9c8b2) {
return _0x5bc06d === _0xd9c8b2;
},
'nHBFf': function (_0x5d5ccb, _0x92465a) {
return _0x5d5ccb === _0x92465a;
}
};
return _0x1bf583[_0x593d11(0x28f)](_0x559ee9, '伦理') || _0x1bf583[_0x593d11(0x375)](_0x559ee9, '情色') || _0x1bf583[_0x593d11(0x1e3)](_0x559ee9, '福利');
}
function getSearchUrl(_0x37d0e3, _0x2f490d) {
const _0x5e71d3 = _0x24a000, _0x17c124 = {
'iiExg': _0x5e71d3(0x343),
'ulXQF': function (_0x1c2f9a, _0x17943f) {
return _0x1c2f9a + _0x17943f;
},
'VoCNI': function (_0x80c03a, _0x241ab6) {
return _0x80c03a + _0x241ab6;
},
'IvNmw': _0x5e71d3(0x250),
'PhMDd': _0x5e71d3(0x1fa),
'sVWid': _0x5e71d3(0x27c) + 'p',
'AdIkD': _0x5e71d3(0x25c),
'rVGaG': _0x5e71d3(0x25d) + 't=',
'axNZh': _0x5e71d3(0x2bd),
'WNSZb': function (_0xe30936, _0x1a9baa) {
return _0xe30936 + _0x1a9baa;
},
'nDVeB': _0x5e71d3(0x241) + 'm='
};
if (_0x37d0e3[_0x5e71d3(0x39f)](_0x17c124[_0x5e71d3(0x3c6)]))
return _0x17c124[_0x5e71d3(0x308)](_0x17c124[_0x5e71d3(0x34e)](_0x17c124[_0x5e71d3(0x34e)](_0x37d0e3, _0x17c124[_0x5e71d3(0x38e)]), _0x2f490d), _0x17c124[_0x5e71d3(0x3ab)]);
else {
if (_0x37d0e3[_0x5e71d3(0x39f)](_0x17c124[_0x5e71d3(0x38a)]) || _0x37d0e3[_0x5e71d3(0x39f)](_0x17c124[_0x5e71d3(0x266)]))
return _0x17c124[_0x5e71d3(0x308)](_0x17c124[_0x5e71d3(0x34e)](_0x17c124[_0x5e71d3(0x34e)](_0x37d0e3, _0x17c124[_0x5e71d3(0x3a9)]), _0x2f490d), _0x17c124[_0x5e71d3(0x25f)]);
else {
if (urlPattern1[_0x5e71d3(0x36e)](_0x37d0e3))
return _0x17c124[_0x5e71d3(0x321)](_0x17c124[_0x5e71d3(0x308)](_0x17c124[_0x5e71d3(0x34e)](_0x37d0e3, _0x17c124[_0x5e71d3(0x252)]), _0x2f490d), _0x17c124[_0x5e71d3(0x3ab)]);
}
}
return '';
}
function findJsonArray(_0x2c154b, _0x4dc412, _0xe7aee) {
const _0x4dd129 = _0x24a000, _0x1bb544 = {
'vqyhb': function (_0xb64ed9, _0x4d11c7) {
return _0xb64ed9 === _0x4d11c7;
},
'UwOqb': _0x4dd129(0x345),
'VpQHj': function (_0x5b1b6f, _0x57fdc1) {
return _0x5b1b6f !== _0x57fdc1;
},
'fESQm': function (_0x488b96, _0x2ffe35, _0x2d214e, _0x3f9aed) {
return _0x488b96(_0x2ffe35, _0x2d214e, _0x3f9aed);
},
'RvYlw': function (_0x2e40a7, _0xece297) {
return _0x2e40a7 === _0xece297;
},
'CrXgk': function (_0x48a030, _0x1e10e3) {
return _0x48a030 !== _0x1e10e3;
}
};
Object[_0x4dd129(0x376)](_0x2c154b)[_0x4dd129(0x1e6)](_0x4410f9 => {
const _0x53867c = _0x4dd129, _0x8beb43 = {
'TSUgZ': function (_0x52410f, _0x64397c) {
const _0x2a0b08 = _0x3bf3;
return _0x1bb544[_0x2a0b08(0x275)](_0x52410f, _0x64397c);
},
'FMcfW': _0x1bb544[_0x53867c(0x303)],
'OvREh': function (_0x17e635, _0x1e79bc) {
const _0x2b8dff = _0x53867c;
return _0x1bb544[_0x2b8dff(0x3aa)](_0x17e635, _0x1e79bc);
},
'RZVZb': function (_0x2aff9c, _0x16add9, _0x39fb37, _0x56dec0) {
const _0x399614 = _0x53867c;
return _0x1bb544[_0x399614(0x380)](_0x2aff9c, _0x16add9, _0x39fb37, _0x56dec0);
}
};
try {
const _0x5b9b85 = _0x2c154b[_0x4410f9];
_0x1bb544[_0x53867c(0x20f)](_0x4410f9, _0x4dc412) && Array[_0x53867c(0x315)](_0x5b9b85) && _0xe7aee[_0x53867c(0x332)](_0x5b9b85), _0x1bb544[_0x53867c(0x20f)](typeof _0x5b9b85, _0x1bb544[_0x53867c(0x303)]) && _0x1bb544[_0x53867c(0x1f0)](_0x5b9b85, null) && (Array[_0x53867c(0x315)](_0x5b9b85) ? _0x5b9b85[_0x53867c(0x1e6)](_0xce021c => {
const _0x7a8860 = _0x53867c;
_0x8beb43[_0x7a8860(0x3bc)](typeof _0xce021c, _0x8beb43[_0x7a8860(0x270)]) && _0x8beb43[_0x7a8860(0x301)](_0xce021c, null) && _0x8beb43[_0x7a8860(0x26e)](findJsonArray, _0xce021c, _0x4dc412, _0xe7aee);
}) : _0x1bb544[_0x53867c(0x380)](findJsonArray, _0x5b9b85, _0x4dc412, _0xe7aee));
} catch (_0x161cd2) {
SpiderDebug[_0x53867c(0x24a)](_0x161cd2);
}
});
}
function jsonArr2Str(_0x2ac5a3) {
const _0x171e1b = _0x24a000, _0x3f6d96 = {
'IFEDw': function (_0x584b3a, _0x1079df) {
return _0x584b3a < _0x1079df;
}
}, _0x36becd = [];
for (let _0x29367c = -0x1 * -0x1987 + 0x1 * -0x1323 + -0x664; _0x3f6d96[_0x171e1b(0x313)](_0x29367c, _0x2ac5a3[_0x171e1b(0x2d3)]); _0x29367c++) {
try {
_0x36becd[_0x171e1b(0x332)](_0x2ac5a3[_0x29367c]);
} catch (_0x3e4b7e) {
SpiderDebug[_0x171e1b(0x24a)](_0x3e4b7e);
}
}
return _0x36becd[_0x171e1b(0x365)](',');
}
function getHeaders(_0x2dbbbb) {
const _0x690d7 = _0x24a000, _0x11947b = {
'OdHdL': _0x690d7(0x261),
'VeDky': function (_0x4325bb, _0x1c5140) {
return _0x4325bb(_0x1c5140);
}
}, _0x24e5fe = {};
return _0x24e5fe[_0x11947b[_0x690d7(0x27f)]] = _0x11947b[_0x690d7(0x2c7)](UA, _0x2dbbbb), _0x24e5fe;
}
function isJsonString(_0x52901c) {
const _0x44dab5 = _0x24a000;
try {
JSON[_0x44dab5(0x213)](_0x52901c);
} catch (_0x568d34) {
return ![];
}
return !![];
}
export function __jsEvalReturn() {
return {
'init': init,
'home': home,
'homeVod': homeVod,
'category': category,
'detail': detail,
'play': play,
'search': search
};
}
+1669
View File
@@ -0,0 +1,1669 @@
/*
@header({
searchable: 1,
filterable: 1,
quickSearch: 1,
title: '聚合短剧',
lang: 'cat'
})
*/
import { Crypto as CryptoJS } from 'assets://js/lib/cat.js';
let debug = 1;
let siteName = '聚合短剧';
let xingya_headers = {};
let niuniu_headers = {};
let niuniu_token = '';
let niuniu_access_token = '';
let hema_headers = {};
// 搜索缓存
const searchCache = new Map();
const CACHE_TTL = 5 * 60 * 1000;
// 分类排除规则
const cate_remove = ['分类排除', '软鸭', '碎片', '锦鲤', '番茄', '甜圈'];
const UA = "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";
const aggConfig = {
keys: 'd3dGiJc651gSQ8w1',
searchLimit: 20,
searchTimeout: 8000,
charMap: {
'+': 'P', '/': 'X', '0': 'M', '1': 'U', '2': 'l', '3': 'E', '4': 'r', '5': 'Y', '6': 'W', '7': 'b', '8': 'd', '9': 'J',
'A': '9', 'B': 's', 'C': 'a', 'D': 'I', 'E': '0', 'F': 'o', 'G': 'y', 'H': '_', 'I': 'H', 'J': 'G', 'K': 'i', 'L': 't',
'M': 'g', 'N': 'N', 'O': 'A', 'P': '8', 'Q': 'F', 'R': 'k', 'S': '3', 'T': 'h', 'U': 'f', 'V': 'R', 'W': 'q', 'X': 'C',
'Y': '4', 'Z': 'p', 'a': 'm', 'b': 'B', 'c': 'O', 'd': 'u', 'e': 'c', 'f': '6', 'g': 'K', 'h': 'x', 'i': '5', 'j': 'T',
'k': '-', 'l': '2', 'm': 'z', 'n': 'S', 'o': 'Z', 'p': '1', 'q': 'V', 'r': 'v', 's': 'j', 't': 'Q', 'u': '7', 'v': 'D',
'w': 'w', 'x': 'n', 'y': 'L', 'z': 'e'
},
headers: {
json: { 'User-Agent': 'okhttp/4.10.0', 'Content-Type': 'application/json' },
form: { 'User-Agent': 'okhttp/4.10.0', 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' },
niuniu: { 'Cache-Control': 'no-cache', 'Content-Type': 'application/json;charset=UTF-8', 'User-Agent': 'okhttp/4.12.0' },
baidu: { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': UA },
hema: {
'datas': 'e5f22c6e2c82fe001738cb9ce4696eab0556d064a55aef402e0fbe6b29a083f6538e4567de38e67de2071a49d9751526bfba45314e1fd4702b11c76ab9a3b5f873262854ba66e6715ed51364dbc6ee62c7180e047fcbcdbfd49874fc8f28674b16d90ca71a02de76c70598e0b75e647c37c2c19287e49be5f2a259d727dfc4df3d28802388bf3c356576b342e17e30a2ab74859263dba4d1c8eba79990d22d60d60927fdacb2addf2f0eaadd8887585ca2eb87f603faf0c207dda18cf67dc25b2199d303baff9e6605b3314a7d2631f62864f48619daceb9452f2b7b0667773553741856df030cca68af3c57810f983d452bb428ef5fc32206aef4865ae06c629bee7f5135547304acc7ef4e7c6df887308f2e79c493fd2ee03488722861b5bb51b09cb8911dfc92c288d94e601c066d2f9d612ad2c8d4eeb4920b1d44aff3e13fd75229b857f64925df1cf12f75a00d438c422ec1726462b915903f1dd1f4bb7cdf82cc15a6d507f80c789903e710f39a62aef073f3f93a6c681e75d295428aa290d7e98f82e7e9ad6e2b23d9086dfe8c63c5d8550b13fd61a77291473a8bdd43c7c2639f264be69d9d07f0585de4342a399275a64e7d1d4400b8ed4421a2f289f622e40cdd1cfc916a0b9ce747c924ac33e32d24b91ed5d64772d6ad6896412f52724006eabf12aaecfd6e81dad432c7b3800bbf793a1c375e3e7b4fb3b097724b5fc88a8c9bcf3dbc10cbdb252965',
'Content-Type': 'text/plain'
},
haokan: {
'User-Agent': UA,
'Talos-Module-Name': 'shortDrama',
'Talos-Module-Version': '1.0.71.1',
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
'Cookie': 'BAIDUCUID=giHCu0azv80G8SfQ0avU8gaaH8jfiv86ju2MugiR2i8-k3a35avAa1_mA'
}
}
};
// ==================== URL配置 ====================
const rule = {
百度: {
host: 'https://mbd.baidu.com',
detailHost: 'https://sv.baidu.com',
list: '/feedapi/v1/videoserver/playlets/list?service=bdbox',
search: '/feedapi/v1/videoserver/playlets/search?service=bdbox',
detail: '/haokan/ui-video/playlet/rec/detail?log=vhk&tn=1020970b&ctn=1008350n&blur=1',
play: '/appui/api?cmd=video/relate&log=vhk&tn=1020970b&ctn=1008350n&blur=1'
},
七猫: {
host: 'https://api-store.qmplaylet.com',
list: '/api/v1/playlet/index',
detail: 'https://api-read.qmplaylet.com/player/api/v1/playlet/info',
search: '/api/v1/playlet/search'
},
星芽: {
host: 'https://app.whjzjx.cn',
list: '/cloud/v2/theater/home_page?theater_class_id',
detail: '/v2/theater_parent/detail',
search: '/v3/search',
login: 'https://u.shytkjgs.com/user/v1/account/login'
},
西饭: {
host: 'https://xifan-api-cn.youlishipin.com',
list: '/xifan/drama/portalPage',
detail: '/xifan/drama/getDuanjuInfo',
search: '/xifan/search/getSearchList'
},
牛牛: {
host: 'https://new.tianjinzhitongdaohe.com',
list: '/api/v1/app/screen/screenMovie',
detail: '/api/v1/app/play/movieDetails',
search: '/api/v1/app/search/searchMovie',
desc: '/api/v1/app/play/movieDesc',
visitor: '/api/v1/app/user/visitorInfo',
login: 'https://csj-sp.csjdeveloper.com/csj_sp/api/v1/user/login?siteid=5627189',
detail2: 'https://csj-sp.csjdeveloper.com/csj_sp/api/v1/shortplay/detail?siteid=5627189',
unlock: 'https://csj-sp.csjdeveloper.com/csj_sp/api/v1/pay/ad_unlock?siteid=5627189'
},
围观: {
host: 'https://api.drama.9ddm.com',
list: '/drama/home/shortVideoTags?version_code=1500&os_type=1',
detail: '/drama/home/shortVideoDetail?version_code=1500&os_type=1',
search: '/drama/home/search?version_code=1500&os_type=1'
},
河马: {
host: 'https://freevideo.zqqds.cn',
list: '/free-video-portal/portal/1121',
detail: '/free-video-portal/portal/1131',
episode: '/free-video-portal/portal/1132',
play: '/free-video-portal/portal/1133',
search: '/free-video-portal/portal/1803'
},
星星: {
host: 'http://read.api.duodutek.com',
list: '/novel-api/app/pageModel/getResourceById',
detail: '/novel-api/basedata/book/getChapterList'
},
好看: {
host: 'https://sv.baidu.com',
list: '/haokan/ui-feed/playletTagsFeed?osbranch=a0',
home: '/haokan/ui-feed/playletShelfFeed?osbranch=a0',
detail_list: '/appui/api?osbranch=a0',
detail: '/haokan/ui-video/playlet/rec/detail?osbranch=a0',
play: '/appui/api?osbranch=a0',
search: '/haokan/ui-interact/playlet/search/sugs?osbranch=a0'
}
};
const platformList = [
{ name: '百度短剧', id: '百度' },
{ name: '七猫短剧', id: '七猫' },
{ name: '星芽短剧', id: '星芽' },
{ name: '西饭短剧', id: '西饭' },
{ name: '牛牛短剧', id: '牛牛' },
{ name: '围观短剧', id: '围观' },
{ name: '河马短剧', id: '河马' },
{ name: '星星短剧', id: '星星' },
{ name: '好看短剧', id: '好看' }
];
const ruleFilterDef = {
百度: { area: '新剧' },
七猫: { area: '0' },
星芽: { area: '1' },
西饭: { area: '68@都市' },
牛牛: { area: '现言' },
围观: { area: '' },
河马: { area: '308' },
星星: { area: '1287' },
好看: { area: '1' }
};
// ==================== 筛选配置 ====================
const filterOptions = {
"七猫": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "全部", "v": "" },
{ "n": "推荐", "v": "0" },
{ "n": "新剧", "v": "-1" },
{ "n": "都市情感", "v": "1273" },
{ "n": "古装", "v": "1272" },
{ "n": "都市", "v": "571" },
{ "n": "玄幻仙侠", "v": "1286" },
{ "n": "奇幻", "v": "570" },
{ "n": "乡村", "v": "590" },
{ "n": "民国", "v": "573" },
{ "n": "年代", "v": "572" },
{ "n": "青春校园", "v": "1288" },
{ "n": "武侠", "v": "371" },
{ "n": "科幻", "v": "594" },
{ "n": "末世", "v": "556" },
{ "n": "二次元", "v": "1289" },
{ "n": "逆袭", "v": "400" },
{ "n": "穿越", "v": "373" },
{ "n": "复仇", "v": "795" },
{ "n": "系统", "v": "787" },
{ "n": "权谋", "v": "790" },
{ "n": "重生", "v": "784" },
{ "n": "女性成长", "v": "1294" },
{ "n": "打脸虐渣", "v": "716" },
{ "n": "闪婚", "v": "480" },
{ "n": "强者回归", "v": "402" },
{ "n": "追妻火葬场", "v": "715" },
{ "n": "家庭", "v": "670" },
{ "n": "马甲", "v": "558" },
{ "n": "职场", "v": "724" },
{ "n": "宫斗", "v": "343" },
{ "n": "高手下山", "v": "1299" },
{ "n": "娱乐明星", "v": "1295" },
{ "n": "异能", "v": "727" },
{ "n": "宅斗", "v": "342" },
{ "n": "替身", "v": "712" },
{ "n": "穿书", "v": "338" },
{ "n": "商战", "v": "723" },
{ "n": "种田经商", "v": "1291" },
{ "n": "伦理", "v": "1293" },
{ "n": "社会话题", "v": "1290" },
{ "n": "致富", "v": "492" },
{ "n": "偷听心声", "v": "1258" },
{ "n": "脑洞", "v": "526" },
{ "n": "豪门总裁", "v": "624" },
{ "n": "萌宝", "v": "356" },
{ "n": "战神", "v": "527" },
{ "n": "真假千金", "v": "812" },
{ "n": "赘婿", "v": "36" },
{ "n": "神医", "v": "1269" },
{ "n": "神豪", "v": "37" },
{ "n": "小人物", "v": "1296" },
{ "n": "团宠", "v": "545" },
{ "n": "欢喜冤家", "v": "464" },
{ "n": "女帝", "v": "617" },
{ "n": "银发", "v": "1297" },
{ "n": "兵王", "v": "28" },
{ "n": "虐恋", "v": "16" },
{ "n": "甜宠", "v": "21" },
{ "n": "悬疑", "v": "27" },
{ "n": "搞笑", "v": "793" },
{ "n": "灵异", "v": "1287" }
]
}],
"牛牛": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "全部", "v": "" },
{ "n": "现言", "v": "现言" },
{ "n": "古言", "v": "古言" },
{ "n": "历史", "v": "历史" },
{ "n": "都市", "v": "都市" },
{ "n": "活动", "v": "活动" },
{ "n": "逆袭", "v": "逆袭" },
{ "n": "豪门", "v": "豪门" },
{ "n": "现代言情", "v": "现代言情" },
{ "n": "战神", "v": "战神" },
{ "n": "甜宠", "v": "甜宠" },
{ "n": "穿越", "v": "穿越" },
{ "n": "古装", "v": "古装" },
{ "n": "虐心", "v": "虐心" },
{ "n": "神医", "v": "神医" },
{ "n": "赘婿", "v": "赘婿" },
{ "n": "亲情", "v": "亲情" },
{ "n": "复仇", "v": "复仇" },
{ "n": "玄幻", "v": "玄幻" },
{ "n": "古代言情", "v": "古代言情" },
{ "n": "热血", "v": "热血" },
{ "n": "动作", "v": "动作" },
{ "n": "喜剧", "v": "喜剧" },
{ "n": "悬疑", "v": "悬疑" },
{ "n": "军事", "v": "军事" },
{ "n": "二次元", "v": "二次元" },
{ "n": "未来", "v": "未来" },
{ "n": "快速穿越", "v": "快速穿越" },
{ "n": "烧脑", "v": "烧脑" },
{ "n": "治愈", "v": "治愈" },
{ "n": "其他剧情", "v": "其他剧情" }
]
}],
"百度": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "新剧", "v": "新剧" },
{ "n": "限时免费", "v": "限时免费" },
{ "n": "精选", "v": "精选" },
{ "n": "独播", "v": "独播" },
{ "n": "全部", "v": "全部题材" },
{ "n": "神医", "v": "神医" },
{ "n": "连续剧", "v": "连续剧" },
{ "n": "都市", "v": "都市" },
{ "n": "现代言情", "v": "现代言情" },
{ "n": "异能", "v": "异能" },
{ "n": "逆袭", "v": "逆袭" },
{ "n": "甜宠", "v": "甜宠" },
{ "n": "总裁", "v": "总裁" },
{ "n": "萌宝", "v": "萌宝" },
{ "n": "战神", "v": "战神" },
{ "n": "宫斗宅斗", "v": "宫斗宅斗" },
{ "n": "神豪", "v": "神豪" },
{ "n": "虐恋", "v": "虐恋" },
{ "n": "闪婚", "v": "闪婚" },
{ "n": "玄幻", "v": "玄幻" },
{ "n": "穿越重生", "v": "穿越重生" },
{ "n": "年代", "v": "年代" },
{ "n": "家庭伦理", "v": "家庭伦理" },
{ "n": "古代言情", "v": "古代言情" },
{ "n": "武侠武打", "v": "武侠武打" },
{ "n": "赘婿", "v": "赘婿" },
{ "n": "单元剧", "v": "单元剧" },
{ "n": "青春校园", "v": "青春校园" },
{ "n": "历史架空", "v": "历史架空" },
{ "n": "王妃", "v": "王妃" },
{ "n": "鉴宝", "v": "鉴宝" },
{ "n": "科幻", "v": "科幻" },
{ "n": "军旅战争", "v": "军旅战争" },
{ "n": "种田", "v": "种田" }
]
}],
"围观": [{
"key": "area",
"name": "分类",
"value": [{ "n": "全部", "v": "" }]
}],
"星芽": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "剧场", "v": "1" },
{ "n": "热播剧", "v": "2" },
{ "n": "会员专享", "v": "8" },
{ "n": "星选好剧", "v": "7" },
{ "n": "新剧", "v": "3" },
{ "n": "阳光剧场", "v": "5" }
]
}],
"西饭": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "都市", "v": "68@都市" },
{ "n": "青春", "v": "68@青春" },
{ "n": "现代言情", "v": "81@现代言情" },
{ "n": "豪门", "v": "81@豪门" },
{ "n": "大女主", "v": "80@大女主" },
{ "n": "逆袭", "v": "79@逆袭" },
{ "n": "打脸虐渣", "v": "79@打脸虐渣" },
{ "n": "穿越", "v": "81@穿越" }
]
}],
"河马": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "推荐", "v": "308" },
{ "n": "新剧", "v": "309" },
{ "n": "逆袭", "v": "310" },
{ "n": "恋爱", "v": "311" },
{ "n": "强者回归", "v": "312" },
{ "n": "豪门恩怨", "v": "313" },
{ "n": "古装", "v": "314" },
{ "n": "重生", "v": "315" },
{ "n": "萌宝", "v": "316" },
{ "n": "复仇", "v": "317" },
{ "n": "神医", "v": "318" },
{ "n": "高手下山", "v": "319" },
{ "n": "超能悬疑", "v": "320" },
{ "n": "传承觉醒", "v": "321" },
{ "n": "神豪", "v": "322" },
{ "n": "民国", "v": "323" }
]
}],
"星星": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "甜宠", "v": "1287" },
{ "n": "逆袭", "v": "1288" },
{ "n": "热血", "v": "1289" },
{ "n": "现代", "v": "1290" },
{ "n": "古代", "v": "1291" }
]
}],
"好看": [{
"key": "area",
"name": "分类",
"value": [
{ "n": "热播剧", "v": "1" },
{ "n": "新剧", "v": "2" },
{ "n": "战神", "v": "1001" },
{ "n": "神豪", "v": "2001" },
{ "n": "神医", "v": "1002" },
{ "n": "甜宠", "v": "1007" },
{ "n": "赘婿", "v": "1003" },
{ "n": "穿越重生", "v": "2004" },
{ "n": "异能", "v": "2005" },
{ "n": "虐恋", "v": "1006" },
{ "n": "宫斗宅斗", "v": "2006" },
{ "n": "玄幻", "v": "2009" }
]
}]
};
// 河马分类标签映射
const hemaTagIds = {
"308": "", "309": "", "310": "417,473,474,464", "311": "462,466", "312": "476",
"313": "585,616", "314": "444,468", "315": "417,439,464,465", "316": "589",
"317": "416,439,463,465", "318": "438", "319": "417,474,464", "320": "439,442,443,445,465,470",
"321": "417,473,474,464", "322": "472,475,585", "323": "590"
};
// 西饭搜索固定session参数
const XIFAN_SESSION_PARAMS = 'session=eyJpbmZvIjp7InVpZCI6IiIsInJ0IjoiMTc0MDY2ODk4NiIsInVuIjoiT1BHX2U5ODQ4NTgzZmM4ZjQzZTJhZjc5ZTcxNjRmZTE5Y2JjIiwiZnQiOiIxNzQwNjY4OTg2In19&feedssession=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dHlwIjowLCJidWlkIjoxNjM0MDU3ODE4OTgxNDk5OTA0LCJhdWQiOiJkcmFtYSIsInZlciI6MiwicmF0IjoxNzQwNjY4OTg2LCJ1bm0iOiJPUEdfZTk4NDg1ODNmYzhmNDNlMmFmNzllNzE2NGZlMTljYmMiLCJpZCI6ImVhZGE1NmEyZWEzYTE0YmMwMzE3ZDc2ZmVjODJjNzc3IiwiZXhwIjoxNzQxMjczNzg2LCJkYyI6ImJqaHQifQ.IwuI0gK077RF4G10JRxgxx4GCG502vR8Z0W9EV4kd-c';
// ==================== 日志函数 ====================
function log(level, tag, msg) {
if (!debug) return;
const prefix = { 0: '🔍', 1: '✅', 2: '⚠️', 3: '❌' }[level] || '📝';
console.log(`${prefix}${tag}${msg}`);
}
function logTime(start, label) {
if (!debug) return;
console.log(`⏱️【${label}】耗时: ${Date.now() - start}ms`);
}
// ==================== 七猫公共函数 ====================
async function getQmParamsAndSign() {
let sessionId = Math.floor(Date.now()).toString();
let data = {
"static_score": "0.8",
"uuid": "00000000-7fc7-08dc-0000-000000000000",
"device-id": "20250220125449b9b8cac84c2dd3d035c9052a2572f7dd0122edde3cc42a70",
"mac": "",
"sourceuid": "aa7de295aad621a6",
"refresh-type": "0",
"model": "22021211RC",
"wlb-imei": "",
"client-id": "aa7de295aad621a6",
"brand": "Redmi",
"oaid": "",
"oaid-no-cache": "",
"sys-ver": "12",
"trusted-id": "",
"phone-level": "H",
"imei": "",
"wlb-uid": "aa7de295aad621a6",
"session-id": sessionId
};
let jsonStr = JSON.stringify(data);
let base64Str = base64Encode(jsonStr).replace(/[\r\n\s]/g, '');
let qmParams = '';
for (let c of base64Str) qmParams += aggConfig.charMap[c] || c;
let paramsStr = `AUTHORIZATION=app-version=10001application-id=com.duoduo.readchannel=unknownis-white=net-env=5platform=androidqm-params=${qmParams}reg=${aggConfig.keys}`;
let sign = await md5(paramsStr);
log(0, '七猫', `qmParams生成成功`);
return { qmParams, sign };
}
async function getQiMaoHeaders() {
let { qmParams, sign } = await getQmParamsAndSign();
return {
'net-env': '5', 'reg': '', 'channel': 'unknown', 'is-white': '',
'platform': 'android', 'application-id': 'com.duoduo.read', 'AUTHORIZATION': '',
'app-version': '10001', 'user-agent': 'okhttp/4.10.0',
'qm-params': qmParams, 'sign': sign, 'Content-Type': 'application/json'
};
}
// ==================== 缓存管理 ====================
const loginCache = new Map();
const LOGIN_CACHE_TTL = 24 * 60 * 60 * 1000;
function generateDeviceId() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = Math.random() * 16 | 0;
let v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
function getSearchCache(key) {
const cached = searchCache.get(key);
if (cached && Date.now() - cached.time < CACHE_TTL) {
log(0, '缓存', `命中: ${key}`);
return cached.data;
}
return null;
}
function setSearchCache(key, data) {
searchCache.set(key, { data, time: Date.now() });
}
// ==================== 初始化 ====================
async function init(cfg) {
const start = Date.now();
log(1, '初始化', `========== ${siteName} ==========`);
// 星芽登录
try {
const response = await request(rule.星芽.login, {
method: 'POST',
headers: { 'User-Agent': 'okhttp/4.10.0', 'platform': '1', 'Content-Type': 'application/json' },
data: { device: '24250683a3bdb3f118dff25ba4b1cba1a' }
});
const res = JSON.parse(response || '{}');
const token = res?.data?.token || res?.token || res?.access_token;
xingya_headers = token ? { ...aggConfig.headers.json, authorization: token } : aggConfig.headers.json;
log(token ? 1 : 2, '星芽', token ? `登录成功` : `登录失败`);
} catch (e) {
xingya_headers = aggConfig.headers.json;
log(2, '星芽', `异常: ${e.message}`);
}
// 牛牛初始化
const nnDeviceId = generateDeviceId();
log(0, '牛牛', `设备ID: ${nnDeviceId}`);
try {
let tkhtml = await request(rule.牛牛.host + rule.牛牛.visitor, {
method: 'GET',
headers: { "deviceid": nnDeviceId, "token": "", "User-Agent": "okhttp/4.12.0", "client": "app", "devicetype": "Android", "Content-Type": "application/json" }
});
let tkRes = JSON.parse(tkhtml || '{}');
niuniu_token = tkRes.data?.token || '';
log(niuniu_token ? 1 : 2, '牛牛', niuniu_token ? `访客token成功` : `访客token失败`);
niuniu_headers = { ...aggConfig.headers.niuniu, "token": niuniu_token, "deviceid": nnDeviceId };
} catch (e) {
log(2, '牛牛', `访客token异常: ${e.message}`);
niuniu_headers = { ...aggConfig.headers.niuniu, "deviceid": nnDeviceId };
}
// 牛牛广告解锁
try {
let t = String(Math.floor(Date.now() / 1000));
let body = `ac=wifi&os=Android&vod_version=1.10.21.6-tob&os_version=9&type=1&clientVersion=v5.2.5&uuid=Y4WNZ3SAWK7MAJMH7CXCDHJ4VMPVFRZQTBSIA4XTYO4AWEUHIK6Q01&resolution=1280*2618&openudid=889edced38f1069b&dt=Pixel%204&sha1=46121F77CE2FCAD3DBC3B9EC8A24908C1A8AD6D9&os_api=28&install_id=1549688030634536&device_brand=google&sdk_version=1.1.3.0&package_name=com.niuniu.ztdh.app&siteid=5627189&dev_log_aid=667431&oaid=&timestamp=${t}`;
let nonce = "VX1KKGtoBDCi1fB1";
let signature = hmacSHA256(t + nonce + body, 'aceaa47f96b4875d446b2e1d97e03bbb');
let encbdoy = aesEncryptECB(body, 'dafdb3d2a5c343d6');
let response = await request(rule.牛牛.login, {
method: "POST",
headers: { 'X-Salt': '786774955F', 'X-Nonce': nonce, 'X-Timestamp': t, 'X-Signature': signature, 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'okhttp/4.10.0' },
data: encbdoy
});
if (response) {
let logindata = aesDecryptECB(response, 'dafdb3d2a5c343d6');
let accesstoken = JSON.parse(logindata || '{}');
niuniu_access_token = accesstoken.data?.access_token || '';
log(niuniu_access_token ? 1 : 2, '牛牛', niuniu_access_token ? `广告token成功` : `广告token失败`);
}
} catch (e) {
log(2, '牛牛', `广告解锁异常: ${e.message}`);
}
// 河马初始化
hema_headers = { ...aggConfig.headers.hema, 'User-Agent': 'okhttp/4.10.0' };
log(1, '河马', `初始化成功`);
logTime(start, 'init');
return true;
}
// ==================== 首页分类 ====================
function home(filter) {
const platForms = platformList.filter(item => !cate_remove.some(word => new RegExp(word, 'i').test(item.name)));
const classes = platForms.map(item => ({
type_name: item.name,
type_id: item.id,
type_flag: '[CFS][SUBSITE2][FILTERBAR]'
}));
const filters = {};
platForms.forEach(item => {
if (filterOptions[item.id]) filters[item.id] = filterOptions[item.id];
});
log(0, '首页', `分类数: ${classes.length}`);
return JSON.stringify({ class: classes, filters: filters });
}
// ==================== 首页推荐 ====================
async function homeVod() {
const start = Date.now();
const platForms = platformList.filter(item => !cate_remove.some(word => new RegExp(word, 'i').test(item.name)));
const randomPlat = platForms[Math.floor(Math.random() * platForms.length)];
const randomArea = ruleFilterDef[randomPlat.id]?.area || '';
const categoryResult = await category(randomPlat.id, 1, { area: randomArea }, {});
const categoryList = JSON.parse(categoryResult).list || [];
log(1, '首页推荐', `返回 ${categoryList.length}`);
logTime(start, 'homeVod');
return JSON.stringify({ list: categoryList });
}
// ==================== 分类列表 ====================
async function category(tid, pg, filter, extend) {
const start = Date.now();
const page = pg || 1;
const area = filter?.area || extend?.area || ruleFilterDef[tid]?.area || '';
const videos = [];
const platRule = rule[tid];
log(0, '分类', `${tid} page=${page} area=${area}`);
switch (tid) {
case '七猫': {
let params = { operation: 1, playlet_privacy: 1 };
if (area && area !== '0' && area !== '') params.tag_id = area;
if (page > 1) params.next_id = page;
const keys = Object.keys(params).sort();
let signStr = keys.map(k => `${k}=${params[k]}`).join('') + aggConfig.keys;
params.sign = await md5(signStr);
const url = `${platRule.host}${platRule.list}?${buildUrlQuery(params)}`;
const headers = await getQiMaoHeaders();
const response = await request(url, { method: 'GET', headers });
if (response) {
const res = JSON.parse(response);
const items = res.data?.list || [];
log(0, '七猫', `获取 ${items.length}`);
items.forEach(item => {
videos.push({
vod_id: `七猫@${encodeURIComponent(item.playlet_id)}`,
vod_name: item.title || '',
vod_pic: item.image_link || '',
vod_remarks: `七猫短剧 | ${item.total_episode_num || 0}`,
vod_content: item.tags || ''
});
});
}
break;
}
case '百度': {
let sub = ["新剧", "限时免费", "精选", "独播"].includes(area) ? area : "新剧";
let tcsub = area === "全部" || area === "全部题材" ? "" : area;
let t = Math.floor(Date.now() / 1000);
let version = await md5(t + "v2");
const postData = {
'data': JSON.stringify({
"data": {
"extRequest": { "flow_tabid": "13" },
"from": "feed",
"page": "channel_video_landing",
"pd": "feed",
"refreshIndex": parseInt(page),
"cursor": "",
"theme": "",
"timestamp": t,
"version": version,
"themes": [
{ "kind": "综合", "names": [sub] },
{ "kind": "题材", "names": [tcsub] }
]
}
})
};
let html = await request(`${platRule.host}${platRule.list}`, {
method: 'POST',
headers: aggConfig.headers.baidu,
data: postData
});
let res = JSON.parse(html);
let items = res.data?.items || [];
log(0, '百度', `获取 ${items.length}`);
items.slice(0, 20).forEach(it => {
videos.push({
vod_id: `百度@${it.collId}`,
vod_name: it.title || '未知短剧',
vod_pic: it.img || '',
vod_remarks: '百度短剧 | ' + (it.updateStatus || "更新中"),
vod_content: it.description || ''
});
});
break;
}
case '星芽': {
const url = `${platRule.host}${platRule.list}=${area}&type=1&class2_ids=0&page_num=${page}&page_size=24`;
const response = await request(url, { headers: xingya_headers });
const res = JSON.parse(response);
const items = res.data?.list || [];
log(0, '星芽', `获取 ${items.length}`);
items.forEach(it => {
videos.push({
vod_id: `星芽@${it.theater.id}`,
vod_name: it.theater.title || '',
vod_pic: it.theater.cover_url || '',
vod_remarks: '星芽短剧 | ' + (it.theater.total ? `${it.theater.total}` : ''),
vod_content: `播放量:${it.theater.play_amount_str || 0}`
});
});
break;
}
case '西饭': {
const [typeId, typeName] = area.split('@');
const ts = Math.floor(Date.now() / 1000);
const url = `${platRule.host}${platRule.list}?reqType=aggregationPage&offset=${(page - 1) * 30}&categoryId=${typeId}&quickEngineVersion=-1&scene=&categoryNames=${encodeURIComponent(typeName)}&categoryVersion=1&density=1.5&pageID=page_theater&version=2001001&androidVersionCode=28&requestId=${ts}aa498144140ef297&appId=drama&teenMode=false&userBaseMode=false&${XIFAN_SESSION_PARAMS}`;
const response = await request(url, { headers: aggConfig.headers.form });
const res = JSON.parse(response);
let count = 0;
(res.result?.elements || []).forEach(soup => {
(soup.contents || []).forEach(vod => {
const dj = vod.duanjuVo || {};
videos.push({
vod_id: `西饭@${dj.duanjuId}#${dj.source}`,
vod_name: dj.title || '',
vod_pic: dj.coverImageUrl || '',
vod_remarks: '西饭短剧 | ' + (dj.total ? `${dj.total}` : ''),
vod_content: dj.desc || ''
});
count++;
});
});
log(0, '西饭', `获取 ${count}`);
break;
}
case '牛牛': {
let condition = { "typeId": "S1" };
if (area && area !== '全部' && area !== '') condition.classify = area;
const postData = { "condition": condition, "pageNum": page, "pageSize": 24 };
const response = await request(`${platRule.host}${platRule.list}`, {
method: 'POST',
headers: niuniu_headers,
data: postData
});
const res = JSON.parse(response);
const items = res.data?.records || [];
log(0, '牛牛', `获取 ${items.length}`);
items.forEach(item => {
videos.push({
vod_id: `牛牛@${item.id}`,
vod_name: item.name || '',
vod_pic: item.cover || '',
vod_remarks: '牛牛短剧 | ' + (item.totalEpisode ? `${item.totalEpisode}` : ''),
vod_content: item.description || ''
});
});
break;
}
case '围观': {
const postData = { "audience": "全部受众", "page": page, "pageSize": 30, "searchWord": "", "subject": "全部主题" };
const response = await request(`${platRule.host}${platRule.search}`, {
method: 'POST',
headers: aggConfig.headers.json,
data: postData
});
const res = JSON.parse(response);
const items = (res.code === 200 && res.data) ? res.data : [];
log(0, '围观', `获取 ${items.length}`);
items.forEach(it => {
videos.push({
vod_id: `围观@${it.oneId}`,
vod_name: it.title || '未知短剧',
vod_pic: it.vertPoster || it.horizonPoster || '',
vod_remarks: '围观短剧 | ' + `集数:${it.episodeCount || 0}`,
vod_content: it.description || ''
});
});
break;
}
case '河马': {
try {
const sub = area || '308';
const tagIds = hemaTagIds[sub] || '';
const bodys = JSON.stringify({
"recSwitch": true, "channelId": sub, "tagIds": tagIds,
"cnxhFlag": page - 1, "playListFlag": true,
"watchRecords": ["41000103722_572752006"]
});
const body = hemaEncrypt(bodys);
const response = await request(`${platRule.host}${platRule.list}`, {
method: 'POST',
headers: { ...hema_headers, 'Content-Type': 'application/x-www-form-urlencoded' },
data: body
});
const res = JSON.parse(response);
const dehtml = res.data;
if (dehtml) {
const hmdata = hemaDecrypt(dehtml);
if (hmdata && hmdata !== '{}') {
const hmlist = JSON.parse(hmdata).columnData || [];
hmlist.forEach(videoDataArray => {
(videoDataArray.videoData || []).forEach(video => {
videos.push({
vod_id: `河马@${video.bookId}`,
vod_name: video.bookName || '',
vod_pic: video.coverWap || video.coverCutWap,
vod_remarks: `河马短剧 | 更新${video.updateNum || 0}`,
vod_content: video.introduction || ''
});
});
});
}
}
} catch (e) {
log(2, '河马', e.message);
}
break;
}
case '星星': {
const postData = {
"productId": "2a8c14d1-72e7-498b-af23-381028eb47c0",
"vestId": "2be070e0-c824-4d0e-a67a-8f688890cadb",
"channel": "oppo19", "osType": "android", "version": "20",
"token": "202509271001001446030204698626", "resourceId": area,
"pageNum": String(page), "pageSize": "20"
};
const response = await request(`${platRule.host}${platRule.list}`, {
method: 'GET', headers: aggConfig.headers.form, data: postData
});
try {
const res = JSON.parse(response);
const items = res.data?.datalist || [];
log(0, '星星', `获取 ${items.length}`);
items.forEach(vod => {
videos.push({
vod_id: `星星@${vod.id}@${encodeURIComponent(vod.introduction || '')}`,
vod_name: vod.name || '',
vod_pic: vod.icon || '',
vod_remarks: `星星短剧 | ${vod.heat || 0}万播放`,
vod_content: vod.introduction || ''
});
});
} catch (e) {
log(2, '星星', e.message);
}
break;
}
case '好看': {
const postData = { "tag_id": area, "rn": "20", "pn": page };
const response = await request(`${platRule.host}${platRule.list}`, {
method: 'POST', headers: aggConfig.headers.haokan, data: postData
});
try {
const res = JSON.parse(response);
const items = res.data?.list || [];
log(0, '好看', `获取 ${items.length}`);
items.forEach(item => {
videos.push({
vod_id: `好看@${item.playlet_id}`,
vod_name: item.playlet_title || '',
vod_pic: item.playlet_poster || '',
vod_remarks: `好看短剧 | ${item.episodes_num_text || ''}`,
vod_content: item.tags ? item.tags.join('·') : ''
});
});
} catch (e) {
log(2, '好看', e.message);
}
break;
}
}
log(1, '分类', `${tid} 返回 ${videos.length}`);
logTime(start, 'category');
return JSON.stringify({ list: videos, page, pagecount: page + 1, limit: videos.length, total: videos.length * (page + 1) });
}
// ==================== 详情 ====================
async function detail(id) {
const parts = id.split('@');
const platform = parts[0];
const did = parts.slice(1).join('@');
const platRule = rule[platform];
let vod = {};
log(0, '详情', `${platform} ${did.substring(0, 50)}`);
switch (platform) {
case '七猫': {
const didDecoded = decodeURIComponent(did);
const sign = await md5(`playlet_id=${didDecoded}${aggConfig.keys}`);
const url = `${platRule.detail}?playlet_id=${didDecoded}&sign=${sign}`;
const headers = await getQiMaoHeaders();
const response = await request(url, { method: 'GET', headers });
const data = JSON.parse(response || '{}').data || {};
vod = {
vod_id: id, vod_name: data.title || '未知标题',
vod_pic: data.image_link || '', vod_remarks: `${data.tags || ''} ${data.total_episode_num || 0}`,
vod_content: data.intro || '未知剧情', vod_play_from: '七猫短剧',
vod_play_url: (data.play_list || []).map(it => `${it.sort}$${it.video_url}`).join('#')
};
break;
}
case '百度': {
const postData = { "playlet_id": did, "vid": "undefined" };
let html = await request(`${platRule.detailHost}${platRule.detail}`, {
method: 'POST', headers: aggConfig.headers.baidu, data: postData
});
let res = JSON.parse(html);
let dthtml = res.data || {};
let vids = dthtml.vid_list || [];
let playArr = vids.map((vid, index) => `${index + 1}$${did}@${vid}`);
vod = {
vod_id: id, vod_name: dthtml.playlet_title || '未知短剧',
vod_pic: dthtml.playlet_poster || '',
vod_content: `热度值:${dthtml.hot_value || 0}\n题材:${dthtml.tag_text || ''}\n集数:${dthtml.episodes_num || 0}\n简介:${dthtml.description || ''}`,
vod_remarks: `${vids.length || 0}`, vod_play_from: "百度短剧",
vod_play_url: playArr.join('#')
};
break;
}
case '星芽': {
const detailUrl = `${platRule.host}${platRule.detail}?theater_parent_id=${did}`;
const response = await request(detailUrl, { headers: xingya_headers });
const res = JSON.parse(response);
if (res.code === 'ok' && res.data) {
const data = res.data;
const playUrls = (data.theaters || []).map(item => `${item.num}$${item.son_video_url}`).join('#');
vod = {
vod_id: id, vod_name: data.title || '未知剧名',
vod_pic: data.cover_url || '', vod_remarks: data.is_over === 2 ? '连载中' : '已完结',
vod_content: data.introduction || data.desc || '',
vod_play_from: '星芽短剧', vod_play_url: playUrls || '暂无播放地址$0'
};
}
break;
}
case '西饭': {
const [duanjuId, source] = did.split('#');
const url = `${platRule.host}${platRule.detail}?duanjuId=${duanjuId}&source=${source}`;
const response = await request(url, { headers: aggConfig.headers.form });
const res = JSON.parse(response);
const data = res.result || {};
const playUrls = (data.episodeList || []).map(ep => `${ep.index}$${ep.playUrl}`).join('#');
vod = {
vod_id: id, vod_name: data.title || '', vod_pic: data.coverImageUrl || '',
vod_content: data.desc || '未知',
vod_remarks: data.updateStatus === 'over' ? `${data.total || 0}集 已完结` : `更新${data.total || 0}`,
vod_play_from: '西饭短剧', vod_play_url: playUrls
};
break;
}
case '牛牛': {
const descData = await request(`${platRule.host}${platRule.desc}`, {
method: 'POST', headers: niuniu_headers, data: { "id": did, "typeId": "S1" }
});
const descRes = JSON.parse(descData);
const descInfo = descRes.data || {};
const listData = await request(`${platRule.host}${platRule.detail}`, {
method: 'POST', headers: niuniu_headers, data: { "id": did, "source": 0, "typeId": "S1", "userId": "546932" }
});
const listRes = JSON.parse(listData);
const listInfo = listRes.data || {};
let playUrls = '';
if (listInfo.url && listInfo.episodeList && listInfo.episodeList.length > 0) {
playUrls = (listInfo.episodeList || []).map(ep => `${ep.episode}$${did}+${ep.id}`).join('#');
} else if (listInfo.thirdPlayId) {
let thirdPlayId = listInfo.thirdPlayId;
let data1 = "not_include=0&lock_free=1&type=1&clientVersion=v5.2.5&uuid=6IDYUSASPQY5BBVACWQW3LLTPV4V7DE26UOCX5TZTVUGX4VUJNXQ01&resolution=1080*2320&openudid=82f4175d577a2939&dt=22021211RC&os_api=31&install_id=1496879012031075&sdk_version=1.1.3.0&siteid=5627189&dev_log_aid=667431&oaid=abec0dfff623201b&timestamp=1752498494&direction=0&ac=mobile&os=Android&vod_version=1.10.21.6-tob&os_version=12&count=1&index=1&shortplay_id=" + thirdPlayId + "&sha1=46121F77CE2FCAD3DBC3B9EC8A24908C1A8AD6D9&device_brand=Redmi&package_name=com.niuniu.ztdh.app";
try {
let html1 = await niuniuPost(rule.牛牛.detail2, data1, "1");
if (html1 && html1.data && html1.data.episode_right_list) {
playUrls = html1.data.episode_right_list.map(it => {
let lockType = it.lock_type || 'free';
return `${it.index}$${it.index}+${lockType}+${thirdPlayId}`;
}).join('#');
}
} catch (e) { log(2, '牛牛详情', e.message); }
}
vod = {
vod_id: id, vod_name: descInfo.name || listInfo.name || '未知名称',
vod_pic: descInfo.cover || listInfo.cover || '',
vod_content: `类型:${descInfo.classify || ''}\n评分:${descInfo.score || ''}\n简介:${descInfo.introduce || ''}`,
vod_remarks: `${descInfo.totalEpisode || listInfo.totalEpisode || 0}`,
vod_play_from: '牛牛短剧', vod_play_url: playUrls || '暂无播放地址$0'
};
break;
}
case '围观': {
const response = await request(`${platRule.host}${platRule.detail}&oneId=${did}&page=1&pageSize=1000`, {
headers: aggConfig.headers.form
});
const res = JSON.parse(response);
if (res.code === 200 && res.data) {
const data = res.data || [];
const firstEpisode = data[0] || {};
vod = {
vod_id: id, vod_name: firstEpisode.title || '',
vod_pic: firstEpisode.vertPoster || firstEpisode.horizonPoster || '',
vod_remarks: `${data.length || 0}`,
vod_content: `播放量:${firstEpisode.viewCount || 0} 收藏:${firstEpisode.collectionCount || 0} 评论:${firstEpisode.commentCount || 0}`,
vod_play_from: '围观短剧',
vod_play_url: data.map(ep => {
let playSetting = ep.playSetting || ep.videoClarityList || [];
try { if (typeof playSetting === 'string') playSetting = JSON.parse(playSetting); } catch (e) { }
const url = (playSetting.find(item => item.name === '1080P')?.url || playSetting.find(item => item.name === '720P')?.url || '');
return `${ep.playOrder || 1}$${url}`;
}).filter(ep => ep.split('$')[1]).join('#')
};
}
break;
}
case '河马': {
const bookId = did;
const body = hemaEncrypt(JSON.stringify({ "bookId": bookId }));
const detailResponse = await request(`${platRule.host}${platRule.detail}`, {
method: 'POST', headers: { ...hema_headers, 'Content-Type': 'application/x-www-form-urlencoded' }, data: body
});
const detailRes = JSON.parse(detailResponse);
const detailHtml = detailRes.data;
const postdata = hemaDecrypt(detailHtml);
const videoInfo = JSON.parse(postdata).videoInfo || {};
const episodeBody = hemaEncrypt(JSON.stringify({ "bookId": bookId, "chapterMin": videoInfo.updateNum || 0, "chapterMax": videoInfo.chapterIndex || 0 }));
const episodeResponse = await request(`${platRule.host}${platRule.episode}`, {
method: 'POST', headers: { ...hema_headers, 'Content-Type': 'application/x-www-form-urlencoded' }, data: episodeBody
});
const episodeRes = JSON.parse(episodeResponse);
const episodeHtml = episodeRes.data;
const playdata = hemaDecrypt(episodeHtml);
const chapterList = JSON.parse(playdata).chapterList || [];
const playUrls = chapterList.map(item => `${item.chapterName}$${item.chapterId}++${item.chapterIndex}++${bookId}`).join('#');
vod = {
vod_id: id, vod_name: videoInfo.bookName || '未知剧名',
vod_pic: videoInfo.coverWap, vod_remarks: videoInfo.finishStatusCn || `更新至${videoInfo.updateNum || 0}`,
vod_content: videoInfo.introduction || '暂无简介',
vod_play_from: '河马短剧', vod_play_url: playUrls || '暂无播放地址$0'
};
break;
}
case '星星': {
const partsArr = did.split('@');
const bookId = partsArr[0];
const contentDesc = decodeURIComponent(partsArr[1] || '');
const postData = {
"bookId": bookId, "productId": "2a8c14d1-72e7-498b-af23-381028eb47c0",
"vestId": "2be070e0-c824-4d0e-a67a-8f688890cadb", "channel": "oppo19",
"osType": "android", "version": "20", "token": "202509271001001446030204698626"
};
const response = await request(`${platRule.host}${platRule.detail}`, {
method: 'GET', headers: aggConfig.headers.form, data: postData
});
try {
const res = JSON.parse(response);
const data = res.data || [];
const playUrls = data.map((vodItem, index) => {
const playUrl = vodItem.shortPlayList?.[0]?.chapterShortPlayVoList?.[0]?.shortPlayUrl || '';
return playUrl ? `${index + 1}$${playUrl}` : null;
}).filter(Boolean).join('#');
vod = { vod_id: id, vod_name: '星星短剧', vod_content: contentDesc, vod_play_from: '星星短剧', vod_play_url: playUrls || '暂无播放地址$0' };
} catch (e) { log(2, '星星详情', e.message); }
break;
}
case '好看': {
const commonlistId = Date.now().toString().substring(0, 13);
const innerParams = `enable_enter_playlet=0&seek_time=0&hotspot=0&auto_show_hot_point_panel=0&type=playlet&commonlist_id=${commonlistId}&scene=&vid=&enable_atlas=0&mark_pn=&uk=&ctime=0&from=playlet_new&id=${did}&rn=10&pn=1&direction=3`;
const listResponse = await request(`${platRule.host}${platRule.detail_list}`, {
method: 'POST', headers: aggConfig.headers.haokan, data: { "video/commonlist": innerParams }
});
try {
const resObj = JSON.parse(listResponse);
const firstVideo = resObj['video/commonlist']?.data?.results?.[0];
const vid = firstVideo?.content?.vid;
const detailResponse = await request(`${platRule.host}${platRule.detail}`, {
method: 'POST', headers: aggConfig.headers.haokan, data: { "vid": vid, "playlet_id": did }
});
const detailDataObj = JSON.parse(detailResponse).data || {};
let vidList = detailDataObj.vid_list || [];
if (vidList.length === 0 && detailDataObj.results) vidList = detailDataObj.results.map(item => item.vid);
const playList = vidList.map((v, i) => `${i + 1}$${did}@${v}`).join('#');
vod = {
vod_id: id, vod_name: detailDataObj.playlet_title || '', vod_pic: detailDataObj.playlet_poster || '',
vod_remarks: (detailDataObj.hot_value || '') + '播放·' + (detailDataObj.episodes_num || '') + '集',
vod_content: detailDataObj.description || '', vod_play_from: '好看短剧', vod_play_url: playList
};
} catch (e) { log(2, '好看详情', e.message); }
break;
}
}
return JSON.stringify({ list: [vod] });
}
// ==================== 搜索 ====================
// ==================== 搜索 ====================
async function cfs(siteId, wd, pg) {
const start = Date.now();
const page = pg || 1;
const searchLimit = aggConfig.searchLimit;
const searchTimeout = aggConfig.searchTimeout;
let results = [];
const cacheKey = `${siteId}_${wd}_${page}`;
const cachedResult = getSearchCache(cacheKey);
if (cachedResult) {
return cachedResult;
}
log(0, '搜索', `${siteId} 关键词: ${wd}, 页码: ${page}`);
const platformItem = platformList.find(p => p.id === siteId);
if (platformItem && cate_remove.some(word => new RegExp(word, 'i').test(platformItem.name))) {
log(2, '搜索', `跳过平台: ${siteId}`);
return JSON.stringify({ list: [], page, pagecount: page + 1, limit: 0, total: 0 });
}
const platRule = rule[siteId];
switch (siteId) {
case '百度': {
const requestUrl = `${platRule.host}${platRule.search}`;
const postData = {
"data": {
"query": wd,
"page": page,
"attribute": ["title"],
"fe_page_type": "search",
"extra": {
"tab_id": "216",
"flow_tabid": "13",
"shortplay_source": "feed",
"from": "feed",
"tab_type": "搜索",
"sub_template": "playlet_search_result"
}
}
};
let html = await request(requestUrl, {
method: 'POST',
headers: aggConfig.headers.baidu,
data: postData,
timeout: searchTimeout
});
let res = JSON.parse(html);
let items = res.data?.itemList || res.data?.data?.itemList || res.itemList || res.data?.list || res.list || [];
log(0, '百度搜索', `获取到 ${items.length}`);
results = items.map(it => ({
vod_id: `百度@${it.nid?.split("_")[1] || it.collId || ''}`,
vod_name: it.title || '未知短剧',
vod_pic: it.img || '',
vod_remarks: '百度短剧 | ' + (it.collNum || it.updateStatus || "搜索短剧"),
vod_content: it.description || ''
}));
break;
}
case '七猫': {
try {
const trackId = 'ec1280db127955061754851657967';
let signString = `extend=page=${page}read_preference=0track_id=${trackId}wd=${wd}${aggConfig.keys}`;
let sign = await md5(signString);
const encodedKey = encodeURIComponent(wd);
const url = `${platRule.host}${platRule.search}?extend=&page=${page}&wd=${encodedKey}&read_preference=0&track_id=${trackId}&sign=${sign}`;
const headers = await getQiMaoHeaders();
const response = await request(url, { method: 'GET', headers, timeout: searchTimeout });
const res = JSON.parse(response || '{}');
let items = res.data?.list || res.list || [];
log(0, '七猫搜索', `获取到 ${items.length}`);
results = items.map(item => ({
vod_id: `七猫@${encodeURIComponent(item.playlet_id || item.id || '')}`,
vod_name: item.title || '未知标题',
vod_pic: item.image_link || item.cover || '',
vod_remarks: '七猫短剧 | ' + (item.tags || '') + ' ' + (item.total_episode_num ? `${item.total_episode_num}` : ''),
vod_content: item.intro || ''
}));
} catch (e) {
log(2, '七猫搜索', e.message);
}
break;
}
case '星芽': {
const postData = { "text": wd };
const requestUrl = `${platRule.host}${platRule.search}`;
const response = await request(requestUrl, {
method: 'POST',
headers: xingya_headers,
data: postData,
timeout: searchTimeout
});
const res = JSON.parse(response || '{}');
const items = res.data?.theater?.search_data || [];
log(0, '星芽搜索', `获取到 ${items.length}`);
results = items.map(item => ({
vod_id: `星芽@${item.id}`,
vod_name: item.title || '',
vod_pic: item.cover_url || '',
vod_remarks: '星芽短剧 | ' + (item.total ? `${item.total}` : ''),
vod_content: item.introduction || ''
}));
break;
}
case '西饭': {
const ts = Math.floor(Date.now() / 1000);
const url = `${platRule.host}${platRule.search}?keyword=${encodeURIComponent(wd)}&pageIndex=${page}&version=2001001&androidVersionCode=28&requestId=${ts}ea3a14bc0317d76f&appId=drama&teenMode=false&userBaseMode=false&${XIFAN_SESSION_PARAMS}`;
const response = await request(url, { headers: aggConfig.headers.form, timeout: searchTimeout });
const res = JSON.parse(response || '{}');
let items = [];
if (res.result?.elements) {
res.result.elements.forEach(soup => {
if (soup.contents) {
soup.contents.forEach(vod => {
const dj = vod.duanjuVo || {};
items.push({
vod_id: `西饭@${dj.duanjuId || ''}#${dj.source || ''}`,
vod_name: dj.title || '未知标题',
vod_pic: dj.coverImageUrl || '',
vod_remarks: '西饭短剧 | ' + (dj.total ? `${dj.total}` : ''),
vod_content: ''
});
});
}
});
}
log(0, '西饭搜索', `获取到 ${items.length}`);
results = items;
break;
}
case '牛牛': {
const postData = {
"condition": { "typeId": "S1", "value": wd },
"pageNum": page,
"pageSize": searchLimit
};
const response = await request(`${platRule.host}${platRule.search}`, {
method: 'POST',
headers: niuniu_headers,
data: postData,
timeout: searchTimeout
});
const res = JSON.parse(response || '{}');
const items = res.data?.records || [];
log(0, '牛牛搜索', `获取到 ${items.length}`);
results = items.map(item => ({
vod_id: `牛牛@${item.id}`,
vod_name: item.name || '',
vod_pic: item.cover || '',
vod_remarks: '牛牛短剧 | ' + (item.totalEpisode ? `${item.totalEpisode}` : ''),
vod_content: ''
}));
break;
}
case '围观': {
const postData = {
"audience": "",
"page": page,
"pageSize": 30,
"searchWord": wd,
"subject": ""
};
const response = await request(`${platRule.host}${platRule.search}`, {
method: 'POST',
headers: aggConfig.headers.json,
data: postData,
timeout: searchTimeout
});
const res = JSON.parse(response || '{}');
const items = (res.code === 200 && res.data) ? res.data : [];
log(0, '围观搜索', `获取到 ${items.length}`);
results = items.map(it => ({
vod_id: `围观@${it.oneId || ''}`,
vod_name: it.title || '未知标题',
vod_pic: it.vertPoster || it.horizonPoster || '',
vod_remarks: '围观短剧 | 集数:' + (it.episodeCount || 0),
vod_content: it.description || ''
}));
break;
}
case '河马': {
try {
const hmbody = JSON.stringify({
"keyword": wd,
"page": page,
"size": searchLimit
});
const encryptedBody = hemaEncrypt(hmbody);
const response = await request(`${platRule.host}${platRule.search}`, {
method: 'POST',
headers: hema_headers,
data: encryptedBody,
timeout: searchTimeout
});
const res = JSON.parse(response || '{}');
const xmres = res.data;
if (xmres) {
const dexmres = hemaDecrypt(xmres);
if (dexmres && dexmres !== '{}') {
const xmlist = JSON.parse(dexmres).searchVos || [];
log(0, '河马搜索', `获取到 ${xmlist.length}`);
results = xmlist.map(video => ({
vod_id: `河马@${video.bookId}`,
vod_name: video.bookName || '',
vod_pic: (video.coverWap || '') + '@Referer=',
vod_remarks: `河马短剧 | 共${video.updateNum || 0}`,
vod_content: video.introduction || ''
}));
}
}
} catch (e) {
log(2, '河马搜索', e.message);
}
break;
}
case '星星': {
try {
const postData = {
"productId": "2a8c14d1-72e7-498b-af23-381028eb47c0",
"vestId": "2be070e0-c824-4d0e-a67a-8f688890cadb",
"channel": "oppo19",
"osType": "android",
"version": "20",
"token": "202509271001001446030204698626",
"keyWord": wd,
"pageNum": String(page),
"pageSize": String(searchLimit)
};
const response = await request(`${platRule.host}${platRule.search}`, {
method: 'GET',
headers: aggConfig.headers.json,
data: postData,
timeout: searchTimeout
});
const res = JSON.parse(response || '{}');
const items = res.data?.datalist || [];
log(0, '星星搜索', `获取到 ${items.length}`);
results = items.map(vod => ({
vod_id: `星星@${vod.id}@${encodeURIComponent(vod.introduction || '')}`,
vod_name: vod.name || '',
vod_pic: vod.icon || '',
vod_remarks: `星星短剧 | ${vod.heat || 0}万播放`,
vod_content: vod.introduction || ''
}));
} catch (e) {
log(2, '星星搜索', e.message);
}
break;
}
case '好看': {
try {
const postData = { "search_word": wd };
const response = await request(`${platRule.host}${platRule.search}`, {
method: 'POST',
headers: aggConfig.headers.haokan,
data: postData,
timeout: searchTimeout
});
const res = JSON.parse(response || '{}');
const items = res.data || [];
log(0, '好看搜索', `获取到 ${items.length}`);
results = items.map(item => ({
vod_id: `好看@${item.id}`,
vod_name: item.title || '',
vod_pic: item.cover_url || '',
vod_remarks: '好看短剧 | ' + (item.tag ? item.tag.replace(/\//g, '·') : ''),
vod_content: ''
}));
} catch (e) {
log(2, '好看搜索', e.message);
}
break;
}
}
// 关键词过滤
const keywordRegex = new RegExp(wd, "i");
let filteredResults = [];
for (let item of results) {
if (item.vod_name && keywordRegex.test(item.vod_name)) {
filteredResults.push(item);
}
}
log(0, `${siteId}搜索`, `原始 ${results.length} 条,匹配后 ${filteredResults.length}`);
logTime(start, 'cfs');
const resultJson = JSON.stringify({
list: filteredResults,
page: page,
pagecount: page + 1,
limit: filteredResults.length,
total: filteredResults.length * (page + 1)
});
setSearchCache(cacheKey, resultJson);
return resultJson;
}
// ==================== 全局搜索 ====================
async function search(wd, quick, pg) {
const start = Date.now();
const videos = [];
const page = pg || 1;
log(1, '全局搜索', `关键词: ${wd}, 页码: ${page}`);
const platForms = platformList.filter(item => !cate_remove.some(word => new RegExp(word, 'i').test(item.name)));
log(0, '全局搜索', `${platForms.length} 个平台待搜索`);
const searchPromises = platForms.map(async (platform) => {
try {
const result = await cfs(platform.id, wd, page);
return JSON.parse(result).list || [];
} catch (e) {
log(2, '全局搜索', `${platform.id} 异常: ${e.message}`);
return [];
}
});
const searchResults = await Promise.all(searchPromises);
let totalResults = 0;
const hasResultPlats = [];
const noResultPlats = [];
searchResults.forEach((list, idx) => {
const platform = platForms[idx];
const count = list.length;
totalResults += count;
if (count > 0) {
hasResultPlats.push(`${platform.name}(${count}条)`);
} else {
noResultPlats.push(platform.name);
}
videos.push(...list);
});
if (hasResultPlats.length > 0) {
log(1, '搜索结果', `有结果: ${hasResultPlats.join(', ')}`);
} else {
log(2, '搜索结果', `无结果`);
}
if (noResultPlats.length > 0) {
log(2, '搜索结果', `无结果平台: ${noResultPlats.join(', ')}`);
}
log(1, '搜索结果汇总', `${totalResults}`);
// 关键词过滤
const keywordRegex = new RegExp(wd, "i");
let filteredResults = [];
for (let item of videos) {
if (item.vod_name && keywordRegex.test(item.vod_name)) {
filteredResults.push(item);
}
}
log(1, '全局搜索', `原始 ${videos.length} 条,过滤后 ${filteredResults.length}`);
logTime(start, 'search');
return JSON.stringify({
list: filteredResults,
page: page,
pagecount: page + 1,
limit: filteredResults.length,
total: filteredResults.length * (page + 1)
});
}
// ==================== 播放 ====================
async function play(flag, id, flags) {
log(0, '播放', `${flag} ${id.substring(0, 50)}`);
if (/好看|百度/.test(flag)) {
let parts = id.split('@');
let playletId = parts[0];
let vid = parts[1];
if (/好看/.test(flag)) {
const innerParams = `method=post&vid=${vid}&immersive_mode=v4_5&tplname=feed_small_video&tag=playlet_talos&tab=detail&external_from=&is_dp_video=0&immersive_square_type=3&video_set_id=${playletId}&play_screen_type=1&play_volume_type=2&play_external_device_type=1`;
const response = await request(`${rule.好看.host}${rule.好看.play}`, {
method: 'POST', headers: aggConfig.headers.haokan, data: { "video/relate": innerParams }
});
try {
const videoData = JSON.parse(response)['video/relate']?.data?.cur_video || {};
const urlMap = {};
if (videoData.clarityUrl) videoData.clarityUrl.forEach(c => { if (c.title && c.url) urlMap[c.title] = c.url; });
if (videoData.video_list) Object.entries(videoData.video_list).forEach(([k, v]) => { if (!urlMap[k]) urlMap[k] = v; });
const sortedQualities = Object.keys(urlMap).sort((a, b) => {
const order = { '4k': 0, '2k': 1, '高清': 2, '蓝光': 3, '超清': 4, '标清': 5 };
return (order[a] ?? 999) - (order[b] ?? 999);
});
const playUrls = [];
sortedQualities.forEach(q => playUrls.push(q, urlMap[q]));
if (playUrls.length > 0) return JSON.stringify({ parse: 0, url: playUrls });
} catch (e) { }
return JSON.stringify({ parse: 0, url: id });
}
if (/百度/.test(flag)) {
const response = await request(`${rule.百度.detailHost}${rule.百度.play}`, {
method: 'POST', headers: aggConfig.headers.baidu, data: { "method": "post", "vid": vid }
});
let json = JSON.parse(response)["video/relate"]?.data?.cur_video;
if (!json?.clarityUrl) return JSON.stringify({ parse: 0, url: id });
let urls = json.clarityUrl.filter(item => item.url && item.title).map(item => ({ title: item.title, url: item.url, order: { '蓝光': 1, '超清': 2, '标清': 3 }[item.title] || 999 })).sort((a, b) => a.order - b.order).flatMap(item => [item.title, item.url]);
return JSON.stringify({ parse: urls.length > 0 ? 0 : 1, url: urls.length > 0 ? urls : id });
}
}
if (/河马/.test(flag)) {
try {
let arr = id.split("++");
let chapterId = arr[0], bookId = arr[2];
let fsbody = JSON.stringify({ "bookId": bookId, "chapterId": chapterId, "unClockType": "pay", "confirmPay": 2, "autoPayFlag": true, "omap": { "channelName": "精选", "logId": "17a6500357709bb2547e1e122b438cfc", "originName": "书城", "recId": "bigdata_rec", "scene": "nsc_727", "sceneId": "dzmf_video_sc_reco", "strategyId": "g6y6b5sq" } });
let fsbodyEnc = hemaEncrypt(fsbody);
let response = await request(rule.河马.host + rule.河马.play, {
method: 'POST', headers: { ...hema_headers, 'Content-Type': 'application/x-www-form-urlencoded' }, data: fsbodyEnc
});
let res = JSON.parse(response);
let fshtml = res.data;
if (fshtml) {
let fsdata = hemaDecrypt(fshtml);
if (fsdata && fsdata !== '{}') {
let parsed = JSON.parse(fsdata);
if (parsed.chaptersPayType == '免费') {
let url = parsed.chapterInfo?.[0]?.content?.m3u8720p || [];
if (url) return JSON.stringify({ parse: 0, url: url });
}
}
}
let playurl = "https://api.cenguigui.cn/api/duanju/hema.php?book_id=" + bookId + "&video_id=" + chapterId + "&type=mp4";
return JSON.stringify({ parse: 0, url: playurl + '#isVideo=true#' });
} catch (e) {
return JSON.stringify({ parse: 0, url: id });
}
}
if (/牛牛/.test(flag)) {
const inputArr = id.split('+');
if (inputArr.length === 2) {
let ep = inputArr[0].match(/\d+/)?.[0] || "";
let videoId = inputArr[1];
let response = await request(`${rule.牛牛.host}/api/v1/app/play/movieDetails`, {
method: 'POST', headers: niuniu_headers, data: { "id": videoId, "source": 0, "typeId": "S1", "userId": "546932", "episodeId": ep }
});
let result = JSON.parse(response);
if (result.code == 200 && result.data?.url) return JSON.stringify({ parse: 0, url: result.data.url });
} else if (inputArr.length === 3) {
let index = inputArr[0], lock_type = inputArr[1], thirdPlayId = inputArr[2];
let data1 = `not_include=0&lock_free=1&type=1&clientVersion=v5.2.5&uuid=6IDYUSASPQY5BBVACWQW3LLTPV4V7DE26UOCX5TZTVUGX4VUJNXQ01&resolution=1080*2320&openudid=82f4175d577a2939&dt=22021211RC&os_api=31&install_id=1496879012031075&sdk_version=1.1.3.0&siteid=5627189&dev_log_aid=667431&oaid=abec0dfff623201b&timestamp=1752498494&direction=0&ac=mobile&os=Android&vod_version=1.10.21.6-tob&os_version=12&count=1&index=1&shortplay_id=${thirdPlayId}&sha1=46121F77CE2FCAD3DBC3B9EC8A24908C1A8AD6D9&device_brand=Redmi&package_name=com.niuniu.ztdh.app`;
if (lock_type === "free") {
let frhtml = await niuniuPost(rule.牛牛.detail2, data1, index);
if (frhtml?.data?.list?.[0]) {
let url = base64Decode(frhtml.data.list[0].video_model.video_list.video_1.main_url);
return JSON.stringify({ parse: 0, url });
}
} else {
let unlockData = `ac=mobile&os=Android&vod_version=1.10.21.6-tob&os_version=12&lock_ad=3&lock_free=3&type=1&clientVersion=v5.2.5&uuid=6IDYUSASPQY5BBVACWQW3LLTPV4V7DE26UOCX5TZTVUGX4VUJNXQ01&resolution=1080*2320&openudid=82f4175d577a2939&shortplay_id=${thirdPlayId}&dt=22021211RC&sha1=46121F77CE2FCAD3DBC3B9EC8A24908C1A8AD6D9&lock_index=21&os_api=31&install_id=1496879012031075&device_brand=Redmi&sdk_version=1.1.3.0&package_name=com.niuniu.ztdh.app&siteid=5627189&dev_log_aid=667431&oaid=abec0dfff623201b&timestamp=1752498493`;
await niuniuPost(rule.牛牛.unlock, unlockData, index);
let unhtml = await niuniuPost(rule.牛牛.detail2, data1, index);
if (unhtml?.data?.list?.[0]) {
let url = base64Decode(unhtml.data.list[0].video_model.video_list.video_1.main_url);
return JSON.stringify({ parse: 0, url });
}
}
}
return JSON.stringify({ parse: 0, url: id });
}
if (/围观/.test(flag)) {
try {
let playSetting = typeof id === 'string' ? JSON.parse(id) : id;
let urls = [];
if (playSetting.super) urls.push("超清", playSetting.super);
if (playSetting.high) urls.push("高清", playSetting.high);
if (playSetting.normal) urls.push("流畅", playSetting.normal);
return JSON.stringify({ parse: 0, url: urls.length ? urls : id });
} catch (e) {
return JSON.stringify({ parse: 0, url: id });
}
}
return JSON.stringify({ parse: 0, url: id });
}
// ==================== 工具函数 ====================
function buildUrlQuery(params) {
return Object.keys(params).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`).join('&');
}
async function md5(str) {
return CryptoJS.MD5(str).toString(CryptoJS.enc.Hex).toLowerCase();
}
function base64Encode(text) {
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text));
}
function base64Decode(text) {
return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text));
}
function hmacSHA256(data, key) {
return CryptoJS.HmacSHA256(data, key).toString(CryptoJS.enc.Hex);
}
function aesEncryptECB(text, keyStr) {
let key = CryptoJS.enc.Utf8.parse(keyStr);
return CryptoJS.AES.encrypt(text, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString();
}
function aesDecryptECB(ciphertext, keyStr) {
let key = CryptoJS.enc.Utf8.parse(keyStr);
return CryptoJS.AES.decrypt(ciphertext, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8);
}
function hemaEncrypt(plaintext) {
let key = CryptoJS.enc.Hex.parse("647a6b6a67667978677368796c677a6d");
let iv = CryptoJS.enc.Hex.parse("6170697570646f776e65646372797074");
let encrypted = CryptoJS.AES.encrypt(plaintext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString(CryptoJS.enc.Hex).toUpperCase();
}
function hemaDecrypt(word) {
let key = CryptoJS.enc.Hex.parse("647a6b6a67667978677368796c677a6d");
let iv = CryptoJS.enc.Hex.parse("6170697570646f776e65646372797074");
let srcs = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(word));
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return decrypt.toString(CryptoJS.enc.Utf8);
}
async function niuniuPost(url1, data1, index) {
let t10 = String(Math.floor(Date.now() / 1000));
let X_Nonce = "X9UknYKtLa3DmtjC";
let body1 = data1.replace(/&lock_free=\d+/, "&lock_free=1").replace(/&timestamp=\d+/, "&timestamp=" + t10).replace(/&count=\d+/, "&count=1").replace(/&index=\d+/, "&index=" + index).replace(/&lock_ad=\d+/, "&lock_ad=1").replace(/&lock_index=\d+/, "&lock_index=" + index);
let body2 = aesEncryptECB(body1, 'ce49b18dd4e0a4d8');
let signature = hmacSHA256(t10 + X_Nonce + body1, 'aceaa47f96b4875d446b2e1d97e03bbb');
let res = await request(url1, {
method: 'POST',
headers: { 'X-Salt': 'FD8188A8D5', 'X-Nonce': X_Nonce, 'X-Timestamp': t10, 'X-Access-Token': niuniu_access_token, 'X-Signature': signature, 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'okhttp/4.12.0' },
data: body2
});
if (!res) return {};
try { return JSON.parse(aesDecryptECB(res, 'ce49b18dd4e0a4d8')); } catch (e) { return {}; }
}
async function request(url, options = {}) {
let reqHeaders = { ...aggConfig.headers.form, ...options.headers };
let finalUrl = url;
let requestData = options.data;
let useBody = false;
// POST + 字符串 + form类型 → 直接作为body发送(保留空格,牛牛接口需要)
if (options.method === 'POST' && typeof options.data === 'string' && reqHeaders['Content-Type']?.includes('form')) {
useBody = true;
}
// GET请求处理
if ((options.method === 'GET' || !options.method) && options.data && !useBody) {
let queryData = options.data;
if (typeof queryData === 'string') {
try { queryData = JSON.parse(queryData); } catch (e) { queryData = {}; }
}
finalUrl = url + (url.includes('?') ? '&' : '?') + buildUrlQuery(queryData);
requestData = null;
}
// 确定postType(关键!告诉req如何处理data)
let postType = '';
if (!useBody && options.data) {
let ct = reqHeaders['Content-Type'] || '';
postType = ct.includes('json') ? 'json' : (ct.includes('form') ? 'form' : '');
}
try {
const res = await req(finalUrl, {
method: options.method || 'GET',
headers: reqHeaders,
...(useBody ? { body: requestData } : { data: requestData, postType: postType }),
timeout: options.timeout || 15000
});
return res?.content || res?.data || res;
} catch (e) {
log(2, '请求', e.message);
return null;
}
}
// ==================== 导出 ====================
export function __jsEvalReturn() {
return { init, home, homeVod, category, detail, play, search };
}
+589
View File
@@ -0,0 +1,589 @@
/**
* title: "喵物次元",
* logo: "https://www.mwcy.net/favicon.ico",
* more: {
* sourceTag: "动漫"
* }
*/
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
const HOST = 'https://www.mwcy.net';
const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
let siteKey = "", siteType = "", sourceKey = "", ext = "";
function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
sourceKey = cfg.sourceKey;
ext = cfg.ext;
// 如果ext传入则覆盖HOST(保持兼容)
if (ext && ext.indexOf('http') == 0) HOST = ext;
}
// ==================== 辅助函数 ====================
function fixUrl(url) {
if (!url) return '';
url = url.trim();
if (url.startsWith('//')) return 'https:' + url;
if (url.startsWith('/')) return HOST + url;
return url;
}
function cleanText(text) {
if (!text) return '';
return text.replace(/\s+/g, ' ').trim();
}
function isVideoFormat(url) {
if (!url) return false;
return /\.(m3u8|mp4|mkv|flv|avi|mov|wmv|webm)(\?.*)?$/i.test(url);
}
// ==================== 1. 首页内容与筛选配置 ====================
function home(filter) {
// 固定分类(6个)
const classes = [
{ type_id: "1", type_name: "番剧" },
{ type_id: "22", type_name: "连载新番" },
{ type_id: "24", type_name: "国漫" },
{ type_id: "2", type_name: "剧场" },
{ type_id: "25", type_name: "欧美动漫" },
{ type_id: "26", type_name: "4K专区" }
];
// ---- 公共筛选选项 ----
// 年份:当前年份往前30年 + 更早
const yearList = (() => {
const years = [{ n: "全部", v: "" }];
const currentYear = new Date().getFullYear();
for (let y = currentYear; y >= currentYear - 30; y--) {
years.push({ n: String(y), v: String(y) });
}
years.push({ n: "更早", v: "更早" });
return years;
})();
// 字母
const letterList = (() => {
const letters = [{ n: "全部", v: "" }];
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
chars.forEach(c => letters.push({ n: c, v: c }));
letters.push({ n: "0-9", v: "0-9" });
return letters;
})();
// 排序
const orderList = [
{ n: "最新", v: "time" },
{ n: "最热", v: "hits" },
{ n: "评分", v: "score" }
];
// 地区(用于剧场、欧美动漫)
const areaList = [
{ n: "全部", v: "" },
{ n: "大陆", v: "大陆" },
{ n: "香港", v: "香港" },
{ n: "台湾", v: "台湾" },
{ n: "美国", v: "美国" },
{ n: "法国", v: "法国" },
{ n: "英国", v: "英国" },
{ n: "日本", v: "日本" },
{ n: "韩国", v: "韩国" },
{ n: "德国", v: "德国" },
{ n: "泰国", v: "泰国" },
{ n: "印度", v: "印度" },
{ n: "意大利", v: "意大利" },
{ n: "西班牙", v: "西班牙" },
{ n: "加拿大", v: "加拿大" },
{ n: "其他", v: "其他" }
];
// ---- 按分类配置筛选器 ----
const filters = {
"1": [ // 番剧
{ key: "year", name: "年份", value: yearList },
{ key: "letter", name: "字母", value: letterList },
{ key: "order", name: "排序", value: orderList }
],
"22": [ // 连载新番
{ key: "year", name: "年份", value: yearList },
{ key: "letter", name: "字母", value: letterList },
{ key: "order", name: "排序", value: orderList }
],
"24": [ // 国漫
{ key: "year", name: "年份", value: yearList },
{ key: "letter", name: "字母", value: letterList },
{ key: "order", name: "排序", value: orderList }
],
"2": [ // 剧场
{ key: "area", name: "地区", value: areaList },
{ key: "year", name: "年份", value: yearList },
{ key: "letter", name: "字母", value: letterList },
{ key: "order", name: "排序", value: orderList }
],
"25": [ // 欧美动漫
{ key: "area", name: "地区", value: areaList },
{ key: "year", name: "年份", value: yearList },
{ key: "letter", name: "字母", value: letterList },
{ key: "order", name: "排序", value: orderList }
],
"26": [ // 4K专区
{ key: "letter", name: "字母", value: letterList },
{ key: "order", name: "排序", value: orderList }
]
};
return JSON.stringify({ class: classes, filters: filters });
}
// ==================== 2. 首页推荐视频 ====================
async function homeVod() {
try {
const res = await req(HOST, { headers: { 'User-Agent': UA } });
const $ = load(res.content);
// 定位“十月新番”区域
let section = null;
$('.box-width.wow.fadeInUp .title .title-h').each((i, el) => {
if ($(el).text().trim() === '十月新番') {
section = $(el).closest('.box-width').find('.public-r');
return false;
}
});
if (!section) {
section = $('.public-list-box.public-pic-b').parent();
}
const items = section ? section.find('.public-list-box.public-pic-b') : $('.public-list-box.public-pic-b');
const videos = [];
const seen = new Set();
items.each((i, el) => {
const $el = $(el);
const $link = $el.find('a.public-list-exp');
const href = $link.attr('href');
if (!href || !href.startsWith('/bangumi/')) return;
const title = $el.find('.time-title').text().trim() || $link.attr('title') || '';
const pic = $link.find('img').attr('data-src') || $link.find('img').attr('src') || '';
const remarks = $el.find('.public-list-prb').text().trim() || '';
if (title && href) {
const vod_id = href.startsWith('http') ? href : HOST + href;
if (!seen.has(vod_id)) {
seen.add(vod_id);
videos.push({ vod_id, vod_name: title, vod_pic: pic, vod_remarks: remarks });
}
}
});
return JSON.stringify({ list: videos });
} catch (e) {
console.log('homeVod error:', e);
return null;
}
}
// ==================== 3. 分类内容爬取 ====================
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
extend = extend || {};
const area = extend.area || '';
const year = extend.year || '';
const letter = extend.letter || '';
const order = extend.order || '';
// 构建URL
let url = `${HOST}/show/${tid}`;
const parts = [];
if (area) parts.push(`area/${encodeURIComponent(area)}`);
if (order) parts.push(`by/${encodeURIComponent(order)}`);
if (letter) parts.push(`letter/${encodeURIComponent(letter)}`);
if (year) parts.push(`year/${encodeURIComponent(year)}`);
if (pg > 1) parts.push(`page/${pg}`);
if (parts.length > 0) {
url += '/' + parts.join('/') + '.html';
} else {
url += (pg === 1 ? '.html' : `/page/${pg}.html`);
}
try {
const res = await req(url, { headers: { 'User-Agent': UA } });
const $ = load(res.content);
// 解析视频列表(多级兜底)
let items = $('.public-list-box.public-pic-b');
if (!items.length) items = $('.public-list-div').parent();
const videos = [];
const seen = new Set();
items.each((i, el) => {
const $el = $(el);
const $link = $el.find('a.public-list-exp');
const href = $link.attr('href');
if (!href) return;
let vod_id = href;
if (!href.startsWith('http')) vod_id = HOST + href;
// 如果是 /play/ 链接,转换为 /bangumi/
if (href.startsWith('/play/')) {
const match = href.match(/^\/play\/([^-]+)/);
if (match) {
vod_id = HOST + `/bangumi/${match[1]}.html`;
} else {
return;
}
} else if (!href.startsWith('/bangumi/')) {
return;
}
const title = $el.find('.time-title').text().trim() || $link.attr('title') || '';
const pic = $link.find('img').attr('data-src') || $link.find('img').attr('src') || '';
const remarks = $el.find('.public-list-prb').text().trim() || '';
if (title && vod_id && !seen.has(vod_id)) {
seen.add(vod_id);
videos.push({
vod_id,
vod_name: title,
vod_pic: fixUrl(pic),
vod_remarks: remarks
});
}
});
// 提取总页数
let pagecount = 1;
const pageTip = $('.page-tip').text().trim();
if (pageTip) {
const match = pageTip.match(/当前\d+\/(\d+)页/);
if (match) pagecount = parseInt(match[2]) || 1;
}
if (pagecount === 1) {
const lastPage = $('.page-link').last().attr('href');
if (lastPage) {
const m = lastPage.match(/page\/(\d+)\.html/);
if (m) pagecount = parseInt(m[1]) || 1;
}
}
return JSON.stringify({
list: videos,
page: pg,
pagecount: pagecount,
limit: 20,
total: videos.length
});
} catch (e) {
console.log('category error:', e);
return JSON.stringify({ list: [] });
}
}
// ==================== 4. 搜索功能 ====================
async function search(wd) {
try {
const encoded = encodeURIComponent(wd);
const url = `${HOST}/search/wd/${encoded}.html`;
const res = await req(url, { headers: { 'User-Agent': UA } });
const $ = load(res.content);
// 搜索页结果使用 .vod-detail.search-list
let items = $('.vod-detail.search-list');
if (!items.length) items = $('.vod-detail');
const videos = [];
const seen = new Set();
items.each((i, el) => {
const $el = $(el);
// 标题和链接
let title = '';
let vod_id = '';
const titleEl = $el.find('h3.slide-info-title');
if (titleEl.length) title = titleEl.text().trim();
const linkEl = $el.find('a[target="_blank"]');
if (linkEl.length) {
const href = linkEl.attr('href');
if (href) {
if (href.startsWith('/bangumi/')) {
vod_id = HOST + href;
} else if (href.startsWith('/play/')) {
const match = href.match(/^\/play\/([^-]+)/);
if (match) vod_id = HOST + `/bangumi/${match[1]}.html`;
}
}
if (!title) title = linkEl.text().trim();
}
if (!title) {
// 从其他位置找
const altTitle = $el.find('.slide-info-title').text().trim();
if (altTitle) title = altTitle;
}
const pic = $el.find('.detail-pic img').attr('data-src') || $el.find('.detail-pic img').attr('src') || '';
const remarks = $el.find('.slide-info-remarks').first().text().trim() || '';
if (title && vod_id && !seen.has(vod_id)) {
seen.add(vod_id);
videos.push({
vod_id,
vod_name: title,
vod_pic: fixUrl(pic),
vod_remarks: remarks
});
}
});
// 总页数
let pagecount = 1;
const pageTip = $('.page-tip').text().trim();
if (pageTip) {
const match = pageTip.match(/当前\d+\/(\d+)页/);
if (match) pagecount = parseInt(match[2]) || 1;
}
return JSON.stringify({
list: videos,
page: 1,
pagecount: pagecount,
limit: 20,
total: videos.length
});
} catch (e) {
console.log('search error:', e);
return JSON.stringify({ list: [] });
}
}
// ==================== 5. 详情页解析 ====================
async function detail(id) {
try {
const url = id.startsWith('http') ? id : HOST + id;
const res = await req(url, { headers: { 'User-Agent': UA } });
const $ = load(res.content);
// 标题
let vod_name = $('h3.slide-info-title').text().trim();
if (!vod_name) vod_name = $('.player-title-link').text().trim();
if (!vod_name) vod_name = $('title').text().replace(/^.*? - /, '').replace(/ - .*$/, '');
// 封面
let vod_pic = $('.detail-pic img').attr('data-src') || $('.detail-pic img').attr('src') || '';
if (!vod_pic) vod_pic = $('.vod-detail .detail-pic img').attr('data-src') || '';
// 简介
let vod_content = $('#height_limit').text().trim() || $('.vod-news .text').first().text().trim() || '';
// 元数据:年份、地区、类型
let vod_year = '', vod_area = '';
$('.slide-info .slide-info-remarks a').each((i, el) => {
const text = $(el).text().trim();
if (/^\d{4}$/.test(text)) vod_year = text;
else if (['日本','大陆','香港','台湾','美国','英国','韩国','法国','德国','泰国','印度','意大利','西班牙','加拿大','其他'].includes(text)) {
vod_area = text;
}
});
// 类型
// ---- 提取演员和导演 ----
let vod_actor = '', vod_director = '', type_name = '';
// 方式1:从 .slide-info.partition 中提取
$('.slide-info.partition').each((i, el) => {
const $el = $(el);
// 类型
const typeStrong = $el.find('strong:contains("类型")');
if (typeStrong.length) {
const typeLinks = typeStrong.nextAll('a').map((j, a) => $(a).text().trim()).get();
if (typeLinks.length) type_name = typeLinks.join(',');
}
// 导演
const dirStrong = $el.find('strong:contains("导演")');
if (dirStrong.length) {
const dirLinks = dirStrong.nextAll('a').map((j, a) => $(a).text().trim()).get();
if (dirLinks.length) vod_director = dirLinks.join(',');
}
// 演员
const actorStrong = $el.find('strong:contains("演员")');
if (actorStrong.length) {
const actorLinks = actorStrong.nextAll('a').map((j, a) => $(a).text().trim()).get();
if (actorLinks.length) vod_actor = actorLinks.join(',');
}
});
// ---- 播放源与剧集 ----
const playFrom = [];
const playUrls = [];
// 获取线路名称
const sourceNames = [];
$('.anthology-tab a').each((i, el) => {
let name = $(el).text().trim();
name = name.replace(/<i[^>]*>.*?<\/i>/, '').replace(/&nbsp;/g, '').replace(/<span[^>]*>.*?<\/span>/, '').trim();
if (name) sourceNames.push(name);
});
if (!sourceNames.length) {
$('.vod-playerUrl').each((i, el) => {
let name = $(el).text().trim();
name = name.replace(/<i[^>]*>.*?<\/i>/, '').replace(/<span[^>]*>.*?<\/span>/, '').trim();
if (name) sourceNames.push(name);
});
}
const boxes = $('.anthology-list-box');
if (boxes.length && sourceNames.length) {
boxes.each((idx, box) => {
const name = sourceNames[idx] || ('线路' + (idx+1));
const episodes = [];
$(box).find('ul.anthology-list-play li a').each((j, ep) => {
const $ep = $(ep);
let epName = $ep.find('span').text().trim() || $ep.text().trim();
let href = $ep.attr('href');
if (epName && href) {
href = fixUrl(href);
episodes.push(epName + '$' + href);
}
});
if (episodes.length) {
playFrom.push(name);
playUrls.push(episodes.join('#'));
}
});
}
if (!playFrom.length) {
const singleBox = $('.anthology-list-play');
if (singleBox.length) {
const episodes = [];
singleBox.find('li a').each((j, ep) => {
const $ep = $(ep);
let epName = $ep.find('span').text().trim() || $ep.text().trim();
let href = $ep.attr('href');
if (epName && href) {
href = fixUrl(href);
episodes.push(epName + '$' + href);
}
});
if (episodes.length) {
playFrom.push('默认线路');
playUrls.push(episodes.join('#'));
}
}
}
const vod = {
vod_id: id,
vod_name,
vod_pic: fixUrl(vod_pic),
type_name,
vod_actor: vod_actor,
vod_director: vod_director,
vod_year,
vod_area,
vod_remarks: '',
vod_content,
vod_play_from: playFrom.join('$$$'),
vod_play_url: playUrls.join('$$$')
};
return JSON.stringify({ list: [vod] });
} catch (e) {
console.log('detail error:', e);
return null;
}
}
// ==================== 6. 播放链接解析 ====================
async function play(flag, id, flags) {
try {
const playUrl = id.startsWith('http') ? id : HOST + id;
const res = await req(playUrl, { headers: { 'User-Agent': UA } });
const html = res.content;
const match = html.match(/player_.*?=([^]*?)</);
if (!match) return JSON.stringify({ parse: 1, url: playUrl });
const config = JSON.parse(match[1]);
let videoUrl = (config.url || '').trim();
if (!videoUrl) return JSON.stringify({ parse: 1, url: playUrl });
const directVideoPattern = /\.(m3u8|mp4|mkv|flv|avi|mov|wmv|webm)(\?.*)?$/i;
if (directVideoPattern.test(videoUrl)) {
console.log('videoUrl:', videoUrl);
return JSON.stringify({ parse: 0, url: videoUrl });
}
const tryParse = async (apiPath) => {
try {
const apiUrl = `https://player.catw.moe${apiPath}${encodeURIComponent(videoUrl)}&_t=${Date.now()}`;
const res = await req(apiUrl, { headers: { 'User-Agent': UA } });
const html = res.content;
// 提取 uid
const uidMatch = html.match(/"uid"\s*:\s*"([^"]+)"/);
const uid = uidMatch ? uidMatch[1] : null;
console.log('uid:', uid);
// 提取 url (ConFig 根层级那个长字符串)
const urlMatch = html.match(/"url"\s*:\s*"([^"]+)"/);
const url = urlMatch ? urlMatch[1] : null;
console.log('url:', url);
if (!uid || !url) {
console.log('[喵物次元] ConFig 缺少 uid 或 url');
return null;
}
const realUrl = decryptEcUrl(url, uid);
if (realUrl) {
return { url: realUrl, ua: UA };
}
return null;
} catch (e) {
return null;
}
};
let parsed = await tryParse('/player/ec.php?code=qw&if=1&url=');
if (!parsed) parsed = await tryParse('/art.php?url=');
if (parsed) {
return JSON.stringify({
parse: 0,
url: parsed.url,
header: { 'User-Agent': parsed.ua }
});
}
return JSON.stringify({ parse: 1, url: playUrl });
} catch (e) {
return JSON.stringify({ parse: 1, url: id });
}
}
function decryptEcUrl(encryptedBase64, uid) {
try {
const aesKey = '2890' + uid + 'tB959C';
const aesIv = '2F131BE91247866E';
// aesX(算法, 加密?false=解密, 数据, 输入是Base64?, key, iv, 输出是Base64?)
const realUrl = aesX('AES/CBC/PKCS7', false, encryptedBase64, true, aesKey, aesIv, false);
console.log(realUrl)
return realUrl;
} catch (e) {
return null;
}
}
// ==================== 导出 ====================
export function __jsEvalReturn() {
return {
init,
home,
homeVod,
category,
detail,
play,
search
};
}
+518
View File
@@ -0,0 +1,518 @@
# coding=utf-8
# !/usr/bin/python
"""
作者 丢丢喵推荐 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容
====================Diudiumiao====================
"""
from Crypto.Util.Padding import unpad
from Crypto.Util.Padding import pad
from urllib.parse import unquote
from Crypto.Cipher import ARC4
from urllib.parse import quote
from base.spider import Spider
from Crypto.Cipher import AES
from datetime import datetime
from bs4 import BeautifulSoup
from base64 import b64decode
import urllib.request
import urllib.parse
import datetime
import binascii
import requests
import hashlib
import base64
import json
import time
import sys
import re
import os
sys.path.append('..')
xurl = "https://api-store.qmplaylet.com"
xurl1 = "https://api-read.qmplaylet.com"
keys = "d3dGiJc651gSQ8w1"
data = {
"static_score": "0.8",
"uuid": "00000000-7fc7-08dc-0000-000000000000",
"device-id": "20250220125449b9b8cac84c2dd3d035c9052a2572f7dd0122edde3cc42a70",
"mac": "",
"sourceuid": "aa7de295aad621a6",
"refresh-type": "0",
"model": "22021211RC",
"wlb-imei": "",
"client-id": "aa7de295aad621a6",
"brand": "Redmi",
"oaid": "",
"oaid-no-cache": "",
"sys-ver": "12",
"trusted-id": "",
"phone-level": "H",
"imei": "",
"wlb-uid": "aa7de295aad621a6",
"session-id": str(int(time.time() * 1000)),
}
json_str = json.dumps(data, separators=(',', ':'))
encoded = base64.b64encode(json_str.encode()).decode()
char_map = {
'+': 'P', '/': 'X', '0': 'M', '1': 'U', '2': 'l', '3': 'E', '4': 'r',
'5': 'Y', '6': 'W', '7': 'b', '8': 'd', '9': 'J', 'A': '9', 'B': 's',
'C': 'a', 'D': 'I', 'E': '0', 'F': 'o', 'G': 'y', 'H': '_', 'I': 'H',
'J': 'G', 'K': 'i', 'L': 't', 'M': 'g', 'N': 'N', 'O': 'A', 'P': '8',
'Q': 'F', 'R': 'k', 'S': '3', 'T': 'h', 'U': 'f', 'V': 'R', 'W': 'q',
'X': 'C', 'Y': '4', 'Z': 'p', 'a': 'm', 'b': 'B', 'c': 'O', 'd': 'u',
'e': 'c', 'f': '6', 'g': 'K', 'h': 'x', 'i': '5', 'j': 'T', 'k': '-',
'l': '2', 'm': 'z', 'n': 'S', 'o': 'Z', 'p': '1', 'q': 'V', 'r': 'v',
's': 'j', 't': 'Q', 'u': '7', 'v': 'D', 'w': 'w', 'x': 'n', 'y': 'L',
'z': 'e'
}
qm_params = ''
for c in encoded:
qm_params += char_map.get(c, c)
params_str = (
"AUTHORIZATION=" +
"app-version=10001" +
"application-id=com.duoduo.read" +
"channel=unknown" +
"is-white=" +
"net-env=5" +
"platform=android" +
f"qm-params={qm_params}" +
f"reg={keys}"
)
signs = hashlib.md5(params_str.encode()).hexdigest()
headerx = {
'net-env': '5',
'reg': '',
'channel': 'unknown',
'is-white': '',
'platform': 'android',
'application-id': 'com.duoduo.read',
'authorization': '',
'app-version': '10001',
'user-agent': 'webviewversion/0',
'qm-params': qm_params,
'sign': signs
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36'
}
# 全局变量用于缓存百度跳转信息
baidu_name_cache = ""
baidu_jump_cache = ""
class Spider(Spider):
global xurl
global xurl1
global keys
global headerx
global headers
global baidu_name_cache
global baidu_jump_cache
def getName(self):
return "首页"
def init(self, extend):
global baidu_name_cache, baidu_jump_cache
# 初始化时获取百度跳转信息并缓存
try:
response = requests.get(url='https://m.baidu.com/', headers=headers, timeout=5)
response.encoding = 'utf-8'
code = response.text
baidu_name_cache = self.extract_middle_text(code, "s1='", "'", 0)
baidu_jump_cache = self.extract_middle_text(code, "s2='", "'", 0)
except:
baidu_name_cache = ""
baidu_jump_cache = ""
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''):
if pl == 3:
plx = []
while True:
start_index = text.find(start_str)
if start_index == -1:
break
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
break
middle_text = text[start_index + len(start_str):end_index]
plx.append(middle_text)
text = text.replace(start_str + middle_text + end_str, '')
if len(plx) > 0:
purl = ''
for i in range(len(plx)):
matches = re.findall(start_index1, plx[i])
output = ""
for match in matches:
match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1])
if match3:
number = match3.group(1)
else:
number = 0
if 'http' not in match[0]:
output += f"#{match[1]}${number}{xurl}{match[0]}"
else:
output += f"#{match[1]}${number}{match[0]}"
output = output[1:]
purl = purl + output + "$$$"
purl = purl[:-3]
return purl
else:
return ""
else:
start_index = text.find(start_str)
if start_index == -1:
return ""
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
return ""
if pl == 0:
middle_text = text[start_index + len(start_str):end_index]
return middle_text.replace("\\", "")
if pl == 1:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
jg = ' '.join(matches)
return jg
if pl == 2:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
new_list = [f'{item}' for item in matches]
jg = '$$$'.join(new_list)
return jg
def homeContent(self, filter):
result = {"class": []}
sign_string = f"operation=1playlet_privacy=1tag_id=0{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
url = f"{xurl}/api/v1/playlet/index?tag_id=0&playlet_privacy=1&operation=1&sign={sign}"
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
data = detail.json()
duoxuan = ['0', '1', '2', '3', '4']
for duo in duoxuan:
js = data['data']['tag_categories'][int(duo)]['tags']
for vod in js:
name = vod['tag_name']
if "推荐" in name:
continue
id = vod['tag_id']
result["class"].append({"type_id": id, "type_name": "" + name})
return result
def homeVideoContent(self):
videos = []
sign_string = f"operation=1playlet_privacy=1tag_id=0{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
url = f"{xurl}/api/v1/playlet/index?tag_id=0&playlet_privacy=1&operation=1&sign={sign}"
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
data = detail.json()
data = data['data']['list']
for vod in data:
# 获取标题,确保不为空
name = vod.get('title', '')
if not name:
name = vod.get('name', '未知标题')
name = str(name).strip()
# 获取ID
id = vod.get('playlet_id', '')
if not id:
id = vod.get('id', '')
# 获取封面
pic = vod.get('image_link', '')
if not pic:
pic = vod.get('cover', '')
# 获取热度值作为备注
remark = vod.get('hot_value', '')
if not remark:
remark = vod.get('view_count', '')
video = {
"vod_id": str(id),
"vod_name": name,
"vod_pic": pic,
"vod_remarks": str(remark) if remark else ''
}
videos.append(video)
result = {'list': videos}
return result
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
if page == 1:
sign_string = f"operation=1playlet_privacy=1tag_id={cid}{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
url = f'{xurl}/api/v1/playlet/index?tag_id={cid}&playlet_privacy=1&operation=1&sign={sign}'
else:
sign_string = f"next_id={str(page)}operation=1playlet_privacy=1tag_id={cid}{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
url = f'{xurl}/api/v1/playlet/index?tag_id={cid}&next_id={str(page)}&playlet_privacy=1&operation=1&sign={sign}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
data = detail.json()
data = data['data']['list']
for vod in data:
name = vod.get('title', '')
if not name:
name = vod.get('name', '未知标题')
name = str(name).strip()
id = vod.get('playlet_id', '')
if not id:
id = vod.get('id', '')
pic = vod.get('image_link', '')
if not pic:
pic = vod.get('cover', '')
remark = vod.get('hot_value', '')
if not remark:
remark = vod.get('view_count', '')
video = {
"vod_id": str(id),
"vod_name": name,
"vod_pic": pic,
"vod_remarks": str(remark) if remark else ''
}
videos.append(video)
result = {'list': videos}
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
did = ids[0]
result = {}
videos = []
xianlu = '七猫专线' # 统一使用七猫专线
bofang = ''
sign_string = f"playlet_id={did}{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
urls = f'{xurl1}/player/api/v1/playlet/info?playlet_id={did}&sign={sign}'
detail = requests.get(url=urls, headers=headerx)
detail.encoding = "utf-8"
detail = detail.json()
# 获取标题(使用API返回的标题)
title = detail.get('data', {}).get('title', '')
if not title:
title = detail.get('data', {}).get('name', '未知标题')
blurb = detail.get('data', {}).get('intro') or "暂无剧情简介"
content = '剧情📢' + str(blurb)
jisu = detail.get('data', {}).get('total_episode_num', '未知')
jisu = str(jisu) + '全集'
leixing = detail.get('data', {}).get('tags', '未知')
remarks = str(leixing) + " " + str(jisu)
# 使用七猫的播放列表
soup = detail.get('data', {}).get('play_list', [])
if soup:
for sou in soup:
video_url = sou.get('video_url', '')
sort_name = sou.get('sort', '')
if video_url and sort_name:
bofang = bofang + str(sort_name) + '$' + str(video_url) + '#'
bofang = bofang[:-1] if bofang else ''
else:
# 如果没有播放列表,使用跳转链接
global baidu_jump_cache
bofang = baidu_jump_cache
videos.append({
"vod_id": str(did),
"vod_name": str(title),
"vod_remarks": remarks,
"vod_content": content,
"vod_play_from": xianlu,
"vod_play_url": bofang
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
play_url = ""
# 获取百度跳转信息(使用缓存)
global baidu_jump_cache
baidu_jump = baidu_jump_cache
# 判断是否是外部跳转链接(百度等)
if 'baidu.com' in str(id) or 'tuios.com' in str(id) or 'qmplaylet' in str(id):
# 如果是外部跳转链接,直接使用
play_url = str(id)
# 判断是否是直接的HTTP链接
elif str(id).startswith('http'):
play_url = str(id)
# 如果是内部播放ID,需要重新获取详情
else:
try:
# 获取该ID对应的详情信息
sign_string = f"playlet_id={id}{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
detail_url = f'{xurl1}/player/api/v1/playlet/info?playlet_id={id}&sign={sign}'
detail_response = requests.get(url=detail_url, headers=headerx, timeout=5)
detail_response.encoding = "utf-8"
detail_data = detail_response.json()
# 获取标题
title = detail_data.get('data', {}).get('title', '')
if not title:
title = detail_data.get('data', {}).get('name', '')
# 统一使用七猫专线的播放列表
play_list = detail_data.get('data', {}).get('play_list', [])
if play_list:
for idx, item in enumerate(play_list):
video_url = item.get('video_url', '')
sort_name = item.get('sort', '')
if video_url and sort_name:
if play_url:
play_url += '#'
play_url += str(sort_name) + '$' + str(video_url)
else:
# 如果没有play_list,使用原始ID
play_url = str(id)
except Exception as e:
# 如果出错,使用跳转链接或原始ID
play_url = baidu_jump if baidu_jump else str(id)
result["parse"] = 0
result["playUrl"] = ''
result["url"] = play_url if play_url else str(id)
result["header"] = headers
return result
def searchContentPage(self, key, quick, pg):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
sign_string = f"extend=page={str(page)}read_preference=0track_id=ec1280db127955061754851657967wd={key}{keys}"
sign = hashlib.md5(sign_string.encode('utf-8')).hexdigest()
url = f'{xurl}/api/v1/playlet/search?extend=&page={str(page)}&wd={key}&read_preference=0&track_id=ec1280db127955061754851657967&sign={sign}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
detail = detail.json()
data = detail['data']['list']
for vod in data:
name = vod.get('title', '')
if not name:
name = vod.get('name', '未知标题')
name = re.sub(r'<[^>]+>', '', str(name))
name = ' '.join(name.split())
id = vod.get('id', '')
pic = vod.get('image_link', '')
if not pic:
pic = vod.get('cover', '')
remark = vod.get('total_num', '')
video = {
"vod_id": str(id),
"vod_name": name,
"vod_pic": pic,
"vod_remarks": str(remark) if remark else ''
}
videos.append(video)
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def searchContent(self, key, quick, pg="1"):
return self.searchContentPage(key, quick, '1')
def localProxy(self, params):
if params['type'] == "m3u8":
return self.proxyM3u8(params)
elif params['type'] == "media":
return self.proxyMedia(params)
elif params['type'] == "ts":
return self.proxyTs(params)
return None
+343
View File
@@ -0,0 +1,343 @@
# coding = utf-8
# !/usr/bin/python
"""
"""
from Crypto.Util.Padding import unpad
from Crypto.Util.Padding import pad
from urllib.parse import unquote
from Crypto.Cipher import ARC4
from urllib.parse import quote
from base.spider import Spider
from Crypto.Cipher import AES
from bs4 import BeautifulSoup
from base64 import b64decode
import urllib.request
import urllib.parse
import binascii
import requests
import base64
import json
import time
import sys
import re
import os
sys.path.append('..')
xurl = "https://app.whjzjx.cn"
headers = {
'User-Agent': 'Linux; Android 12; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Mobile Safari/537.36'
}
headerf = {
"platform": "1",
"user_agent": "Mozilla/5.0 (Linux; Android 9; V1938T Build/PQ3A.190705.08211809; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Safari/537.36",
"content-type": "application/json; charset=utf-8"
}
times = int(time.time() * 1000)
data = {
"device": "2a50580e69d38388c94c93605241fb306",
"package_name": "com.jz.xydj",
"android_id": "ec1280db12795506",
"install_first_open": True,
"first_install_time": 1752505243345,
"last_update_time": 1752505243345,
"report_link_url": "",
"authorization": "",
"timestamp": times
}
plain_text = json.dumps(data, separators=(',', ':'), ensure_ascii=False)
key = "B@ecf920Od8A4df7"
key_bytes = key.encode('utf-8')
plain_bytes = plain_text.encode('utf-8')
cipher = AES.new(key_bytes, AES.MODE_ECB)
padded_data = pad(plain_bytes, AES.block_size)
ciphertext = cipher.encrypt(padded_data)
encrypted = base64.b64encode(ciphertext).decode('utf-8')
response = requests.post("https://u.shytkjgs.com/user/v3/account/login", headers=headerf, data=encrypted)
response_data = response.json()
Authorization = response_data['data']['token']
headerx = {
'authorization': Authorization,
'platform': '1',
'version_name': '3.8.3.1'
}
class Spider(Spider):
global xurl
global headerx
global headers
def getName(self):
return "首页"
def init(self, extend):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''):
if pl == 3:
plx = []
while True:
start_index = text.find(start_str)
if start_index == -1:
break
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
break
middle_text = text[start_index + len(start_str):end_index]
plx.append(middle_text)
text = text.replace(start_str + middle_text + end_str, '')
if len(plx) > 0:
purl = ''
for i in range(len(plx)):
matches = re.findall(start_index1, plx[i])
output = ""
for match in matches:
match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1])
if match3:
number = match3.group(1)
else:
number = 0
if 'http' not in match[0]:
output += f"#{match[1]}${number}{xurl}{match[0]}"
else:
output += f"#{match[1]}${number}{match[0]}"
output = output[1:]
purl = purl + output + "$$$"
purl = purl[:-3]
return purl
else:
return ""
else:
start_index = text.find(start_str)
if start_index == -1:
return ""
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
return ""
if pl == 0:
middle_text = text[start_index + len(start_str):end_index]
return middle_text.replace("\\", "")
if pl == 1:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
jg = ' '.join(matches)
return jg
if pl == 2:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
new_list = [f'{item}' for item in matches]
jg = '$$$'.join(new_list)
return jg
def homeContent(self, filter):
result = {}
result = {"class": [{"type_id": "1", "type_name": "七星剧场"},
{"type_id": "3", "type_name": "七星新剧"},
{"type_id": "2", "type_name": "七星热播"},
{"type_id": "7", "type_name": "七星星选"},
{"type_id": "5", "type_name": "七星阳光"}],
}
return result
def homeVideoContent(self):
videos = []
url= f'{xurl}/v1/theater/home_page?theater_class_id=1&class2_id=4&page_num=1&page_size=24'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
if detail.status_code == 200:
data = detail.json()
for vod in data['data']['list']:
name = vod['theater']['title']
id = vod['theater']['id']
pic = vod['theater']['cover_url']
remark = vod['theater']['play_amount_str']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result = {'list': videos}
return result
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
url = f'{xurl}/v1/theater/home_page?theater_class_id={cid}&page_num={pg}&page_size=24'
detail = requests.get(url=url,headers=headerx)
detail.encoding = "utf-8"
if detail.status_code == 200:
data = detail.json()
for vod in data['data']['list']:
name = vod['theater']['title']
id = vod['theater']['id']
pic = vod['theater']['cover_url']
remark = vod['theater']['theme']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result = {'list': videos}
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
did = ids[0]
result = {}
videos = []
xianlu = ''
bofang = ''
url = f'{xurl}/v2/theater_parent/detail?theater_parent_id={did}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
if detail.status_code == 200:
data = detail.json()
url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt'
response = requests.get(url)
response.encoding = 'utf-8'
code = response.text
name = self.extract_middle_text(code, "s1='", "'", 0)
Jumps = self.extract_middle_text(code, "s2='", "'", 0)
content = '剧情:' + data['data']['introduction']
area = data['data']['desc_tags'][0]
remarks = data['data']['filing']
# 修复剧集只有一集的问题 - 检查theaters数据是否存在且不为空
if 'theaters' in data['data'] and data['data']['theaters']:
for sou in data['data']['theaters']:
id = sou['son_video_url']
name = sou['num']
bofang = bofang + str(name) + '$' + id + '#'
bofang = bofang[:-1] if bofang.endswith('#') else bofang
xianlu = '七星'
else:
# 如果没有theaters数据,检查是否有单个视频URL
if 'video_url' in data['data'] and data['data']['video_url']:
bofang = '1$' + data['data']['video_url']
xianlu = '七星'
else:
bofang = Jumps
xianlu = '1'
videos.append({
"vod_id": did,
"vod_content": content,
"vod_remarks": remarks,
"vod_area": area,
"vod_play_from": xianlu,
"vod_play_url": bofang
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
result["parse"] = 0
result["playUrl"] = ''
result["url"] = id
result["header"] = headers
return result
def searchContentPage(self, key, quick, page):
result = {}
videos = []
payload = {
"text": key
}
url = f"{xurl}/v3/search"
detail = requests.post(url=url, headers=headerx, json=payload)
if detail.status_code == 200:
detail.encoding = "utf-8"
data = detail.json()
for vod in data['data']['theater']['search_data']:
name = vod['title']
id = vod['id']
pic = vod['cover_url']
remark = vod['score_str']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result['list'] = videos
result['page'] = page
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def searchContent(self, key, quick, pg="1"):
return self.searchContentPage(key, quick, '1')
def localProxy(self, params):
if params['type'] == "m3u8":
return self.proxyM3u8(params)
elif params['type'] == "media":
return self.proxyMedia(params)
elif params['type'] == "ts":
return self.proxyTs(params)
return None
+330
View File
@@ -0,0 +1,330 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import sys
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor
# 引入 RSA 加解密所需模块
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
did = self.getdid()
self.headers.update({'deviceId': did})
token = self.gettk()
self.headers.update({'token': token})
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
# 1. 修改为主机域名
host = 'http://qkys.qukanwh.com'
# 2. 同步原脚本的配置请求头
headers = {
'HOST': 'qkys.qukanwh.com',
'User-Agent': 'okhttp/4.12.0',
'client': 'app',
'deviceType': 'Android',
'Referer': ''
}
# 3. 导入原脚本中的 RSA 密钥对与配置
publicKey_str = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoYt0BP77U+DM08BiI/QbSRIfxijXo85BTPqIM1Ow8BNwhLETzRIZ+dEwdWDbydG/PspgBAfRpGaYVdJYtvaC2JnoO8+Ik6qMWojfEJxSFLa0Pb0A892tun4gsxoEMjcreZ+YGyaBxAfqX0BSMfdrOgIYaZQjYrw9TRLlUT31QoQIDAQAB\n-----END PUBLIC KEY-----"
privateKey_str = "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCquQQ5r6+yJI8CDFkXRp8vUsdD45ov8EP12ooLs56ca2DQXaSNGS9910bAPVA9chkp0mKIvKqjAsHz5Tl9EeNPblarGEeJUIxpxZtiSqNTpvtiD/TjhpzuHYic7RAfQ/h7p/ypE8ymU42pYjsB5t26Mv6XgkLV+jzrSf73HlCuS0iMyLmt6zz3Mw9izM13EpB8iFLtfbbYymycKTx4RAmPQLwhNGex/AlUIYxXP4R2yyaa4W6mEtc6aME2QuzJFxPgP3HJ9NBx/LWVn4skxWjZ7zg+VRQRHnjyVaSLu3Z5gN5ITWCyE32qaHJa6WBahZj5jWhRyAG1bQ+xKJa8lBL5AgMBAAECggEAUwv9SjJ0PSwbhNuM2w23kcWquROWhYtTA91zGY4esehqB/IFgb2mpIh8Gje5OKqwIu/8jpd4SiOlRYdUF8sD0DfUYRZGdj2AkFNX6tBz8tVfo6wvbB6naA1lzzBij1L5JO3qsjS3cJFkb+kg2yP66AC2Z+0tpfk8eRhdtshAZwfcd1DEGt1uAvYL1eaUK9HRvpt9lPeGcHERDl2hBd4uyaF0K1O+zF9y59nYbTySWPxRZq3sFEE85xRMlstD7YZi7W2gKvMFRD4/FKmrZ3m7aKJRITtyKOyyPcYmepNv3Qv7kk59Pg38n2WWQ0Ra/bCH3E48YNCnQvZMpitkTfJhoQKBgQDbnROOYTP8OTJ6f/qhoGjxeO3x1VOaOp8l0x7b0SCfoqNGS0Cyiqj72BmJtPMPqSTjn6MmNzqbg1KOdhXyzNozs+i5ccW1M56j96mr5I/Z0FpE3oyIHNfDDBlf9M8YQqEF9oYxniYYft9oapO7cRQkHER6qpvnHTavwlv4m78CXwKBgQDHAjs2YlpKDdI1lcbZJCc7TwtH+Pd2bUki8YXafWNcPhITQHbOZjr310eK1QJC6GJncjkOqbX7yv3ivvTO35FZTQhuA1xEG1P00FG8bE0tHYPIwQHi9y0eA5cieMdo8E6XYria1mw/3fqSQEsfZyJlR32JQIoGAipM8iO1X2nZpwKBgDkMFIhnt5lNQk+P7wsNIDWZtDWdtJnboHuy29E+Abt2A/O+mI/IdRz2hau/1WO8DFkUnszOi+rZshhPlGP90rCbi1igtTrcrdjp/KkqNjPea5R4OwkgdOu1uOG0NheXNzzVTQaWjk7Opjn5dWa7eP/oV+GFb/oZHJuLYVizHGsBAoGADA7rjZEKDYCm4w5PPSr+oY5ZjaPdQrS+gLqHtMRyN82fBMGcMUdqfUfzEstzVqCEDeaS5HuOBlK3bXzKkppjUTjksN3NQmcxgBz7RuJ9DqXCLXDcb2cwuafYCYOt+YLOEEgwDVm+t2P44dG5e46hO+fICH/7nP+WlpD5buz4GfMCgYB57r3g/6hi9WUDnfc7ZAzWMqR0EhJVYKYy+KFEtdIPzhkkIHq5RASe88E9kzoGoZFdb3tIjvGZWcHerirrqWkMsuQtP/Qi0zjieid5tAPj+r4kbiCVTw0E0jnmPBzGInQi7lpeTTKnG1fbyS5lBS+WmHfIuzpECgCkxhaT+LJJkg==\n-----END PRIVATE KEY-----"
# RSA 公钥加密实现
def rsa_encrypt(self, text):
try:
key = RSA.import_key(self.publicKey_str)
cipher = PKCS1_v1_5.new(key)
cipher_text = cipher.encrypt(text.encode('utf-8'))
return b64encode(cipher_text).decode('utf-8')
except Exception as e:
print(f"RSA加密失败: {e}")
return ""
# RSA 私钥解密实现
def rsa_decrypt(self, text):
try:
key = RSA.import_key(self.privateKey_str)
cipher = PKCS1_v1_5.new(key)
raw_bytes = b64decode(text.encode('utf-8'))
decrypted = b""
offset = 0
while offset < len(raw_bytes):
chunk = raw_bytes[offset:offset + 256]
decrypted += cipher.decrypt(chunk, None)
offset += 256
return decrypted.decode('utf-8')
except Exception as e:
print(f"RSA解密失败: {e}")
return ""
def homeContent(self, filter):
data = self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json()
result = {}
cate = {
"类型": "type",
"地区": "area",
"年份": "year"
}
sort = {
'key': 'sort',
'name': '排序',
'value': [{'n': '最新', 'v': 'NEWEST'}, {'n': '热门', 'v': 'HOT'}, {'n': '收藏', 'v': 'COLLECT'}]
}
classes = []
filters = {}
for k in data.get('data', []):
classes.append({
'type_name': k['name'],
'type_id': str(k['id'])
})
filters[str(k['id'])] = []
for v in k.get('children', []):
if v['name'] in cate:
filters[str(k['id'])].append({
'name': v['name'],
'key': cate[v['name']],
'value': [{'n': i['name'], 'v': i['name']} for i in v.get('children', [])]
})
filters[str(k['id'])].append(sort)
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
jdata = {
"condition": {
"sreecnTypeEnum": "NEWEST"
},
"pageNum": 1,
"pageSize": 40
}
data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json()
return {'list': self.getlist(data.get('data', {}).get('records', []))}
def categoryContent(self, tid, pg, filter, extend):
# 保持最纯粹的条件字段,移除任何空字符串占位
condition = {
'sreecnTypeEnum': 'NEWEST',
'typeId': int(tid) if str(tid).isdigit() else tid
}
if extend:
if 'sort' in extend:
condition['sreecnTypeEnum'] = extend.pop('sort')
condition.update(extend)
jdata = {
'condition': condition,
'pageNum': int(pg),
'pageSize': 40,
}
try:
data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json()
result = {}
if data and data.get('data') and 'records' in data['data']:
result['list'] = self.getlist(data['data']['records'])
else:
result['list'] = []
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 40
result['total'] = 999999
return result
except Exception as e:
print(f"分类获取错误: {e}")
return {'list': [], 'page': pg}
def detailContent(self, ids):
ids = ids[0].split('@@')
jdata = {"id": int(ids[0]), "typeId": ids[-1]}
v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json()
v = v.get('data', {})
vod = {
'type_name': v.get('typeId', ''),
'vod_year': v.get('year', ''),
'vod_area': v.get('area', ''),
'vod_actor': v.get('star', ''),
'vod_director': v.get('director', ''),
'vod_content': v.get('introduce', ''),
'vod_play_from': '',
'vod_play_url': ''
}
play_params = {
"id": int(ids[0]),
"source": 0,
"typeId": ids[-1]
}
encrypt_payload = {"key": self.rsa_encrypt(json.dumps(play_params))}
c_res = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=encrypt_payload).json()
decrypted_play_str = self.rsa_decrypt(c_res.get('data', ''))
if not decrypted_play_str:
return {'list': [vod]}
decrypted_play_data = json.loads(decrypted_play_str)
l = decrypted_play_data.get('moviePlayerList', [])
if not l:
return {'list': [vod]}
n = {str(i['id']): i['moviePlayerName'] for i in l}
m = play_params.copy()
m.update({'playerId': l[0]['id']})
first_source_payload = {"key": self.rsa_encrypt(json.dumps(m))}
first_res = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=first_source_payload).json()
decrypted_first_str = self.rsa_decrypt(first_res.get('data', ''))
if decrypted_first_str:
decrypted_first_episode = json.loads(decrypted_first_str)
pd = self.getv(m, decrypted_first_episode.get('episodeList', []))
else:
pd = {}
if len(l) > 1:
with ThreadPoolExecutor(max_workers=len(l)-1) as executor:
future_to_player = {executor.submit(self.getd, play_params, player): player for player in l[1:]}
for future in future_to_player:
try:
o, p = future.result()
if p:
pd.update(self.getv(o, p))
except Exception as e:
print(f"多线路请求失败: {e}")
w, e = [], []
for i, x in pd.items():
if x:
w.append(n.get(i, '未知线路'))
e.append(x)
vod['vod_play_from'] = '$$$'.join(w)
vod['vod_play_url'] = '$$$'.join(e)
return {'list': [vod]}
def searchContent(self, key, quick, pg="1"):
jdata = {
"condition": {
"value": str(key)
},
"pageNum": int(pg),
"pageSize": 40
}
try:
data = self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json()
return {'list': self.getlist(data.get('data', {}).get('records', [])), 'page': pg}
except Exception as e:
print(f"搜索请求失败: {e}")
return {'list': [], 'page': pg}
def playerContent(self, flag, id, vipFlags):
raw_id_str = self.d64(id)
if not raw_id_str:
return {'parse': 0, 'url': ''}
jdata = json.loads(raw_id_str)
encrypt_payload = {"key": self.rsa_encrypt(json.dumps(jdata))}
data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=encrypt_payload).json()
try:
decrypted_url_data = json.loads(self.rsa_decrypt(data.get('data', '')))
playerUrl = decrypted_url_data.get('url', '')
if not playerUrl:
return {'parse': 0, 'url': ''}
params = {'playerUrl': playerUrl, 'playerId': jdata['playerId']}
pd = self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json()
url, p = pd.get('data', ''), 0
except Exception as e:
print(f"解析流媒体直链失败: {e}")
url, p = "", 0
return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}}
def localProxy(self, param):
pass
def liveContent(self, url):
pass
def gettk(self):
self.headers.update({'deviceId': self.getdid()})
try:
data = self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json()
return data.get('data', {}).get('token', '')
except:
return ""
def getdid(self):
did = self.getCache('ldid')
if not did:
hex_chars = '0123456789abcdef'
did = ''.join(random.choice(hex_chars) for _ in range(16))
self.setCache('ldid', did)
return did
def getd(self, jdata, player):
x = jdata.copy()
x.update({'playerId': player['id']})
encrypt_payload = {"key": self.rsa_encrypt(json.dumps(x))}
response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=encrypt_payload).json()
decrypted_str = self.rsa_decrypt(response.get('data', ''))
if decrypted_str:
decrypted_episode = json.loads(decrypted_str)
return x, decrypted_episode.get('episodeList', [])
return x, []
def getv(self, d, c):
f = {str(d['playerId']): ''}
g = []
for i in c:
j = d.copy()
j.update({'episodeId': i['id']})
g.append(f"{i['episode']}${self.e64(json.dumps(j))}")
f[str(d['playerId'])] = '#'.join(g)
return f
def getlist(self, data):
videos = []
for i in data:
if not i.get('id'):
continue
videos.append({
'vod_id': f"{i['id']}@@{i.get('typeId', '')}",
'vod_name': i.get('name', ''),
'vod_pic': i.get('cover', ''),
'vod_year': i.get('year', ''),
'vod_remarks': i.get('totalEpisode', '')
})
return videos
def e64(self, text):
try:
return b64encode(text.encode('utf-8')).decode('utf-8')
except:
return ""
def d64(self, encoded_text):
try:
return b64decode(encoded_text.encode('utf-8')).decode('utf-8')
except:
return ""
+38
View File
@@ -0,0 +1,38 @@
[
{
"original": "你好1983",
"mapped": "你好1983(2026)"
},
{
"original": "海市蜃楼",
"mapped": "海市蜃楼(2025)"
},
{
"original": "凡人修仙传:重返天南",
"mapped": "凡人修仙传(2020)"
},
{
"original": "凡人修仙传重返天南",
"mapped": "凡人修仙传(2020)"
},
{
"original": "你是迟来的欢喜",
"mapped": "你是迟来的欢喜 (2026)"
},
{
"original": "爱情怎么翻译?",
"mapped": "爱情怎么翻译?"
},
{
"original": "凡人修仙传:慕兰之战",
"mapped": "凡人修仙传(2020)"
},
{
"original": "凡人修仙传慕兰之战",
"mapped": "凡人修仙传(2020)"
},
{
"original": "凡人修仙传年番4",
"mapped": "凡人修仙传(2020)"
}
]
+2 -4
View File
@@ -8,7 +8,5 @@
https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/lib/ds.png
#AI·测试2
https://gh-proxy.com/https://raw.githubusercontent.com/develop202/migu_video/refs/heads/main/interface.txt
#AI·测试3
https://ds65.tv1288.xyz
#AI·测试4
https://nos.netease.com/ysf/3d75a78a0fc7ede372c03598d6d10367.m3u
#AI·无意云空间
https://ym.wya6.cn/dszb/bf
+19
View File
@@ -0,0 +1,19 @@
muban.vfed.二级.title = 'h1&&Text;.fed-col-md3--span:eq(0)&&Text';
muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6:eq(0)&&Text;.fed-col-md6--span:eq(1)&&Text';
var rule = {
title: '去看吧',
模板:'vfed',
host: 'https://www.k9dm.com',
// url: '/index.php/vod/show/id/fyclass/page/fypage.html',
url: '/index.php/vod/show/id/fyclassfyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.area}}{{fl.by}}{{fl.class}}/page/fypage{{fl.year}}',
filter:{
"33":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"搞笑","v":"/class/搞笑"},{"n":"经典","v":"/class/经典"},{"n":"热血","v":"/class/热血"},{"n":"催泪","v":"/class/催泪"},{"n":"治愈","v":"/class/治愈"},{"n":"猎奇","v":"/class/猎奇"},{"n":"励志","v":"/class/励志"},{"n":"战斗","v":"/class/战斗"},{"n":"后宫","v":"/class/后宫"},{"n":"机战","v":"/class/机战"},{"n":"恋爱","v":"/class/恋爱"},{"n":"百合","v":"/class/百合"},{"n":"科幻","v":"/class/科幻"},{"n":"奇幻","v":"/class/奇幻"},{"n":"推理","v":"/class/推理"},{"n":"校园","v":"/class/校园"},{"n":"运动","v":"/class/运动"},{"n":"魔法","v":"/class/魔法"},{"n":"历史","v":"/class/历史"},{"n":"伪娘","v":"/class/伪娘"},{"n":"美少女","v":"/class/美少女"},{"n":"萝莉","v":"/class/萝莉"},{"n":"亲子","v":"/class/亲子"},{"n":"青春","v":"/class/青春"},{"n":"冒险","v":"/class/冒险"},{"n":"竞技","v":"/class/竞技"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"21":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"搞笑","v":"/class/搞笑"},{"n":"经典","v":"/class/经典"},{"n":"热血","v":"/class/热血"},{"n":"催泪","v":"/class/催泪"},{"n":"治愈","v":"/class/治愈"},{"n":"猎奇","v":"/class/猎奇"},{"n":"励志","v":"/class/励志"},{"n":"战斗","v":"/class/战斗"},{"n":"后宫","v":"/class/后宫"},{"n":"机战","v":"/class/机战"},{"n":"恋爱","v":"/class/恋爱"},{"n":"百合","v":"/class/百合"},{"n":"科幻","v":"/class/科幻"},{"n":"奇幻","v":"/class/奇幻"},{"n":"推理","v":"/class/推理"},{"n":"校园","v":"/class/校园"},{"n":"运动","v":"/class/运动"},{"n":"魔法","v":"/class/魔法"},{"n":"历史","v":"/class/历史"},{"n":"伪娘","v":"/class/伪娘"},{"n":"美少女","v":"/class/美少女"},{"n":"萝莉","v":"/class/萝莉"},{"n":"亲子","v":"/class/亲子"},{"n":"青春","v":"/class/青春"},{"n":"冒险","v":"/class/冒险"},{"n":"竞技","v":"/class/竞技"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"50":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"搞笑","v":"/class/搞笑"},{"n":"经典","v":"/class/经典"},{"n":"热血","v":"/class/热血"},{"n":"催泪","v":"/class/催泪"},{"n":"治愈","v":"/class/治愈"},{"n":"猎奇","v":"/class/猎奇"},{"n":"励志","v":"/class/励志"},{"n":"战斗","v":"/class/战斗"},{"n":"后宫","v":"/class/后宫"},{"n":"机战","v":"/class/机战"},{"n":"恋爱","v":"/class/恋爱"},{"n":"百合","v":"/class/百合"},{"n":"科幻","v":"/class/科幻"},{"n":"奇幻","v":"/class/奇幻"},{"n":"推理","v":"/class/推理"},{"n":"校园","v":"/class/校园"},{"n":"运动","v":"/class/运动"},{"n":"魔法","v":"/class/魔法"},{"n":"历史","v":"/class/历史"},{"n":"伪娘","v":"/class/伪娘"},{"n":"美少女","v":"/class/美少女"},{"n":"萝莉","v":"/class/萝莉"},{"n":"亲子","v":"/class/亲子"},{"n":"青春","v":"/class/青春"},{"n":"冒险","v":"/class/冒险"},{"n":"竞技","v":"/class/竞技"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"24":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"搞笑","v":"/class/搞笑"},{"n":"经典","v":"/class/经典"},{"n":"热血","v":"/class/热血"},{"n":"催泪","v":"/class/催泪"},{"n":"治愈","v":"/class/治愈"},{"n":"猎奇","v":"/class/猎奇"},{"n":"励志","v":"/class/励志"},{"n":"战斗","v":"/class/战斗"},{"n":"后宫","v":"/class/后宫"},{"n":"机战","v":"/class/机战"},{"n":"恋爱","v":"/class/恋爱"},{"n":"百合","v":"/class/百合"},{"n":"科幻","v":"/class/科幻"},{"n":"奇幻","v":"/class/奇幻"},{"n":"推理","v":"/class/推理"},{"n":"校园","v":"/class/校园"},{"n":"运动","v":"/class/运动"},{"n":"魔法","v":"/class/魔法"},{"n":"历史","v":"/class/历史"},{"n":"伪娘","v":"/class/伪娘"},{"n":"美少女","v":"/class/美少女"},{"n":"萝莉","v":"/class/萝莉"},{"n":"亲子","v":"/class/亲子"},{"n":"青春","v":"/class/青春"},{"n":"冒险","v":"/class/冒险"},{"n":"竞技","v":"/class/竞技"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"22":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"搞笑","v":"/class/搞笑"},{"n":"经典","v":"/class/经典"},{"n":"热血","v":"/class/热血"},{"n":"催泪","v":"/class/催泪"},{"n":"治愈","v":"/class/治愈"},{"n":"猎奇","v":"/class/猎奇"},{"n":"励志","v":"/class/励志"},{"n":"战斗","v":"/class/战斗"},{"n":"后宫","v":"/class/后宫"},{"n":"机战","v":"/class/机战"},{"n":"恋爱","v":"/class/恋爱"},{"n":"百合","v":"/class/百合"},{"n":"科幻","v":"/class/科幻"},{"n":"奇幻","v":"/class/奇幻"},{"n":"推理","v":"/class/推理"},{"n":"校园","v":"/class/校园"},{"n":"运动","v":"/class/运动"},{"n":"魔法","v":"/class/魔法"},{"n":"历史","v":"/class/历史"},{"n":"伪娘","v":"/class/伪娘"},{"n":"美少女","v":"/class/美少女"},{"n":"萝莉","v":"/class/萝莉"},{"n":"亲子","v":"/class/亲子"},{"n":"青春","v":"/class/青春"},{"n":"冒险","v":"/class/冒险"},{"n":"竞技","v":"/class/竞技"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"},{"n":"1999","v":"/year/1999"},{"n":"1998","v":"/year/1998"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
},
class_parse: '.fed-pops-list:eq(0)&&li:gt(0):lt(6);a&&Text;a&&href;.*/(.*?).html',
}
+502 -240
View File
@@ -1,240 +1,502 @@
import re
import sys
from base64 import b64encode, b64decode
from urllib.parse import quote, unquote
from pyquery import PyQuery as pq
from requests import Session, adapters
from urllib3.util.retry import Retry
from concurrent.futures import ThreadPoolExecutor, as_completed
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.host = "https://www.22a5.com"
self.session = Session()
adapter = adapters.HTTPAdapter(max_retries=Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500, 502, 503, 504]), pool_connections=20, pool_maxsize=50)
self.session.mount("http://", adapter)
self.session.mount("https://", adapter)
self.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"}
self.session.headers.update(self.headers)
def getName(self): return "爱听音乐"
def isVideoFormat(self, url): return bool(re.search(r'\.(m3u8|mp4|mp3|m4a|flv)(\?|$)', url or "", re.I))
def manualVideoCheck(self): return False
def destroy(self): self.session.close()
def homeContent(self, filter):
classes = [{"type_name": n, "type_id": i} for n, i in [("歌手","/singerlist/index/index/index/index.html"), ("TOP榜单","/list/top.html"), ("新歌榜","/list/new.html"), ("电台","/radiolist/index.html"), ("高清MV","/mvlist/oumei.html"), ("专辑","/albumlist/index.html"), ("歌单","/playtype/index.html")]]
filters = {p: d for p in [c["type_id"] for c in classes if "singer" not in c["type_id"]] if (d := self._fetch_filters(p))}
if "/radiolist/index.html" not in filters:
filters["/radiolist/index.html"] = [{"key": "id", "name": "分类", "value": [{"n": n, "v": v} for n,v in zip(["最新","最热","有声小说","相声","音乐","情感","国漫","影视","脱口秀","历史","儿童","教育","八卦","推理","头条"], ["index","hot","novel","xiangyi","music","emotion","game","yingshi","talkshow","history","children","education","gossip","tuili","headline"])]}]
filters["/singerlist/index/index/index/index.html"] = [
{"key": "area", "name": "地区", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("华语","huayu"),("欧美","oumei"),("韩国","hanguo"),("日本","ribrn")]]},
{"key": "sex", "name": "性别", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("","male"),("","girl"),("组合","band")]]},
{"key": "genre", "name": "流派", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("流行","liuxing"),("电子","dianzi"),("摇滚","yaogun"),("嘻哈","xiha"),("R&B","rb"),("民谣","minyao"),("爵士","jueshi"),("古典","gudian")]]},
{"key": "char", "name": "字母", "value": [{"n": n, "v": v} for n,v in [("全部","index")] + [{"n": chr(i), "v": chr(i).lower()} for i in range(65, 91)]]}
]
return {"class": classes, "filters": filters, "list": []}
def homeVideoContent(self): return {"list": []}
def categoryContent(self, tid, pg, filter, extend):
pg = int(pg or 1)
url = tid
if "/singerlist/" in tid:
p = tid.split('/')
if len(p) >= 6:
url = "/".join(p[:2] + [extend.get(k, p[i]) for i, k in enumerate(["area", "sex", "genre"], 2)] + [f"{extend.get('char', 'index')}.html"])
elif "id" in extend and extend["id"] not in ["index", "top"]:
url = tid.replace("index.html", f"{extend['id']}.html").replace("top.html", f"{extend['id']}.html")
if url == tid: url = f"{tid.rsplit('/', 1)[0]}/{extend['id']}.html"
if pg > 1:
sep = "/" if any(x in url for x in ["/singerlist/", "/radiolist/", "/mvlist/", "/playtype/", "/list/"]) else "_"
url = re.sub(r'(_\d+|/\d+)?\.html$', f'{sep}{pg}.html', url)
doc = self.getpq(url)
return {"list": self._parse_list(doc(".play_list li, .video_list li, .pic_list li, .singer_list li, .ali li, .layui-row li, .base_l li"), tid), "page": pg, "pagecount": 9999, "limit": 90, "total": 999999}
def searchContent(self, key, quick, pg="1"):
return {"list": self._parse_list(self.getpq(f"/so/{quote(key)}/{pg}.html")(".base_l li, .play_list li"), "search"), "page": int(pg)}
def detailContent(self, ids):
url = self._abs(ids[0])
doc = self.getpq(url)
vod = {"vod_id": url, "vod_name": self._clean(doc("h1").text() or doc("title").text()), "vod_pic": self._abs(doc(".djpg img, .pic img, .djpic img").attr("src")), "vod_play_from": "爱听音乐", "vod_content": ""}
if any(x in url for x in ["/playlist/", "/album/", "/list/", "/singer/", "/special/", "/radio/", "/radiolist/"]):
eps = self._get_eps(doc)
page_urls = {self._abs(a.attr("href")) for a in doc(".page a, .dede_pages a, .pagelist a").items() if a.attr("href") and "javascript" not in a.attr("href")} - {url}
if page_urls:
with ThreadPoolExecutor(max_workers=5) as ex:
for r in as_completed([ex.submit(lambda u: self._get_eps(self.getpq(u)), u) for u in sorted(page_urls, key=lambda x: int(re.search(r'[_\/](\d+)\.html', x).group(1)) if re.search(r'[_\/](\d+)\.html', x) else 0)]):
eps.extend(r.result() or [])
if eps:
vod.update({"vod_play_from": "播放列表", "vod_play_url": "#".join(eps)})
return {"list": [vod]}
play_list = []
if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url):
lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}"
play_list = [f"播放${self.e64('0@@@@' + url + '|||' + lrc_url)}"]
elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url):
with ThreadPoolExecutor(max_workers=3) as ex:
fs = {ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}): n for n, q in [("蓝光", 1080), ("超清", 720), ("高清", 480)]}
play_list = [f"{fs[f]}${self.e64('0@@@@'+u)}" for f in as_completed(fs) if (u := f.result())]
play_list.sort(key=lambda x: {"":0, "":1, "":2}.get(x[0], 3))
vod["vod_play_url"] = "#".join(play_list) if play_list else f"解析失败${self.e64('1@@@@'+url)}"
return {"list": [vod]}
def playerContent(self, flag, id, vipFlags):
raw = self.d64(id).split("@@@@")[-1]
url, subt = raw.split("|||") if "|||" in raw else (raw, "")
url = url.replace(r"\/", "/")
if ".html" in url and not self.isVideoFormat(url):
if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url):
if r_url := self._api("/js/play.php", method="POST", data={"id": mid.group(2), "type": "music"}, headers={"Referer": url.replace("http://","https://"), "X-Requested-With": "XMLHttpRequest"}):
url = r_url if ".php" not in r_url else url
elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url):
with ThreadPoolExecutor(max_workers=3) as ex:
for f in as_completed([ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}) for q in [1080, 720, 480]]):
if v_url := f.result():
url = v_url; break
result = {"parse": 0, "url": url, "header": {"User-Agent": self.headers["User-Agent"]}}
if "22a5.com" in url: result["header"]["Referer"] = self.host + "/"
# OK影视3.6.5+支持LRC格式滚动歌词
if subt:
try:
r = self.session.get(subt, headers={"Referer": self.host + "/"}, timeout=5)
lrc_content = r.text
if lrc_content:
# 过滤广告内容
lrc_content = self._filter_lrc_ads(lrc_content)
result["lrc"] = lrc_content
except:
pass
return result
def _filter_lrc_ads(self, lrc_text):
"""过滤LRC歌词中的广告内容"""
lines = lrc_text.splitlines()
filtered_lines = []
# 广告关键词模式
ad_patterns = [
r'欢迎来访.*',
r'本站.*',
r'.*广告.*',
r'QQ群.*',
r'.*www\..*',
r'.*http.*',
r'.*\.com.*',
r'.*\.cn.*',
r'.*\.net.*',
r'.*音乐网.*',
r'.*提供.*',
r'.*下载.*',
]
for line in lines:
# 保留时间标签行,但过滤掉广告文本
if re.match(r'\[\d{2}:\d{2}', line):
# 检查是否包含广告
is_ad = False
for pattern in ad_patterns:
if re.search(pattern, line, re.IGNORECASE):
is_ad = True
break
if not is_ad:
filtered_lines.append(line)
else:
# 非时间标签行(可能是元数据),保留
filtered_lines.append(line)
return '\n'.join(filtered_lines)
def localProxy(self, param):
url = unquote(param.get("url", ""))
type_ = param.get("type")
if type_ == "img":
return [200, "image/jpeg", self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5).content, {}]
elif type_ == "lrc":
try:
r = self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5)
# 同时过滤代理中的广告
lrc_content = r.text
lrc_content = self._filter_lrc_ads(lrc_content)
return [200, "application/octet-stream", lrc_content.encode('utf-8'), {}]
except:
return [404, "text/plain", "Error", {}]
return None
def _parse_list(self, items, tid=""):
res = []
for li in items.items():
a = li("a").eq(0)
if not (href := a.attr("href")) or href == "/" or any(x in href for x in ["/user/", "/login/", "javascript"]): continue
if not (name := self._clean(li(".name").text() or a.attr("title") or a.text())): continue
pic = self._abs((li("img").attr("src") or "").replace('120', '500'))
res.append({"vod_id": self._abs(href), "vod_name": name, "vod_pic": f"{self.getProxyUrl()}&url={pic}&type=img" if pic else "", "style": {"type": "oval" if "/singer/" in href else ("list" if any(x in tid for x in ["/list/", "/playtype/", "/albumlist/"]) else "rect"), "ratio": 1 if "/singer/" in href else 1.33}})
return res
def _get_eps(self, doc):
eps = []
for li in doc(".play_list li, .song_list li, .music_list li").items():
if not (a := li("a").eq(0)).attr("href") or not re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', a.attr("href")): continue
full_url = self._abs(a.attr("href"))
lrc_part = ""
mid = re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', full_url)
if mid:
lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}"
lrc_part = f"|||{lrc_url}"
eps.append(f"{self._clean(a.text() or li('.name').text())}${self.e64('0@@@@' + full_url + lrc_part)}")
return eps
def _clean(self, text): return re.sub(r'(爱玩音乐网|视频下载说明|视频下载地址|www\.2t58\.com|MP3免费下载|LRC歌词下载|全部歌曲|\[第\d+页\]|刷新|每日推荐|最新|热门|推荐|MV|高清|无损)', '', text or "", flags=re.I).strip()
def _fetch_filters(self, url):
doc, filters = self.getpq(url), []
for i, group in enumerate([doc(s) for s in [".ilingku_fl", ".class_list", ".screen_list", ".box_list", ".nav_list"] if doc(s)]):
opts, seen = [{"n": "全部", "v": "top" if "top" in url else "index"}], set()
for a in group("a").items():
if (v := (a.attr("href") or "").split("?")[0].rstrip('/').split('/')[-1].replace('.html','')) and v not in seen:
opts.append({"n": a.text().strip(), "v": v}); seen.add(v)
if len(opts) > 1: filters.append({"key": f"id{i}" if i else "id", "name": "分类", "value": opts})
return filters
def _api(self, path, params=None, method="GET", headers=None, data=None):
try:
h = self.headers.copy()
if headers: h.update(headers)
r = (self.session.post if method == "POST" else self.session.get)(f"{self.host}{path}", params=params, data=data, headers=h, timeout=10, allow_redirects=False)
if loc := r.headers.get("Location"): return self._abs(loc.strip())
return self._abs(r.json().get("url", "").replace(r"\/", "/")) or (r.text.strip() if r.text.strip().startswith("http") else "")
except: return ""
def getpq(self, url):
import time
for _ in range(2):
try: return pq(self.session.get(self._abs(url), timeout=5).text)
except: time.sleep(0.1)
return pq("<html></html>")
def _abs(self, url): return url if url.startswith("http") else (f"{self.host}{'/' if not url.startswith('/') else ''}{url}" if url else "")
def e64(self, text): return b64encode(text.encode("utf-8")).decode("utf-8")
def d64(self, text): return b64decode(text.encode("utf-8")).decode("utf-8")
# -*- coding: utf-8 -*-
# 修复:歌手不显示歌手图片
# by:垃圾星河
# 代码指导:嗷呜呜呜呜
# 增加:自动人机验证绕过
import re
import sys
import time
from base64 import b64encode, b64decode
from urllib.parse import quote, unquote
from pyquery import PyQuery as pq
from requests import Session, adapters
from urllib3.util.retry import Retry
from concurrent.futures import ThreadPoolExecutor, as_completed
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.host = "https://www.22a5.com"
self.session = Session()
adapter = adapters.HTTPAdapter(
max_retries=Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500, 502, 503, 504]),
pool_connections=20,
pool_maxsize=50
)
self.session.mount("http://", adapter)
self.session.mount("https://", adapter)
self.headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"
}
self.session.headers.update(self.headers)
def getName(self):
return "爱听音乐"
def isVideoFormat(self, url):
return bool(re.search(r'\.(m3u8|mp4|mp3|m4a|flv)(\?|$)', url or "", re.I))
def manualVideoCheck(self):
return False
def destroy(self):
self.session.close()
# ==================== 新增人机验证绕过 ====================
def _bypass_verification(self, url, response_text):
"""若当前页面是人机验证,自动提交勾选"""
if '安全人机验证' not in response_text and 'human_check' not in response_text:
return None
# 提取 csrf_token(支持多种格式)
token_match = re.search(r'name="csrf_token"\s+value="([^"]+)"', response_text)
if not token_match:
print("[爱听音乐] 未找到 csrf_token,跳过绕过")
return None
token = token_match.group(1)
# 构造提交数据
data = {
'csrf_token': token,
'human_check': 'on'
}
try:
# 发送 POST 请求,自动跟随重定向
post_resp = self.session.post(url, data=data, allow_redirects=True, timeout=10)
print("[爱听音乐] 人机验证已绕过")
return post_resp
except Exception as e:
print(f"[爱听音乐] 人机验证提交失败: {e}")
return None
def getpq(self, url):
"""获取页面并自动处理人机验证(重试3次)"""
full_url = self._abs(url)
for attempt in range(3):
try:
resp = self.session.get(full_url, timeout=5)
# 若遇到验证页,尝试绕过
if '安全人机验证' in resp.text or 'human_check' in resp.text:
print("[爱听音乐] 检测到人机验证,尝试自动绕过...")
bypass_resp = self._bypass_verification(full_url, resp.text)
if bypass_resp:
# 验证成功后,返回最终页面(可能是重定向后的目标)
return pq(bypass_resp.text)
else:
# 绕过失败,等待后重试
time.sleep(1)
continue
else:
# 正常页面直接返回
return pq(resp.text)
except Exception as e:
print(f"[爱听音乐] 请求失败 (尝试 {attempt+1}/3): {e}")
time.sleep(0.5 * (attempt + 1))
# 全部失败,返回空文档
return pq("<html></html>")
# ==================== 原有功能(保持不变) ====================
def homeContent(self, filter):
classes = [
{"type_name": n, "type_id": i}
for n, i in [
("歌手", "/singerlist/index/index/index/index.html"),
("TOP榜单", "/list/top.html"),
("新歌榜", "/list/new.html"),
("电台", "/radiolist/index.html"),
("高清MV", "/mvlist/oumei.html"),
("专辑", "/albumlist/index.html"),
("歌单", "/playtype/index.html")
]
]
filters = {}
for p in [c["type_id"] for c in classes if "singer" not in c["type_id"]]:
d = self._fetch_filters(p)
if d:
filters[p] = d
if "/radiolist/index.html" not in filters:
filters["/radiolist/index.html"] = [{
"key": "id",
"name": "分类",
"value": [
{"n": n, "v": v}
for n, v in zip(
["最新", "最热", "有声小说", "相声", "音乐", "情感", "国漫", "影视", "脱口秀", "历史", "儿童", "教育", "八卦", "推理", "头条"],
["index", "hot", "novel", "xiangyi", "music", "emotion", "game", "yingshi", "talkshow", "history",
"children", "education", "gossip", "tuili", "headline"]
)
]
}]
filters["/singerlist/index/index/index/index.html"] = [
{
"key": "area",
"name": "地区",
"value": [
{"n": "全部", "v": "index"},
{"n": "华语", "v": "huayu"},
{"n": "欧美", "v": "oumei"},
{"n": "韩国", "v": "hanguo"},
{"n": "日本", "v": "ribrn"}
]
},
{
"key": "sex",
"name": "性别",
"value": [
{"n": "全部", "v": "index"},
{"n": "", "v": "male"},
{"n": "", "v": "girl"},
{"n": "组合", "v": "band"}
]
},
{
"key": "genre",
"name": "流派",
"value": [
{"n": "全部", "v": "index"},
{"n": "流行", "v": "liuxing"},
{"n": "电子", "v": "dianzi"},
{"n": "摇滚", "v": "yaogun"},
{"n": "嘻哈", "v": "xiha"},
{"n": "R&B", "v": "rb"},
{"n": "民谣", "v": "minyao"},
{"n": "爵士", "v": "jueshi"},
{"n": "古典", "v": "gudian"}
]
}
]
return {"class": classes, "filters": filters, "list": []}
def homeVideoContent(self):
return {"list": []}
def categoryContent(self, tid, pg, filter, extend):
pg = int(pg or 1)
url = tid
if "/singerlist/" in tid:
parts = tid.split('/')
if len(parts) >= 6:
url = "/".join(parts[:2] + [extend.get(k, parts[i]) for i, k in enumerate(["area", "sex", "genre"], 2)] +
[f"{extend.get('char', 'index')}.html"])
elif "id" in extend and extend["id"] not in ["index", "top"]:
url = tid.replace("index.html", f"{extend['id']}.html").replace("top.html", f"{extend['id']}.html")
if url == tid:
url = f"{tid.rsplit('/', 1)[0]}/{extend['id']}.html"
if pg > 1:
sep = "/" if any(x in url for x in ["/singerlist/", "/radiolist/", "/mvlist/", "/playtype/", "/list/"]) else "_"
url = re.sub(r'(_\d+|/\d+)?\.html$', f'{sep}{pg}.html', url)
doc = self.getpq(url)
items = doc(".play_list li, .video_list li, .pic_list li, .singer_list li, .ali li, .layui-row li, .base_l li")
return {
"list": self._parse_list(items, tid),
"page": pg,
"pagecount": 9999,
"limit": 90,
"total": 999999
}
def searchContent(self, key, quick, pg="1"):
doc = self.getpq(f"/so/{quote(key)}/{pg}.html")
items = doc(".base_l li, .play_list li")
return {
"list": self._parse_list(items, "search"),
"page": int(pg)
}
def detailContent(self, ids):
url = self._abs(ids[0])
doc = self.getpq(url)
vod = {
"vod_id": url,
"vod_name": self._clean(doc("h1").text() or doc("title").text()),
"vod_pic": self._abs(doc(".djpg img, .pic img, .djpic img").attr("src")),
"vod_play_from": "爱听音乐",
"vod_content": ""
}
if any(x in url for x in ["/playlist/", "/album/", "/list/", "/singer/", "/special/", "/radio/", "/radiolist/"]):
eps = self._get_eps(doc)
page_urls = {
self._abs(a.attr("href"))
for a in doc(".page a, .dede_pages a, .pagelist a").items()
if a.attr("href") and "javascript" not in a.attr("href")
} - {url}
if page_urls:
with ThreadPoolExecutor(max_workers=5) as ex:
futures = []
for u in sorted(page_urls, key=lambda x: int(re.search(r'[_/](\d+)\.html', x).group(1)) if re.search(
r'[_/](\d+)\.html', x) else 0):
futures.append(ex.submit(lambda uu: self._get_eps(self.getpq(uu)), u))
for f in as_completed(futures):
eps.extend(f.result() or [])
if eps:
vod.update({
"vod_play_from": "播放列表",
"vod_play_url": "#".join(eps)
})
return {"list": [vod]}
play_list = []
if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url):
lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}"
play_list = [f"播放${self.e64('0@@@@' + url + '|||' + lrc_url)}"]
elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url):
with ThreadPoolExecutor(max_workers=3) as ex:
fs = {
ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}): n
for n, q in [("蓝光", 1080), ("超清", 720), ("高清", 480)]
}
play_list = [f"{fs[f]}${self.e64('0@@@@'+u)}" for f in as_completed(fs) if (u := f.result())]
play_list.sort(key=lambda x: {"": 0, "": 1, "": 2}.get(x[0], 3))
vod["vod_play_url"] = "#".join(play_list) if play_list else f"解析失败${self.e64('1@@@@'+url)}"
return {"list": [vod]}
def playerContent(self, flag, id, vipFlags):
raw = self.d64(id).split("@@@@")[-1]
url, subt = raw.split("|||") if "|||" in raw else (raw, "")
url = url.replace(r"\/", "/")
if ".html" in url and not self.isVideoFormat(url):
if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url):
if r_url := self._api("/js/play.php", method="POST", data={"id": mid.group(2), "type": "music"},
headers={"Referer": url.replace("http://", "https://"),
"X-Requested-With": "XMLHttpRequest"}):
url = r_url if ".php" not in r_url else url
elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url):
with ThreadPoolExecutor(max_workers=3) as ex:
for f in as_completed(
[ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}) for q in
[1080, 720, 480]]):
if v_url := f.result():
url = v_url
break
result = {"parse": 0, "url": url, "header": {"User-Agent": self.headers["User-Agent"]}}
if "22a5.com" in url:
result["header"]["Referer"] = self.host + "/"
# OK影视3.6.5+支持LRC格式滚动歌词
if subt:
try:
r = self.session.get(subt, headers={"Referer": self.host + "/"}, timeout=5)
lrc_content = r.text
if lrc_content:
lrc_content = self._filter_lrc_ads(lrc_content)
result["lrc"] = lrc_content
except:
pass
return result
def _filter_lrc_ads(self, lrc_text):
"""过滤LRC歌词中的广告内容"""
lines = lrc_text.splitlines()
filtered_lines = []
# 广告关键词模式
ad_patterns = [
r'欢迎来访.*',
r'本站.*',
r'.*广告.*',
r'QQ群.*',
r'.*www\..*',
r'.*http.*',
r'.*\.com.*',
r'.*\.cn.*',
r'.*\.net.*',
r'.*音乐网.*',
r'.*提供.*',
r'.*下载.*',
]
for line in lines:
if re.match(r'\[\d{2}:\d{2}', line):
is_ad = False
for pattern in ad_patterns:
if re.search(pattern, line, re.IGNORECASE):
is_ad = True
break
if not is_ad:
filtered_lines.append(line)
else:
filtered_lines.append(line)
return '\n'.join(filtered_lines)
def localProxy(self, param):
url = unquote(param.get("url", ""))
type_ = param.get("type")
if type_ == "img":
try:
headers = {
"Referer": "https://www.baidu.com/",
"User-Agent": self.headers["User-Agent"],
"Accept": "image/webp,image/apng,image/*,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9"
}
resp = self.session.get(url, headers=headers, timeout=10)
return [200, "image/jpeg", resp.content, {}]
except Exception as e:
print(f"图片代理失败: {e}")
return [404, "text/plain", b"", {}]
elif type_ == "lrc":
try:
r = self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5)
lrc_content = r.text
lrc_content = self._filter_lrc_ads(lrc_content)
return [200, "application/octet-stream", lrc_content.encode('utf-8'), {}]
except:
return [404, "text/plain", "Error", {}]
return None
# ==================== 辅助方法 ====================
def _parse_list(self, items, tid=""):
"""解析列表项,修复歌手头像 - 直接返回原始图片URL"""
res = []
for li in items.items():
a = li("a").eq(0)
if not (href := a.attr("href")) or href == "/" or any(x in href for x in ["/user/", "/login/", "javascript"]):
continue
if not (name := self._clean(li(".name").text() or a.attr("title") or a.text())):
continue
is_singer = "/singer/" in href or "/singerlist" in tid
pic = ""
src = ""
if is_singer:
img = li(".pic img").eq(0)
src = img.attr("src") or ""
if not src:
img = li("img").eq(0)
src = img.attr("src") or ""
else:
img = li("img").eq(0)
src = img.attr("src") or ""
if not src:
img = li(".pic img").eq(0)
src = img.attr("src") or ""
if src:
if src.startswith('//'):
src = 'https:' + src
elif src.startswith('/'):
src = self.host + src
pic = src
res.append({
"vod_id": self._abs(href),
"vod_name": name,
"vod_pic": pic,
"style": {
"type": "oval" if is_singer else ("list" if any(
x in tid for x in ["/list/", "/playtype/", "/albumlist/"]) else "rect"),
"ratio": 1 if is_singer else 1.33
}
})
return res
def _get_eps(self, doc):
eps = []
for li in doc(".play_list li, .song_list li, .music_list li").items():
a = li("a").eq(0)
href = a.attr("href")
if not href or not re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', href):
continue
full_url = self._abs(href)
lrc_part = ""
mid = re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', full_url)
if mid:
lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}"
lrc_part = f"|||{lrc_url}"
eps.append(f"{self._clean(a.text() or li('.name').text())}${self.e64('0@@@@' + full_url + lrc_part)}")
return eps
def _clean(self, text):
return re.sub(
r'(爱玩音乐网|视频下载说明|视频下载地址|www\.2t58\.com|MP3免费下载|LRC歌词下载|全部歌曲|\[第\d+页\]|刷新|每日推荐|最新|热门|推荐|MV|高清|无损)',
'',
text or '',
flags=re.I
).strip()
def _fetch_filters(self, url):
doc = self.getpq(url)
filters = []
for i, group in enumerate([
doc(".ilingku_fl"),
doc(".class_list"),
doc(".screen_list"),
doc(".box_list"),
doc(".nav_list")
]):
if group:
opts = [{"n": "全部", "v": "top" if "top" in url else "index"}]
seen = set()
for a in group("a").items():
v = (a.attr("href") or "").split("?")[0].rstrip('/').split('/')[-1].replace('.html', '')
if v and v not in seen:
opts.append({"n": a.text().strip(), "v": v})
seen.add(v)
if len(opts) > 1:
filters.append({"key": f"id{i}" if i else "id", "name": "分类", "value": opts})
return filters
def _api(self, path, params=None, method="GET", headers=None, data=None):
try:
h = self.headers.copy()
if headers:
h.update(headers)
r = (self.session.post if method == "POST" else self.session.get)(
f"{self.host}{path}",
params=params,
data=data,
headers=h,
timeout=10,
allow_redirects=False
)
if loc := r.headers.get("Location"):
return self._abs(loc.strip())
return self._abs(r.json().get("url", "").replace(r"\/", "/")) or (r.text.strip() if r.text.strip().startswith(
"http") else "")
except:
return ""
def _abs(self, url):
if not url:
return ""
if url.startswith("http"):
return url
if url.startswith("//"):
return "https:" + url
return f"{self.host}{'/' if not url.startswith('/') else ''}{url}"
def e64(self, text):
return b64encode(text.encode("utf-8")).decode("utf-8")
def d64(self, text):
return b64decode(text.encode("utf-8")).decode("utf-8")
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
06.29
07.03
Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 102 KiB

+1 -1
View File
@@ -1 +1 @@
[{"name":"推荐","list":[{"name":"本地库【ff】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"❤下载过,才能用"},{"name":"备用库【ff】","url":"https://wget.la/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"❤下载过,才能用"}]},{"name":"播放源下载(❤下载过,才能用)","list":[{"name":"本地【vox】","url":"http://xw.123234567.xyz:60255/jiduo/vox本地包.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"最新版本"},{"name":"本地库【ff】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.06.17版"},{"name":"备用库【ff】","url":"https://wget.la/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.06.17版"},{"name":"本地【小虎斑】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/小虎斑.zip","icon":"https://img0.baidu.com/it/u=3403550249,2192222310&fm=253&fmt=auto?w=800&h=804","version":"15.8.4"},{"name":"缘起【天神IY】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/缘起【天神IY】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.06.29版"},{"name":"真心全量包1","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/真心20250402-全量包1.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2025.4.2版"},{"name":"真心全量包2","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/真心20250402-全量包2.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2025.4.2版"},{"name":"真心增量包","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地【真心】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.04.25版"},{"name":"本地【PG】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地【PG】1.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"20260427-0913版"}]},{"name":"简易手机版软件下载,并在线可安装","list":[{"name":"天神IY手机版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY手机版.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_64位"},{"name":"倾心壁纸","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/倾心壁纸_1.4.7","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/倾心壁纸.png","version":"1.4.7_手机64位"},{"name":"Via原版","url":"https://res.viayoo.com/v1/via-release-cn.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/Via.png","version":"官方最新版"},{"name":"Via非原版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/文件/Via_6.4.0内置脚本版.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/Via.png","version":"6.4.0_内置脚本"},{"name":"MT管理器","url":"https://pan.mt2.cn/mt/MT2.18.3-clone-target28.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/MT管理器.png","version":"2.18.3_原共存版"},{"name":"MT管理器","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/MT管理器_2.14.5部分破解版.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/MT管理器.png","version":"2.14.5_部分破解"},{"name":"NP管理器","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/NP管理器_3.1.25.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/NP管理器.png","version":"3.1.25_原版"},{"name":"WiFi万能钥匙","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/万能钥匙_1.1.39.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/WiFi万能钥匙.png","version":"1.1.39_破解版"},{"name":"蓝牙遥控","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/文件/蓝牙遥控_2.0.9.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/蓝牙遥控器.png","version":"2.0.9_原版"}]},{"name":"其他软件下载,去文件管理器查找、安装","list":[{"name":"无意云Pro版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/无意云手机版341.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/无意云.png","version":"3.4.1_手机非共存"},{"name":"无意云Pro版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/无意云电视版341.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/无意云.png","version":"3.4.1_电视非共存"},{"name":"天神IY电视版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_电视32位"},{"name":"天神IY海信版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY海信版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_非共存"},{"name":"天神IY电视版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视64位版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_电视64位"},{"name":"天神IY电视全内置版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视全内置版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_内置32位"},{"name":"天神IY海信全内置版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY海信全内置版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_内置非共存"},{"name":"天神IY电视版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视版250.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"2.5.0_安卓4.+版"},{"name":"小白文件管理器","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/文件/小白文件管理器_2.8.0TV版).zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/小白文件管理器.png","version":"2.8.0_电视版"},{"name":"天神仓","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神仓617.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"6.1.7_180电视版"},{"name":"天神仓海信版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神仓海信版617.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"6.1.7_海信非共存"},{"name":"1DM+","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/1DM+_v17.2.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/1DM.png","version":"17.2_手机版"},{"name":"洛雪音乐","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/洛雪音乐888.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/洛雪音乐.png","version":"8.8.8_手机版"},{"name":"阅读","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/阅读合集325.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/阅读.png","version":"3.25_手机版"},{"name":"家庭KTV","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/家庭KTV115.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/家庭KTV.png","version":"1.1.5_电视版"}]}]
[{"name":"推荐","list":[{"name":"本地库【ff】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"❤下载过,才能用"},{"name":"备用库【ff】","url":"https://wget.la/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"❤下载过,才能用"}]},{"name":"播放源下载(❤下载过,才能用)","list":[{"name":"本地【vox】","url":"http://xw.123234567.xyz:60255/jiduo/vox本地包.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"最新版本"},{"name":"本地库【ff】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.07.03版"},{"name":"备用库【ff】","url":"https://wget.la/https://raw.githubusercontent.com/IY-CPU/test/main/本地库【ff】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.07.03版"},{"name":"本地【小虎斑】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/小虎斑.zip","icon":"https://img0.baidu.com/it/u=3403550249,2192222310&fm=253&fmt=auto?w=800&h=804","version":"15.8.4"},{"name":"缘起【天神IY】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/缘起【天神IY】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.07.03版"},{"name":"真心全量包1","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/真心20250402-全量包1.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2025.4.2版"},{"name":"真心全量包2","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/真心20250402-全量包2.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2025.4.2版"},{"name":"真心增量包","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地【真心】.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"2026.04.25版"},{"name":"本地【PG】","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/本地【PG】1.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/源.png","version":"20260427-0913版"}]},{"name":"简易手机版软件下载,并在线可安装","list":[{"name":"天神IY手机版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY手机版.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_64位"},{"name":"倾心壁纸","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/倾心壁纸_1.4.7","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/倾心壁纸.png","version":"1.4.7_手机64位"},{"name":"Via原版","url":"https://res.viayoo.com/v1/via-release-cn.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/Via.png","version":"官方最新版"},{"name":"Via非原版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/文件/Via_6.4.0内置脚本版.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/Via.png","version":"6.4.0_内置脚本"},{"name":"MT管理器","url":"https://pan.mt2.cn/mt/MT2.18.3-clone-target28.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/MT管理器.png","version":"2.18.3_原共存版"},{"name":"MT管理器","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/MT管理器_2.14.5部分破解版.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/MT管理器.png","version":"2.14.5_部分破解"},{"name":"NP管理器","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/NP管理器_3.1.25.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/NP管理器.png","version":"3.1.25_原版"},{"name":"WiFi万能钥匙","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/万能钥匙_1.1.39.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/WiFi万能钥匙.png","version":"1.1.39_破解版"},{"name":"蓝牙遥控","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/文件/蓝牙遥控_2.0.9.apk","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/蓝牙遥控器.png","version":"2.0.9_原版"}]},{"name":"其他软件下载,去文件管理器查找、安装","list":[{"name":"无意云Pro版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/无意云手机版341.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/无意云.png","version":"3.4.1_手机非共存"},{"name":"无意云Pro版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/无意云电视版341.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/无意云.png","version":"3.4.1_电视非共存"},{"name":"天神IY电视版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_电视32位"},{"name":"天神IY海信版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY海信版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_非共存"},{"name":"天神IY电视版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视64位版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_电视64位"},{"name":"天神IY电视全内置版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视全内置版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_内置32位"},{"name":"天神IY海信全内置版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY海信全内置版.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"5.1.6_内置非共存"},{"name":"天神IY电视版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神IY电视版250.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"2.5.0_安卓4.+版"},{"name":"小白文件管理器","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/文件/小白文件管理器_2.8.0TV版).zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/小白文件管理器.png","version":"2.8.0_电视版"},{"name":"天神仓","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神仓617.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"6.1.7_180电视版"},{"name":"天神仓海信版","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/天神仓海信版617.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/天神IY.png","version":"6.1.7_海信非共存"},{"name":"1DM+","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/1DM+_v17.2.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/1DM.png","version":"17.2_手机版"},{"name":"洛雪音乐","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test/main/洛雪音乐888.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/洛雪音乐.png","version":"8.8.8_手机版"},{"name":"阅读","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/test1/main/阅读合集325.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/阅读.png","version":"3.25_手机版"},{"name":"家庭KTV","url":"https://ghfile.geekertao.top/https://raw.githubusercontent.com/IY-CPU/IY/main/家庭KTV115.zip","icon":"https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/封面/家庭KTV.png","version":"1.1.5_电视版"}]}]
Binary file not shown.