forked from diangu/tvboxtg
256 lines
7.4 KiB
JavaScript
256 lines
7.4 KiB
JavaScript
if (typeof Object.assign != 'function') {
|
||
Object.assign = function () {
|
||
let target = arguments[0];
|
||
for (let i = 1; i < arguments.length; i++) {
|
||
let source = arguments[i];
|
||
for (let key in source) {
|
||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||
target[key] = source[key];
|
||
}
|
||
}
|
||
}
|
||
return target;
|
||
};
|
||
}
|
||
if (!String.prototype.includes) {
|
||
String.prototype.includes = function (search, start) {
|
||
if (typeof start !== 'number') {
|
||
start = 0;
|
||
}
|
||
|
||
if (start + search.length > this.length) {
|
||
return false;
|
||
} else {
|
||
return this.indexOf(search, start) !== -1;
|
||
}
|
||
};
|
||
}
|
||
|
||
if (!Array.prototype.includes) {
|
||
Object.defineProperty(Array.prototype, 'includes', {
|
||
value: function (searchElement, fromIndex) {
|
||
|
||
if (this == null) {//this是空或者未定义,抛出错误
|
||
throw new TypeError('"this" is null or not defined');
|
||
}
|
||
|
||
var o = Object(this);//将this转变成对象
|
||
var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0
|
||
|
||
if (len === 0) {//length为0直接返回false未找到目标值
|
||
return false;
|
||
}
|
||
|
||
var n = fromIndex | 0;//查找起始索引
|
||
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引,因为有可能是负值
|
||
|
||
while (k < len) {//从起始索引处开始循环
|
||
if (o[k] === searchElement) {//如果某一位置与寻找目标相等,返回true,找到了
|
||
return true;
|
||
}
|
||
k++;
|
||
}
|
||
return false;//未找到,返回false
|
||
}
|
||
});
|
||
}
|
||
if (typeof String.prototype.startsWith != 'function') {
|
||
String.prototype.startsWith = function (prefix){
|
||
return this.slice(0, prefix.length) === prefix;
|
||
};
|
||
}
|
||
if (typeof String.prototype.endsWith != 'function') {
|
||
String.prototype.endsWith = function(suffix) {
|
||
return this.indexOf(suffix, this.length - suffix.length) !== -1;
|
||
};
|
||
}
|
||
Object.prototype.myValues=function(obj){
|
||
if(obj ==null) {
|
||
throw new TypeError("Cannot convert undefined or null to object");
|
||
}
|
||
var res=[]
|
||
for(var k in obj){
|
||
if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
|
||
res.push(obj[k]);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
if (typeof Object.prototype.values != 'function') {
|
||
Object.prototype.values=function(obj){
|
||
if(obj ==null) {
|
||
throw new TypeError("Cannot convert undefined or null to object");
|
||
}
|
||
var res=[]
|
||
for(var k in obj){
|
||
if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
|
||
res.push(obj[k]);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
}
|
||
if (typeof Array.prototype.join != 'function') {
|
||
Array.prototype.join = function (emoji) {
|
||
// emoji = emoji||',';
|
||
emoji = emoji||'';
|
||
let self = this;
|
||
let str = "";
|
||
let i = 0;
|
||
if (!Array.isArray(self)) {throw String(self)+'is not Array'}
|
||
if(self.length===0){return ''}
|
||
if (self.length === 1){return String(self[0])}
|
||
i = 1;
|
||
str = this[0];
|
||
for (; i < self.length; i++) {
|
||
str += String(emoji)+String(self[i]);
|
||
}
|
||
return str;
|
||
};
|
||
}
|
||
|
||
String.prototype.rstrip = function (chars) {
|
||
let regex = new RegExp(chars + "$");
|
||
return this.replace(regex, "");
|
||
};
|
||
|
||
Array.prototype.append = Array.prototype.push;
|
||
String.prototype.strip = String.prototype.trim;
|
||
function 是否正版(vipUrl){
|
||
let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv');
|
||
return flag.test(vipUrl);
|
||
}
|
||
function urlDeal(vipUrl){
|
||
if(!vipUrl){
|
||
return ''
|
||
}
|
||
if(!是否正版(vipUrl)){
|
||
return vipUrl
|
||
}
|
||
if(!/miguvideo/.test(vipUrl)){
|
||
vipUrl=vipUrl.split('#')[0].split('?')[0];
|
||
}
|
||
return vipUrl
|
||
}
|
||
function setResult(d){
|
||
if(!Array.isArray(d)){
|
||
return []
|
||
}
|
||
VODS = [];
|
||
// console.log(JSON.stringify(d));
|
||
d.forEach(function (it){
|
||
let obj = {
|
||
vod_id:it.url||'',
|
||
vod_name: it.title||'',
|
||
vod_remarks: it.desc||'',
|
||
vod_content: it.content||'',
|
||
vod_pic: it.pic_url||it.img||'',
|
||
};
|
||
let keys = Object.keys(it);
|
||
if(keys.includes('tname')){
|
||
obj.type_name = it.tname||'';
|
||
}
|
||
if(keys.includes('tid')){
|
||
obj.type_id = it.tid||'';
|
||
}
|
||
if(keys.includes('year')){
|
||
obj.vod_year = it.year||'';
|
||
}
|
||
if(keys.includes('actor')){
|
||
obj.vod_actor = it.actor||'';
|
||
}
|
||
if(keys.includes('director')){
|
||
obj.vod_director = it.director||'';
|
||
}
|
||
if(keys.includes('area')){
|
||
obj.vod_area = it.area||'';
|
||
}
|
||
VODS.push(obj);
|
||
});
|
||
return VODS
|
||
}
|
||
function setResult2(res){
|
||
VODS = res.list||[];
|
||
return VODS
|
||
}
|
||
function setHomeResult(res){
|
||
if(!res||typeof(res)!=='object'){
|
||
return []
|
||
}
|
||
return setResult(res.list);
|
||
}
|
||
// 千万不要用for in 推荐 forEach (for in 会打乱顺序)
|
||
//猫函数
|
||
function maoss(jxurl, ref, key) {
|
||
eval(getCryptoJS());
|
||
try {
|
||
var getVideoInfo = function (text) {
|
||
return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
|
||
};
|
||
var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key;
|
||
if (ref) {
|
||
var html = request(jxurl, {
|
||
headers: {
|
||
'Referer': ref
|
||
}
|
||
});
|
||
} else {
|
||
var html = request(jxurl);
|
||
}
|
||
// print(html);
|
||
if (html.indexOf('&btwaf=') != -1) {
|
||
html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], {
|
||
headers: {
|
||
'Referer': ref
|
||
}
|
||
})
|
||
}
|
||
var token_iv = html.split('_token = "')[1].split('"')[0];
|
||
var key = CryptoJS.enc.Utf8.parse(token_key);
|
||
var iv = CryptoJS.enc.Utf8.parse(token_iv);
|
||
// log("iv:"+iv);
|
||
// log(html);
|
||
// print(key);
|
||
// print(iv);
|
||
eval(html.match(/var config = {[\s\S]*?}/)[0] + '');
|
||
// config.url = config.url.replace(/,/g,'');
|
||
// print(config.url);
|
||
if (!config.url.startsWith('http')) {
|
||
//config.url = decodeURIComponent(AES(config.url, key, iv));
|
||
config.url = CryptoJS.AES.decrypt(config.url, key, {
|
||
iv: iv,
|
||
padding: CryptoJS.pad.Pkcs7
|
||
}).toString(CryptoJS.enc.Utf8)
|
||
}
|
||
return config.url;
|
||
} catch (e) {
|
||
return '';
|
||
}
|
||
}
|
||
|
||
function urlencode (str) {
|
||
str = (str + '').toString();
|
||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
|
||
replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||
}
|
||
globalThis.VODS = [];// 一级或者搜索需要的数据列表
|
||
globalThis.VOD = {};// 二级的单个数据
|
||
globalThis.encodeUrl = urlencode;
|
||
globalThis.urlencode = urlencode;
|
||
globalThis.是否正版 = 是否正版;
|
||
globalThis.urlDeal = urlDeal;
|
||
globalThis.setResult = setResult;
|
||
globalThis.setResult2 = setResult2;
|
||
globalThis.setHomeResult = setHomeResult;
|
||
globalThis.maoss = maoss;
|
||
// globalThis.urljoin2 = joinUrl;
|
||
|
||
// export default {
|
||
// 是否正版:是否正版,
|
||
// urlDeal:urlDeal,
|
||
// setResult:setResult,
|
||
// setResult2:setResult2,
|
||
// setHomeResult:setHomeResult,
|
||
// maoss:maoss,
|
||
// urlencode:urlencode
|
||
// }
|