Add files via upload

This commit is contained in:
n3rddd 2024-06-28 21:34:19 +08:00 committed by GitHub
parent b0c0bea769
commit bfb87635e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 94 additions and 10 deletions

View File

@ -30,18 +30,43 @@ function convertM3uToNormal(m3u) {
let currentGroupTitle = ''; let currentGroupTitle = '';
lines.forEach((line) => { lines.forEach((line) => {
if (line.startsWith('#EXTINF:')) { if (line.startsWith('#EXTINF:')) {
const groupTitle = line.split('"')[1].trim(); line = line.replace(/'/g, '"');
TV = line.split('"')[2].substring(1); let groupTitle = '未知频道';
let tvg_name = '';
let tvg_logo = '';
try {
groupTitle = line.match(/group-title="(.*?)"/)[1].trim();
} catch (e) {
}
try {
tvg_name = line.match(/tvg-name="(.*?)"/)[1].trim();
} catch (e) {
}
try {
tvg_logo = line.match(/tvg-logo="(.*?)"/)[1].trim();
} catch (e) {
}
TV = line.split(',').slice(-1)[0].trim();
if (currentGroupTitle !== groupTitle) { if (currentGroupTitle !== groupTitle) {
currentGroupTitle = groupTitle; currentGroupTitle = groupTitle;
result += `\n${currentGroupTitle},${flag}\n`; let ret_list = [currentGroupTitle, flag];
// if(tvg_name){
// ret_list.push(tvg_name);
// }
// if(tvg_logo){
// ret_list.push(tvg_logo);
// }
result += `\n${ret_list.join(",")}\n`;
} }
} else if (line.startsWith('http')) { } else if (line.startsWith('http')) {
const splitLine = line.split(','); const splitLine = line.split(',');
result += `${TV}\,${splitLine[0]}\n`; result += `${TV}\,${splitLine[0]}\n`;
} }
}); });
return result.trim() // result = result.trim();
result = mergeChannels(result);
// log(result);
return result
} catch (e) { } catch (e) {
log(`m3u直播转普通直播发生错误:${e.message}`); log(`m3u直播转普通直播发生错误:${e.message}`);
return m3u return m3u
@ -98,6 +123,42 @@ function gen_group_dict(arr, parse) {
return dict return dict
} }
/**
* txt格式直播自动合并频道链接
* @param text
* @returns {string}
*/
function mergeChannels(text) {
const lines = text.split('\n');
const channelMap = new Map();
let currentChannel = ''; // 当前处理的频道
lines.forEach(line => {
// 使用正则表达式匹配频道行,假设频道行包含",#"即可识别为频道行
if (/,#/.test(line)) {
// 如果是频道名称,作为键值存储,初始化为空数组
currentChannel = line;
if (!channelMap.has(line)) {
channelMap.set(line, []);
}
} else if (line) { // 忽略空行
// 将当前行(链接)添加到当前频道数组中
if (currentChannel) {
channelMap.get(currentChannel).push(line);
}
}
});
// 构建结果字符串
let result = '';
channelMap.forEach((value, key) => {
result += key + '\n' + value.join('\n') + '\n\n';
});
return result.trim(); // 移除尾部的多余换行符
}
globalThis.mergeChannels = mergeChannels;
globalThis.convertM3uToNormal = convertM3uToNormal; globalThis.convertM3uToNormal = convertM3uToNormal;
globalThis.splitArray = splitArray; globalThis.splitArray = splitArray;
globalThis.gen_group_dict = gen_group_dict; globalThis.gen_group_dict = gen_group_dict;
@ -108,8 +169,14 @@ globalThis.__ext = {data_dict: {}};
var rule = { var rule = {
title: '直播转点播[合]', title: '直播转点播[合]',
author: '道长', author: '道长',
version: '20240627 beta3', version: '20240628 beta7',
update_info: ` update_info: `
20240628 beta6:
1.增加范冰冰v6源
2.修复带图标的m3u源识别
3.修复m3u8链接带参数转义问题
4.合并重复的频道名称下的链接
5.支持相对图片链接
20240627 beta1: 20240627 beta1:
1.将原drpy项目的live2cms.js转换成hipy传参源 1.将原drpy项目的live2cms.js转换成hipy传参源
特别说明支持m3u和txt的直播 特别说明支持m3u和txt的直播
@ -129,7 +196,8 @@ var rule = {
play_parse: true, play_parse: true,
// params: 'http://127.0.0.1:5707/files/json/live2cms.json', // params: 'http://127.0.0.1:5707/files/json/live2cms.json',
// 下面自定义一些源的配置 // 下面自定义一些源的配置
def_pic: 'https://avatars.githubusercontent.com/u/97389433?s=120&v=4', //默认列表图片 // def_pic: 'https://avatars.githubusercontent.com/u/97389433?s=120&v=4', //默认列表图片
def_pic: 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/hipy-server/master/app/static/img/lives.jpg', //默认列表图片
showMode: 'groups',// groups按组分类显示 all全部一条线路展示 showMode: 'groups',// groups按组分类显示 all全部一条线路展示
groupDict: {},// 搜索分组字典 groupDict: {},// 搜索分组字典
tips: '', //二级提示信息 tips: '', //二级提示信息
@ -156,6 +224,9 @@ var rule = {
if (it.url && !/^(http|file)/.test(it.url)) { if (it.url && !/^(http|file)/.test(it.url)) {
it.url = urljoin(_url, it.url); it.url = urljoin(_url, it.url);
} }
if (it.img && !/^(http|file)/.test(it.img)) {
it.img = urljoin(_url, it.img);
}
let _obj = { let _obj = {
type_name: it.name, type_name: it.name,
type_id: it.url, type_id: it.url,
@ -202,6 +273,8 @@ var rule = {
html = request(_get_url); html = request(_get_url);
if (/#EXTM3U/.test(html)) { if (/#EXTM3U/.test(html)) {
html = convertM3uToNormal(html); html = convertM3uToNormal(html);
} else {
html = mergeChannels(html);
} }
__ext.data_dict[_get_url] = html; __ext.data_dict[_get_url] = html;
} }
@ -241,6 +314,8 @@ var rule = {
html = request(_get_url); html = request(_get_url);
if (/#EXTM3U/.test(html)) { if (/#EXTM3U/.test(html)) {
html = convertM3uToNormal(html); html = convertM3uToNormal(html);
} else {
html = mergeChannels(html);
} }
__ext.data_dict[_get_url] = html; __ext.data_dict[_get_url] = html;
} }
@ -306,6 +381,8 @@ var rule = {
html = request(_get_url); html = request(_get_url);
if (/#EXTM3U/.test(html)) { if (/#EXTM3U/.test(html)) {
html = convertM3uToNormal(html); html = convertM3uToNormal(html);
} else {
html = mergeChannels(html);
} }
__ext.data_dict[_get_url] = html; __ext.data_dict[_get_url] = html;
} }
@ -335,9 +412,9 @@ var rule = {
let tabs = []; let tabs = [];
for (let i = 0; i < groups.length; i++) { for (let i = 0; i < groups.length; i++) {
if (i === 0) { if (i === 0) {
tabs.push(vod_name + '1'); tabs.push(vod_name + '@1');
} else { } else {
tabs.push(` ${i + 1} `); tabs.push(`@${i + 1}`);
} }
} }
vod_play_url = groups.map(it => it.join('#')).join('$$$'); vod_play_url = groups.map(it => it.join('#')).join('$$$');
@ -377,6 +454,8 @@ var rule = {
html = request(_get_url); html = request(_get_url);
if (/#EXTM3U/.test(html)) { if (/#EXTM3U/.test(html)) {
html = convertM3uToNormal(html); html = convertM3uToNormal(html);
} else {
html = mergeChannels(html);
} }
__ext.data_dict[_get_url] = html; __ext.data_dict[_get_url] = html;
} }
@ -409,9 +488,12 @@ var rule = {
}), }),
lazy: $js.toString(() => { lazy: $js.toString(() => {
if (/\.(m3u8|mp4)/.test(input)) { if (/\.(m3u8|mp4)/.test(input)) {
if (input.includes('?') && typeof (playObj) == 'object' && playObj.url) {
input = playObj.url;
}
input = {parse: 0, url: input} input = {parse: 0, url: input}
} else if (/yangshipin/.test(input)) { } else if (/yangshipin|1905\.com/.test(input)) {
input = {parse: 1, url: input, js: '', header: {'User-Agent': PC_UA}, parse_extra: '&is_pc=1'}; input = {parse: 1, jx: 0, url: input, js: '', header: {'User-Agent': PC_UA}, parse_extra: '&is_pc=1'};
} else { } else {
input input
} }

View File

@ -102,6 +102,8 @@ var rule = {
if (/loadImg/.test(input)) { if (/loadImg/.test(input)) {
input = input.split("'")[1]; input = input.split("'")[1];
} }
// tim壳子专用图片解密
// input = input + '@Option:{"mode":"CBC","inbase64":false,"key":"f5d965df75336270","iv":"97b60394abc2fbe1"}';
input = getProxyUrl() + '&url=' + input; input = getProxyUrl() + '&url=' + input;
}), }),
二级: "*", 二级: "*",