mirror of https://github.com/qist/tvbox.git
parent
a70366fafa
commit
d3b8c7fe8f
@ -0,0 +1,22 @@
|
||||
var rule = {
|
||||
title:'310直播',
|
||||
host:'http://www.310.tv',
|
||||
url:'/?s=0&t=1&a=fyclass&g=fypage',
|
||||
searchUrl:'',
|
||||
searchable:0,
|
||||
quickSearch:0,
|
||||
class_name:'热门&足球&篮球',
|
||||
class_url:'0&1&2',
|
||||
headers:{
|
||||
'User-Agent':'MOBILE_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
play_parse:false,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
double:false,
|
||||
推荐:'*',
|
||||
一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href',
|
||||
二级:'*',
|
||||
搜索:'',
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
var rule = {
|
||||
title:'88看球',
|
||||
// host:'http://www.88kanqiu.cc',
|
||||
host:'http://www.88kanqiu.win',
|
||||
url:'/match/fyclass/live',
|
||||
searchUrl:'',
|
||||
searchable:0,
|
||||
quickSearch:0,
|
||||
class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live',
|
||||
headers:{
|
||||
'User-Agent':'PC_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
play_parse:true,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
double:false,
|
||||
推荐:'*',
|
||||
一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href',
|
||||
二级:{
|
||||
"title":".game-info-container&&Text;.customer-navbar-nav li&&Text",
|
||||
"img":"img&&src",
|
||||
"desc":";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text",
|
||||
"content":"div.game-time&&Text",
|
||||
"tabs":"js:TABS=['实时直播']",
|
||||
"lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data.links;let d=m3u.map(function(it){return it.name+'$'+it.url});LISTS.push(d)});"
|
||||
},
|
||||
搜索:'',
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,306 @@
|
||||
{
|
||||
"author": "春风",
|
||||
"ua": "Mozilla/5.0 (Linux; Android 10; LYA-AL00; HMSCore 6.4.0.312; GMSCore 20.15.16) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.4.300 Mobile Safari/537.36",
|
||||
// "homeUrl": "https://nmddd.com",
|
||||
"homeUrl": "https://m.xiangdao.me/",
|
||||
"dcVipFlag": "true",
|
||||
"dcPlayUrl": "true",
|
||||
"cateManual": {
|
||||
"电影": "1",
|
||||
"连续剧": "2",
|
||||
"动漫": "4",
|
||||
"综艺": "3"
|
||||
},
|
||||
"homeVodNode": "//section/section[position()>2]//ul[@class='resize_list']/li/a",
|
||||
"homeVodName": "/@title",
|
||||
"homeVodId": "/@href",
|
||||
"homeVodIdR": "/(S+).html",
|
||||
"homeVodImg": "//@data-echo",
|
||||
"homeVodImgR": "",
|
||||
"homeVodMark": "/div/span[2]/span/text()",
|
||||
"cateUrl": "https://m.xiangdao.me/vod-list-id-{cateId}-pg-{catePg}-order--by-{by}-class-0-year-{year}-letter--area-{area}-lang-.html",
|
||||
"cateVodNode": "//ul[@class='resize_list']/li/a",
|
||||
"cateVodName": "/@title",
|
||||
"cateVodId": "/@href",
|
||||
"cateVodIdR": "/(S+).html",
|
||||
"cateVodImg": "//@data-echo",
|
||||
"cateVodImgR": "",
|
||||
"cateVodMark": "/div/span[2]/span/em/text()",
|
||||
"dtUrl": "https://m.xiangdao.me/{vid}",
|
||||
"dtNode": "//body",
|
||||
"dtName": "//section[@class='page-hd']/a/@title",
|
||||
"dtNameR": "",
|
||||
"dtImg": "//section[@class='page-hd']/a/img/@src",
|
||||
"dtImgR": "",
|
||||
"dtCate": "",
|
||||
"dtCateR": "",
|
||||
"dtYear": "//span[contains(text(), '年代')]/following-sibling::a/text()",
|
||||
"dtYearR": "",
|
||||
"dtArea": "",
|
||||
"dtAreaR": "",
|
||||
"dtDirector": "//span[contains(text(), '导演')]/following-sibling::a/text()",
|
||||
"dtDirectorR": "",
|
||||
"dtActor": "//span[contains(text(), '主演')]/following-sibling::a/text()",
|
||||
"dtActorR": "",
|
||||
"dtDesc": "//article[@class='detail-con']/p/text()",
|
||||
"dtDescR": "",
|
||||
"dtFromNode": "//div[@class='hd']/ul/li/a",
|
||||
"dtFromName": "/text()",
|
||||
"dtFromNameR": "",
|
||||
"dtUrlNode": "//div[@class='numList']/ul",
|
||||
"dtUrlSubNode": "/li/a",
|
||||
"dtUrlId": "@href",
|
||||
"dtUrlIdR": "/(S+).html",
|
||||
"dtUrlName": "/text()",
|
||||
"dtUrlNameR": "",
|
||||
"playUrl": "https://m.xiangdao.me/{playUrl}",
|
||||
"playUa": "",
|
||||
"searchUrl": "https://m.xiangdao.me/index.php?m=vod-search&wd={wd}",
|
||||
"scVodNode": "//ul[@class='ulPicTxt clearfix']/li",
|
||||
"scVodName": "//span[@class='sTit']/text()",
|
||||
"scVodId": "//span[@class='sBtn']/a/@href",
|
||||
"scVodIdR": "/(S+).html",
|
||||
"scVodImg": "//img/@data-src",
|
||||
"scVodMark": "//span[@class='sDes'][2]/text()",
|
||||
"filter":{
|
||||
"1": [
|
||||
{
|
||||
"name":"类型",
|
||||
"key":"cateId",
|
||||
"value":[
|
||||
{"n":"全部","v":"1"},
|
||||
{"n":"动作片","v":"5"},
|
||||
{"n":"喜剧片","v":"6"},
|
||||
{"n":"爱情片","v":"7"},
|
||||
{"n":"科幻片","v":"8"},
|
||||
{"n":"恐怖片","v":"9"},
|
||||
{"n":"剧情片","v":"10"},
|
||||
{"n":"战争片","v":"11"},
|
||||
{"n":"惊悚片","v":"16"},
|
||||
{"n":"奇幻片","v":"17"}
|
||||
]},
|
||||
{
|
||||
"name":"年份",
|
||||
"key":"year",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"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"}
|
||||
]},
|
||||
{
|
||||
"name":"地区",
|
||||
"key":"area",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"大陆","v":"大陆"},
|
||||
{"n":"香港","v":"香港"},
|
||||
{"n":"台湾","v":"台湾"},
|
||||
{"n":"米国","v":"米国"},
|
||||
{"n":"韩国","v":"韩国"},
|
||||
{"n":"日本","v":"日本"},
|
||||
{"n":"泰国","v":"泰国"},
|
||||
{"n":"新加坡","v":"新加坡"},
|
||||
{"n":"马来西亚","v":"马来西亚"},
|
||||
{"n":"印度","v":"印度"},
|
||||
{"n":"英国","v":"英国"},
|
||||
{"n":"法国","v":"法国"},
|
||||
{"n":"加拿大","v":"加拿大"}
|
||||
]},
|
||||
{
|
||||
"name":"排序",
|
||||
"key":"by",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"时间","v":"time"},
|
||||
{"n":"人气","v":"hits"},
|
||||
{"n":"评分","v":"score"}
|
||||
]}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"name":"类型",
|
||||
"key":"cateId",
|
||||
"value":[
|
||||
{"n":"全部","v":"2"},
|
||||
{"n":"国产剧","v":"12"},
|
||||
{"n":"港台剧","v":"13"},
|
||||
{"n":"日韩剧","v":"14"},
|
||||
{"n":"欧美剧","v":"15"}
|
||||
]},
|
||||
{
|
||||
"name":"年份",
|
||||
"key":"year",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"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"}
|
||||
]},
|
||||
{
|
||||
"name":"地区",
|
||||
"key":"area",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"大陆","v":"大陆"},
|
||||
{"n":"香港","v":"香港"},
|
||||
{"n":"台湾","v":"台湾"},
|
||||
{"n":"米国","v":"米国"},
|
||||
{"n":"韩国","v":"韩国"},
|
||||
{"n":"日本","v":"日本"},
|
||||
{"n":"泰国","v":"泰国"},
|
||||
{"n":"新加坡","v":"新加坡"},
|
||||
{"n":"马来西亚","v":"马来西亚"},
|
||||
{"n":"印度","v":"印度"},
|
||||
{"n":"英国","v":"英国"},
|
||||
{"n":"法国","v":"法国"},
|
||||
{"n":"加拿大","v":"加拿大"}
|
||||
]},
|
||||
{
|
||||
"name":"排序",
|
||||
"key":"by",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"时间","v":"time"},
|
||||
{"n":"人气","v":"hits"},
|
||||
{"n":"评分","v":"score"}
|
||||
]}
|
||||
],
|
||||
"3": [
|
||||
{
|
||||
"name":"类型",
|
||||
"key":"cateId",
|
||||
"value":[
|
||||
{"n":"全部","v":"3"}
|
||||
]},
|
||||
{
|
||||
"name":"年份",
|
||||
"key":"year",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"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"}
|
||||
]},
|
||||
{
|
||||
"name":"地区",
|
||||
"key":"area",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"大陆","v":"大陆"},
|
||||
{"n":"香港","v":"香港"},
|
||||
{"n":"台湾","v":"台湾"},
|
||||
{"n":"米国","v":"米国"},
|
||||
{"n":"韩国","v":"韩国"},
|
||||
{"n":"日本","v":"日本"},
|
||||
{"n":"泰国","v":"泰国"},
|
||||
{"n":"新加坡","v":"新加坡"},
|
||||
{"n":"马来西亚","v":"马来西亚"},
|
||||
{"n":"印度","v":"印度"},
|
||||
{"n":"英国","v":"英国"},
|
||||
{"n":"法国","v":"法国"},
|
||||
{"n":"加拿大","v":"加拿大"}
|
||||
]},
|
||||
{
|
||||
"name":"排序",
|
||||
"key":"by",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"时间","v":"time"},
|
||||
{"n":"人气","v":"hits"},
|
||||
{"n":"评分","v":"score"}
|
||||
]}
|
||||
],
|
||||
"4": [
|
||||
{
|
||||
"name":"类型",
|
||||
"key":"cateId",
|
||||
"value":[
|
||||
{"n":"全部","v":"4"},
|
||||
{"n":"动漫剧","v":"18"},
|
||||
{"n":"动漫片","v":"19"}
|
||||
]},
|
||||
{
|
||||
"name":"年份",
|
||||
"key":"year",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"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"}
|
||||
]},
|
||||
{
|
||||
"name":"地区",
|
||||
"key":"area",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"大陆","v":"大陆"},
|
||||
{"n":"香港","v":"香港"},
|
||||
{"n":"台湾","v":"台湾"},
|
||||
{"n":"米国","v":"米国"},
|
||||
{"n":"韩国","v":"韩国"},
|
||||
{"n":"日本","v":"日本"},
|
||||
{"n":"泰国","v":"泰国"},
|
||||
{"n":"新加坡","v":"新加坡"},
|
||||
{"n":"马来西亚","v":"马来西亚"},
|
||||
{"n":"印度","v":"印度"},
|
||||
{"n":"英国","v":"英国"},
|
||||
{"n":"法国","v":"法国"},
|
||||
{"n":"加拿大","v":"加拿大"}
|
||||
]},
|
||||
{
|
||||
"name":"排序",
|
||||
"key":"by",
|
||||
"value":[
|
||||
{"n":"全部","v":""},
|
||||
{"n":"时间","v":"time"},
|
||||
{"n":"人气","v":"hits"},
|
||||
{"n":"评分","v":"score"}
|
||||
]}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
var rule = {
|
||||
title:'兔小贝',
|
||||
host:'https://www.tuxiaobei.com',
|
||||
homeUrl:'',
|
||||
url:'/list/mip-data?typeId=fyclass&page=fypage&callback=',
|
||||
detailUrl:'/play/fyid',
|
||||
searchUrl:'/search/index?key=**',
|
||||
searchable:2,
|
||||
headers:{
|
||||
'User-Agent':'MOBILE_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
class_url:'2&3&4&25',
|
||||
class_name:'儿歌&故事&国学&启蒙',
|
||||
//class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)',
|
||||
cate_exclude:'应用',
|
||||
推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href',
|
||||
double:true,
|
||||
limit:5,
|
||||
play_parse:true,
|
||||
lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;',
|
||||
// 一级:'json:data.items;name;image;collect_num;category_id+video_id',
|
||||
一级:'json:data.items;name;image;duration_string;video_id',
|
||||
二级:'*',
|
||||
搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href',
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,38 @@
|
||||
|
||||
var rule = {
|
||||
title:'有声小说吧',
|
||||
编码:'gb18030',
|
||||
host:'http://m.ysxs8.vip',
|
||||
url:'/downlist/fyclass_fypage.html',
|
||||
searchUrl:'/search.asp?page=fypage&searchword=**&searchtype=-1',
|
||||
searchable:2,
|
||||
quickSearch:0,
|
||||
headers:{
|
||||
'User-Agent':'MOBILE_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
// homeUrl:'/fenlei/',
|
||||
// class_parse: '.pd-class:eq(0) dd;a&&Text;a&&href;.*/(.*?).html',
|
||||
class_name:'网络玄幻&恐怖悬疑&传统武侠&都市言情&官场刑侦&历史军事&探险盗墓&职场商战&明朝那些事儿&评书下载&相声戏曲&人物传记&广播剧&百家讲坛&外语读物&有声文学&儿童读物&管理营销',
|
||||
class_url:'r52&r17&r12&r13&r14&r15&r45&r81&r36&r3&r7&r16&r18&r32&r35&r41&r4&r6',
|
||||
play_parse:true,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
// double:true,
|
||||
推荐:'.list-ul .list-li;.list-name&&Text;*;.module-slide-author&&Text;*',
|
||||
一级:'.book-ol&&li;h4&&Text;img&&data-original;.book-meta&&Text;a&&href',
|
||||
二级:{
|
||||
// title:'h2&&Text;.book-cell .book-rand-a:eq(2)&&Text',
|
||||
title:'h1&&Text;.book-cell .book-rand-a:eq(0)&&a&&Text',
|
||||
img:'.book img&&src',
|
||||
// desc:';;;;.book-des p&&Text',
|
||||
desc:';;;.book-rand-a:eq(2)&&Text;.book-des p&&Text',
|
||||
content:'.book-des--p&&Text',
|
||||
tabs:'.playlist-top&&h2',
|
||||
// lists:'js:pd=jsp.pd;let url=pd(html,".bookbutton&&a&&href");log(url);html=request(url);let v=pd(html,".booksite&&script&&Html");var document={};var VideoListJson;VideoListJson=eval(v.split("VideoListJson=")[1].split(",urlinfo")[0]);log(typeof VideoListJson);let list1=VideoListJson[0][1];LISTS=[list1];log(LISTS);',
|
||||
// 有声小说有防盗链,我服了(上面的列表数据正常拿到了,没法播放)
|
||||
// lists:'#playlist:eq(#id)&&ul&&li',
|
||||
lists:'#playlist ul li',
|
||||
},
|
||||
搜索:'*',
|
||||
}
|
||||
@ -0,0 +1,304 @@
|
||||
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};
|
||||
@ -0,0 +1,24 @@
|
||||
// 搜寻验证
|
||||
var rule = {
|
||||
title:'短视频',
|
||||
host:'http://www.sharenice.net',
|
||||
url:'/fyclass?page=fypage',
|
||||
//searchUrl:'/video/search?search_key=**',
|
||||
searchable:0,
|
||||
quickSearch:0,
|
||||
headers:{
|
||||
'User-Agent':'PC_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
// class_name:'抖音&快手&微视&火山&场库&体育&美拍&秒拍&全民&梨&好兔&美女&正能量&搞笑&社会&游戏&娱乐&旅游&萌系&生活&音乐&美食&明星&动漫&影视&时尚',
|
||||
class_name:'抖音&快手&微视&火山&场库&美拍&秒拍&全民&澎湃&好兔&开眼&美女&搞笑&社会&影视&音乐&娱乐&正能量&生活&动漫&体育&美食&萌系&旅游&游戏&明星&时尚',
|
||||
// class_url:'douyin&kuaishou&weishi&huoshan&changku&tags/t-5L2T6IKy.html&meipai&miaopai&quanmin&lishipin&haotu&tags/t-576O5aWz.html&tags/t-5q2j6IO96YeP.html&tags/t-5pCe56yR.html&tags/t-56S+5Lya.html&tags/t-5ri45oiP.html&tags/t-5aix5LmQ.html&tags/t-5peF5ri4.html&tags/t-6JCM57O7.html&tags/t-55Sf5rS7.html&tags/t-6Z+z5LmQ.html&tags/t-576O6aOf.html&tags/t-5piO5pif.html&tags/t-5Yqo5ryr.html&tags/t-5b2x6KeG.html&tags/t-5pe25bCa.html',
|
||||
class_url:'douyin&kuaishou&weishi&huoshan&changku&meipai&miaopai&quanmin&lishipin&haotu&kaiyan&t-576O5aWz&t-5pCe56yR&t-56S+5Lya&t-5b2x6KeG&t-6Z+z5LmQ&t-5aix5LmQ&t-5q2j6IO96YeP&t-55Sf5rS7&t-5Yqo5ryr&t-5L2T6IKy&t-576O6aOf&t-6JCM57O7&t-5peF5ri4&t-5ri45oiP&t-5piO5pif&t-5pe25bCa',
|
||||
play_parse:true,
|
||||
lazy:'js:/kuaishou/.test(input)?input=jsp.pdfh(request("http://m.sharenice.net/mobile"+input.split("net")[1]),".video-play-box&&video&&src"):input=jsp.pdfh(request("http://m.sharenice.net/mobile"+input.split("net")[1]),".video-play-box&&video&&src")+"#.mp4"',
|
||||
limit:6,
|
||||
double:false,
|
||||
推荐:'*',
|
||||
一级:'.item-box&&ul&&li;a&&title;img&&data-original;;a&&href',
|
||||
二级:'*',
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,277 @@
|
||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
let key = 'star';
|
||||
let host = 'https://www.histar.tv';
|
||||
let apiHost = 'https://aws.ulivetv.net';
|
||||
let types = {};
|
||||
// let ver = '';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, method, data) {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
};
|
||||
if (method == 'post') {
|
||||
headers['Content-Type'] = 'application/json';
|
||||
} else {
|
||||
headers['Cookie'] = 'userIP=127.0.0.1; aws-waf-token=';
|
||||
headers['Referer'] = host;
|
||||
}
|
||||
const res = await req(reqUrl, {
|
||||
method: method || 'get',
|
||||
headers: headers,
|
||||
data: data,
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
types = {
|
||||
'movie': '电影',
|
||||
'drama': '电视剧',
|
||||
'animation': '动漫',
|
||||
'variety': '综艺',
|
||||
'documentary': '纪录片',
|
||||
};
|
||||
// ver = await getVer();
|
||||
}
|
||||
|
||||
// async function getVer() {
|
||||
// const html = await request(host);
|
||||
// const $ = load(html);
|
||||
// const srcAttr = $('script[src*=\'buildManifest.js\']').attr('src');
|
||||
// return srcAttr.split('/')[3];
|
||||
// }
|
||||
|
||||
async function home(filter) {
|
||||
const typeList = _.keys(types);
|
||||
const classes = _.map(typeList, (item) => {
|
||||
return { type_id: item, type_name: types[item] };
|
||||
});
|
||||
const filterConfig = {};
|
||||
const jsonData = JSON.stringify(typeList);
|
||||
for (const typeId of typeList) {
|
||||
const html = await request(host + '/' + typeId + '/all/all/all');
|
||||
const $ = load(html);
|
||||
const json = $('#__NEXT_DATA__')[0].children[0].data;
|
||||
const obj = JSON.parse(json).props.pageProps.filterCondition;
|
||||
const label = convertTypeData(obj, 'label', '类型');
|
||||
const country = convertTypeData(obj, 'country', '地区');
|
||||
const time = convertTypeData(obj, 'time', '年份');
|
||||
const filterArray = [label, country, time];
|
||||
filterConfig[typeId] = filterArray;
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterConfig,
|
||||
});
|
||||
}
|
||||
|
||||
function convertTypeData(typeData, key, name) {
|
||||
if (!typeData || !typeData[key] || typeData[key].length <= 2) {
|
||||
return null;
|
||||
}
|
||||
let valueList = typeData[key];
|
||||
if (key == 'time') {
|
||||
valueList = valueList.sort((a, b) => { return b - a;});
|
||||
valueList.pop();
|
||||
}
|
||||
const values = _.map(valueList, (item) => {
|
||||
let name;
|
||||
let value;
|
||||
if (item instanceof Array) {
|
||||
name = item[0];
|
||||
value = item[0];
|
||||
} else {
|
||||
name = item.toString();
|
||||
value = item.toString();
|
||||
}
|
||||
return {
|
||||
n: name,
|
||||
v: value,
|
||||
};
|
||||
});
|
||||
values.unshift({
|
||||
n: '全部',
|
||||
v: '',
|
||||
});
|
||||
const typeClass = {
|
||||
key: key,
|
||||
name: name,
|
||||
init: '',
|
||||
value: values,
|
||||
};
|
||||
return typeClass;
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const html = await request(host);
|
||||
const $ = load(html);
|
||||
const json = $('#__NEXT_DATA__')[0].children[0].data;
|
||||
const obj = JSON.parse(json).props.pageProps.cards;
|
||||
const videos = [];
|
||||
_.each(obj, (cards) => {
|
||||
if (cards.name == '电视直播') return;
|
||||
_.each(cards.cards, (card) => {
|
||||
const v = {
|
||||
vod_id: card.id,
|
||||
vod_name: card.name,
|
||||
vod_pic: card.img,
|
||||
vod_remarks: card.countStr,
|
||||
};
|
||||
videos.push(v);
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
const limit = 16;
|
||||
const param = {
|
||||
chName: types[tid],
|
||||
page: pg,
|
||||
pageSize: limit,
|
||||
label: extend.label,
|
||||
country: extend.country,
|
||||
};
|
||||
if (extend.time) {
|
||||
const year = parseInt(extend.time);
|
||||
param.startTime = year;
|
||||
param.endTime = year;
|
||||
}
|
||||
const json = await request(apiHost + '/v3/web/api/filter', 'post', JSON.stringify(param));
|
||||
const data = JSON.parse(json).data;
|
||||
const videos = _.map(data.list, (card) => {
|
||||
return {
|
||||
vod_id: card.id,
|
||||
vod_name: card.name,
|
||||
vod_pic: card.img,
|
||||
vod_remarks: card.countStr,
|
||||
};
|
||||
});
|
||||
const page = parseInt(pg);
|
||||
const count = parseInt(data.total / limit);
|
||||
return JSON.stringify({
|
||||
page: page,
|
||||
pagecount: count,
|
||||
limit: limit,
|
||||
total: data.total,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(host + '/vod/detail/' + id);
|
||||
const $ = load(html);
|
||||
const json = $('#__NEXT_DATA__')[0].children[0].data;
|
||||
const obj = JSON.parse(json).props.pageProps;
|
||||
const vObj = obj.pageData;
|
||||
const vodAtom = {
|
||||
vod_id: id,
|
||||
vod_name: vObj.name,
|
||||
vod_type: vObj.chname,
|
||||
vod_pic: vObj.picurl,
|
||||
vod_area: vObj.country,
|
||||
vod_lang: vObj.language,
|
||||
vod_remarks: vObj.countStr,
|
||||
vod_actor: vObj.actor,
|
||||
vod_director: vObj.director,
|
||||
vod_content: vObj.desc,
|
||||
}
|
||||
const playInfo = obj.videosGroup;
|
||||
const playVod = {};
|
||||
_.each(playInfo, (info) => {
|
||||
const sourceName = info.name;
|
||||
let playList = '';
|
||||
const videoInfo = info.videos;
|
||||
const vodItems = _.map(videoInfo, (epObj) => {
|
||||
const epName = epObj.epInfo;
|
||||
const playUrl = epObj.purl
|
||||
return epName + '$' + playUrl;
|
||||
});
|
||||
if (_.isEmpty(vodItems)) return;
|
||||
playList = vodItems.join('#');
|
||||
playVod[sourceName] = playList;
|
||||
});
|
||||
vodAtom.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodAtom.vod_play_url = _.values(playVod).join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vodAtom],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let playUrl = id;
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
// const limit = 10;
|
||||
// const json = await request(host + '/_next/data/' + ver + '/search.json?word=' + encodeURIComponent(wd) + '&page=' + pg);
|
||||
// const data = JSON.parse(json).pageProps;
|
||||
// const videos = _.map(data.initList, (card) => {
|
||||
// return {
|
||||
// vod_id: card.id,
|
||||
// vod_name: card.name,
|
||||
// vod_pic: card.picurl,
|
||||
// vod_remarks: card.countStr,
|
||||
// };
|
||||
// });
|
||||
// const page = parseInt(pg);
|
||||
// const count = parseInt(data.total / limit);
|
||||
// return JSON.stringify({
|
||||
// page: page,
|
||||
// pagecount: count,
|
||||
// limit: limit,
|
||||
// total: data.total,
|
||||
// list: videos,
|
||||
// });
|
||||
const limit = 10;
|
||||
const param = {
|
||||
word: wd,
|
||||
page: pg,
|
||||
pageSize: limit,
|
||||
};
|
||||
const json = await request(apiHost + '/v3/web/api/search', 'post', JSON.stringify(param));
|
||||
const data = JSON.parse(json).data;
|
||||
const videos = _.map(data.list, (card) => {
|
||||
return {
|
||||
vod_id: card.id,
|
||||
vod_name: card.name,
|
||||
vod_pic: card.picurl,
|
||||
vod_remarks: card.countStr,
|
||||
};
|
||||
});
|
||||
const page = parseInt(pg);
|
||||
const count = parseInt(data.total / limit);
|
||||
return JSON.stringify({
|
||||
page: page,
|
||||
pagecount: count,
|
||||
limit: limit,
|
||||
total: data.total,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@ -0,0 +1,271 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let siteUrl = 'https://www.cs1369.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let headers = {};
|
||||
|
||||
async function request(reqUrl, postData, agentSp, get) {
|
||||
|
||||
let res = await req(reqUrl, {
|
||||
method: get ? 'get' : 'post',
|
||||
headers: headers,
|
||||
data: postData || {},
|
||||
postType: get ? '' : 'form',
|
||||
});
|
||||
|
||||
let content = res.content;
|
||||
return content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [{
|
||||
type_id: '1',
|
||||
type_name: '电影',
|
||||
},{
|
||||
type_id: '2',
|
||||
type_name: '电视',
|
||||
},{
|
||||
type_id: '3',
|
||||
type_name: '动漫',
|
||||
}];
|
||||
|
||||
let filterObj = genFilterObj();
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
let videos = await getVideos(siteUrl);
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
let url = siteUrl;
|
||||
if (filter) {
|
||||
url = url + '/show';
|
||||
let area = extend['area'];
|
||||
if (area && area != '') {
|
||||
url = url + '/area/' + area;
|
||||
}
|
||||
let clazz = extend['class']
|
||||
if (clazz && clazz != '') {
|
||||
url = url + '/class/' + clazz;
|
||||
}
|
||||
let id = extend['id'];
|
||||
if(id && id != '') {
|
||||
url = url + '/id/' + id;
|
||||
} else {
|
||||
url = url + '/id/' + tid;
|
||||
}
|
||||
let year = extend['year'];
|
||||
if (year && year != '') {
|
||||
url = url + '/year/' + year;
|
||||
}
|
||||
if (pg && pg > 1) {
|
||||
url = url + '/page/' + pg;
|
||||
}
|
||||
url = url + '.html';
|
||||
} else {
|
||||
url = url + '/vod/type';
|
||||
url = url + '/id/' + tid;
|
||||
if (pg && pg > 1) {
|
||||
url = url + '/page/' + pg;
|
||||
}
|
||||
url = url + '.html';
|
||||
}
|
||||
//console.log('cate page url:', url);
|
||||
|
||||
let videos = await getVideos(url);
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
let url = siteUrl + id;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
let actors = _.map($('div.stui-content__detail > p:nth-child(3) > a'), (n) => {
|
||||
return $(n).text();
|
||||
});
|
||||
let actor = actors.join(' ');
|
||||
let director = $('div.stui-content__detail > p:nth-child(4) > a').text();
|
||||
let title = $('div.stui-content__detail > h1.title').text();
|
||||
let content = $('div.stui-pannel_bd > p').text();
|
||||
const cards = $('div.stui-pannel_bd.col-pd.clearfix > ul > li > a');
|
||||
let playUrls = _.map(cards, (n) => {
|
||||
return $(n).text() + '$' + n.attribs['href'];
|
||||
});
|
||||
|
||||
const video = {
|
||||
vod_actor: actor,
|
||||
vod_play_from: 'Leospring',
|
||||
vod_play_url: playUrls.join('#'),
|
||||
vod_director: director,
|
||||
vod_content: content,
|
||||
};
|
||||
const list = [video];
|
||||
const result = { list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {
|
||||
//console.log('err', e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let url = siteUrl + '/search/wd/' + wd + '.html';
|
||||
//console.log('search url:', url);
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.stui-pannel_bd > ul.stui-vodlist__media.col-pd.clearfix > li');
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = $($(n).find('div.thumb > a')[0]).attr('href');
|
||||
let name = $($(n).find('div.thumb > a')[0]).attr('title');
|
||||
let pic = $($(n).find('div.thumb > a')[0]).attr('data-original');
|
||||
let remark = $($(n).find('div.thumb > a > span:nth-child(2)')[0]).text();
|
||||
|
||||
return {
|
||||
vod_id: id,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let url = siteUrl + id;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
let info = '';
|
||||
for(const n of $('script')) {
|
||||
if($(n).text().indexOf('player_aaaa=') > 0) {
|
||||
info = $(n).text().split('player_aaaa=')[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//console.log('info', info);
|
||||
let obj = JSON.parse(info);
|
||||
let playUrl = obj.url;
|
||||
if(obj.encrypt == 1) {
|
||||
playUrl = unescape(playUrl);
|
||||
} else if (obj.encrypt == 2) {
|
||||
playUrl = unescape(base64Decode(playUrl))
|
||||
}
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function genFilterObj() {
|
||||
return {
|
||||
'1':[
|
||||
{
|
||||
key: 'id',
|
||||
name: '类型',
|
||||
value: [{n:'全部',v:''},{n:'动作片',v:'6'},{n:'喜剧片',v:'7'},{n:'爱情片',v:'8'},{n:'科幻片',v:'9'},{n:'恐怖片',v:'10'},{n:'剧情片',v:'11'},{n:'战争片',v:'12'},{n:'动画片',v:'13'},{n:'纪录片',v:'14'}]
|
||||
},{
|
||||
key: 'class',
|
||||
name: '剧情',
|
||||
value: [{n:'全部',v:''},{n:'喜剧',v:'喜剧'},{n:'爱情',v:'爱情'},{n:'恐怖',v:'恐怖'},{n:'动作',v:'动作'},{n:'科幻',v:'科幻'},{n:'剧情',v:'剧情'},{n:'战争',v:'战争'},{n:'警匪',v:'警匪'},{n:'犯罪',v:'犯罪'},{n:'动画',v:'动画'},{n:'奇幻',v:'奇幻'},{n:'武侠',v:'武侠'},{n:'冒险',v:'冒险'},{n:'枪战',v:'枪战'},{n:'悬疑',v:'悬疑'},{n:'惊悚',v:'惊悚'},{n:'经典',v:'经典'},{n:'青春',v:'青春'},{n:'文艺',v:'文艺'},{n:'微电影',v:'微电影'},{n:'古装',v:'古装'},{n:'历史',v:'历史'},{n:'运动',v:'运动'},{n:'农村',v:'农村'},{n:'儿童',v:'儿童'},{n:'网络电影',v:'网络电影'}]
|
||||
},{
|
||||
key: 'area',
|
||||
name: '地区',
|
||||
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
|
||||
},{
|
||||
key: 'year',
|
||||
name: '年份',
|
||||
value: [{n:'全部',v:''},{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'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
|
||||
}],
|
||||
'2':[{
|
||||
key: 'id',
|
||||
name: '类型',
|
||||
value: [{n:'全部',v:''},{n:'内地',v:'15'},{n:'美国',v:'16'},{n:'英国',v:'17'},{n:'韩国',v:'18'},{n:'泰国',v:'20'},{n:'日本',v:'21'},{n:'香港',v:'22'},{n:'台湾',v:'23'}]
|
||||
},{
|
||||
key: 'class',
|
||||
name: '剧情',
|
||||
value: [{n:'全部',v:''},{n:'古装',v:'古装'},{n:'战争',v:'战争'},{n:'青春偶像',v:'青春偶像'},{n:'喜剧',v:'喜剧'},{n:'家庭',v:'家庭'},{n:'犯罪',v:'犯罪'},{n:'动作',v:'动作'},{n:'奇幻',v:'奇幻'},{n:'剧情',v:'剧情'},{n:'历史',v:'历史'},{n:'经典',v:'经典'},{n:'乡村',v:'乡村'},{n:'情景',v:'情景'},{n:'商战',v:'商战'},{n:'网剧',v:'网剧'}]
|
||||
},{
|
||||
key: 'area',
|
||||
name: '地区',
|
||||
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
|
||||
},{
|
||||
key: 'year',
|
||||
name: '年份',
|
||||
value: [{n:'全部',v:''},{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'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
|
||||
}],
|
||||
'3':[{
|
||||
key: 'id',
|
||||
name: '类型',
|
||||
value: [{n:'全部',v:''},{n:'内地',v:'25'},{n:'日漫',v:'26'},{n:'欧美',v:'27'},{n:'其他',v:'28'}]
|
||||
},{
|
||||
key: 'class',
|
||||
name: '剧情',
|
||||
value: [{n:'全部',v:''},{n:'情感',v:'情感'},{n:'科幻',v:'科幻'},{n:'热血',v:'热血'},{n:'推理',v:'推理'},{n:'搞笑',v:'搞笑'},{n:'冒险',v:'冒险'},{n:'萝莉',v:'萝莉'},{n:'校园',v:'校园'},{n:'动作',v:'动作'},{n:'机战',v:'机战'},{n:'运动',v:'运动'},{n:'战争',v:'战争'},{n:'少年',v:'少年'},{n:'少女',v:'少女'},{n:'社会',v:'社会'},{n:'原创',v:'原创'},{n:'亲子',v:'亲子'},{n:'益智',v:'益智'},{n:'励志',v:'励志'}]
|
||||
},{
|
||||
key: 'area',
|
||||
name: '地区',
|
||||
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
|
||||
},{
|
||||
key: 'year',
|
||||
name: '年份',
|
||||
value: [{n:'全部',v:''},{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'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
async function getVideos(url) {
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.stui-vodlist__box > a')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['href'];
|
||||
let name = n.attribs['title'];
|
||||
let pic = n.attribs['data-original'];
|
||||
let remark = $($(n).find('span:nth-child(2)')[0]).text();
|
||||
return {
|
||||
vod_id: id,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
};
|
||||
});
|
||||
return videos;
|
||||
}
|
||||
|
||||
function base64Encode(text) {
|
||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||
}
|
||||
|
||||
function base64Decode(text) {
|
||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@ -0,0 +1,162 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
|
||||
let imgUrl = 'https://music.jsbaidu.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let headers = {};
|
||||
|
||||
async function request(reqUrl, postData, agentSp, get) {
|
||||
|
||||
let res = await req(reqUrl, {
|
||||
method: get ? 'get' : 'post',
|
||||
headers: headers,
|
||||
data: postData || {},
|
||||
postType: get ? '' : 'form',
|
||||
});
|
||||
|
||||
let content = res.content;
|
||||
return content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
if (cfg.ext) {
|
||||
siteUrl = cfg.ext;
|
||||
}
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(siteUrl);
|
||||
const $ = load(html);
|
||||
const cates = $('ul.aside-menu-list.channel > li')
|
||||
let classes = _.map(cates, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('a > span')[0]).text();
|
||||
return {
|
||||
type_id: id,
|
||||
type_name: name,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const html = await request(siteUrl);
|
||||
const $ = load(html);
|
||||
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
|
||||
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
|
||||
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
|
||||
return {
|
||||
book_id: id,
|
||||
book_name: name,
|
||||
book_pic: pic,
|
||||
book_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let url = siteUrl + '/ajax/';
|
||||
let res = await req(url, {
|
||||
method: 'post',
|
||||
data: {
|
||||
act: 'tag_music',
|
||||
type: 'tuijian',
|
||||
tid: tid,
|
||||
page: pg,
|
||||
lang: '',
|
||||
},
|
||||
postType: 'form',
|
||||
});
|
||||
//console.log('catedata:', res);
|
||||
let data = JSON.parse(res.content).data;
|
||||
let videos = [];
|
||||
for(let i=0;i<data.length;i++){
|
||||
const item = data[i];
|
||||
videos.push({
|
||||
book_id: item['mp3'],
|
||||
book_name: item['mname'],
|
||||
book_pic: item['pic'].replace('/img', imgUrl),
|
||||
book_remarks: item['play_time'],
|
||||
})
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
let playUrl = id;
|
||||
if(!id.startsWith('http')) {
|
||||
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
|
||||
}
|
||||
|
||||
const video = {
|
||||
book_id: id,
|
||||
book_actor: 'Leospring',
|
||||
book_play_from: 'Leospring',
|
||||
urls: '播放$' + playUrl,
|
||||
book_director: 'Leospring',
|
||||
book_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
|
||||
};
|
||||
const list = [video];
|
||||
const result = { list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let url = siteUrl + '/search/?key=' + wd;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
|
||||
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
|
||||
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
|
||||
|
||||
return {
|
||||
book_id: id,
|
||||
book_name: name,
|
||||
book_pic: pic,
|
||||
book_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@ -0,0 +1,163 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
//代理地址
|
||||
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
|
||||
let imgUrl = 'https://music.jsbaidu.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let headers = {};
|
||||
|
||||
async function request(reqUrl, postData, agentSp, get) {
|
||||
|
||||
let res = await req(reqUrl, {
|
||||
method: get ? 'get' : 'post',
|
||||
headers: headers,
|
||||
data: postData || {},
|
||||
postType: get ? '' : 'form',
|
||||
});
|
||||
|
||||
let content = res.content;
|
||||
return content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
if (cfg.ext) {
|
||||
siteUrl = cfg.ext;
|
||||
}
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(siteUrl);
|
||||
const $ = load(html);
|
||||
const cates = $('ul.aside-menu-list.channel > li')
|
||||
let classes = _.map(cates, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('a > span')[0]).text();
|
||||
return {
|
||||
type_id: id,
|
||||
type_name: name
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const html = await request(siteUrl);
|
||||
const $ = load(html);
|
||||
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div');
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
|
||||
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
|
||||
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
|
||||
return {
|
||||
vod_id: id,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let url = siteUrl + '/ajax/';
|
||||
let res = await req(url, {
|
||||
method: 'post',
|
||||
data: {
|
||||
act: 'tag_music',
|
||||
type: 'tuijian',
|
||||
tid: tid,
|
||||
page: pg,
|
||||
lang: ''
|
||||
},
|
||||
postType: 'form'
|
||||
});
|
||||
//console.log('catedata:', res);
|
||||
let data = JSON.parse(res.content).data;
|
||||
let videos = [];
|
||||
for(let i=0;i<data.length;i++){
|
||||
const item = data[i];
|
||||
videos.push({
|
||||
vod_id: item['mp3'],
|
||||
vod_name: item['mname'],
|
||||
vod_pic: item['pic'].replace('/img', imgUrl),
|
||||
vod_remarks: item['play_time']
|
||||
})
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
let playUrl = id;
|
||||
if(!id.startsWith('http')) {
|
||||
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
|
||||
}
|
||||
|
||||
const video = {
|
||||
vod_id: id,
|
||||
vod_actor: 'Leospring',
|
||||
vod_play_from: 'Leospring',
|
||||
vod_play_url: '播放$' + playUrl,
|
||||
vod_director: 'Leospring',
|
||||
vod_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
|
||||
};
|
||||
const list = [video];
|
||||
const result = { list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let url = siteUrl + '/search/?key=' + wd;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
|
||||
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
|
||||
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
|
||||
|
||||
return {
|
||||
vod_id: id,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,10 +0,0 @@
|
||||
{
|
||||
"drives": [
|
||||
{
|
||||
"name": "alist.jar",
|
||||
"search": true,
|
||||
"searchable": true,
|
||||
"server": "http://192.168.101.13:5244"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
[
|
||||
{"name":"范明明OfficalSite","url":"https://live.fanmingming.com/tv/m3u/global.m3u"},
|
||||
{"name":"范明明GitHub","url":"https://mirror.ghproxy.com/raw.githubusercontent.com/fanmingming/live/main/tv/m3u/global.m3u"},
|
||||
{"name":"范明明IPV6","url":"https://live.fanmingming.com/tv/m3u/ipv6.m3u"}
|
||||
]
|
||||
@ -1,72 +0,0 @@
|
||||
{
|
||||
"author": "率性而活",
|
||||
"ua":"Mozilla/5.0 (Linux; Android 8.1.0; OPPO R11t Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.19 SP-engine/2.15.0 baiduboxapp/11.19.5.10 (Baidu; P1 8.1.0)",
|
||||
//125.88.199.34 m.live.qq.com
|
||||
|
||||
//"dcVipFlag": "true",
|
||||
//"dcPlayUrl": "true",
|
||||
"homeUrl": "https://m.live.qq.com/directory/game/Basketball",
|
||||
"cateManual": {
|
||||
"篮球": "@directory/game/Basketball",
|
||||
"足球":"@directory/game/Football",
|
||||
"搏击":"@directory/game/Fight",
|
||||
"网球排球":"@directory/game/Tennis",
|
||||
"英文原声":"@directory/game/English",
|
||||
"台球":"@directory/game/Billiards",
|
||||
"棒球/橄榄球/冰球":"@directory/game/MLB",
|
||||
"NBA":"@directory/game/NBA",
|
||||
"CBA":"@directory/game/CBA",
|
||||
"颜值":"@directory/game/YZ",
|
||||
"棋牌/游戏":"@directory/game/Game"
|
||||
|
||||
},
|
||||
"homeVodNode": "//a[contains(@href,'/10')]","homeVodName": "/div/following-sibling::p[1]/text()","homeVodId": "/@href","homeVodIdR": "/(\\S+)","homeVodImg": "//div[contains(@style,'http')]/@style","homeVodImgR": "(http.*?jpg)","homeVodMark": "",
|
||||
|
||||
"cateUrl2": "https://m.live.qq.com/{cateId}",
|
||||
|
||||
"cateVodNode": "//a[contains(@href,'/10')]",
|
||||
|
||||
"cateVodName": "/div/following-sibling::p[1]/text()",
|
||||
|
||||
"cateVodId": "/@href",
|
||||
|
||||
"cateVodIdR": "/(\\S+)",
|
||||
|
||||
"cateVodImg": "//div[contains(@style,'http')]/@style",
|
||||
|
||||
"cateVodImgR": "(http.*?jpg)",
|
||||
|
||||
"cateVodMark": "",
|
||||
|
||||
|
||||
//
|
||||
"dtUrl": "https://m.live.qq.com/{vid}",
|
||||
"dtNode": "//body",
|
||||
"dtName": "//p[contains(@class,'p-title')]/text()",
|
||||
"dtNameR": "(“.*?”)",
|
||||
"dtImg": "//div[contains(@class,'share-bar')]/@data-pic",
|
||||
"dtImgR": "",
|
||||
"dtCate": "",
|
||||
"dtCateR": "",
|
||||
"dtYear": "",
|
||||
"dtYearR": "",
|
||||
"dtArea": "",
|
||||
"dtAreaR": "",
|
||||
"dtDirector": "",
|
||||
"dtDirectorR": "",
|
||||
"dtActor": "",
|
||||
"dtActorR": "",
|
||||
"dtDesc": "",
|
||||
"dtDescR": "",
|
||||
"dtFromNode": "//p[contains(@class,'p-title')]",
|
||||
"dtFromName": "/text()",
|
||||
"dtFromNameR": "(\\企鹅体育)",
|
||||
"dtUrlNode": "//div[contains(@class,'wenzi')]",
|
||||
"dtUrlSubNode": "/a",
|
||||
"dtUrlId": "/text()",
|
||||
"dtUrlIdR": "m.live.qq.com/(\\S+)",
|
||||
"dtUrlName": "/text()",
|
||||
"dtUrlNameR": "(\\d+)",
|
||||
"playUrl": "https://m.live.qq.com/{playUrl}",
|
||||
"playUa":"{\"User-Agent\":\"okhttp/3.12.11\"}"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue