Pending changes exported from your codespace

This commit is contained in:
xiaoliu
2024-09-23 01:35:34 +00:00
parent 9a1faa1158
commit b5ace387f0
24 changed files with 3758 additions and 1450 deletions

View File

@@ -24,16 +24,6 @@
"ratio": 1.43 "ratio": 1.43
} }
}, },
{
"key": "天天",
"name": "⛅️天天┃直连",
"type": 3,
"api": "csp_TianTian",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10
},
{ {
"key": "南瓜", "key": "南瓜",
"name": "🎃南瓜┃直连", "name": "🎃南瓜┃直连",
@@ -45,10 +35,10 @@
"timeout": 10 "timeout": 10
}, },
{ {
"key": "小苹果", "key": "文才",
"name": "🍎苹果┃直连", "name": "🌺文才┃在线",
"type": 3, "type": 3,
"api": "csp_Xpg", "api": "csp_Jpys",
"searchable": 1, "searchable": 1,
"quickSearch": 1, "quickSearch": 1,
"filterable": 1, "filterable": 1,
@@ -70,6 +60,26 @@
}, },
"timeout": 30 "timeout": 30
}, },
{
"key": "天天",
"name": "⛅️天天┃直连",
"type": 3,
"api": "csp_TianTian",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10
},
{
"key": "小苹果",
"name": "🍎苹果┃直连",
"type": 3,
"api": "csp_Xpg",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10
},
{ {
"key": "立播弹幕版", "key": "立播弹幕版",
"name": "🐰立播┃在线", "name": "🐰立播┃在线",
@@ -124,38 +134,6 @@
"filterable": 1, "filterable": 1,
"timeout": 10 "timeout": 10
}, },
{
"key": "文才",
"name": "🌺文才┃在线",
"type": 3,
"api": "csp_Jpys",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10
},
{
"key": "河马",
"name": "🦓河马┃在线",
"type": 3,
"api": "csp_Oka",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10,
"ext": "{\"cateUrl\":\"https://www.hemahd.com/tags/{cateId}--------{page}---.html\", \"cate\":\"电影$1#电视剧$2#动漫$3#综艺$4\", \"search\":\"/sou/{search}-------------.html\"}"
},
{
"key": "桃子",
"name": "🍑桃子┃在线",
"type": 3,
"api": "csp_Oka",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10,
"ext": "{\"cateUrl\":\"https://www.taozi007.com/show/{cateId}--------{page}---.html\", \"cate\":\"电影$1#剧集$2#动漫$3#综艺$4#短剧$5\",\"playFrom\":\".module-tab-items .module-tab-item span\",\"playUrl\":\".module-list .module-play-list\", \"search\":\"/search/{search}-------------.html\", \"webview\":1}"
},
{ {
"key": "荐片", "key": "荐片",
"name": "⚔️荐片┃手机", "name": "⚔️荐片┃手机",
@@ -166,16 +144,6 @@
"filterable": 1, "filterable": 1,
"timeout": 10 "timeout": 10
}, },
{
"key": "JOJO",
"name": "🍭JOJO┃直连",
"type": 3,
"api": "csp_Jiohub",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"timeout": 10
},
{ {
"key": "无忧短剧", "key": "无忧短剧",
"name": "🌈无忧┃短剧", "name": "🌈无忧┃短剧",
@@ -296,17 +264,6 @@
"filterable": 1, "filterable": 1,
"timeout": 10 "timeout": 10
}, },
{
"key": "达达龟js",
"name": "🐢达达龟┃在线",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"api": "./api/drpy2.min.txt?file=drpy2.min.js",
"ext": "./txt/dadagui.txt",
"timeout": 15
},
{ {
"key": "ddys_js", "key": "ddys_js",
"name": "🍄低端┃在线", "name": "🍄低端┃在线",
@@ -356,16 +313,6 @@
"changeable": 0, "changeable": 0,
"timeout": 20 "timeout": 20
}, },
{
"key": "追风",
"name": "🍊追风┃采集",
"type": 1,
"api": "http://www.zfsp.cc/api.php/provide/vod",
"searchable": 1,
"filterable": 1,
"changeable": 1,
"timeout": 10
},
{ {
"key": "快手直播", "key": "快手直播",
"name": "😎快手┃直播", "name": "😎快手┃直播",

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -88,14 +88,6 @@
"api": "csp_Tvyb", "api": "csp_Tvyb",
"playerType": 2 "playerType": 2
}, },
{
"key": "freeok",
"name": "🦁freeOK┃独家",
"type": 3,
"changeable": 1,
"click": "document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();",
"api": "csp_FreeOK"
},
{ {
"key": "配置", "key": "配置",
"name": "⚙️网盘┃配置", "name": "⚙️网盘┃配置",
@@ -128,6 +120,18 @@
"changeable": 0, "changeable": 0,
"ext": "./js/guoguo.js" "ext": "./js/guoguo.js"
}, },
{
"key": "摘星",
"name": "✨摘星┃解析",
"type": 3,
"api": "./api/drpy2.min.js",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"order_num": 0,
"changeable": 0,
"ext": "./js/摘星.js"
},
{ {
"key": "csp_NanGua", "key": "csp_NanGua",
"name": "🎃南瓜┃APP", "name": "🎃南瓜┃APP",
@@ -442,7 +446,7 @@
{ {
"name": "反弹", "name": "反弹",
"type": 1, "type": 1,
"url": "http://www.mpanso.com/小米/mying.php?url=", "url": "",
"ext": { "ext": {
"flag": [ "flag": [
"qq", "qq",

File diff suppressed because one or more lines are too long

View File

@@ -1734,4 +1734,4 @@
return es5; return es5;
}))); })));

View File

@@ -1,377 +1,304 @@
if (typeof Object.assign != 'function') { if (typeof Object.assign != 'function') {
Object.assign = function () { Object.assign = function () {
let target = arguments[0]; var target = arguments[0];
for (let i = 1; i < arguments.length; i++) { for (var i = 1; i < arguments.length; i++) {
let source = arguments[i]; var source = arguments[i];
for (let key in source) { for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) { if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key]; target[key] = source[key];
} }
} }
} }
return target; return target;
}; };
} }
function getMubans() {
function getMubans() { var mubanDict = { // 模板字典
var mubanDict = { // 模板字典 mxpro: {
mx: { title: '',
title: '', host: '',
host: '', // homeUrl:'/',
url: '/vodshow/fyclass--------fypage---/', url: '/vodshow/fyclass--------fypage---.html',
searchUrl: '/vodsearch/**----------fypage---/', searchUrl: '/vodsearch/**----------fypage---.html',
class_parse: '.top_nav li;a&&Text;a&&href;.*/(.*?)/', searchable: 2,//是否启用全局搜索,
searchable: 2, quickSearch: 0,//是否启用快速搜索,
quickSearch: 0, filterable: 0,//是否启用分类筛选,
filterable: 0, headers: {//网站的请求头,完整支持所有的,常带ua和cookies
headers: { 'User-Agent': 'MOBILE_UA',
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
}, },
play_parse: true, class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
lazy: '', play_parse: true,
limit: 6, lazy: '',
推荐: '.cbox_list;*;*;*;*;*', 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',
一级: 'ul.vodlist li;a&&title;a&&data-original;.pic_text&&Text;a&&href', double: true, // 推荐内容是否双层定位
: { : 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
title: 'h2&&Text;.detail_list&&ul:eq(1)&&li&&a:eq(2)&&Text', 二级: {
img: '.vodlist_thumb&&data-original', "title": "h1&&Text;.module-info-tag&&Text",
desc: '.content_detail&&li:eq(1)&&Text;.detail_list&&ul:eq(1)&&li&&a&&Text;.detail_list&&ul:eq(1)&&li&&a:eq(1)&&Text;.detail_list&&ul:eq(1)&&li:eq(2)&&Text;.detail_list&&ul:eq(1)&&li:eq(3)&&Text', "img": ".lazyload&&data-original",
content: '.content_desc&&span&&Text', "desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
tabs: '.play_source_tab&&a', "content": ".module-info-introduction&&Text",
lists: '.content_playlist:eq(#id) li', "tabs": ".module-tab-item",
}, "lists": ".module-play-list:eq(#id) a"
搜索: '*', },
}, 搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
mxpro: { },
title: '', mxone5: {
host: '', // homeUrl:'/', title: '',
url: '/vodshow/fyclass--------fypage---.html', host: '',
searchUrl: '/vodsearch/**----------fypage---.html', url: '/show/fyclass--------fypage---.html',
searchable: 2,//是否启用全局搜索, searchUrl: '/search/**----------fypage---.html',
quickSearch: 0,//是否启用快速搜索, searchable: 2,//是否启用全局搜索,
filterable: 0,//是否启用分类筛选, quickSearch: 0,//是否启用快速搜索,
headers: {//网站的请求头,完整支持所有的,常带ua和cookies filterable: 0,//是否启用分类筛选,
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok" class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
}, play_parse: true,
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html', lazy: '',
play_parse: true, limit: 6,
lazy: '', 推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
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', 一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
double: true, // 推荐内容是否双层定位 二级: {
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href', "title": "h1&&Text;.tag-link&&Text",
二级: { "img": ".module-item-pic&&img&&data-src",
"title": "h1&&Text;.module-info-tag&&Text", "desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
"img": ".lazyload&&data-original", "content": ".vod_content&&Text",
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text", "tabs": ".module-tab-item",
"content": ".module-info-introduction&&Text", "lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
"tabs": ".module-tab-item", },
"lists": ".module-play-list:eq(#id) a" 搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
}, },
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text', 首图: {
}, mxone5: { title: '',
title: '', host: '',
host: '', url: '/vodshow/fyclass--------fypage---/',
url: '/show/fyclass--------fypage---.html', searchUrl: '/vodsearch/**----------fypage---.html',
searchUrl: '/search/**----------fypage---.html', searchable: 2,//是否启用全局搜索,
searchable: 2,//是否启用全局搜索, quickSearch: 0,//是否启用快速搜索,
quickSearch: 0,//是否启用快速搜索, filterable: 0,//是否启用分类筛选,
filterable: 0,//是否启用分类筛选, headers: {//网站的请求头,完整支持所有的,常带ua和cookies
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html', 'User-Agent': 'MOBILE_UA',
play_parse: true, // "Cookie": "searchneed=ok"
lazy: '', },
limit: 6, class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href', play_parse: true,
double: true, // 推荐内容是否双层定位 lazy: '',
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href', limit: 6,
二级: { 推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
"title": "h1&&Text;.tag-link&&Text", double: true, // 推荐内容是否双层定位
"img": ".module-item-pic&&img&&data-src", 一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text", 二级: {
"content": ".vod_content&&Text", "title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
"tabs": ".module-tab-item", "img": ".myui-content__thumb .lazyload&&data-original",
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a" "desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
}, "content": ".content&&Text",
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href', "tabs": ".nav-tabs:eq(0) li",
}, 首图: { "lists": ".myui-content__list:eq(#id) li"
title: '', },
host: '', 搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
url: '/vodshow/fyclass--------fypage---/', },
searchUrl: '/vodsearch/**----------fypage---.html', 首图2: {
searchable: 2,//是否启用全局搜索, title: '',
quickSearch: 0,//是否启用快速搜索, host: '',
filterable: 0,//是否启用分类筛选, url: '/list/fyclass-fypage.html',
headers: {//网站的请求头,完整支持所有的,常带ua和cookies searchUrl: '/vodsearch/**----------fypage---.html',
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok" searchable: 2,//是否启用全局搜索,
}, quickSearch: 0,//是否启用快速搜索,
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html', filterable: 0,//是否启用分类筛选,
play_parse: true, headers: {
lazy: '', 'User-Agent': 'UC_UA',
limit: 6, // "Cookie": ""
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href', },
double: true, // 推荐内容是否双层定位 // class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
二级: { play_parse: true,
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text", lazy: '',
"img": ".myui-content__thumb .lazyload&&data-original", limit: 6,
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text", 推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
"content": ".content&&Text", double: true, // 推荐内容是否双层定位
"tabs": ".nav-tabs:eq(0) li", 一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
"lists": ".myui-content__list:eq(#id) li" 二级: {
}, "title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', "img": ".stui-content__thumb .lazyload&&data-original",
}, 首图2: { "desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
title: '', "content": ".detail&&Text",
host: '', "tabs": ".stui-vodlist__head h3",
url: '/list/fyclass-fypage.html', "lists": ".stui-content__playlist:eq(#id) li"
searchUrl: '/vodsearch/**----------fypage---.html', },
searchable: 2,//是否启用全局搜索, 搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
quickSearch: 0,//是否启用快速搜索, 搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
filterable: 0,//是否启用分类筛选, 搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
headers: { },
'User-Agent': 'UC_UA', // "Cookie": "" 默认: {
}, // class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html', title: '',
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html', host: '',
play_parse: true, url: '/vodshow/fyclass--------fypage---.html',
lazy: '', searchUrl: '/vodsearch/-------------.html?wd=**',
limit: 6, searchable: 2,//是否启用全局搜索,
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href', quickSearch: 0,//是否启用快速搜索,
double: true, // 推荐内容是否双层定位 filterable: 0,//是否启用分类筛选,
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', headers: {
二级: { 'User-Agent': 'MOBILE_UA',
"title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text", },
"img": ".stui-content__thumb .lazyload&&data-original", play_parse: true,
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text", lazy: '',
"content": ".detail&&Text", limit: 6,
"tabs": ".stui-vodlist__head h3", double: true, // 推荐内容是否双层定位
"lists": ".stui-content__playlist:eq(#id) li" },
}, vfed: {
搜索: 'ul.stui-vodlist__media:eq(0),ul.stui-vodlist:eq(0),#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', title: '',
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', host: '',
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', url: '/index.php/vod/show/id/fyclass/page/fypage.html',
}, 默认: { searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
title: '', searchable: 2,//是否启用全局搜索,
host: '', quickSearch: 0,//是否启用快速搜索,
url: '', filterable: 0,//是否启用分类筛选,
searchUrl: '', headers: {
searchable: 2, 'User-Agent': 'UC_UA',
quickSearch: 0, },
filterable: 1, // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
filter: '', class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
filter_url: '', play_parse: true,
filter_def: {}, lazy: '',
headers: { limit: 6,
'User-Agent': 'MOBILE_UA', 推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
}, double: true, // 推荐内容是否双层定位
timeout: 5000, 一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
class_parse: '#side-menu li;a&&Text;a&&href;/(.*?)\.html', 二级: {
cate_exclude: '', "title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
play_parse: true, "img": ".fed-list-info&&a&&data-original",
lazy: `js:input = {parse: 1, url: input, js: ''}`, "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",
double: true, "content": ".fed-part-esan&&Text",
推荐: '列表1;列表2;标题;图片;描述;链接;详情', "tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
一级: '列表;标题;图片;描述;链接;详情', "lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
二级: { },
title: 'vod_name;vod_type', 搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
img: '图片链接', },
desc: '主要信息;年代;地区;演员;导演', 海螺3: {
content: '简介', title: '',
tabs: '', host: '',
lists: 'xx:eq(#id)&&a', searchUrl: '/v_search/**----------fypage---.html',
tab_text: 'body&&Text', url: '/vod_____show/fyclass--------fypage---.html',
list_text: 'body&&Text', headers: {
list_url: 'a&&href' 'User-Agent': 'MOBILE_UA'
}, },
搜索: '列表;标题;图片;描述;链接;详情', timeout: 5000,
}, vfed: { class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
title: '', cate_exclude: '明星|专题|最新|排行',
host: '', limit: 40,
url: '/index.php/vod/show/id/fyclass/page/fypage.html', play_parse: true,
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html', lazy: '',
searchable: 2,//是否启用全局搜索, 推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
quickSearch: 0,//是否启用快速搜索, double: true,
filterable: 0,//是否启用分类筛选, 一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
headers: { 二级: {
'User-Agent': 'UC_UA', "title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
}, // class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html', "img": ".hl-lazy&&data-original",
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html', "desc": ".hl-infos-content&&.hl-text-conch&&Text",
play_parse: true, "content": ".hl-content-text&&Text",
lazy: '', "tabs": ".hl-tabs&&a",
limit: 6, "lists": ".hl-plays-list:eq(#id)&&li"
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href', },
double: true, // 推荐内容是否双层定位 搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href', searchable: 2,//是否启用全局搜索,
二级: { quickSearch: 0,//是否启用快速搜索,
"title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text", filterable: 0,//是否启用分类筛选,
"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", 海螺2: {
"content": ".fed-part-esan&&Text", title: '',
"tabs": ".fed-drop-boxs&&.fed-part-rows&&li", host: '',
"lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li" searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
}, url: '/index.php/vod/show/id/fyclass/page/fypage/',
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text', headers: {
}, 海螺3: { 'User-Agent': 'MOBILE_UA'
title: '', },
host: '', timeout: 5000,
searchUrl: '/v_search/**----------fypage---.html', class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
url: '/vod_____show/fyclass--------fypage---.html', limit: 40,
headers: { play_parse: true,
'User-Agent': 'MOBILE_UA' lazy: '',
}, 推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
timeout: 5000, double: true,
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html', 一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
cate_exclude: '明星|专题|最新|排行', 二级: {
limit: 40, "title": "h2&&Text;.deployment&&Text",
play_parse: true, "img": ".lazy&&data-original",
lazy: '', "desc": ".deployment&&Text",
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href', "content": ".ec-show&&Text",
double: true, "tabs": "#tag&&a",
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href', "lists": ".play_list_box:eq(#id)&&li"
二级: { },
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text", 搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
"img": ".hl-lazy&&data-original", searchable: 2,//是否启用全局搜索,
"desc": ".hl-infos-content&&.hl-text-conch&&Text", quickSearch: 0,//是否启用快速搜索,
"content": ".hl-content-text&&Text", filterable: 0,//是否启用分类筛选,
"tabs": ".hl-tabs&&a", },
"lists": ".hl-plays-list:eq(#id)&&li" 短视: {
}, title: '',
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href', host: '',
searchable: 2,//是否启用全局搜索, // homeUrl:'/',
quickSearch: 0,//是否启用快速搜索, url: '/channel/fyclass-fypage.html',
filterable: 0,//是否启用分类筛选, searchUrl: '/search.html?wd=**',
}, 海螺2: { searchable: 2,//是否启用全局搜索,
title: '', quickSearch: 0,//是否启用快速搜索,
host: '', filterable: 0,//是否启用分类筛选,
searchUrl: '/index.php/vod/search/page/fypage/wd/**/', headers: {//网站的请求头,完整支持所有的,常带ua和cookies
url: '/index.php/vod/show/id/fyclass/page/fypage/', 'User-Agent': 'MOBILE_UA',
headers: { // "Cookie": "searchneed=ok"
'User-Agent': 'MOBILE_UA' },
}, class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
timeout: 5000, cate_exclude: '解析|动态',
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/', play_parse: true,
limit: 40, lazy: '',
play_parse: true, limit: 6,
lazy: '', 推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href', double: true, // 推荐内容是否双层定位
double: true, 一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href', : {
二级: { "title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
"title": "h2&&Text;.deployment&&Text", "img": ".img&&img&&data-src",
"img": ".lazy&&data-original", "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",
"desc": ".deployment&&Text", "content": ".zkjj_a&&Text",
"content": ".ec-show&&Text", "tabs": ".py-tabs&&option",
"tabs": "#tag&&a", "lists": ".player:eq(#id) li"
"lists": ".play_list_box:eq(#id)&&li" },
}, 搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href', },
searchable: 2,//是否启用全局搜索, 短视2:{
quickSearch: 0,//是否启用快速搜索, title: '',
filterable: 0,//是否启用分类筛选, host: '',
}, 短视: { class_name:'电影&电视剧&综艺&动漫',
title: '', class_url:'1&2&3&4',
host: '', // homeUrl:'/', searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
url: '/channel/fyclass-fypage.html', searchable: 2,
searchUrl: '/search.html?wd=**', quickSearch: 0,
searchable: 2,//是否启用全局搜索, headers:{'User-Agent':'MOBILE_UA'},
quickSearch: 0,//是否启用快速搜索, url: '/index.php/api/vod#type=fyclass&page=fypage',
filterable: 0,//是否启用分类筛选, filterable:0,//是否启用分类筛选,
headers: {//网站的请求头,完整支持所有的,常带ua和cookies filter_url:'',
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok" filter: {},
}, filter_def:{},
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html', detailUrl:'/index.php/vod/detail/id/fyid.html',
cate_exclude: '解析|动态', play_parse: true,
play_parse: true, lazy: '',
lazy: '', limit: 6,
limit: 6, 推荐:'.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&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});',
double: true, // 推荐内容是否双层定位 二级:{
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href', "title":".slide-info-title&&Text;.slide-info:eq(3)--strong&&Text",
二级: { "img":".detail-pic&&data-original",
"title": "h1&&Text;.content-rt&&p:eq(0)&&Text", "desc":".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text",
"img": ".img&&img&&data-src", "content":"#height_limit&&Text",
"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", "tabs":".anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a",
"content": ".zkjj_a&&Text", "tab_text":".swiper-slide&&Text",
"tabs": ".py-tabs&&option", "lists":".anthology-list-box:eq(#id) li"
"lists": ".player:eq(#id) li" },
}, 搜索:'json:list;name;pic;;id',
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href', }
}, 短视2: { };
title: '', return JSON.parse(JSON.stringify(mubanDict));
host: '', }
class_name: '电影&电视剧&综艺&动漫', var mubanDict = getMubans();
class_url: '1&2&3&4', var muban = getMubans();
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50', export default {muban,getMubans};
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: '',
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(3)--strong&&Text",
"img": ".detail-pic&&data-original",
"desc": ".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text",
"content": "#height_limit&&Text",
"tabs": ".anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a",
"tab_text": ".swiper-slide&&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: `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);
input = {parse:0,url:JSON.parse(html).url}
}else{
input= rule.parse_url+input;
}
}
`,
推荐: '*',
一级: '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};

View File

@@ -27,46 +27,32 @@ var rule = {
class_url: 'choice&movie&tv&variety&cartoon&child&doco', class_url: 'choice&movie&tv&variety&cartoon&child&doco',
limit: 20, limit: 20,
play_parse: true, play_parse: true,
lazy: $js.toString(() => { lazy: $js.toString(() => {
let d = []; let d = [];
let url1=JSON.parse(request("https://vip.ysctv.cn/api/index?parsesId=26&appid=4&videoUrl="+input)).url;
// 发起请求并解析返回的 JSON 数据 var withoutDomain = url1.replace(/^https:\/\/baidu\.con\//, '');
fetch(`http://39.104.230.177:1122/lxjx/my123.php?url=${encodeURIComponent(input)}`, { var first16Chars = withoutDomain.substring(0, 16);
method: 'GET', var remainingString = withoutDomain.substring(16);
headers: { var key = CryptoJS.enc.Utf8.parse(first16Chars);
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', var iv = key;
'Connection': 'Keep-Alive', function AES_Decrypt(word) {
'Accept-Encoding': 'gzip' var srcs = word;
} var decrypt = CryptoJS.AES.decrypt(srcs, key, {
}) iv: iv,
.then(response => response.json()) mode: CryptoJS.mode.CBC,
.then(response => { padding: CryptoJS.pad.Pkcs7
// 获取所有字段名 });
let keys = Object.keys(response); return decrypt.toString(CryptoJS.enc.Utf8);
};
// 查找以 '影视' 开头的字段名 let url = AES_Decrypt(remainingString);
let urlKey = keys.find(key => key.startsWith('影视'));
// 提取对应的值
let url = urlKey ? response[urlKey] : null;
if (url) {
// 处理 url或将其用于 input
input = { input = {
url: url, url: url,
parse: 0, parse: 0,
header: rule.headers header: rule.headers
}; }
} else { setResult(d)
// 处理没有找到 url 字段的情况 }),
console.error("没有找到以 '影视' 开头的字段");
}
})
.catch(error => console.error('请求失败:', error));
setResult(d);
}),

