mirror of
https://github.com/alantang1977/hipy.git
synced 2024-11-21 19:33:07 +02:00
269 lines
9.7 KiB
JavaScript
269 lines
9.7 KiB
JavaScript
|
/**
|
||
|
pathLib: {
|
||
|
join: [Function: join],
|
||
|
dirname: [Function: dirname],
|
||
|
readDir: [Function (anonymous)],
|
||
|
readFile: [Function (anonymous)],
|
||
|
stat: [Function (anonymous)]
|
||
|
}
|
||
|
path
|
||
|
path_dir
|
||
|
|
||
|
20241012 by 道长
|
||
|
**/
|
||
|
function naturalSort(arr, key) {
|
||
|
return arr.sort((a, b) => a[key].localeCompare(b[key], undefined, {numeric: true, sensitivity: 'base'}));
|
||
|
}
|
||
|
|
||
|
function logError(msg, config_sites) {
|
||
|
let _site = config_sites.find(s => s.key === 'logError');
|
||
|
if (_site) {
|
||
|
_site['msg'] += msg
|
||
|
} else {
|
||
|
config_sites.push({key: "logError", name: "生成式错误日志", "msg": msg + '\n', type: 8});
|
||
|
}
|
||
|
console.log(msg);
|
||
|
}
|
||
|
|
||
|
async function main() {
|
||
|
let js_order = ['360影视[官]', '菜狗[官]', '奇珍异兽[官]', '优酷[官]', '腾云驾雾[官]', '百忙无果[官]', '哔哩影视[官]', '哔哩教育[官]', '哔哩大全[官]', '采王道长[合]', '采王zy[密]'];
|
||
|
let js_path = './drpy_js';
|
||
|
let live_path = './lives';
|
||
|
let config_path = './custom.json';
|
||
|
let appv2_path = './appv2.txt';
|
||
|
let js_api = './drpy_libs/drpy2.min.js';
|
||
|
let parse_apis = [
|
||
|
'777,https://jx.777jiexi.com/player/?url=,0',
|
||
|
'8090g,https://www.8090g.cn/jiexi/?url=,0',
|
||
|
'ik9,https://yparse.ik9.cc/index.php?url=,0',
|
||
|
'杰森,https://jx.jsonplayer.com/player/?url=,0',
|
||
|
'阳途,https://jx.yangtu.top/?url=,0',
|
||
|
'冰豆,https://bd.jx.cn/?url=,0',
|
||
|
'm3u8TV,https://jx.m3u8.tv/jiexi/?url=,0',
|
||
|
'听乐,https://jx.dj6u.com/?url=,0',
|
||
|
'虾米,https://jx.xmflv.com/?url=,0',
|
||
|
'虾米2,https://jx.xmflv.cc/?url=,0',
|
||
|
'云析,https://jx.yparse.com/index.php?url=,0',
|
||
|
'红狐,https://player.mrgaocloud.com/player/?url=,0',
|
||
|
];
|
||
|
let parses = parse_apis.map((it) => {
|
||
|
let _name = it.split(',')[0];
|
||
|
let _url = it.split(',')[1];
|
||
|
let _type = it.split(',').length > 2 ? it.split(',')[2] : '0';
|
||
|
_type = Number(_type);
|
||
|
return {
|
||
|
name: _name,
|
||
|
url: _url,
|
||
|
type: _type,
|
||
|
'ext': {
|
||
|
'flag': [
|
||
|
'qiyi',
|
||
|
'imgo',
|
||
|
'爱奇艺',
|
||
|
'奇艺',
|
||
|
'qq',
|
||
|
'qq 预告及花絮',
|
||
|
'腾讯',
|
||
|
'youku',
|
||
|
'优酷',
|
||
|
'pptv',
|
||
|
'PPTV',
|
||
|
'letv',
|
||
|
'乐视',
|
||
|
'leshi',
|
||
|
'mgtv',
|
||
|
'芒果',
|
||
|
'sohu',
|
||
|
'xigua',
|
||
|
'fun',
|
||
|
'风行',
|
||
|
],
|
||
|
},
|
||
|
'header': {
|
||
|
'User-Agent': 'Mozilla/5.0',
|
||
|
},
|
||
|
};
|
||
|
|
||
|
});
|
||
|
let js_files = pathLib.readDir(pathLib.join(path_dir, js_path)).filter(file => file && file.endsWith('.js'));
|
||
|
// console.log(js_files);
|
||
|
let live_files = pathLib.readDir(pathLib.join(path_dir, live_path));
|
||
|
// console.log(live_files);
|
||
|
let config_sites = [];
|
||
|
try {
|
||
|
let config_file = String(pathLib.readFile(pathLib.join(path_dir, config_path)));
|
||
|
config_sites = JSON.parse(config_file).sites;
|
||
|
} catch (e) {
|
||
|
logError(`get config_file error:${e.message}`, config_sites)
|
||
|
}
|
||
|
let appv2_sites = [];
|
||
|
let appv2_abspath = pathLib.join(path_dir, appv2_path);
|
||
|
try {
|
||
|
let appv2_file = String(pathLib.readFile(appv2_abspath));
|
||
|
appv2_sites = appv2_file.split('\n').filter(_l => _l.trim() && !/^(#|\/\/)/.test(_l.trim())).map(_s => _s.trim());
|
||
|
} catch (e) {
|
||
|
logError(`get appv2_path error:${e.message}`, config_sites)
|
||
|
}
|
||
|
|
||
|
let channels = [];
|
||
|
channels.push({
|
||
|
'name': '稳定github直播',
|
||
|
'urls': [
|
||
|
'proxy://do=live&type=txt&ext=https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/hipy-sniffer/refs/heads/main/static/lives/lives.txt',
|
||
|
],
|
||
|
});
|
||
|
live_files.forEach((it) => {
|
||
|
let absp = pathLib.join(path_dir, `${live_path}/${it}`).replace(/\\/g, '/');
|
||
|
if (absp.includes('/zyplayer/file/')) {
|
||
|
absp = 'http://127.0.0.1:9978/api/v1/file/' + absp.split('/zyplayer/file/')[1];
|
||
|
}
|
||
|
let aname = it.split('.')[0];
|
||
|
channels.push({
|
||
|
'name': aname,
|
||
|
'urls': [
|
||
|
'proxy://do=live&type=txt&ext=' + absp,
|
||
|
],
|
||
|
});
|
||
|
});
|
||
|
channels = channels.concat([
|
||
|
{
|
||
|
'name': '云星日记直播',
|
||
|
'urls': [
|
||
|
'proxy://do=live&type=txt&ext=http://itvbox.cc/云星日记/Ipv4.txt',
|
||
|
],
|
||
|
},
|
||
|
{
|
||
|
'name': '本地嗅探器直播',
|
||
|
'urls': [
|
||
|
'proxy://do=live&type=txt&ext=http://127.0.0.1:5708/ysp',
|
||
|
],
|
||
|
},
|
||
|
]);
|
||
|
let json_config = {
|
||
|
'wallpaper': 'https://tuapi.eees.cc/api.php?category=fengjing&type=302',
|
||
|
'homepage': 'https://github.com/hjdhnx/hipy-server',
|
||
|
"homeLogo": "./img/logo500x200-1.png",
|
||
|
"spider": "./jar/pg.jar?md5=7633f8ea346c082b7aa163be58aed023",
|
||
|
'sites': [],
|
||
|
'parses': parses,
|
||
|
'flags': [
|
||
|
'imgo',
|
||
|
'youku',
|
||
|
'qq',
|
||
|
'qq 预告及花絮',
|
||
|
'iqiyi',
|
||
|
'qiyi',
|
||
|
'fun',
|
||
|
'letv',
|
||
|
'leshi',
|
||
|
'sohu',
|
||
|
'tudou',
|
||
|
'xigua',
|
||
|
'cntv',
|
||
|
'1905',
|
||
|
'pptv',
|
||
|
'mgtv',
|
||
|
'wasu',
|
||
|
'bilibili',
|
||
|
'renrenmi',
|
||
|
],
|
||
|
'lives': [
|
||
|
{
|
||
|
'group': 'redirect',
|
||
|
'channels': channels,
|
||
|
},
|
||
|
],
|
||
|
|
||
|
};
|
||
|
js_files.forEach((it, index) => {
|
||
|
let rname = it.replace('.js', '');
|
||
|
let extras = [''];
|
||
|
if (rname.includes('我的哔哩[官]')) {
|
||
|
extras = [
|
||
|
'?type=url¶ms=../json/哔哩教育.json@哔哩教育[官]',
|
||
|
'?type=url¶ms=../json/哔哩大全.json@哔哩大全[官]',
|
||
|
];
|
||
|
} else if (rname.includes('采集之王')) {
|
||
|
extras = [
|
||
|
'?type=url¶ms=../json/采集静态.json$1@采王道长[合]',
|
||
|
'?type=url¶ms=../json/采集[zy]静态.json$1@采王zy[密]',
|
||
|
'?type=url¶ms=../json/采集[密]静态.json@采王成人[密]',
|
||
|
];
|
||
|
} else if (rname.includes('直播转点播')) {
|
||
|
extras = [
|
||
|
'?type=url¶ms=../json/live2cms.json',
|
||
|
];
|
||
|
} else if (rname.includes('APPV2')) {
|
||
|
extras = appv2_sites.map(s => `?type=url¶ms=${s}`);
|
||
|
}else if (rname.includes('夸克分享')) {
|
||
|
extras = [
|
||
|
'?type=url¶ms=../json/夸克分享.json@夸克分享[盘]',
|
||
|
];
|
||
|
}
|
||
|
|
||
|
//let excludes = ['玩偶哥哥','阿里土豆'];
|
||
|
let excludes = [];
|
||
|
if (!excludes.includes(rname)) {
|
||
|
extras.forEach((extra, index) => {
|
||
|
let ext_str = 'drpy_t3';
|
||
|
let _name = extras.length > 1 ? `${rname}${index}` : `${rname}`;
|
||
|
let ext_name = extra.includes('@') ? extra.split('@')[1] : _name;
|
||
|
extra = extra.split('@')[0];
|
||
|
if (extra) {
|
||
|
try {
|
||
|
ext_str = extra.split('/').slice(-1)[0].split('.')[0];
|
||
|
} catch (e) {
|
||
|
}
|
||
|
}
|
||
|
ext_name = ext_name || `${rname}(${ext_str})`;
|
||
|
let data = {
|
||
|
'key': extras.length > 1 ? `hipy_js_${rname}${index}` : `hipy_js_${rname}`,
|
||
|
'name': `${ext_name}(drpy_t3)`,
|
||
|
'type': 3,
|
||
|
'api': js_api,
|
||
|
'searchable': 1,
|
||
|
'quickSearch': 1,
|
||
|
'filterable': 1,
|
||
|
'order_num': index,
|
||
|
'ext': `${js_path}/${it}${extra}`,
|
||
|
};
|
||
|
json_config.sites.push(data);
|
||
|
});
|
||
|
|
||
|
// for(let index in extras){
|
||
|
// let extra = extras[index];
|
||
|
// let ext_str = 'drpy_t3';
|
||
|
// if(extra){
|
||
|
// try{
|
||
|
// ext_str = extra.split('/').slice(-1)[0].split('.')[0];
|
||
|
// }catch(e){}
|
||
|
// }
|
||
|
// let data = {
|
||
|
// 'key': extras.length>1?`hipy_js_${rname}${index}`:`hipy_js_${rname}`,
|
||
|
// 'name': extras.length>1?`${rname}(${ext_str})`:`${rname}(drpy_t3)`,
|
||
|
// 'type': 3,
|
||
|
// 'api': js_api,
|
||
|
// 'searchable': 1,
|
||
|
// 'quickSearch': 1,
|
||
|
// 'filterable': 1,
|
||
|
// 'order_num': index,
|
||
|
// 'ext': `${js_path}/${it}${extra}`,
|
||
|
// };
|
||
|
// json_config.sites.push(data);
|
||
|
|
||
|
// }
|
||
|
}
|
||
|
});
|
||
|
json_config.sites = json_config.sites.concat(config_sites);
|
||
|
json_config.sites = json_config.sites.sort((a, b) => {
|
||
|
let i = a.name.split('(')[0];
|
||
|
let j = b.name.split('(')[0];
|
||
|
return (js_order.indexOf(i) === -1 ? 9999 : js_order.indexOf(i)) - (js_order.indexOf(j) === -1 ? 9999 : js_order.indexOf(j));
|
||
|
});
|
||
|
let top_sites = json_config.sites.filter(x => js_order.includes(x.name.split('(')[0]));
|
||
|
let other_sites = json_config.sites.filter(x => !js_order.includes(x.name.split('(')[0]));
|
||
|
let ret_sites = top_sites.concat(naturalSort(other_sites, 'name'));
|
||
|
json_config.sites = ret_sites;
|
||
|
return JSON.stringify(json_config, null, "\t");
|
||
|
}
|