上传文件至「jtxtv09/js」
This commit is contained in:
2843
jtxtv09/js/斗鱼直播.js
Normal file
2843
jtxtv09/js/斗鱼直播.js
Normal file
File diff suppressed because it is too large
Load Diff
429
jtxtv09/js/模板.js
Normal file
429
jtxtv09/js/模板.js
Normal file
@@ -0,0 +1,429 @@
|
|||||||
|
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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通用免嗅探播放
|
||||||
|
let common_lazy = `js:
|
||||||
|
let html = request(input);
|
||||||
|
let hconf = html.match(/r player_.*?=(.*?)</)[1];
|
||||||
|
let json = JSON5.parse(hconf);
|
||||||
|
let url = json.url;
|
||||||
|
if (json.encrypt == '1') {
|
||||||
|
url = unescape(url);
|
||||||
|
} else if (json.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url));
|
||||||
|
}
|
||||||
|
if (/\\.(m3u8|mp4|m4a|mp3)/.test(url)) {
|
||||||
|
input = {
|
||||||
|
parse: 0,
|
||||||
|
jx: 0,
|
||||||
|
url: url,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
input = url && url.startsWith('http') && tellIsJx(url) ? {parse:0,jx:1,url:url}:input;
|
||||||
|
}`;
|
||||||
|
// 默认嗅探播放
|
||||||
|
|
||||||
|
let def_lazy = `js:
|
||||||
|
input = { parse: 1, url: input, js: '' };`;
|
||||||
|
// 采集站播放
|
||||||
|
|
||||||
|
let cj_lazy = `js:
|
||||||
|
if (/\\.(m3u8|mp4)/.test(input)) {
|
||||||
|
input = { parse: 0, url: input };
|
||||||
|
} else {
|
||||||
|
if (rule.parse_url.startsWith('json:')) {
|
||||||
|
let purl = rule.parse_url.replace('json:', '') + input;
|
||||||
|
let html = request(purl);
|
||||||
|
let json = JSON.parse(html);
|
||||||
|
if (json.url) {
|
||||||
|
input = { parse: 0, url: json.url };
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
input = rule.parse_url + input;
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
|
function getMubans() {
|
||||||
|
const mubanDict = { // 模板字典
|
||||||
|
mx: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/vodshow/fyclass--------fypage---/',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---/',
|
||||||
|
class_parse: '.top_nav li;a&&Text;a&&href;.*/(.*?)/',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable: 0,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true,
|
||||||
|
推荐: '.cbox_list;*;*;*;*;*',
|
||||||
|
一级: 'ul.vodlist li;a&&title;a&&data-original;.pic_text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: 'h2&&Text;.content_detail:eq(1)&&li&&a:eq(2)&&Text',
|
||||||
|
img: '.vodlist_thumb&&data-original',
|
||||||
|
desc: '.content_detail:eq(1)&&li:eq(1)&&Text;.content_detail:eq(1)&&li&&a&&Text;.content_detail:eq(1)&&li&&a:eq(1)&&Text;.content_detail:eq(1)&&li:eq(2)&&Text;.content_detail:eq(1)&&li:eq(3)&&Text',
|
||||||
|
content: '.content_desc&&span&&Text',
|
||||||
|
tabs: '.play_source_tab&&a',
|
||||||
|
lists: '.content_playlist:eq(#id) li',
|
||||||
|
},
|
||||||
|
搜索: '*',
|
||||||
|
},
|
||||||
|
mxpro: {
|
||||||
|
title: '',
|
||||||
|
host: '', // homeUrl:'/',
|
||||||
|
url: '/vodshow/fyclass--------fypage---.html',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
headers: { //网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
|
||||||
|
},
|
||||||
|
class_parse: '.navbar-items li:gt(0):lt(10);a&&Text;a&&href;/(\\d+)',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||||
|
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: 'h1&&Text;.module-info-tag-link:eq(-1)&&Text',
|
||||||
|
img: '.lazyload&&data-original||data-src||src',
|
||||||
|
desc: '.module-info-item:eq(-2)&&Text;.module-info-tag-link&&Text;.module-info-tag-link:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(1)&&Text',
|
||||||
|
content: '.module-info-introduction&&Text',
|
||||||
|
tabs: '.module-tab-item',
|
||||||
|
lists: '.module-play-list:eq(#id) a',
|
||||||
|
tab_text: 'div--small&&Text',
|
||||||
|
},
|
||||||
|
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
||||||
|
},
|
||||||
|
mxone5: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/show/fyclass--------fypage---.html',
|
||||||
|
searchUrl: '/search/**----------fypage---.html',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?)\.html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: 'h1&&Text;.tag-link&&Text',
|
||||||
|
img: '.module-item-pic&&img&&data-src',
|
||||||
|
desc: '.video-info-items:eq(3)&&Text;.tag-link:eq(2)&&Text;.tag-link:eq(1)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text',
|
||||||
|
content: '.vod_content&&Text',
|
||||||
|
tabs: '.module-tab-item',
|
||||||
|
lists: '.module-player-list:eq(#id)&&.scroll-content&&a',
|
||||||
|
tab_text: 'div--small&&Text',
|
||||||
|
},
|
||||||
|
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||||
|
},
|
||||||
|
首图: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/vodshow/fyclass--------fypage---/',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
headers: { //网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
|
||||||
|
},
|
||||||
|
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: '.myui-content__detail .title--span&&Text;.myui-content__detail p.data:eq(3)&&Text',
|
||||||
|
img: '.myui-content__thumb .lazyload&&data-original',
|
||||||
|
desc: '.myui-content__detail p.otherbox&&Text;.year&&Text;.myui-content__detail p.data:eq(4)&&Text;.myui-content__detail p.data:eq(2)&&Text;.myui-content__detail p.data:eq(0)&&Text',
|
||||||
|
content: '.content&&Text',
|
||||||
|
tabs: '.myui-panel__head&&li',
|
||||||
|
// tabs: '.nav-tabs&&li',
|
||||||
|
lists: '.myui-content__list:eq(#id) li',
|
||||||
|
},
|
||||||
|
搜索: '#searchList li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href;.detail&&Text',
|
||||||
|
},
|
||||||
|
首图2: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/list/fyclass-fypage.html',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'UC_UA', // "Cookie": ""
|
||||||
|
},
|
||||||
|
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: '.stui-content__detail .title&&Text;.stui-content__detail&&p:eq(-2)&&a&&Text',
|
||||||
|
title1: '.stui-content__detail .title&&Text;.stui-content__detail&&p&&Text',
|
||||||
|
img: '.stui-content__thumb .lazyload&&data-original',
|
||||||
|
desc: '.stui-content__detail p&&Text;.stui-content__detail&&p:eq(-2)&&a:eq(2)&&Text;.stui-content__detail&&p:eq(-2)&&a:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text;.stui-content__detail p:eq(1)&&Text',
|
||||||
|
desc1: '.stui-content__detail p:eq(4)&&Text;;;.stui-content__detail p:eq(1)&&Text',
|
||||||
|
content: '.detail&&Text',
|
||||||
|
tabs: '.stui-pannel__head h3',
|
||||||
|
tabs1: '.stui-vodlist__head h3',
|
||||||
|
lists: '.stui-content__playlist:eq(#id) li',
|
||||||
|
},
|
||||||
|
搜索: 'ul.stui-vodlist__media,ul.stui-vodlist,#searchList li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href;.detail&&Text',
|
||||||
|
},
|
||||||
|
默认: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '',
|
||||||
|
searchUrl: '',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable: 0,
|
||||||
|
filter: '',
|
||||||
|
filter_url: '',
|
||||||
|
filter_def: {},
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_parse: '#side-menu li;a&&Text;a&&href;/(.*?)\.html',
|
||||||
|
cate_exclude: '',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: def_lazy,
|
||||||
|
double: true,
|
||||||
|
推荐: '列表1;列表2;标题;图片;描述;链接;详情',
|
||||||
|
一级: '列表;标题;图片;描述;链接;详情',
|
||||||
|
二级: {
|
||||||
|
title: 'vod_name;vod_type',
|
||||||
|
img: '图片链接',
|
||||||
|
desc: '主要信息;年代;地区;演员;导演',
|
||||||
|
content: '简介',
|
||||||
|
tabs: '',
|
||||||
|
lists: 'xx:eq(#id)&&a',
|
||||||
|
tab_text: 'body&&Text',
|
||||||
|
list_text: 'body&&Text',
|
||||||
|
list_url: 'a&&href',
|
||||||
|
},
|
||||||
|
搜索: '列表;标题;图片;描述;链接;详情',
|
||||||
|
},
|
||||||
|
vfed: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||||
|
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'UC_UA',
|
||||||
|
},
|
||||||
|
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||||
|
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: 'h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text',
|
||||||
|
img: '.fed-list-info&&a&&data-original',
|
||||||
|
desc: '.fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text',
|
||||||
|
content: '.fed-part-esan&&Text',
|
||||||
|
tabs: '.fed-drop-boxs&&.fed-part-rows&&li',
|
||||||
|
lists: '.fed-play-item:eq(#id)&&ul:eq(1)&&li',
|
||||||
|
},
|
||||||
|
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
||||||
|
},
|
||||||
|
海螺3: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
searchUrl: '/v_search/**----------fypage---.html',
|
||||||
|
url: '/vod_____show/fyclass--------fypage---.html',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
cate_exclude: '明星|专题|最新|排行',
|
||||||
|
limit: 40,
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
double: true,
|
||||||
|
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||||
|
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: '.hl-dc-title&&Text;.hl-dc-content&&li:eq(6)&&Text',
|
||||||
|
img: '.hl-lazy&&data-original',
|
||||||
|
desc: '.hl-dc-content&&li:eq(10)&&Text;.hl-dc-content&&li:eq(4)&&Text;.hl-dc-content&&li:eq(5)&&Text;.hl-dc-content&&li:eq(2)&&Text;.hl-dc-content&&li:eq(3)&&Text',
|
||||||
|
content: '.hl-content-text&&Text',
|
||||||
|
tabs: '.hl-tabs&&a',
|
||||||
|
tab_text: 'a--span&&Text',
|
||||||
|
lists: '.hl-plays-list:eq(#id)&&li',
|
||||||
|
},
|
||||||
|
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
},
|
||||||
|
海螺2: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
||||||
|
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
||||||
|
limit: 40,
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
double: true,
|
||||||
|
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
||||||
|
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: 'h2&&Text;.deployment&&Text',
|
||||||
|
img: '.lazy&&data-original',
|
||||||
|
desc: '.deployment&&Text',
|
||||||
|
content: '.ec-show&&Text',
|
||||||
|
tabs: '#tag&&a',
|
||||||
|
lists: '.play_list_box:eq(#id)&&li',
|
||||||
|
},
|
||||||
|
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
},
|
||||||
|
短视: {
|
||||||
|
title: '',
|
||||||
|
host: '', // homeUrl:'/',
|
||||||
|
url: '/channel/fyclass-fypage.html',
|
||||||
|
searchUrl: '/search.html?wd=**',
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 0, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
headers: { //网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
|
||||||
|
},
|
||||||
|
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
cate_exclude: '解析|动态',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||||
|
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
title: 'h1&&Text;.content-rt&&p:eq(0)&&Text',
|
||||||
|
img: '.img&&img&&data-src',
|
||||||
|
desc: '.content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text',
|
||||||
|
content: '.zkjj_a&&Text',
|
||||||
|
tabs: '.py-tabs&&option',
|
||||||
|
lists: '.player:eq(#id) li',
|
||||||
|
},
|
||||||
|
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
||||||
|
},
|
||||||
|
短视2: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
class_name: '电影&电视剧&综艺&动漫',
|
||||||
|
class_url: '1&2&3&4',
|
||||||
|
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
url: '/index.php/api/vod#type=fyclass&page=fypage',
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
filter_url: '',
|
||||||
|
filter: {},
|
||||||
|
filter_def: {},
|
||||||
|
detailUrl: '/index.php/vod/detail/id/fyid.html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: common_lazy,
|
||||||
|
limit: 6,
|
||||||
|
推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
|
||||||
|
一级: 'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list.map(function(it){it.vod_pic=urljoin2(input.split("/i")[0],it.vod_pic);return it});',
|
||||||
|
二级: {
|
||||||
|
title: '.slide-info-title&&Text;.slide-info:eq(2)--strong&&Text',
|
||||||
|
img: '.detail-pic&&data-original',
|
||||||
|
desc: '.slide-info-remarks&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(1)--strong&&Text;.info-parameter&&ul&&li:eq(3)&&Text',
|
||||||
|
content: '#height_limit&&Text',
|
||||||
|
tabs: '.anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a',
|
||||||
|
tab_text: 'a--span&&Text',
|
||||||
|
lists: '.anthology-list-box:eq(#id) li',
|
||||||
|
},
|
||||||
|
搜索: 'json:list;name;pic;;id',
|
||||||
|
},
|
||||||
|
采集1: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
homeTid: '13',
|
||||||
|
homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
|
||||||
|
detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
|
||||||
|
searchUrl: '/api.php/provide/vod/?wd=**&pg=fypage',
|
||||||
|
url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyclass',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout: 5000, // class_name: '电影&电视剧&综艺&动漫',
|
||||||
|
// class_url: '1&2&3&4',
|
||||||
|
// class_parse:'js:let html=request(input);input=JSON.parse(html).class;',
|
||||||
|
class_parse: 'json:class;',
|
||||||
|
limit: 20,
|
||||||
|
multi: 1,
|
||||||
|
searchable: 2, //是否启用全局搜索,
|
||||||
|
quickSearch: 1, //是否启用快速搜索,
|
||||||
|
filterable: 0, //是否启用分类筛选,
|
||||||
|
play_parse: true,
|
||||||
|
parse_url: '',
|
||||||
|
lazy: cj_lazy,
|
||||||
|
推荐: '*',
|
||||||
|
一级: 'json:list;vod_name;vod_pic;vod_remarks;vod_id;vod_play_from',
|
||||||
|
二级: `js:
|
||||||
|
let html=request(input);
|
||||||
|
html=JSON.parse(html);
|
||||||
|
let data=html.list;
|
||||||
|
VOD=data[0];`,
|
||||||
|
搜索: '*',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return JSON.parse(JSON.stringify(mubanDict));
|
||||||
|
}
|
||||||
|
|
||||||
|
var mubanDict = getMubans();
|
||||||
|
var muban = getMubans();
|
||||||
|
export default {
|
||||||
|
muban,
|
||||||
|
getMubans
|
||||||
|
};
|
||||||
843
jtxtv09/js/芒果视频.js
Normal file
843
jtxtv09/js/芒果视频.js
Normal file
@@ -0,0 +1,843 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '百忙无果[官]',
|
||||||
|
host: 'https://pianku.api.%6d%67%74%76.com',
|
||||||
|
homeUrl: '',
|
||||||
|
// searchUrl: 'https://mobileso.bz.%6d%67%74%76.com/pc/search/v1?q=**&pn=fypage&pc=10',
|
||||||
|
// 新版接口搜索变成v2并且加了验证,蛋疼
|
||||||
|
// searchUrl: 'https://mobileso.bz.mgtv.com/pc/search/v2?allowedRC=1&src=mgtv&did=cf03b959-6945-4cb6-bcb3-88762459354d×tamp=2024-06-21T15%3A52%3A55Z&signVersion=1&signNonce=8dae67a1fafc4bda984ec8deb47666ad&q=**&pn=fypage&pc=10&corr=1&_support=10000000&signature=4e27fddcd2a1a66d6c1764ed6b74bab7',
|
||||||
|
// 用手机的吧,搞不定这个
|
||||||
|
searchUrl: 'https://mobileso.bz.%6d%67%74%76.com/msite/search/v2?q=**&pn=fypage&pc=10',
|
||||||
|
detailUrl: 'https://pcweb.api.mgtv.com/episode/list?page=1&size=50&video_id=fyid',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable: 1,
|
||||||
|
multi: 1,
|
||||||
|
// 分类链接fypage参数支持1个()表达式
|
||||||
|
// https://www.mgtv.com/lib/3?lastp=list_index&kind=a1&year=all&chargeInfo=a1&sort=c2
|
||||||
|
url: '/rider/list/pcweb/v3?platform=pcweb&channelId=fyclass&pn=fypage&pc=80&hudong=1&_support=10000000&kind=a1&area=a1',
|
||||||
|
filter_url: 'year={{fl.year or "all"}}&sort={{fl.sort or "all"}}&chargeInfo={{fl.chargeInfo or "all"}}',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'PC_UA'
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_name: '电视剧&电影&综艺&动漫&纪录片&教育&少儿',
|
||||||
|
class_url: '2&3&1&50&51&115&10',
|
||||||
|
filter: {
|
||||||
|
"1": [{
|
||||||
|
"key": "chargeInfo",
|
||||||
|
"name": "付费类型",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "免费",
|
||||||
|
"v": "b1"
|
||||||
|
}, {
|
||||||
|
"n": "vip",
|
||||||
|
"v": "b2"
|
||||||
|
}, {
|
||||||
|
"n": "VIP用券",
|
||||||
|
"v": "b3"
|
||||||
|
}, {
|
||||||
|
"n": "付费点播",
|
||||||
|
"v": "b4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "sort",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [{
|
||||||
|
"n": "最新",
|
||||||
|
"v": "c1"
|
||||||
|
}, {
|
||||||
|
"n": "最热",
|
||||||
|
"v": "c2"
|
||||||
|
}, {
|
||||||
|
"n": "知乎高分",
|
||||||
|
"v": "c4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "year",
|
||||||
|
"name": "年代",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "2025",
|
||||||
|
"v": "2025"
|
||||||
|
}, {
|
||||||
|
"n": "2024",
|
||||||
|
"v": "2024"
|
||||||
|
}, {
|
||||||
|
"n": "2023",
|
||||||
|
"v": "2023"
|
||||||
|
}, {
|
||||||
|
"n": "2022",
|
||||||
|
"v": "2022"
|
||||||
|
}, {
|
||||||
|
"n": "2021",
|
||||||
|
"v": "2021"
|
||||||
|
}, {
|
||||||
|
"n": "2020",
|
||||||
|
"v": "2020"
|
||||||
|
}, {
|
||||||
|
"n": "2019",
|
||||||
|
"v": "2019"
|
||||||
|
}, {
|
||||||
|
"n": "2018",
|
||||||
|
"v": "2018"
|
||||||
|
}, {
|
||||||
|
"n": "2017",
|
||||||
|
"v": "2017"
|
||||||
|
}, {
|
||||||
|
"n": "2016",
|
||||||
|
"v": "2016"
|
||||||
|
}, {
|
||||||
|
"n": "2015",
|
||||||
|
"v": "2015"
|
||||||
|
}, {
|
||||||
|
"n": "2014",
|
||||||
|
"v": "2014"
|
||||||
|
}, {
|
||||||
|
"n": "2013",
|
||||||
|
"v": "2013"
|
||||||
|
}, {
|
||||||
|
"n": "2012",
|
||||||
|
"v": "2012"
|
||||||
|
}, {
|
||||||
|
"n": "2011",
|
||||||
|
"v": "2011"
|
||||||
|
}, {
|
||||||
|
"n": "2010",
|
||||||
|
"v": "2010"
|
||||||
|
}, {
|
||||||
|
"n": "2009",
|
||||||
|
"v": "2009"
|
||||||
|
}, {
|
||||||
|
"n": "2008",
|
||||||
|
"v": "2008"
|
||||||
|
}, {
|
||||||
|
"n": "2007",
|
||||||
|
"v": "2007"
|
||||||
|
}, {
|
||||||
|
"n": "2006",
|
||||||
|
"v": "2006"
|
||||||
|
}, {
|
||||||
|
"n": "2005",
|
||||||
|
"v": "2005"
|
||||||
|
}, {
|
||||||
|
"n": "2004",
|
||||||
|
"v": "2004"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"2": [{
|
||||||
|
"key": "chargeInfo",
|
||||||
|
"name": "付费类型",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "免费",
|
||||||
|
"v": "b1"
|
||||||
|
}, {
|
||||||
|
"n": "vip",
|
||||||
|
"v": "b2"
|
||||||
|
}, {
|
||||||
|
"n": "VIP用券",
|
||||||
|
"v": "b3"
|
||||||
|
}, {
|
||||||
|
"n": "付费点播",
|
||||||
|
"v": "b4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "sort",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [{
|
||||||
|
"n": "最新",
|
||||||
|
"v": "c1"
|
||||||
|
}, {
|
||||||
|
"n": "最热",
|
||||||
|
"v": "c2"
|
||||||
|
}, {
|
||||||
|
"n": "知乎高分",
|
||||||
|
"v": "c4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "year",
|
||||||
|
"name": "年代",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "2025",
|
||||||
|
"v": "2025"
|
||||||
|
}, {
|
||||||
|
"n": "2024",
|
||||||
|
"v": "2024"
|
||||||
|
}, {
|
||||||
|
"n": "2023",
|
||||||
|
"v": "2023"
|
||||||
|
}, {
|
||||||
|
"n": "2022",
|
||||||
|
"v": "2022"
|
||||||
|
}, {
|
||||||
|
"n": "2021",
|
||||||
|
"v": "2021"
|
||||||
|
}, {
|
||||||
|
"n": "2020",
|
||||||
|
"v": "2020"
|
||||||
|
}, {
|
||||||
|
"n": "2019",
|
||||||
|
"v": "2019"
|
||||||
|
}, {
|
||||||
|
"n": "2018",
|
||||||
|
"v": "2018"
|
||||||
|
}, {
|
||||||
|
"n": "2017",
|
||||||
|
"v": "2017"
|
||||||
|
}, {
|
||||||
|
"n": "2016",
|
||||||
|
"v": "2016"
|
||||||
|
}, {
|
||||||
|
"n": "2015",
|
||||||
|
"v": "2015"
|
||||||
|
}, {
|
||||||
|
"n": "2014",
|
||||||
|
"v": "2014"
|
||||||
|
}, {
|
||||||
|
"n": "2013",
|
||||||
|
"v": "2013"
|
||||||
|
}, {
|
||||||
|
"n": "2012",
|
||||||
|
"v": "2012"
|
||||||
|
}, {
|
||||||
|
"n": "2011",
|
||||||
|
"v": "2011"
|
||||||
|
}, {
|
||||||
|
"n": "2010",
|
||||||
|
"v": "2010"
|
||||||
|
}, {
|
||||||
|
"n": "2009",
|
||||||
|
"v": "2009"
|
||||||
|
}, {
|
||||||
|
"n": "2008",
|
||||||
|
"v": "2008"
|
||||||
|
}, {
|
||||||
|
"n": "2007",
|
||||||
|
"v": "2007"
|
||||||
|
}, {
|
||||||
|
"n": "2006",
|
||||||
|
"v": "2006"
|
||||||
|
}, {
|
||||||
|
"n": "2005",
|
||||||
|
"v": "2005"
|
||||||
|
}, {
|
||||||
|
"n": "2004",
|
||||||
|
"v": "2004"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"3": [{
|
||||||
|
"key": "chargeInfo",
|
||||||
|
"name": "付费类型",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "免费",
|
||||||
|
"v": "b1"
|
||||||
|
}, {
|
||||||
|
"n": "vip",
|
||||||
|
"v": "b2"
|
||||||
|
}, {
|
||||||
|
"n": "VIP用券",
|
||||||
|
"v": "b3"
|
||||||
|
}, {
|
||||||
|
"n": "付费点播",
|
||||||
|
"v": "b4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "sort",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [{
|
||||||
|
"n": "最新",
|
||||||
|
"v": "c1"
|
||||||
|
}, {
|
||||||
|
"n": "最热",
|
||||||
|
"v": "c2"
|
||||||
|
}, {
|
||||||
|
"n": "知乎高分",
|
||||||
|
"v": "c4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "year",
|
||||||
|
"name": "年代",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "2025",
|
||||||
|
"v": "2025"
|
||||||
|
}, {
|
||||||
|
"n": "2024",
|
||||||
|
"v": "2024"
|
||||||
|
}, {
|
||||||
|
"n": "2023",
|
||||||
|
"v": "2023"
|
||||||
|
}, {
|
||||||
|
"n": "2022",
|
||||||
|
"v": "2022"
|
||||||
|
}, {
|
||||||
|
"n": "2021",
|
||||||
|
"v": "2021"
|
||||||
|
}, {
|
||||||
|
"n": "2020",
|
||||||
|
"v": "2020"
|
||||||
|
}, {
|
||||||
|
"n": "2019",
|
||||||
|
"v": "2019"
|
||||||
|
}, {
|
||||||
|
"n": "2018",
|
||||||
|
"v": "2018"
|
||||||
|
}, {
|
||||||
|
"n": "2017",
|
||||||
|
"v": "2017"
|
||||||
|
}, {
|
||||||
|
"n": "2016",
|
||||||
|
"v": "2016"
|
||||||
|
}, {
|
||||||
|
"n": "2015",
|
||||||
|
"v": "2015"
|
||||||
|
}, {
|
||||||
|
"n": "2014",
|
||||||
|
"v": "2014"
|
||||||
|
}, {
|
||||||
|
"n": "2013",
|
||||||
|
"v": "2013"
|
||||||
|
}, {
|
||||||
|
"n": "2012",
|
||||||
|
"v": "2012"
|
||||||
|
}, {
|
||||||
|
"n": "2011",
|
||||||
|
"v": "2011"
|
||||||
|
}, {
|
||||||
|
"n": "2010",
|
||||||
|
"v": "2010"
|
||||||
|
}, {
|
||||||
|
"n": "2009",
|
||||||
|
"v": "2009"
|
||||||
|
}, {
|
||||||
|
"n": "2008",
|
||||||
|
"v": "2008"
|
||||||
|
}, {
|
||||||
|
"n": "2007",
|
||||||
|
"v": "2007"
|
||||||
|
}, {
|
||||||
|
"n": "2006",
|
||||||
|
"v": "2006"
|
||||||
|
}, {
|
||||||
|
"n": "2005",
|
||||||
|
"v": "2005"
|
||||||
|
}, {
|
||||||
|
"n": "2004",
|
||||||
|
"v": "2004"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"50": [{
|
||||||
|
"key": "chargeInfo",
|
||||||
|
"name": "付费类型",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "免费",
|
||||||
|
"v": "b1"
|
||||||
|
}, {
|
||||||
|
"n": "vip",
|
||||||
|
"v": "b2"
|
||||||
|
}, {
|
||||||
|
"n": "VIP用券",
|
||||||
|
"v": "b3"
|
||||||
|
}, {
|
||||||
|
"n": "付费点播",
|
||||||
|
"v": "b4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "sort",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [{
|
||||||
|
"n": "最新",
|
||||||
|
"v": "c1"
|
||||||
|
}, {
|
||||||
|
"n": "最热",
|
||||||
|
"v": "c2"
|
||||||
|
}, {
|
||||||
|
"n": "知乎高分",
|
||||||
|
"v": "c4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "year",
|
||||||
|
"name": "年代",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "2025",
|
||||||
|
"v": "2025"
|
||||||
|
}, {
|
||||||
|
"n": "2024",
|
||||||
|
"v": "2024"
|
||||||
|
}, {
|
||||||
|
"n": "2023",
|
||||||
|
"v": "2023"
|
||||||
|
}, {
|
||||||
|
"n": "2022",
|
||||||
|
"v": "2022"
|
||||||
|
}, {
|
||||||
|
"n": "2021",
|
||||||
|
"v": "2021"
|
||||||
|
}, {
|
||||||
|
"n": "2020",
|
||||||
|
"v": "2020"
|
||||||
|
}, {
|
||||||
|
"n": "2019",
|
||||||
|
"v": "2019"
|
||||||
|
}, {
|
||||||
|
"n": "2018",
|
||||||
|
"v": "2018"
|
||||||
|
}, {
|
||||||
|
"n": "2017",
|
||||||
|
"v": "2017"
|
||||||
|
}, {
|
||||||
|
"n": "2016",
|
||||||
|
"v": "2016"
|
||||||
|
}, {
|
||||||
|
"n": "2015",
|
||||||
|
"v": "2015"
|
||||||
|
}, {
|
||||||
|
"n": "2014",
|
||||||
|
"v": "2014"
|
||||||
|
}, {
|
||||||
|
"n": "2013",
|
||||||
|
"v": "2013"
|
||||||
|
}, {
|
||||||
|
"n": "2012",
|
||||||
|
"v": "2012"
|
||||||
|
}, {
|
||||||
|
"n": "2011",
|
||||||
|
"v": "2011"
|
||||||
|
}, {
|
||||||
|
"n": "2010",
|
||||||
|
"v": "2010"
|
||||||
|
}, {
|
||||||
|
"n": "2009",
|
||||||
|
"v": "2009"
|
||||||
|
}, {
|
||||||
|
"n": "2008",
|
||||||
|
"v": "2008"
|
||||||
|
}, {
|
||||||
|
"n": "2007",
|
||||||
|
"v": "2007"
|
||||||
|
}, {
|
||||||
|
"n": "2006",
|
||||||
|
"v": "2006"
|
||||||
|
}, {
|
||||||
|
"n": "2005",
|
||||||
|
"v": "2005"
|
||||||
|
}, {
|
||||||
|
"n": "2004",
|
||||||
|
"v": "2004"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"51": [{
|
||||||
|
"key": "chargeInfo",
|
||||||
|
"name": "付费类型",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "免费",
|
||||||
|
"v": "b1"
|
||||||
|
}, {
|
||||||
|
"n": "vip",
|
||||||
|
"v": "b2"
|
||||||
|
}, {
|
||||||
|
"n": "VIP用券",
|
||||||
|
"v": "b3"
|
||||||
|
}, {
|
||||||
|
"n": "付费点播",
|
||||||
|
"v": "b4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "sort",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [{
|
||||||
|
"n": "最新",
|
||||||
|
"v": "c1"
|
||||||
|
}, {
|
||||||
|
"n": "最热",
|
||||||
|
"v": "c2"
|
||||||
|
}, {
|
||||||
|
"n": "知乎高分",
|
||||||
|
"v": "c4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "year",
|
||||||
|
"name": "年代",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "2025",
|
||||||
|
"v": "2025"
|
||||||
|
}, {
|
||||||
|
"n": "2024",
|
||||||
|
"v": "2024"
|
||||||
|
}, {
|
||||||
|
"n": "2023",
|
||||||
|
"v": "2023"
|
||||||
|
}, {
|
||||||
|
"n": "2022",
|
||||||
|
"v": "2022"
|
||||||
|
}, {
|
||||||
|
"n": "2021",
|
||||||
|
"v": "2021"
|
||||||
|
}, {
|
||||||
|
"n": "2020",
|
||||||
|
"v": "2020"
|
||||||
|
}, {
|
||||||
|
"n": "2019",
|
||||||
|
"v": "2019"
|
||||||
|
}, {
|
||||||
|
"n": "2018",
|
||||||
|
"v": "2018"
|
||||||
|
}, {
|
||||||
|
"n": "2017",
|
||||||
|
"v": "2017"
|
||||||
|
}, {
|
||||||
|
"n": "2016",
|
||||||
|
"v": "2016"
|
||||||
|
}, {
|
||||||
|
"n": "2015",
|
||||||
|
"v": "2015"
|
||||||
|
}, {
|
||||||
|
"n": "2014",
|
||||||
|
"v": "2014"
|
||||||
|
}, {
|
||||||
|
"n": "2013",
|
||||||
|
"v": "2013"
|
||||||
|
}, {
|
||||||
|
"n": "2012",
|
||||||
|
"v": "2012"
|
||||||
|
}, {
|
||||||
|
"n": "2011",
|
||||||
|
"v": "2011"
|
||||||
|
}, {
|
||||||
|
"n": "2010",
|
||||||
|
"v": "2010"
|
||||||
|
}, {
|
||||||
|
"n": "2009",
|
||||||
|
"v": "2009"
|
||||||
|
}, {
|
||||||
|
"n": "2008",
|
||||||
|
"v": "2008"
|
||||||
|
}, {
|
||||||
|
"n": "2007",
|
||||||
|
"v": "2007"
|
||||||
|
}, {
|
||||||
|
"n": "2006",
|
||||||
|
"v": "2006"
|
||||||
|
}, {
|
||||||
|
"n": "2005",
|
||||||
|
"v": "2005"
|
||||||
|
}, {
|
||||||
|
"n": "2004",
|
||||||
|
"v": "2004"
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"115": [{
|
||||||
|
"key": "chargeInfo",
|
||||||
|
"name": "付费类型",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "免费",
|
||||||
|
"v": "b1"
|
||||||
|
}, {
|
||||||
|
"n": "vip",
|
||||||
|
"v": "b2"
|
||||||
|
}, {
|
||||||
|
"n": "VIP用券",
|
||||||
|
"v": "b3"
|
||||||
|
}, {
|
||||||
|
"n": "付费点播",
|
||||||
|
"v": "b4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "sort",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [{
|
||||||
|
"n": "最新",
|
||||||
|
"v": "c1"
|
||||||
|
}, {
|
||||||
|
"n": "最热",
|
||||||
|
"v": "c2"
|
||||||
|
}, {
|
||||||
|
"n": "知乎高分",
|
||||||
|
"v": "c4"
|
||||||
|
}]
|
||||||
|
}, {
|
||||||
|
"key": "year",
|
||||||
|
"name": "年代",
|
||||||
|
"value": [{
|
||||||
|
"n": "全部",
|
||||||
|
"v": "all"
|
||||||
|
}, {
|
||||||
|
"n": "2025",
|
||||||
|
"v": "2025"
|
||||||
|
}, {
|
||||||
|
"n": "2024",
|
||||||
|
"v": "2024"
|
||||||
|
}, {
|
||||||
|
"n": "2023",
|
||||||
|
"v": "2023"
|
||||||
|
}, {
|
||||||
|
"n": "2022",
|
||||||
|
"v": "2022"
|
||||||
|
}, {
|
||||||
|
"n": "2021",
|
||||||
|
"v": "2021"
|
||||||
|
}, {
|
||||||
|
"n": "2020",
|
||||||
|
"v": "2020"
|
||||||
|
}, {
|
||||||
|
"n": "2019",
|
||||||
|
"v": "2019"
|
||||||
|
}, {
|
||||||
|
"n": "2018",
|
||||||
|
"v": "2018"
|
||||||
|
}, {
|
||||||
|
"n": "2017",
|
||||||
|
"v": "2017"
|
||||||
|
}, {
|
||||||
|
"n": "2016",
|
||||||
|
"v": "2016"
|
||||||
|
}, {
|
||||||
|
"n": "2015",
|
||||||
|
"v": "2015"
|
||||||
|
}, {
|
||||||
|
"n": "2014",
|
||||||
|
"v": "2014"
|
||||||
|
}, {
|
||||||
|
"n": "2013",
|
||||||
|
"v": "2013"
|
||||||
|
}, {
|
||||||
|
"n": "2012",
|
||||||
|
"v": "2012"
|
||||||
|
}, {
|
||||||
|
"n": "2011",
|
||||||
|
"v": "2011"
|
||||||
|
}, {
|
||||||
|
"n": "2010",
|
||||||
|
"v": "2010"
|
||||||
|
}, {
|
||||||
|
"n": "2009",
|
||||||
|
"v": "2009"
|
||||||
|
}, {
|
||||||
|
"n": "2008",
|
||||||
|
"v": "2008"
|
||||||
|
}, {
|
||||||
|
"n": "2007",
|
||||||
|
"v": "2007"
|
||||||
|
}, {
|
||||||
|
"n": "2006",
|
||||||
|
"v": "2006"
|
||||||
|
}, {
|
||||||
|
"n": "2005",
|
||||||
|
"v": "2005"
|
||||||
|
}, {
|
||||||
|
"n": "2004",
|
||||||
|
"v": "2004"
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
limit: 20,
|
||||||
|
play_parse: true,
|
||||||
|
lazy: $js.toString(() => {
|
||||||
|
try {
|
||||||
|
let api = "" + input.split("?")[0];
|
||||||
|
console.log(api);
|
||||||
|
let response = fetch(api, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'okhttp/3.14.9',
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let bata = JSON.parse(response);
|
||||||
|
if (bata.url.includes("mgtv")) {
|
||||||
|
input = {
|
||||||
|
parse: 0,
|
||||||
|
url: bata.url,
|
||||||
|
jx: 0,
|
||||||
|
danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
input = {
|
||||||
|
parse: 0,
|
||||||
|
url: input.split("?")[0],
|
||||||
|
jx: 1,
|
||||||
|
danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
input = {
|
||||||
|
parse: 0,
|
||||||
|
url: input.split("?")[0],
|
||||||
|
jx: 1,
|
||||||
|
danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
// lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};',
|
||||||
|
// 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
一级: 'json:data.hitDocs;title;img;updateInfo||rightCorner.text;playPartId',
|
||||||
|
// 一级:'json:data.hitDocs;title;img;updateInfo;playPartId',
|
||||||
|
二级: $js.toString(() => {
|
||||||
|
fetch_params.headers.Referer = "https://www.mgtv.com";
|
||||||
|
fetch_params.headers["User-Agent"] = MOBILE_UA;
|
||||||
|
pdfh = jsp.pdfh;
|
||||||
|
pdfa = jsp.pdfa;
|
||||||
|
pd = jsp.pd;
|
||||||
|
VOD = {};
|
||||||
|
let d = [];
|
||||||
|
let html = request(input);
|
||||||
|
let json = JSON.parse(html);
|
||||||
|
let host = "https://www.mgtv.com";
|
||||||
|
let ourl = json.data.list.length > 0 ? json.data.list[0].url : json.data.series[0].url;
|
||||||
|
if (!/^http/.test(ourl)) {
|
||||||
|
ourl = host + ourl
|
||||||
|
}
|
||||||
|
fetch_params.headers["User-Agent"] = MOBILE_UA;
|
||||||
|
html = request(ourl);
|
||||||
|
if (html.includes("window.location =")) {
|
||||||
|
print("开始获取ourl");
|
||||||
|
ourl = pdfh(html, "meta[http-equiv=refresh]&&content").split("url=")[1];
|
||||||
|
print("获取到ourl:" + ourl);
|
||||||
|
html = request(ourl)
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let details = pdfh(html, ".m-details&&Html").replace(/h1>/, "h6>").replace(/div/g, "br");
|
||||||
|
print(details);
|
||||||
|
let actor = "",
|
||||||
|
director = "",
|
||||||
|
time = "";
|
||||||
|
if (/播出时间/.test(details)) {
|
||||||
|
actor = pdfh(html, "p:eq(5)&&Text").substr(0, 25);
|
||||||
|
director = pdfh(html, "p:eq(4)&&Text");
|
||||||
|
time = pdfh(html, "p:eq(3)&&Text")
|
||||||
|
} else {
|
||||||
|
actor = pdfh(html, "p:eq(4)&&Text").substr(0, 25);
|
||||||
|
director = pdfh(html, "p:eq(3)&&Text");
|
||||||
|
time = "已完结"
|
||||||
|
}
|
||||||
|
let _img = pd(html, ".video-img&&img&&src");
|
||||||
|
let JJ = pdfh(html, ".desc&&Text").split("简介:")[1];
|
||||||
|
let _desc = time;
|
||||||
|
VOD.vod_name = pdfh(html, ".vt-txt&&Text");
|
||||||
|
VOD.type_name = pdfh(html, "p:eq(0)&&Text").substr(0, 6);
|
||||||
|
VOD.vod_area = pdfh(html, "p:eq(1)&&Text");
|
||||||
|
VOD.vod_actor = actor;
|
||||||
|
VOD.vod_director = director;
|
||||||
|
VOD.vod_remarks = _desc;
|
||||||
|
VOD.vod_pic = _img;
|
||||||
|
VOD.vod_content = JJ;
|
||||||
|
if (!VOD.vod_name) {
|
||||||
|
VOD.vod_name = VOD.type_name;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
log("获取影片信息发生错误:" + e.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRjpg(imgUrl, xs) {
|
||||||
|
xs = xs || 3;
|
||||||
|
let picSize = /jpg_/.test(imgUrl) ? imgUrl.split("jpg_")[1].split(".")[0] : false;
|
||||||
|
let rjpg = false;
|
||||||
|
if (picSize) {
|
||||||
|
let a = parseInt(picSize.split("x")[0]) * xs;
|
||||||
|
let b = parseInt(picSize.split("x")[1]) * xs;
|
||||||
|
rjpg = a + "x" + b + ".jpg"
|
||||||
|
}
|
||||||
|
let img = /jpg_/.test(imgUrl) && rjpg ? imgUrl.replace(imgUrl.split("jpg_")[1], rjpg) : imgUrl;
|
||||||
|
return img
|
||||||
|
}
|
||||||
|
|
||||||
|
if (json.data.total === 1 && json.data.list.length === 1) {
|
||||||
|
let data = json.data.list[0];
|
||||||
|
let url = "https://www.mgtv.com" + data.url;
|
||||||
|
d.push({
|
||||||
|
title: data.t4,
|
||||||
|
desc: data.t2,
|
||||||
|
pic_url: getRjpg(data.img),
|
||||||
|
url: url
|
||||||
|
})
|
||||||
|
} else if (json.data.list.length > 1) {
|
||||||
|
for (let i = 1; i <= json.data.total_page; i++) {
|
||||||
|
if (i > 1) {
|
||||||
|
json = JSON.parse(fetch(input.replace("page=1", "page=" + i), {}))
|
||||||
|
}
|
||||||
|
json.data.list.forEach(function(data) {
|
||||||
|
let url = "https://www.mgtv.com" + data.url;
|
||||||
|
if (data.isIntact == "1") {
|
||||||
|
d.push({
|
||||||
|
title: data.t4,
|
||||||
|
desc: data.t2,
|
||||||
|
pic_url: getRjpg(data.img),
|
||||||
|
url: url
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print(input + "暂无片源")
|
||||||
|
}
|
||||||
|
VOD.vod_play_from = "mgtv";
|
||||||
|
VOD.vod_play_url = d.map(function(it) {
|
||||||
|
return it.title + "$" + it.url
|
||||||
|
}).join("#");
|
||||||
|
setResult(d);
|
||||||
|
}),
|
||||||
|
|
||||||
|
搜索: $js.toString(() => {
|
||||||
|
fetch_params.headers.Referer = "https://www.mgtv.com";
|
||||||
|
fetch_params.headers["User-Agent"] = MOBILE_UA;
|
||||||
|
let d = [];
|
||||||
|
let html = request(input);
|
||||||
|
let json = JSON.parse(html);
|
||||||
|
json.data.contents.forEach(function(data) {
|
||||||
|
if (data.type && data.type == 'media') {
|
||||||
|
let item = data.data[0];
|
||||||
|
let desc = item.desc.join(',');
|
||||||
|
let fyclass = '';
|
||||||
|
if (item.source === "imgo") {
|
||||||
|
let img = item.img ? item.img : '';
|
||||||
|
try {
|
||||||
|
fyclass = item.rpt.match(/idx=(.*?)&/)[1] + '$';
|
||||||
|
} catch (e) {
|
||||||
|
log(e.message);
|
||||||
|
fyclass = '';
|
||||||
|
}
|
||||||
|
log(fyclass);
|
||||||
|
d.push({
|
||||||
|
title: item.title.replace(/<B>|<\/B>/g, ''),
|
||||||
|
img: img,
|
||||||
|
content: '',
|
||||||
|
desc: desc,
|
||||||
|
url: fyclass + item.url.match(/.*\/(.*?)\.html/)[1]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
}),
|
||||||
|
}
|
||||||
1651
jtxtv09/js/虎牙直播.js
Normal file
1651
jtxtv09/js/虎牙直播.js
Normal file
File diff suppressed because it is too large
Load Diff
210
jtxtv09/js/金牌影视.py
Normal file
210
jtxtv09/js/金牌影视.py
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# by @嗷呜
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
import uuid
|
||||||
|
import requests
|
||||||
|
sys.path.append('..')
|
||||||
|
from base.spider import Spider
|
||||||
|
import time
|
||||||
|
from Crypto.Hash import MD5, SHA1
|
||||||
|
|
||||||
|
class Spider(Spider):
|
||||||
|
|
||||||
|
def init(self, extend=""):
|
||||||
|
if extend:
|
||||||
|
hosts=json.loads(extend)['site']
|
||||||
|
self.host = self.host_late(hosts)
|
||||||
|
pass
|
||||||
|
|
||||||
|
def getName(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def isVideoFormat(self, url):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def manualVideoCheck(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def homeContent(self, filter):
|
||||||
|
cdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/get/filer/type", headers=self.getheaders()).json()
|
||||||
|
fdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/get/filer/list", headers=self.getheaders()).json()
|
||||||
|
result = {}
|
||||||
|
classes = []
|
||||||
|
filters={}
|
||||||
|
for k in cdata['data']:
|
||||||
|
classes.append({
|
||||||
|
'type_name': k['typeName'],
|
||||||
|
'type_id': str(k['typeId']),
|
||||||
|
})
|
||||||
|
sort_values = [{"n": "最近更新", "v": "2"},{"n": "人气高低", "v": "3"}, {"n": "评分高低", "v": "4"}]
|
||||||
|
for tid, d in fdata['data'].items():
|
||||||
|
current_sort_values = sort_values.copy()
|
||||||
|
if tid == '1':
|
||||||
|
del current_sort_values[0]
|
||||||
|
filters[tid] = [
|
||||||
|
{"key": "type", "name": "类型",
|
||||||
|
"value": [{"n": i["itemText"], "v": i["itemValue"]} for i in d["typeList"]]},
|
||||||
|
|
||||||
|
*([] if not d["plotList"] else [{"key": "v_class", "name": "剧情",
|
||||||
|
"value": [{"n": i["itemText"], "v": i["itemText"]}
|
||||||
|
for i in d["plotList"]]}]),
|
||||||
|
|
||||||
|
{"key": "area", "name": "地区",
|
||||||
|
"value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["districtList"]]},
|
||||||
|
|
||||||
|
{"key": "year", "name": "年份",
|
||||||
|
"value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["yearList"]]},
|
||||||
|
|
||||||
|
{"key": "lang", "name": "语言",
|
||||||
|
"value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["languageList"]]},
|
||||||
|
|
||||||
|
{"key": "sort", "name": "排序", "value": current_sort_values}
|
||||||
|
]
|
||||||
|
result['class'] = classes
|
||||||
|
result['filters'] = filters
|
||||||
|
return result
|
||||||
|
|
||||||
|
def homeVideoContent(self):
|
||||||
|
data1 = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/home/all/list", headers=self.getheaders()).json()
|
||||||
|
data2=self.fetch(f"{self.host}/api/mw-movie/anonymous/home/hotSearch",headers=self.getheaders()).json()
|
||||||
|
data=[]
|
||||||
|
for i in data1['data'].values():
|
||||||
|
data.extend(i['list'])
|
||||||
|
data.extend(data2['data'])
|
||||||
|
vods=self.getvod(data)
|
||||||
|
return {'list':vods}
|
||||||
|
|
||||||
|
def categoryContent(self, tid, pg, filter, extend):
|
||||||
|
|
||||||
|
params = {
|
||||||
|
"area": extend.get('area', ''),
|
||||||
|
"filterStatus": "1",
|
||||||
|
"lang": extend.get('lang', ''),
|
||||||
|
"pageNum": pg,
|
||||||
|
"pageSize": "30",
|
||||||
|
"sort": extend.get('sort', '1'),
|
||||||
|
"sortBy": "1",
|
||||||
|
"type": extend.get('type', ''),
|
||||||
|
"type1": tid,
|
||||||
|
"v_class": extend.get('v_class', ''),
|
||||||
|
"year": extend.get('year', '')
|
||||||
|
}
|
||||||
|
data = self.fetch(f"{self.host}/api/mw-movie/anonymous/video/list?{self.js(params)}", headers=self.getheaders(params)).json()
|
||||||
|
result = {}
|
||||||
|
result['list'] = self.getvod(data['data']['list'])
|
||||||
|
result['page'] = pg
|
||||||
|
result['pagecount'] = 9999
|
||||||
|
result['limit'] = 90
|
||||||
|
result['total'] = 999999
|
||||||
|
return result
|
||||||
|
|
||||||
|
def detailContent(self, ids):
|
||||||
|
data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/detail?id={ids[0]}",headers=self.getheaders({'id':ids[0]})).json()
|
||||||
|
vod=self.getvod([data['data']])[0]
|
||||||
|
vod['vod_play_from']='嗷呜有金牌'
|
||||||
|
vod['vod_play_url'] = '#'.join(
|
||||||
|
f"{i['name'] if len(vod['episodelist']) > 1 else vod['vod_name']}${ids[0]}@@{i['nid']}" for i in
|
||||||
|
vod['episodelist'])
|
||||||
|
vod.pop('episodelist', None)
|
||||||
|
return {'list':[vod]}
|
||||||
|
|
||||||
|
def searchContent(self, key, quick, pg="1"):
|
||||||
|
params = {
|
||||||
|
"keyword": key,
|
||||||
|
"pageNum": pg,
|
||||||
|
"pageSize": "8",
|
||||||
|
"sourceCode": "1"
|
||||||
|
}
|
||||||
|
data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/searchByWord?{self.js(params)}",headers=self.getheaders(params)).json()
|
||||||
|
vods=self.getvod(data['data']['result']['list'])
|
||||||
|
return {'list':vods,'page':pg}
|
||||||
|
|
||||||
|
def playerContent(self, flag, id, vipFlags):
|
||||||
|
self.header = {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36',
|
||||||
|
'sec-ch-ua-platform': '"Windows"',
|
||||||
|
'DNT': '1',
|
||||||
|
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
|
||||||
|
'sec-ch-ua-mobile': '?0',
|
||||||
|
'Origin': self.host,
|
||||||
|
'Referer': f'{self.host}/'
|
||||||
|
}
|
||||||
|
ids=id.split('@@')
|
||||||
|
pdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v2/video/episode/url?clientType=1&id={ids[0]}&nid={ids[1]}",headers=self.getheaders({'clientType':'1','id': ids[0], 'nid': ids[1]})).json()
|
||||||
|
vlist=[]
|
||||||
|
for i in pdata['data']['list']:vlist.extend([i['resolutionName'],i['url']])
|
||||||
|
return {'parse':0,'url':vlist,'header':self.header}
|
||||||
|
|
||||||
|
def localProxy(self, param):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def host_late(self, url_list):
|
||||||
|
if isinstance(url_list, str):
|
||||||
|
urls = [u.strip() for u in url_list.split(',')]
|
||||||
|
else:
|
||||||
|
urls = url_list
|
||||||
|
if len(urls) <= 1:
|
||||||
|
return urls[0] if urls else ''
|
||||||
|
|
||||||
|
results = {}
|
||||||
|
threads = []
|
||||||
|
|
||||||
|
def test_host(url):
|
||||||
|
try:
|
||||||
|
start_time = time.time()
|
||||||
|
response = requests.head(url, timeout=1.0, allow_redirects=False)
|
||||||
|
delay = (time.time() - start_time) * 1000
|
||||||
|
results[url] = delay
|
||||||
|
except Exception as e:
|
||||||
|
results[url] = float('inf')
|
||||||
|
for url in urls:
|
||||||
|
t = threading.Thread(target=test_host, args=(url,))
|
||||||
|
threads.append(t)
|
||||||
|
t.start()
|
||||||
|
for t in threads:
|
||||||
|
t.join()
|
||||||
|
return min(results.items(), key=lambda x: x[1])[0]
|
||||||
|
|
||||||
|
def md5(self, sign_key):
|
||||||
|
md5_hash = MD5.new()
|
||||||
|
md5_hash.update(sign_key.encode('utf-8'))
|
||||||
|
md5_result = md5_hash.hexdigest()
|
||||||
|
return md5_result
|
||||||
|
|
||||||
|
def js(self, param):
|
||||||
|
return '&'.join(f"{k}={v}" for k, v in param.items())
|
||||||
|
|
||||||
|
def getheaders(self, param=None):
|
||||||
|
if param is None:param = {}
|
||||||
|
t=str(int(time.time()*1000))
|
||||||
|
param['key']='cb808529bae6b6be45ecfab29a4889bc'
|
||||||
|
param['t']=t
|
||||||
|
sha1_hash = SHA1.new()
|
||||||
|
sha1_hash.update(self.md5(self.js(param)).encode('utf-8'))
|
||||||
|
sign = sha1_hash.hexdigest()
|
||||||
|
deviceid = str(uuid.uuid4())
|
||||||
|
headers = {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36',
|
||||||
|
'Accept': 'application/json, text/plain, */*',
|
||||||
|
'sign': sign,
|
||||||
|
't': t,
|
||||||
|
'deviceid':deviceid
|
||||||
|
}
|
||||||
|
return headers
|
||||||
|
|
||||||
|
def convert_field_name(self, field):
|
||||||
|
field = field.lower()
|
||||||
|
if field.startswith('vod') and len(field) > 3:
|
||||||
|
field = field.replace('vod', 'vod_')
|
||||||
|
if field.startswith('type') and len(field) > 4:
|
||||||
|
field = field.replace('type', 'type_')
|
||||||
|
return field
|
||||||
|
|
||||||
|
def getvod(self, array):
|
||||||
|
return [{self.convert_field_name(k): v for k, v in item.items()} for item in array]
|
||||||
|
|
||||||
Reference in New Issue
Block a user