189
小米/js/摘星.js Normal file
View File

@@ -0,0 +1,189 @@
globalThis.getAESjiem = function (word, key) {
var srcs = word;
if (word.charCodeAt(0)==65279)
srcs=word.slice(1);
var decrypt = CryptoJS.AES.decrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decrypt.toString(CryptoJS.enc.Utf8);
}
function fn_getxl(){
let html=post('http://103.88.35.251:8989/shark/api.php?action=configs',
{
headers: {
'User-Agent': 'Dalvik/1.0.3 (Linux; U; Android 11; Redmi Build/M2012K10C)'
},
body: {
'username': '',
'token': ''
}
});
let hkey=CryptoJS.enc.Utf8.parse("aassddwwxxllsx1x");
let htext=getAESjiem(html,hkey);
return JSON.parse(htext).playerinfos
}
/*
globalThis.getxl = JSON.parse(getAESjiem(fetch('http://103.88.35.251:8989/shark/api.php?action=configs', {
method: 'POST',
headers: {
'User-Agent': 'Dalvik/1.0.3 (Linux; U; Android 11; Redmi Build/M2012K10C)'
},
body: {
'username': '',
'token': ''
}
}), CryptoJS.enc.Utf8.parse("aassddwwxxllsx1x"))).playerinfos
*/
globalThis.getxl=fn_getxl();
log('getxl:'+getxl);
globalThis.getxlsz = function (name) {
let xl = []
getxl.forEach(it => {
if (it.playername === name) {
let data = getAESjiem(it.playerjiekou, CryptoJS.enc.Utf8.parse("aassqdwwssllsm1x")).match(/data=([^&]+)/)[1]
let jx = getAESjiem(data, CryptoJS.enc.Utf8.parse("aassqdbbssllsmhx"))
xl.push(jx)
}
})
return xl
}
var rule = {
title: '摘星剧场',
host: 'http://103.88.35.251:8989',
url: '/api.php/v1.classify/content?page=fypage',
homeUrl: '/api.php/v1.home/data?type_id=25',
searchUrl: '/api.php/v1.search/data?wd=**&type_id=0&page=fypage',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
},
searchable: 2,
quickSearch: 1,
filterable: 1,
filter_url: 'fyclass&len=20&style={{fl.类型}}&zone={{fl.地区}}&year={{fl.年份}}&emcee={{fl.明星}}&order={{fl.排序}}&start=fypage&',
class_name: '电影&电视剧&综艺&动漫&短剧',
class_url: '21&20&23&22&24',
filter: 'H4sIAAAAAAAAA+2cW1MaSRTH3/MpUjzvg5jNZferbOXBSrG1qTVxK3GzlUqliks0gIpAGYRwdV0goujgFQbBLzPdM3yLHaY7IAjnlJypKU0NT+j8nL/nzOnT3X8bPzx4aL48v79cfOX59eFv1lf914fBO+v6n7735mWP3mizwprnp9GLrxde+aZffbew+Ldv5N6TNYa369+LpXIsUh271/Ce15AbxMebPwQp6eEGD62AShKhKrHoN62Tg2MSCFWJB+LcnwKVJELOXjXBWm04ewIhxxSK8uBXOCaBkGOKHumdGhyTQMgVUf6MZU8i5OyF05oagbMnELJS8EBPJWAlgdgwnvQtJHsCIceU+mxEVDgmgVCVtMuScaiAShIhx1RfN8IFOCaBkJ/T5n/GLtxhJUJVMuoVtg6PXImQY1o519pwh5XITaWR7zwffHXtN5g8+7KcwtbHq3Aw+06+OuPsu7pi3g6OTiDUPPYqGd48ApUkQq9Chbe6SBVaCDmm4h7LduCYBEIewycKpiQRstJ2mecOYCWBkGffbgyLSSLkbrHWwJQkQp8/FBYtsfwOMoV8p+5ld2qdau3xbA6708Srs3Wn+bn5n8HYLICaQ/MmjzCVR3aozGMq83aoeDEVrx0qc5jKnA0q3l8QFROwQeUZpvLMDpWnmMpTO1SeYCpP7FB5jKk8tkMFG/teO8a+Fxv7XjvGvhcb+1762OfZU769B088ArFvLuCxJFM3p80Fk6/ONhfwnN+4SuihOk/WwRjpebSU+qlKwSvj5ZdmmOS1ydEnrX1havb206Da2xdLbybJTXt01rvn4o6eZd+i76/Fhfd3yvpz0JBzzGTshTqsGYS3BAIhl6lz9otj23oWOGeh8YYxpiQQ8ubDOesvtso2j+GYBEKuCOesv3pF65YQS8lCyO3RMaPHOYPbOTPYUDbMJw5nTyDkmFZzPA93I4mQlVxDzjXkpsXkGnIEJdeQcw0515C7ruIacqMqriHnGnKQimvIXVdxDTnXkJtqyL17+8fSP3fLjssVNVXVq354BTigyMvNrSI/RTbcAiEXULygHyBWmUDIxXN4ZShheGErEPq24JwpyCk5gVCVesUTrRVHNlUWQlbyR7Dykwi59rqx3m4R2+r0EfJzajZ5GLY0JUKOSa2xQ/icl0Totbdi/s5I7VkIWSm0wj/Bz0kiZKXAudkDkJO0FkJVYvE4r8KbX4mQlWJFFs4i1rOFkLPn2BlDc7XBo2VYSSD05dsxehZUIOSRW03wLxnMeu4j5IpwzVNbzFPnLE2+Xe4VkU2EQMhKB1VzzoOVBHIfq5CnYzw9PpMMN0YTr85WhVrnix6E/1wqEXLfiK3p9Ya+G4Vbx4Ci996kcZpnhwGk/X6nyHVyWdLbGywML3OHFFnPXzPiG7CYQMhPbr+kqfC2WSLkHcnZGbvIwzsSgZCVwkm2Cv+hQiLkOmzU+PkZXIQCISvlY7r6L6wkELLSToJnvsFKArFhXcNPa3qlhS1tJEXV6x0HWABesUnEhn6oNVO8sI31Q0mR+8WqX49F2AY8aQ4psp5yyUuXWkvhm/B+fAQkZzXTYcd7PA8vd4aUDWMOHQkCIedTvTC68IEZiZCVwmlzNPFgBRYbUDaue1xDmKjmjCH8YuHN8tLS6zvlCDvnm5pVY+wgxrNA6D072cvA+ymJkGPqxpiSYOUT9ESFoMh6zn1Cu7TDsvAYlwhZKbCmhxuIK2ch5OyVC736Fpw9gdC7l4odypMIOaZslGdgB0siVCVNPWZ1eE0iEfL4jTbYFbzAkwg5e/tl4wjeOUmEvELOJ3kaWSELhJw9xxxh5/4HhuHvYL6VRMjPqb6FdViJkLP3Q/u0zh1pdNDTzHY0FfmIiUDuZW24RwxnU3GPGN5SxT1ieGsV94jhbVXcI4auozRB6QdxlB58/B/LmRTJ7U8AAA==',
// limit: 6,
//double: false,
play_parse: true,
lazy: $js.toString(() => {
let fg = input.split('?')
input = fg[0]
let jx = getxlsz(fg[1])
var key = CryptoJS.enc.Utf8.parse("aasshjwwcbllsm1x");
let data = getAESjiem(input, key).match(/data=([^&]+)/)[1]
var key1 = CryptoJS.enc.Utf8.parse("bbssqdbbssll25sx");
let data1 = getAESjiem(data, key1)
let url
for (let i = 0; i < jx.length; i++) {
try {
const response = fetch(jx[i] + data1);
const url1 = JSON.parse(response).url;
if (url1) {
url = url1;
break;
}
} catch (error) {
}
}
input = {
url: url,
parse: 0,
header: rule.headers
}
}),
推荐: $js.toString(() => {
let d = [];
let data = fetch(input, {
method: 'GET'
})
var key = CryptoJS.enc.Utf8.parse("aassddwwxxllsx1x");
let data1 = JSON.parse(getAESjiem(data, key)).data
let data2 = data1.banners
data1.verLandList.forEach(it => {
Array.prototype.push.apply(data2, it.vertical_lands)
})
data2.forEach(it => {
let id = `http://103.88.35.251:8989/api.php/v1.player/details?vod_id=${it.vod_id}`;
d.push({
url: id,
title: it.vod_name,
img: it.vod_pic,
desc: it.vod_remarks ? it.vod_remarks : it.vod_score,
})
});
setResult(d)
}),
一级: $js.toString(() => {
let d = [];
let body = { "area": "全部地区", "rank": "按上新", "type": "全部类型", "type_id": parseInt(MY_CATE), "year": "全部年代" }
let data = fetch(`http://103.88.35.251:8989/api.php/v1.classify/content?page=${MY_PAGE}`, {
method: 'POST',
body: body
})
var key = CryptoJS.enc.Utf8.parse("aassddwwxxllsx1x");
let data1 = JSON.parse(getAESjiem(data, key)).data.video_list
data1.forEach(it => {
let id = `http://103.88.35.251:8989/api.php/v1.player/details?vod_id=${it.vod_id}`;
d.push({
url: id,
title: it.vod_name,
img: it.vod_pic,
desc: it.vod_remarks ? it.vod_remarks : it.vod_score,
})
});
setResult(d)
}),
二级: $js.toString(() => {
var key = CryptoJS.enc.Utf8.parse("aassddwwxxllsx1x");
let data = JSON.parse(getAESjiem(request(input), key)).data.detail
log(JSON.stringify(data))
let data1 = data.play_url_list
let xianlu = []
let result = []
data1.forEach(it => {
xianlu.push(it.show.replace("(广告误信)", ""))
let lieb = []
let xlname = it.from
it.urls.forEach(itt => {
lieb.push(`${itt.name}$${itt.url}?${xlname}`)
})
lieb = lieb.join('#')
result.push(lieb)
})
VOD = {
vod_name: data.vod_name,
type_name: data.typeName,
vod_year: data.vod_year,
vod_area: data.vod_area,
vod_remarks: data.vod_remarks,
vod_actor: data.vod_actor,
vod_director: data.vod_director,
vod_content: data.vod_content.replace(/<p[^>]*?>|<\/p>/g, ''),
vod_play_from: xianlu.join('$$$'),
vod_play_url: result.join('$$$')
}
}),
搜索: $js.toString(() => {
let d = [];
let data = fetch(input, {
method: 'GET'
})
var key = CryptoJS.enc.Utf8.parse("aassddwwxxllsx1x");
let data1 = JSON.parse(getAESjiem(data, key)).data.search_data
data1.forEach(it => {
let id = `http://103.88.35.251:8989/api.php/v1.player/details?vod_id=${it.vod_id}`;
d.push({
url: id,
title: it.vod_name,
img: it.vod_pic,
desc: it.vod_remarks ? it.vod_remarks : it.vod_score,
})
});
setResult(d)
}),
}

