fix
This commit is contained in:
Liu committed 2025-01-04 13:36:46 +08:00
1 parent 7f98730b28
commit 359b5008bf
61 files changed
+32792 -19206

No files matched your search

+102 -58
View File
@@ -27,16 +27,25 @@ cheerio.jinja2 = function(template, obj) {
// import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js'
let vercode = typeof(pdfl) === 'function' ? 'drpy2.1' : 'drpy2';
const VERSION = vercode + ' 3.9.51beta5 20241104';
const VERSION = vercode + ' 3.9.51beta6 20241126';
const UpdateInfo = [{
date: '20241104',
title: 'drpy更新,增加新特性',
version: '3.9.51beta5 20241104',
msg: `
date: '20241126',
title: 'drpy更新,优化去广告算法',
version: '3.9.51beta6 20241126',
msg: `
1. 更新龙头大佬提供的去广告算法
`
},
{
date: '20241104',
title: 'drpy更新,增加新特性',
version: '3.9.51beta5 20241104',
msg: `
1. rule增加 搜索验证标识 属性,可以不定义,默认为 '系统安全验证|请输入验证码'
2. rule增加 searchNoPage 属性,可以不定义,如果定义 1 将关闭该源的搜索翻页功能,超过1页直接返回空
`
}, ];
},
];
function getUpdateInfo() {
return UpdateInfo.map((_o) => {
@@ -1064,7 +1073,7 @@ function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
* @returns {string}
*/
function fixAdM3u8Ai(m3u8_url, headers) {
let ts = new Date().getTime();
let ts = (new Date).getTime();
let option = headers ? {
headers: headers
} : {};
@@ -1077,67 +1086,103 @@ function fixAdM3u8Ai(m3u8_url, headers) {
}
i++
}
return i;
return i
}
function reverseString(str) {
return str.split('').reverse().join('');
return str.split("").reverse().join("")
}
//log('播放的地址:' + m3u8_url);
let m3u8 = request(m3u8_url, option);
//log('m3u8处理前:' + m3u8);
m3u8 = m3u8.trim().split('\n').map(it => it.startsWith('#') ? it : urljoin(m3u8_url, it)).join('\n');
//log('m3u8处理后:============:' + m3u8);
// 获取嵌套m3u8地址
m3u8 = m3u8.replace(/\n\n/ig, '\n'); //删除多余的换行符
let last_url = m3u8.split('\n').slice(-1)[0];
m3u8 = m3u8.trim().split("\n").map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it)).join("\n");
m3u8 = m3u8.replace(/\n\n/gi, "\n");
let last_url = m3u8.split("\n").slice(-1)[0];
if (last_url.length < 5) {
last_url = m3u8.split('\n').slice(-2)[0];
last_url = m3u8.split("\n").slice(-2)[0]
}
if (last_url.includes('.m3u8') && last_url !== m3u8_url) {
if (last_url.includes(".m3u8") && last_url !== m3u8_url) {
m3u8_url = urljoin2(m3u8_url, last_url);
log('嵌套的m3u8_url:' + m3u8_url);
m3u8 = request(m3u8_url, option);
log("嵌套的m3u8_url:" + m3u8_url);
m3u8 = request(m3u8_url, option)
}
//log('----处理有广告的地址----');
let s = m3u8.trim().split('\n').filter(it => it.trim()).join('\n');
let ss = s.split('\n')
//找出第一条播放地址
//let firststr = ss.find(x => !x.startsWith('#'));
let firststr = '';
let maxl = 0; //最大相同字符
let s = m3u8.trim().split("\n").filter(it => it.trim()).join("\n");
let ss = s.split("\n");
if (m3u8_url.indexOf("ffzy") > 0) {
let j = 0,
k1 = 0,
m = 0,
n = 0,
t = 0;
let s2 = "";
for (let i = 0; i < ss.length; i++) {
let s = ss[i];
let s1 = "";
if (s.startsWith("#EXTINF")) {
s1 = s.slice(8);
n++;
if (n == 1)
k1 = i;
if (s2.indexOf(s1) == -1) {
s2 = s2 + s1;
m++;
}
t = t + parseFloat(s1);
i++;
s = ss[i];
}
if (s.startsWith("#EXT-X-DISCONTINUITY")) {
if (n == 5) {
log("n:" + n);
log("m:" + m);
for (let j = k1; j < k1 + n * 2; j++) {
log(ss[j]);
}
log("广告位置:" + k1);
log("数据条数:" + n);
log("数据种类:" + m);
log("广告时间:" + t.toFixed(5));
ss.splice(k1, 2 * n + 1);
i = i - 2 * n + 1;
}
t = 0;
m = 0;
n = 0;
s2 = "";
}
}
}
let firststr = "";
let maxl = 0;
let kk = 0;
let kkk = 2;
let secondstr = '';
let kkk1 = 1;
let kkk2 = 0;
let secondstr = "";
for (let i = 0; i < ss.length; i++) {
let s = ss[i];
if (!s.startsWith("#")) {
if (kk == 0) firststr = s;
if (kk == 1) maxl = b(firststr, s);
if (kk > 1) {
if (maxl > b(firststr, s)) {
if (secondstr.length < 5) secondstr = s;
kkk = kkk + 2;
if (kk == 0)
firststr = s;
if (kk > 0) {
if (maxl > b(firststr, s) + 1) {
if (secondstr.length < 5)
secondstr = s;
kkk2++
} else {
maxl = b(firststr, s);
kkk++;
kkk1++
}
}
kk++;
if (kk >= 20) break;
if (kk >= 30)
break
}
}
if (kkk > 30) firststr = secondstr;
if (kkk2 > kkk1)
firststr = secondstr;
let firststrlen = firststr.length;
//log('字符串长度:' + firststrlen);
let ml = Math.round(ss.length / 2).toString().length; //取数据的长度的位数
//log('数据条数的长度:' + ml);
//找出最后一条播放地址
let ml = Math.round(ss.length / 2).toString().length;
let maxc = 0;
let laststr = ss.toReversed().find((x) => {
if (!x.startsWith('#')) {
let laststr = ss.toReversed().find(x => {
if (!x.startsWith("#")) {
let k = b(reverseString(firststr), reverseString(x));
maxl = b(firststr, x);
maxc++;
@@ -1147,29 +1192,28 @@ function fixAdM3u8Ai(m3u8_url, headers) {
}
return false
});
log('最后一条切片:' + laststr);
//log('最小相同字符长度:' + maxl);
log("最后一条切片:" + laststr);
let ad_urls = [];
for (let i = 0; i < ss.length; i++) {
let s = ss[i];
if (!s.startsWith('#')) {
if (!s.startsWith("#")) {
if (b(firststr, s) < maxl) {
ad_urls.push(s); // 广告地址加入列表
ad_urls.push(s);
ss.splice(i - 1, 2);
i = i - 2;
i = i - 2
} else {
ss[i] = urljoin(m3u8_url, s);
ss[i] = urljoin(m3u8_url, s)
}
} else {
ss[i] = s.replace(/URI=\"(.*)\"/, 'URI=\"' + urljoin(m3u8_url, '$1') + '\"');
ss[i] = s.replace(/URI=\"(.*)\"/, 'URI="' + urljoin(m3u8_url, "$1") + '"')
}
}
log('处理的m3u8地址:' + m3u8_url);
log('----广告地址----');
log("处理的m3u8地址:" + m3u8_url);
log("----广告地址----");
log(ad_urls);
m3u8 = ss.join('\n');
//log('处理完成');
log('处理耗时:' + (new Date().getTime() - ts).toString());
m3u8 = ss.join("\n");
log("处理耗时:" + ((new Date).getTime() - ts).toString());
log(m3u8);
return m3u8
}