View File

@@ -508,10 +508,90 @@ http://gslbserv.itv.cmvideo.cn:80/3000000020000011530/index.m3u8?channel-id=Fifa
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「移动」",咪咕直播 𝟜𝟝「移动」 #EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「移动」",咪咕直播 𝟜𝟝「移动」
http://gslbserv.itv.cmvideo.cn:80/3000000020000011531/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011531&livemode=1&stbId=3 http://gslbserv.itv.cmvideo.cn:80/3000000020000011531/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011531&livemode=1&stbId=3
#INSERT_HERE #INSERT_HERE
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「NBL」19:00 总决赛 香港金牛vs安徽文一 解说 #EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」13:00 3X决赛 解说
https://tv.iill.top/NBA/1
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」15:15 联赛 青岛西海岸vs深圳新鹏城 解说
https://tv.iill.top/Migu/1 https://tv.iill.top/Migu/1
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「NBL」19:00 清流播出 #EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」15:15 联赛 青岛西海岸vs深圳新鹏城 赛场原声
https://tv.iill.top/Migu/2 https://tv.iill.top/Migu/2
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:20 季前赛 江苏肯帝亚vs上海久事 解说
https://tv.iill.top/Migu/3
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:20 清流播出
https://tv.iill.top/Migu/4
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 宁波町渥vs深圳马可波罗 解说
https://tv.iill.top/Migu/5
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/6
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 广州龙狮vs天津先行者 解说
https://tv.iill.top/Migu/7
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/8
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 新疆伊力特vs青岛国信水产 解说
https://tv.iill.top/Migu/9
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/10
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 浙江广厦vs九台农商银行 解说
https://tv.iill.top/Migu/11
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/12
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「意甲」18:15 联赛 佛罗伦萨vs拉齐奥 解说
https://tv.iill.top/Migu/13
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」18:45 联赛 南通支云vs青岛海牛 解说
https://tv.iill.top/Migu/14
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」18:45 联赛 南通支云vs青岛海牛 赛场原声
https://tv.iill.top/Migu/15
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 季前赛 广东华南虎vs福建浔兴股份 解说
https://tv.iill.top/Migu/16
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 清流播出
https://tv.iill.top/Migu/17
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 清流播出
https://tv.iill.top/Migu/18
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 季前赛 浙江稠州金租vs山东高速 解说
https://tv.iill.top/Migu/19
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 清流播出
https://tv.iill.top/Migu/20
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 季前赛 北京北汽vs辽宁本钢 解说
https://tv.iill.top/Migu/21
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 清流播出
https://tv.iill.top/Migu/22
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 季前赛 山西汾酒vs北京控股 解说
https://tv.iill.top/Migu/23
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 清流播出
https://tv.iill.top/Migu/24
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」19:45 联赛 浙江vs沧州雄狮 解说
https://tv.iill.top/Migu/25
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」19:45 联赛 浙江vs沧州雄狮 赛场原声
https://tv.iill.top/Migu/26
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「西甲」19:50 联赛 赫塔菲vs莱加内斯 解说
https://tv.iill.top/Migu/27
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:50 季前赛 南京头排苏酒vs四川金强 解说
https://tv.iill.top/Migu/28
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:50 清流播出
https://tv.iill.top/Migu/29
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」20:50 联赛 布莱顿vs诺丁汉森林 解说
https://tv.iill.top/Migu/30
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「意甲」20:50 联赛 蒙扎vs博洛尼亚 解说
https://tv.iill.top/Migu/31
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」20:50 联赛 摩纳哥vs勒阿弗尔 解说
https://tv.iill.top/Migu/32
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「西甲」22:05 联赛 毕尔巴鄂竞技vs塞尔塔 解说
https://tv.iill.top/Migu/33
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」22:50 联赛 蒙彼利埃vs欧塞尔 解说
https://tv.iill.top/Migu/34
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」22:50 联赛 昂热vs南特 解说
https://tv.iill.top/Migu/35
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」22:50 联赛 布雷斯特vs图卢兹 解说
https://tv.iill.top/Migu/36
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 解说
https://tv.iill.top/Migu/37
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 粤语
https://tv.iill.top/Migu/38
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 闽南语
https://tv.iill.top/Migu/39
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 沪语
https://tv.iill.top/Migu/40
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「意甲」23:50 联赛 罗马vs乌迪内斯 解说
https://tv.iill.top/Migu/41
#EXTINF:-1 tvg-id="CCTV-1" tvg-name="CCTV1" tvg-logo="https://epg.iill.top/logo/CCTV1.png" group-title="•咪咕「TV」",CCTV 1 综合 #EXTINF:-1 tvg-id="CCTV-1" tvg-name="CCTV1" tvg-logo="https://epg.iill.top/logo/CCTV1.png" group-title="•咪咕「TV」",CCTV 1 综合
https://tv.iill.top/migu/cctv1 https://tv.iill.top/migu/cctv1
#EXTINF:-1 tvg-id="CCTV-2" tvg-name="CCTV2" tvg-logo="https://epg.iill.top/logo/CCTV2.png" group-title="•咪咕「TV」",CCTV 2 财经 #EXTINF:-1 tvg-id="CCTV-2" tvg-name="CCTV2" tvg-logo="https://epg.iill.top/logo/CCTV2.png" group-title="•咪咕「TV」",CCTV 2 财经

File diff suppressed because it is too large Load Diff

View File

@@ -508,10 +508,90 @@ http://gslbserv.itv.cmvideo.cn:80/3000000020000011530/index.m3u8?channel-id=Fifa
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「移动」",咪咕直播 𝟜𝟝「移动」 #EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「移动」",咪咕直播 𝟜𝟝「移动」
http://gslbserv.itv.cmvideo.cn:80/3000000020000011531/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011531&livemode=1&stbId=3 http://gslbserv.itv.cmvideo.cn:80/3000000020000011531/index.m3u8?channel-id=FifastbLive&Contentid=3000000020000011531&livemode=1&stbId=3
#INSERT_HERE #INSERT_HERE
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「NBL」19:00 总决赛 香港金牛vs安徽文一 解说 #EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」13:00 3X决赛 解说
https://tv.iill.top/NBA/1
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」15:15 联赛 青岛西海岸vs深圳新鹏城 解说
https://tv.iill.top/Migu/1 https://tv.iill.top/Migu/1
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「NBL」19:00 清流播出 #EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」15:15 联赛 青岛西海岸vs深圳新鹏城 赛场原声
https://tv.iill.top/Migu/2 https://tv.iill.top/Migu/2
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:20 季前赛 江苏肯帝亚vs上海久事 解说
https://tv.iill.top/Migu/3
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:20 清流播出
https://tv.iill.top/Migu/4
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 宁波町渥vs深圳马可波罗 解说
https://tv.iill.top/Migu/5
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/6
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 广州龙狮vs天津先行者 解说
https://tv.iill.top/Migu/7
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/8
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 新疆伊力特vs青岛国信水产 解说
https://tv.iill.top/Migu/9
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/10
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 季前赛 浙江广厦vs九台农商银行 解说
https://tv.iill.top/Migu/11
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」15:50 清流播出
https://tv.iill.top/Migu/12
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「意甲」18:15 联赛 佛罗伦萨vs拉齐奥 解说
https://tv.iill.top/Migu/13
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」18:45 联赛 南通支云vs青岛海牛 解说
https://tv.iill.top/Migu/14
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」18:45 联赛 南通支云vs青岛海牛 赛场原声
https://tv.iill.top/Migu/15
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 季前赛 广东华南虎vs福建浔兴股份 解说
https://tv.iill.top/Migu/16
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 清流播出
https://tv.iill.top/Migu/17
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 清流播出
https://tv.iill.top/Migu/18
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 季前赛 浙江稠州金租vs山东高速 解说
https://tv.iill.top/Migu/19
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 清流播出
https://tv.iill.top/Migu/20
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 季前赛 北京北汽vs辽宁本钢 解说
https://tv.iill.top/Migu/21
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 清流播出
https://tv.iill.top/Migu/22
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 季前赛 山西汾酒vs北京控股 解说
https://tv.iill.top/Migu/23
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:20 清流播出
https://tv.iill.top/Migu/24
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」19:45 联赛 浙江vs沧州雄狮 解说
https://tv.iill.top/Migu/25
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中超」19:45 联赛 浙江vs沧州雄狮 赛场原声
https://tv.iill.top/Migu/26
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「西甲」19:50 联赛 赫塔菲vs莱加内斯 解说
https://tv.iill.top/Migu/27
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:50 季前赛 南京头排苏酒vs四川金强 解说
https://tv.iill.top/Migu/28
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:50 清流播出
https://tv.iill.top/Migu/29
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」20:50 联赛 布莱顿vs诺丁汉森林 解说
https://tv.iill.top/Migu/30
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「意甲」20:50 联赛 蒙扎vs博洛尼亚 解说
https://tv.iill.top/Migu/31
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」20:50 联赛 摩纳哥vs勒阿弗尔 解说
https://tv.iill.top/Migu/32
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「西甲」22:05 联赛 毕尔巴鄂竞技vs塞尔塔 解说
https://tv.iill.top/Migu/33
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」22:50 联赛 蒙彼利埃vs欧塞尔 解说
https://tv.iill.top/Migu/34
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」22:50 联赛 昂热vs南特 解说
https://tv.iill.top/Migu/35
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「法甲」22:50 联赛 布雷斯特vs图卢兹 解说
https://tv.iill.top/Migu/36
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 解说
https://tv.iill.top/Migu/37
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 粤语
https://tv.iill.top/Migu/38
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 闽南语
https://tv.iill.top/Migu/39
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英超」23:15 联赛 曼城vs阿森纳 沪语
https://tv.iill.top/Migu/40
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「意甲」23:50 联赛 罗马vs乌迪内斯 解说
https://tv.iill.top/Migu/41
#EXTINF:-1 tvg-id="CCTV-1" tvg-name="CCTV1" tvg-logo="https://epg.iill.top/logo/CCTV1.png" group-title="•咪咕「TV」",CCTV 1 综合 #EXTINF:-1 tvg-id="CCTV-1" tvg-name="CCTV1" tvg-logo="https://epg.iill.top/logo/CCTV1.png" group-title="•咪咕「TV」",CCTV 1 综合
https://tv.iill.top/migu/cctv1 https://tv.iill.top/migu/cctv1
#EXTINF:-1 tvg-id="CCTV-2" tvg-name="CCTV2" tvg-logo="https://epg.iill.top/logo/CCTV2.png" group-title="•咪咕「TV」",CCTV 2 财经 #EXTINF:-1 tvg-id="CCTV-2" tvg-name="CCTV2" tvg-logo="https://epg.iill.top/logo/CCTV2.png" group-title="•咪咕「TV」",CCTV 2 财经

Binary file not shown.

View File

@@ -1,304 +0,0 @@
if (typeof Object.assign != 'function') {
Object.assign = function () {
var target = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
}
function getMubans() {
var mubanDict = { // 模板字典
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(2):lt(8);a&&Text;a&&href;/(\\d+).html',
play_parse: true,
lazy: '',
limit: 6,
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
二级: {
"title": "h1&&Text;.module-info-tag&&Text",
"img": ".lazyload&&data-original",
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
"content": ".module-info-introduction&&Text",
"tabs": ".module-tab-item",
"lists": ".module-play-list:eq(#id) a"
},
搜索: '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: '',
limit: 6,
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: '.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(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
"content": ".vod_content&&Text",
"tabs": ".module-tab-item",
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
},
搜索: '.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(5);a&&Text;a&&href;/(\\d+).html',
play_parse: true,
lazy: '',
limit: 6,
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
二级: {
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
"img": ".myui-content__thumb .lazyload&&data-original",
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
"content": ".content&&Text",
"tabs": ".nav-tabs:eq(0) li",
"lists": ".myui-content__list:eq(#id) li"
},
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&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;/(\\d+).html',
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
play_parse: true,
lazy: '',
limit: 6,
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: '.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)&&Text",
"img": ".stui-content__thumb .lazyload&&data-original",
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
"content": ".detail&&Text",
"tabs": ".stui-vodlist__head h3",
"lists": ".stui-content__playlist:eq(#id) li"
},
搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
},
默认: {
title: '',
host: '',
url: '/vodshow/fyclass--------fypage---.html',
searchUrl: '/vodsearch/-------------.html?wd=**',
searchable: 2,//是否启用全局搜索,
quickSearch: 0,//是否启用快速搜索,
filterable: 0,//是否启用分类筛选,
headers: {
'User-Agent': 'MOBILE_UA',
},
play_parse: true,
lazy: '',
limit: 6,
double: true, // 推荐内容是否双层定位
},
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.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
play_parse: true,
lazy: '',
limit: 6,
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: '.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: '',
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
double: true,
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
二级: {
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
"img": ".hl-lazy&&data-original",
"desc": ".hl-infos-content&&.hl-text-conch&&Text",
"content": ".hl-content-text&&Text",
"tabs": ".hl-tabs&&a",
"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: '',
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
double: true,
一级: '.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: '',
limit: 6,
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: '.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: '',
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(3)--strong&&Text",
"img":".detail-pic&&data-original",
"desc":".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text",
"content":"#height_limit&&Text",
"tabs":".anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a",
"tab_text":".swiper-slide&&Text",
"lists":".anthology-list-box:eq(#id) li"
},
搜索:'json:list;name;pic;;id',
}
};
return JSON.parse(JSON.stringify(mubanDict));
}
var mubanDict = getMubans();
var muban = getMubans();
export default {muban,getMubans};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

577
饭太硬/api/jinja.js Normal file
View File

@@ -0,0 +1,577 @@
/*!
* Jinja Templating for JavaScript v0.1.8
* https://github.com/sstur/jinja-js
*
* This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
*
* In the interest of simplicity, it deviates from Jinja2 as follows:
* - Line statements, cycle, super, macro tags and block nesting are not implemented
* - auto escapes html by default (the filter is "html" not "e")
* - Only "html" and "safe" filters are built in
* - Filters are not valid in expressions; `foo|length > 1` is not valid
* - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
*
* Notes:
* - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
* - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
* - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
* - `.2` is not a valid number literal; use `0.2`
*
*/
/*global require, exports, module, define */
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
})(this, (function (jinja) {
"use strict";
var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
var NUMBER = /^[+-]?\d+(\.\d+)?$/;
//non-primitive literals (array and object literals)
var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
//bare identifiers such as variables and in object literals: {foo: 'value'}
var IDENTIFIERS = /[$_a-z][$\w]*/ig;
var VARIABLES = /i(\.i|\[[@#i]\])*/g;
var ACCESSOR = /(\.i|\[[@#i]\])/g;
var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
//extended (english) operators
var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
var LEADING_SPACE = /^\s+/;
var TRAILING_SPACE = /\s+$/;
var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
var TAGS = {
'{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
'{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
'{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
'{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
};
var delimeters = {
'{%': 'directive',
'{{': 'output',
'{#': 'comment'
};
var operators = {
and: '&&',
or: '||',
not: '!',
is: '==',
isnot: '!='
};
var constants = {
'true': true,
'false': false,
'null': null
};
function Parser() {
this.nest = [];
this.compiled = [];
this.childBlocks = 0;
this.parentBlocks = 0;
this.isSilent = false;
}
Parser.prototype.push = function (line) {
if (!this.isSilent) {
this.compiled.push(line);
}
};
Parser.prototype.parse = function (src) {
this.tokenize(src);
return this.compiled;
};
Parser.prototype.tokenize = function (src) {
var lastEnd = 0, parser = this, trimLeading = false;
matchAll(src, START_TOKEN, function (open, index, src) {
//here we match the rest of the src against a regex for this tag
var match = src.slice(index + open.length).match(TAGS[open]);
match = (match ? match[0] : '');
//here we sub out strings so we don't get false matches
var simplified = match.replace(STRINGS, '@');
//if we don't have a close tag or there is a nested open tag
if (!match || ~simplified.indexOf(open)) {
return index + 1;
}
var inner = match.slice(0, 0 - open.length);
//check for white-space collapse syntax
if (inner.charAt(0) === '-') var wsCollapseLeft = true;
if (inner.slice(-1) === '-') var wsCollapseRight = true;
inner = inner.replace(/^-|-$/g, '').trim();
//if we're in raw mode and we are not looking at an "endraw" tag, move along
if (parser.rawMode && (open + inner) !== '{%endraw') {
return index + 1;
}
var text = src.slice(lastEnd, index);
lastEnd = index + open.length + match.length;
if (trimLeading) text = trimLeft(text);
if (wsCollapseLeft) text = trimRight(text);
if (wsCollapseRight) trimLeading = true;
if (open === '{{{') {
//liquid-style: make {{{x}}} => {{x|safe}}
open = '{{';
inner += '|safe';
}
parser.textHandler(text);
parser.tokenHandler(open, inner);
});
var text = src.slice(lastEnd);
if (trimLeading) text = trimLeft(text);
this.textHandler(text);
};
Parser.prototype.textHandler = function (text) {
this.push('write(' + JSON.stringify(text) + ');');
};
Parser.prototype.tokenHandler = function (open, inner) {
var type = delimeters[open];
if (type === 'directive') {
this.compileTag(inner);
} else if (type === 'output') {
var extracted = this.extractEnt(inner, STRINGS, '@');
//replace || operators with ~
extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
//put back || operators
extracted.src = extracted.src.map(function (part) {
return part.split('~').join('||');
});
var parts = this.injectEnt(extracted, '@');
if (parts.length > 1) {
var filters = parts.slice(1).map(this.parseFilter.bind(this));
this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
} else {
this.push('filter(' + this.parseExpr(parts[0]) + ');');
}
}
};
Parser.prototype.compileTag = function (str) {
var directive = str.split(' ')[0];
var handler = tagHandlers[directive];
if (!handler) {
throw new Error('Invalid tag: ' + str);
}
handler.call(this, str.slice(directive.length).trim());
};
Parser.prototype.parseFilter = function (src) {
src = src.trim();
var match = src.match(/[:(]/);
var i = match ? match.index : -1;
if (i < 0) return JSON.stringify([src]);
var name = src.slice(0, i);
var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
args = this.parseExpr(args, {terms: true});
return '[' + JSON.stringify(name) + ',' + args + ']';
};
Parser.prototype.extractEnt = function (src, regex, placeholder) {
var subs = [], isFunc = typeof placeholder == 'function';
src = src.replace(regex, function (str) {
var replacement = isFunc ? placeholder(str) : placeholder;
if (replacement) {
subs.push(str);
return replacement;
}
return str;
});
return {src: src, subs: subs};
};
Parser.prototype.injectEnt = function (extracted, placeholder) {
var src = extracted.src, subs = extracted.subs, isArr = Array.isArray(src);
var arr = (isArr) ? src : [src];
var re = new RegExp('[' + placeholder + ']', 'g'), i = 0;
arr.forEach(function (src, index) {
arr[index] = src.replace(re, function () {
return subs[i++];
});
});
return isArr ? arr : arr[0];
};
//replace complex literals without mistaking subscript notation with array literals
Parser.prototype.replaceComplex = function (s) {
var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
return this.injectEnt(parsed, 'v');
};
//parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
//valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
Parser.prototype.parseExpr = function (src, opts) {
opts = opts || {};
//extract string literals -> @
var parsed1 = this.extractEnt(src, STRINGS, '@');
//note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) {
return (op in operators) ? before + operators[op] + after : s;
});
//sub out non-string literals (numbers/true/false/null) -> #
// the distinction is necessary because @ can be object identifiers, # cannot
var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) {
return (s in constants || NUMBER.test(s)) ? '#' : null;
});
//sub out object/variable identifiers -> i
var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
//remove white-space
parsed3.src = parsed3.src.replace(/\s+/g, '');
//the rest of this is simply to boil the expression down and check validity
var simplified = parsed3.src;
//sub out complex literals (objects/arrays) -> ~
// the distinction is necessary because @ and # can be subscripts but ~ cannot
while (simplified !== (simplified = this.replaceComplex(simplified))) ;
//now @ represents strings, # represents other primitives and ~ represents non-primitives
//replace complex variables (those with dot/subscript accessors) -> v
while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ;
//empty subscript or complex variables in subscript, are not permitted
simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
//sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
simplified = simplified.replace(/[@#~v]/g, 'i');
//sub out operators
simplified = simplified.replace(OPERATORS, '%');
//allow 'not' unary operator
simplified = simplified.replace(/!+[i]/g, 'i');
var terms = opts.terms ? simplified.split(',') : [simplified];
terms.forEach(function (term) {
//simplify logical grouping
while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i'))) ;
if (!term.match(/^i(%i)*/)) {
throw new Error('Invalid expression: ' + src + " " + term);
}
});
parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
parsed2.src = this.injectEnt(parsed3, 'i');
parsed1.src = this.injectEnt(parsed2, '#');
return this.injectEnt(parsed1, '@');
};
Parser.prototype.parseVar = function (src) {
var args = Array.prototype.slice.call(arguments);
var str = args.pop(), index = args.pop();
//quote bare object identifiers (might be a reserved word like {while: 1})
if (src === 'i' && str.charAt(index + 1) === ':') {
return '"i"';
}
var parts = ['"i"'];
src.replace(ACCESSOR, function (part) {
if (part === '.i') {
parts.push('"i"');
} else if (part === '[i]') {
parts.push('get("i")');
} else {
parts.push(part.slice(1, -1));
}
});
return 'get(' + parts.join(',') + ')';
};
//escapes a name to be used as a javascript identifier
Parser.prototype.escName = function (str) {
return str.replace(/\W/g, function (s) {
return '$' + s.charCodeAt(0).toString(16);
});
};
Parser.prototype.parseQuoted = function (str) {
if (str.charAt(0) === "'") {
str = str.slice(1, -1).replace(/\\.|"/, function (s) {
if (s === "\\'") return "'";
return s.charAt(0) === '\\' ? s : ('\\' + s);
});
str = '"' + str + '"';
}
//todo: try/catch or deal with invalid characters (linebreaks, control characters)
return JSON.parse(str);
};
//the context 'this' inside tagHandlers is the parser instance
var tagHandlers = {
'if': function (expr) {
this.push('if (' + this.parseExpr(expr) + ') {');
this.nest.unshift('if');
},
'else': function () {
if (this.nest[0] === 'for') {
this.push('}, function() {');
} else {
this.push('} else {');
}
},
'elseif': function (expr) {
this.push('} else if (' + this.parseExpr(expr) + ') {');
},
'endif': function () {
this.nest.shift();
this.push('}');
},
'for': function (str) {
var i = str.indexOf(' in ');
var name = str.slice(0, i).trim();
var expr = str.slice(i + 4).trim();
this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
this.nest.unshift('for');
},
'endfor': function () {
this.nest.shift();
this.push('});');
},
'raw': function () {
this.rawMode = true;
},
'endraw': function () {
this.rawMode = false;
},
'set': function (stmt) {
var i = stmt.indexOf('=');
var name = stmt.slice(0, i).trim();
var expr = stmt.slice(i + 1).trim();
this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
},
'block': function (name) {
if (this.isParent) {
++this.parentBlocks;
var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
} else if (this.hasParent) {
this.isSilent = false;
++this.childBlocks;
blockName = 'block_' + (this.escName(name) || this.childBlocks);
this.push('function ' + blockName + '() {');
}
this.nest.unshift('block');
},
'endblock': function () {
this.nest.shift();
if (this.isParent) {
this.push('});');
} else if (this.hasParent) {
this.push('}');
this.isSilent = true;
}
},
'extends': function (name) {
name = this.parseQuoted(name);
var parentSrc = this.readTemplateFile(name);
this.isParent = true;
this.tokenize(parentSrc);
this.isParent = false;
this.hasParent = true;
//silence output until we enter a child block
this.isSilent = true;
},
'include': function (name) {
name = this.parseQuoted(name);
var incSrc = this.readTemplateFile(name);
this.isInclude = true;
this.tokenize(incSrc);
this.isInclude = false;
}
};
//liquid style
tagHandlers.assign = tagHandlers.set;
//python/django style
tagHandlers.elif = tagHandlers.elseif;
var getRuntime = function runtime(data, opts) {
var defaults = {autoEscape: 'toJson'};
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
var getKeys = Object.keys || function (obj) {
var keys = [];
for (var n in obj) if (_hasOwnProperty.call(obj, n)) keys.push(n);
return keys;
};
var isArray = Array.isArray || function (obj) {
return _toString.call(obj) === '[object Array]';
};
var create = Object.create || function (obj) {
function F() {
}
F.prototype = obj;
return new F();
};
var toString = function (val) {
if (val == null) return '';
return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
};
var extend = function (dest, src) {
var keys = getKeys(src);
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i];
dest[key] = src[key];
}
return dest;
};
//get a value, lexically, starting in current context; a.b -> get("a","b")
var get = function () {
var val, n = arguments[0], c = stack.length;
while (c--) {
val = stack[c][n];
if (typeof val != 'undefined') break;
}
for (var i = 1, len = arguments.length; i < len; i++) {
if (val == null) continue;
n = arguments[i];
val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
}
return (val == null) ? '' : val;
};
var set = function (n, val) {
stack[stack.length - 1][n] = val;
};
var push = function (ctx) {
stack.push(ctx || {});
};
var pop = function () {
stack.pop();
};
var write = function (str) {
output.push(str);
};
var filter = function (val) {
for (var i = 1, len = arguments.length; i < len; i++) {
var arr = arguments[i], name = arr[0], filter = filters[name];
if (filter) {
arr[0] = val;
//now arr looks like [val, arg1, arg2]
val = filter.apply(data, arr);
} else {
throw new Error('Invalid filter: ' + name);
}
}
if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
//auto escape if not explicitly safe or already escaped
val = filters[opts.autoEscape].call(data, val);
}
output.push(val);
};
var each = function (obj, loopvar, fn1, fn2) {
if (obj == null) return;
var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length;
var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}};
push(ctx);
for (var i = 0; i < len; i++) {
extend(ctx.loop, {index: i + 1, index0: i});
fn1(ctx[loopvar] = arr[i]);
}
if (len === 0 && fn2) fn2();
pop();
};
var block = function (fn) {
push();
fn();
pop();
};
var render = function () {
return output.join('');
};
data = data || {};
opts = extend(defaults, opts || {});
var filters = extend({
html: function (val) {
return toString(val)
.split('&').join('&amp;')
.split('<').join('&lt;')
.split('>').join('&gt;')
.split('"').join('&quot;');
},
safe: function (val) {
return val;
},
toJson: function (val) {
if (typeof val === 'object') {
return JSON.stringify(val);
}
return toString(val);
}
}, opts.filters || {});
var stack = [create(data || {})], output = [];
return {
get: get,
set: set,
push: push,
pop: pop,
write: write,
filter: filter,
each: each,
block: block,
render: render
};
};
var runtime;
jinja.compile = function (markup, opts) {
opts = opts || {};
var parser = new Parser();
parser.readTemplateFile = this.readTemplateFile;
var code = [];
code.push('function render($) {');
code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
code.push.apply(code, parser.parse(markup));
code.push('return $.render();');
code.push('}');
code = code.join('\n');
if (opts.runtime === false) {
var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
} else {
runtime = runtime || (runtime = getRuntime.toString());
fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
}
return {render: fn};
};
jinja.render = function (markup, data, opts) {
var tmpl = jinja.compile(markup);
return tmpl.render(data, opts);
};
jinja.templateFiles = [];
jinja.readTemplateFile = function (name) {
var templateFiles = this.templateFiles || [];
var templateFile = templateFiles[name];
if (templateFile == null) {
throw new Error('Template file not found: ' + name);
}
return templateFile;
};
/*!
* Helpers
*/
function trimLeft(str) {
return str.replace(LEADING_SPACE, '');
}
function trimRight(str) {
return str.replace(TRAILING_SPACE, '');
}
function matchAll(str, reg, fn) {
//copy as global
reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
var match;
while ((match = reg.exec(str))) {
var result = fn(match[0], match.index, str);
if (typeof result == 'number') {
reg.lastIndex = result;
}
}
}
}));

1737
饭太硬/api/json5.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
饭太硬/api/pako.min.js vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.