mirror of
https://github.com/qist/tvbox.git
synced 2025-01-23 18:34:58 +08:00
update HQ
This commit is contained in:
parent
cc37a7611e
commit
6b2cffb95f
@ -99,7 +99,6 @@
|
|||||||
{"key":"drpy_js_AnFuns","name":"动漫┃AnFuns[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/AnFuns.js"},
|
{"key":"drpy_js_AnFuns","name":"动漫┃AnFuns[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/AnFuns.js"},
|
||||||
{"key":"drpy_js_NT动漫","name":"动漫┃NT动漫[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/NT动漫.js"},
|
{"key":"drpy_js_NT动漫","name":"动漫┃NT动漫[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/NT动漫.js"},
|
||||||
{"key":"drpy_js_NyaFun","name":"动漫┃NyaFun[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/NyaFun.js"},
|
{"key":"drpy_js_NyaFun","name":"动漫┃NyaFun[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/NyaFun.js"},
|
||||||
{"key":"drpy_js_omofun动漫","name":"动漫┃omofun动漫[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/omofun动漫.js"},
|
|
||||||
{"key":"drpy_js_听书网","name":"听书┃听书网[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/听书网.js"},
|
{"key":"drpy_js_听书网","name":"听书┃听书网[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/听书网.js"},
|
||||||
{"key":"drpy_js_喜马拉雅","name":"听书┃喜马拉雅[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/喜马拉雅.js"},
|
{"key":"drpy_js_喜马拉雅","name":"听书┃喜马拉雅[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/喜马拉雅.js"},
|
||||||
{"key":"drpy_js_评书随身听","name":"评书┃评书随身听[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/评书随身听.js"},
|
{"key":"drpy_js_评书随身听","name":"评书┃评书随身听[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/评书随身听.js"},
|
||||||
@ -108,11 +107,9 @@
|
|||||||
{"key":"drpy_js_广播迷FM","name":"广播┃广播迷FM[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/广播迷FM.js"},
|
{"key":"drpy_js_广播迷FM","name":"广播┃广播迷FM[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/广播迷FM.js"},
|
||||||
{"key":"drpy_js_蜻蜓FM","name":"广播┃蜻蜓FM[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/蜻蜓FM.js"},
|
{"key":"drpy_js_蜻蜓FM","name":"广播┃蜻蜓FM[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/蜻蜓FM.js"},
|
||||||
{"key":"drpy_js_DJ音乐","name":"音频┃DJ音乐[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/DJ音乐.js"},
|
{"key":"drpy_js_DJ音乐","name":"音频┃DJ音乐[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/DJ音乐.js"},
|
||||||
{"key":"drpy_js_种子音乐","name":"音频┃种子音乐[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/种子音乐.js"},
|
|
||||||
{"key":"drpy_js_短视频","name":"聚合┃短视频[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/短视频.js"},
|
{"key":"drpy_js_短视频","name":"聚合┃短视频[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/短视频.js"},
|
||||||
{"key":"drpy_js_酷6网","name":"聚合┃酷6网[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/酷6网.js"},
|
{"key":"drpy_js_酷6网","name":"聚合┃酷6网[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/酷6网.js"},
|
||||||
{"key":"drpy_js_网易公版影像","name":"聚合┃网易公版[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/网易公版影像.js"},
|
{"key":"drpy_js_网易公版影像","name":"聚合┃网易公版[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/网易公版影像.js"},
|
||||||
{"key":"drpy_js_酷狗MV","name":"MV┃酷狗[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/酷狗MV.js"},
|
|
||||||
{"key":"drpy_js_酷奇MV","name":"MV┃酷奇[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/酷奇MV.js"},
|
{"key":"drpy_js_酷奇MV","name":"MV┃酷奇[js]","type":3,"api":"./lib/drpy2.min.js","changeable":0,"ext":"./js/酷奇MV.js"},
|
||||||
|
|
||||||
{"key":"csp_xBPQ_来看","name":"影视┃耐看[XBPQ]","type":3,"api":"csp_XBPQ","ext":"./XBPQ/来看.json"},
|
{"key":"csp_xBPQ_来看","name":"影视┃耐看[XBPQ]","type":3,"api":"csp_XBPQ","ext":"./XBPQ/来看.json"},
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
{
|
{
|
||||||
"spider":"./jar/okpng.txt;md5;793a740f07f09bddfcafb57eb192e2ed",
|
"spider": "./jar/okpng.txt;md5;3fd3e1649b32f847bc2f585947b9386f",
|
||||||
"lives":[{"name":"live","type":0,"url":"./list.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"}],
|
"lives":[{"name":"live","type":0,"url":"./list.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"}],
|
||||||
"sites":[
|
"sites":[
|
||||||
{"key":"豆瓣","name":"豆瓣","type":3,"api":"csp_Douban","searchable":0,"changeable":1},
|
{"key":"豆瓣","name":"豆瓣","type":3,"api":"csp_Douban","searchable":0,"changeable":1},
|
||||||
{"key":"南瓜弹幕版","name":"南瓜","type": 3,"api":"csp_Nangua","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 10},
|
{"key":"南瓜弹幕版","name":"南瓜","type": 3,"api":"csp_Nangua","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 10},
|
||||||
{"key":"厂长弹幕版","name":"厂长","type": 3,"api":"csp_Czzy","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 25},
|
{"key":"厂长弹幕版","name":"厂长","type": 3,"api":"csp_Czzy","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 25},
|
||||||
{"key":"天天弹幕版","name":"天天","type": 3,"api":"csp_TianTian","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 10},
|
// {"key":"天天弹幕版","name":"天天","type": 3,"api":"csp_TianTian","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 10},
|
||||||
{"key":"️爱看Bot弹幕版","name":"爱看Bot","type": 3,"api":"csp_Ikanbot","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 10},
|
{"key":"️爱看Bot弹幕版","name":"爱看Bot","type": 3,"api":"csp_Ikanbot","searchable":1,"quickSearch":1,"filterable":1,"ext": {"danmu": true}, "timeout": 10},
|
||||||
{"key":"阿里合集","name":"阿里合集","type": 3,"api":"csp_AliShare","searchable":1,"changeable":0,"filterable":0,"ext": {
|
{"key":"阿里合集","name":"阿里合集","type": 3,"api":"csp_AliShare","searchable":1,"changeable":0,"filterable":0,"ext": {
|
||||||
"token": "http://127.0.0.1:9978/file/TV/token.txt"
|
"token": "http://127.0.0.1:9978/file/TV/token.txt"
|
||||||
}, "timeout":30},
|
}, "timeout":30},
|
||||||
{"key":"新6V","name":"新6V","type":3,"api":"csp_Xb6v","searchable":1,"changeable":0,"timeout":30},
|
{"key":"新6V","name":"新6V","type":3,"api":"csp_Xb6v","searchable":1,"changeable":0,"timeout":30},
|
||||||
{"key":"玩偶弹幕版","name":"玩偶哥哥","type":3,"api":"csp_Wogg","searchable":1,"filterable":1,"changeable":0, "ext": { "token": "http://127.0.0.1:9978/file/TV/token.txt","wogg": true, "danmu" : true}, "timeout":30},
|
{"key":"玩偶弹幕版","name":"玩偶哥哥","type":3,"api":"csp_Wogg","searchable":1,"filterable":1,"changeable":0, "ext": { "token": "http://127.0.0.1:9978/file/TV/token.txt","wogg": true, "danmu" : true}, "timeout":30},
|
||||||
{"key":"运输车弹幕版","name":"运输车","type":3,"api":"csp_Wogg","searchable":1,"filterable":1,"changeable":0, "ext": { "token": "http://127.0.0.1:9978/file/TV/token.txt","cookie": "http://127.0.0.1:9978/file/TV/quark.txt","site": "https://www.weixine.net", "danmu" : true}, "timeout":30},
|
{"key":"运输车弹幕版","name":"影视车","type":3,"api":"csp_Wogg","searchable":1,"filterable":1,"changeable":0, "ext": { "token": "http://127.0.0.1:9978/file/TV/token.txt","cookie": "http://127.0.0.1:9978/file/TV/quark.txt","site": "https://www.weixine.link", "danmu" : true}, "timeout":30},
|
||||||
{"key":"土豆网盘弹幕","name":"土豆网盘","type":3,"api":"csp_Wobg","quickSearch":1, "changeable":1, "filterable":1, "ext": {
|
{"key":"土豆网盘弹幕","name":"土豆网盘","type":3,"api":"csp_Wobg","quickSearch":1, "changeable":1, "filterable":1, "ext": {
|
||||||
"token": "http://127.0.0.1:9978/file/TV/token.txt", "cookie": "http://127.0.0.1:9978/file/TV/quark.txt",
|
"token": "http://127.0.0.1:9978/file/TV/token.txt", "cookie": "http://127.0.0.1:9978/file/TV/quark.txt",
|
||||||
"site": "https://ali.lvdoui.top",
|
"site": "https://ali.lvdoui.top",
|
||||||
@ -52,5 +52,5 @@
|
|||||||
{"key":"应用商店","name":"应用商店","type":3,"api":"csp_Market","searchable":0,"changeable":0,"ext":"./json/market.json","style":{"type":"rect","ratio":1}}
|
{"key":"应用商店","name":"应用商店","type":3,"api":"csp_Market","searchable":0,"changeable":0,"ext":"./json/market.json","style":{"type":"rect","ratio":1}}
|
||||||
],
|
],
|
||||||
"doh":[{"name":"Google","url":"https://dns.google/dns-query","ips":["8.8.4.4","8.8.8.8"]},{"name":"Cloudflare","url":"https://cloudflare-dns.com/dns-query","ips":["1.1.1.1","1.0.0.1","2606:4700:4700::1111","2606:4700:4700::1001"]},{"name":"AdGuard","url":"https://dns.adguard.com/dns-query","ips":["94.140.14.140","94.140.14.141"]},{"name":"DNSWatch","url":"https://resolver2.dns.watch/dns-query","ips":["84.200.69.80","84.200.70.40"]},{"name":"Quad9","url":"https://dns.quad9.net/dns-quer","ips":["9.9.9.9","149.112.112.112"]}],
|
"doh":[{"name":"Google","url":"https://dns.google/dns-query","ips":["8.8.4.4","8.8.8.8"]},{"name":"Cloudflare","url":"https://cloudflare-dns.com/dns-query","ips":["1.1.1.1","1.0.0.1","2606:4700:4700::1111","2606:4700:4700::1001"]},{"name":"AdGuard","url":"https://dns.adguard.com/dns-query","ips":["94.140.14.140","94.140.14.141"]},{"name":"DNSWatch","url":"https://resolver2.dns.watch/dns-query","ips":["84.200.69.80","84.200.70.40"]},{"name":"Quad9","url":"https://dns.quad9.net/dns-quer","ips":["9.9.9.9","149.112.112.112"]}],
|
||||||
"ads":["static-mozai.4gtv.tv"]
|
"ads":["static-mozai.4gtv.tv","s3t3d2y8.afcdn.net"]
|
||||||
}
|
}
|
||||||
|
28
0825.json
28
0825.json
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"spider":"./jar/pg.jar;md5;2b8ee1791855c6e977c13bf78ac9ea13",
|
"spider":"./jar/pg.jar;md5;0291baf74f90cc4d908393c5dcbea4bb",
|
||||||
"lives":[{"name":"初秋语•综合","type":0,"url":"./list.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
"lives":[{"name":"初秋语•综合","type":0,"url":"./list.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
||||||
{"name":"Ray•综合","type":0,"url":"https://github.moeyy.xyz/https://raw.githubusercontent.com/dxawi/0/main/tvlive.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
{"name":"Ray•综合","type":0,"url":"https://github.moeyy.xyz/https://raw.githubusercontent.com/dxawi/0/main/tvlive.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
||||||
{"name":"俊于•综合","type":0,"url":"http://home.jundie.top:81/Cat/tv/live.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"},
|
{"name":"俊于•综合","type":0,"url":"http://home.jundie.top:81/Cat/tv/live.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"},
|
||||||
@ -30,12 +30,12 @@
|
|||||||
|
|
||||||
{"key":"配置中心","name":"配置中心","type":3,"api":"csp_Config","searchable":0,"changeable":0,"style":{"type":"rect","ratio":1},"ext":"http://127.0.0.1:9978/file/TV/token.json"},
|
{"key":"配置中心","name":"配置中心","type":3,"api":"csp_Config","searchable":0,"changeable":0,"style":{"type":"rect","ratio":1},"ext":"http://127.0.0.1:9978/file/TV/token.json"},
|
||||||
{"key":"Moli","name":"HDmoli","type":3,"api":"csp_Moli","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.hdmoli.pro/$$$null$$$1$$$./json/moli.json"},
|
{"key":"Moli","name":"HDmoli","type":3,"api":"csp_Moli","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.hdmoli.pro/$$$null$$$1$$$./json/moli.json"},
|
||||||
{"key":"csp_WoGG","name":"哥哥","type":3,"api":"csp_Wogg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://wogg.xyz/|104.16.245.50$$$1$$$./json/wogg.json", "timeout":30},
|
{"key":"csp_WoGG","name":"哥哥","type":3,"api":"csp_Wogg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.wogg.xyz/$$$1$$$./json/wogg.json", "timeout":30},
|
||||||
{"key":"影视车","name":"影视车","type":3,"api":"csp_Wogg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.weixine.net/$$$1$$$./json/wogg.json", "timeout":30},
|
{"key":"影视车","name":"影视车","type":3,"api":"csp_Wogg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.weixine.link/$$$1$$$./json/wogg.json", "timeout":30},
|
||||||
{"key":"csp_Wobg","name":"表哥","type":3,"api":"csp_Wobg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://wobge.run.goorm.io$$$1$$$./json/wogg.json", "timeout":30},
|
{"key":"csp_Wobg","name":"表哥","type":3,"api":"csp_Wobg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://wobge.run.goorm.io$$$1$$$./json/wogg.json", "timeout":30},
|
||||||
{"key":"csp_Wobg土豆网盘弹幕","name":"土豆","type":3,"api":"csp_Wobg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://ali.lvdoui.top$$$1$$$./json/wogg.json", "timeout":30},
|
{"key":"csp_Wobg土豆网盘弹幕","name":"土豆","type":3,"api":"csp_Wobg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://ali.lvdoui.top$$$1$$$./json/wogg.json", "timeout":30},
|
||||||
{"key":"csp_Wobg我哥哥弹幕","name":"我哥哥","type":3,"api":"csp_Wobg","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$http://www.ttkx.live$$$1$$$./json/wogg.json", "timeout":30},
|
|
||||||
{"key":"Yscapp","name":"影視車","type":3,"api":"csp_Yscapp","quickSearch":1, "changeable":1, "filterable":1, "timeout":30, "playerType":1, "playerType":1, "ext":"1"},
|
{"key":"Yscapp","name":"影視車","type":3,"api":"csp_Yscapp","quickSearch":1, "changeable":1, "filterable":1, "timeout":30, "playerType":1, "playerType":1, "ext":"1"},
|
||||||
|
{"key":"盘友圈","name":"盘友圈","type":3,"api":"csp_Panyq","timeout":60, "ext":"http://127.0.0.1:9978/file/TV/token.json"},
|
||||||
{"key":"美剧迷","name":"美剧迷","type":3,"api":"csp_Meijumi", "quickSearch":1, "changeable":1, "filterable":1, "timeout":30,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.meijumi.xyz/$$$null$$$1"},
|
{"key":"美剧迷","name":"美剧迷","type":3,"api":"csp_Meijumi", "quickSearch":1, "changeable":1, "filterable":1, "timeout":30,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.meijumi.xyz/$$$null$$$1"},
|
||||||
{"key":"Ppxzy","name":"皮皮虾","type":3,"api":"csp_Ppxzy", "quickSearch":1, "changeable":1, "filterable":1, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://ppxzy.net/$$$null$$$1", "timeout":30},
|
{"key":"Ppxzy","name":"皮皮虾","type":3,"api":"csp_Ppxzy", "quickSearch":1, "changeable":1, "filterable":1, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://ppxzy.net/$$$null$$$1", "timeout":30},
|
||||||
{"key":"Panta","name":"盘Ta","type":3,"api":"csp_Panta","quickSearch":1, "changeable":1, "filterable":1, "timeout":30, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.91panta.cn/$$$null$$$1"},
|
{"key":"Panta","name":"盘Ta","type":3,"api":"csp_Panta","quickSearch":1, "changeable":1, "filterable":1, "timeout":30, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.91panta.cn/$$$null$$$1"},
|
||||||
@ -147,19 +147,19 @@
|
|||||||
],
|
],
|
||||||
"rules":[
|
"rules":[
|
||||||
{"name":"proxy","hosts":["mypikpak.com",".*workers.dev","www.cilixiong.com","*.t4tv.hz.cz","kuba222.com","mp4us.com","dydhhy.com","magicalsearch.top","api123.adys.app","raw.githubusercontent.com","googlevideo.com","cdn.v82u1l.com","cdn.iz8qkg.com","cdn.kin6c1.com","c.biggggg.com","c.olddddd.com","haiwaikan.com","www.histar.tv","youtube.com","uhibo.com",".*boku.*",".*nivod.*",".*ulivetv.*"]},
|
{"name":"proxy","hosts":["mypikpak.com",".*workers.dev","www.cilixiong.com","*.t4tv.hz.cz","kuba222.com","mp4us.com","dydhhy.com","magicalsearch.top","api123.adys.app","raw.githubusercontent.com","googlevideo.com","cdn.v82u1l.com","cdn.iz8qkg.com","cdn.kin6c1.com","c.biggggg.com","c.olddddd.com","haiwaikan.com","www.histar.tv","youtube.com","uhibo.com",".*boku.*",".*nivod.*",".*ulivetv.*"]},
|
||||||
{"name":"七新嗅探","hosts":["api.52wyb.com"],"regex":["m3u8?pt=m3u8"]},
|
|
||||||
{"name":"夜市","hosts":["yeslivetv.com"],"script":["document.getElementsByClassName('vjs-big-play-button')[0].click()"]},
|
|
||||||
{"name":"毛驢","hosts":["www.maolvys.com"],"script":["document.getElementsByClassName('swal-buttonswal-button--confirm')[0].click()"]},
|
|
||||||
{"name":"海外看","hosts":["haiwaikan"],"regex":["10.0099","10.3333","16.0599","8.1748","12.33","10.85"]},
|
|
||||||
{"name":"索尼","hosts":["suonizy"],"regex":["15.1666","15.2666"]},
|
|
||||||
{"name":"暴风廣告","hosts":["bfzy"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:3,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},
|
|
||||||
{"name":"磁力廣告","hosts":["magnet"],"regex":["更多","社區","xuu","最新","最新","直播","更新","社区","有趣","有趣","英皇体育","全中文AV在线","澳门皇冠赌场","哥哥快来","美女荷官","裸聊","新片首发","UUE29"]},
|
{"name":"磁力廣告","hosts":["magnet"],"regex":["更多","社區","xuu","最新","最新","直播","更新","社区","有趣","有趣","英皇体育","全中文AV在线","澳门皇冠赌场","哥哥快来","美女荷官","裸聊","新片首发","UUE29"]},
|
||||||
|
{"name":"海外看","hosts":["haiwaikan"],"regex":["8.16","8.1748","10.0099","10.3333","10.85","12.33","16.0599"]},
|
||||||
|
{"name":"索尼","hosts":["suonizy"],"regex":["15.1666","15.2666"]},
|
||||||
|
{"name":"暴風","hosts":["bfzy"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:3,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},
|
||||||
{"name":"星星","hosts":["aws.ulivetv.net"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:8,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},
|
{"name":"星星","hosts":["aws.ulivetv.net"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:8,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},
|
||||||
{"name":"量子廣告","hosts":["vip.lz","hd.lz","v.cdnlz1","v.cdnlz"],"regex":["18.5333"]},
|
{"name":"量子","hosts":["vip.lz","hd.lz","v.cdnlz"],"regex":["18.5333"]},
|
||||||
{"name":"非凡廣告","hosts":["vip.ffzy","hd.ffzy"],"regex":["25.0666","25.08"]},
|
{"name":"非凡","hosts":["vip.ffzy","hd.ffzy"],"regex":["25.1"]},
|
||||||
{"name":"火山嗅探","hosts":["huoshan.com"],"regex":["item_id="]},
|
{"name":"火山嗅探","hosts":["huoshan.com"],"regex":["item_id="]},
|
||||||
{"name":"抖音嗅探","hosts":["douyin.com"],"regex":["is_play_url="]},
|
{"name":"抖音嗅探","hosts":["douyin.com"],"regex":["is_play_url="]},
|
||||||
{"name":"農民嗅探","hosts":["toutiaovod.com"],"regex":["video/tos/cn"]}
|
{"name":"農民嗅探","hosts":["toutiaovod.com"],"regex":["video/tos/cn"]},
|
||||||
|
{"name":"七新嗅探","hosts":["api.52wyb.com"],"regex":["m3u8?pt=m3u8"]},
|
||||||
|
{"name":"夜市點擊","hosts":["yeslivetv.com"],"script":["document.getElementsByClassName('vjs-big-play-button')[0].click()"]},
|
||||||
|
{"name":"毛驢點擊","hosts":["www.maolvys.com"],"script":["document.getElementsByClassName('swal-buttonswal-button--confirm')[0].click()"]}
|
||||||
],
|
],
|
||||||
"ads":["static-mozai.4gtv.tv"]
|
"ads":["static-mozai.4gtv.tv","s3t3d2y8.afcdn.net"]
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"spider": "./jar/custom_spider.jar;md5;034284ac61c7bc4f5e9acf7937889bb3",
|
"spider": "./jar/custom_spider.jar;md5;6a77140c25470026f08522e50103cf8d",
|
||||||
"wallpaper": "http://饭太硬.top/深色壁纸/api.php",
|
"wallpaper": "http://饭太硬.top/深色壁纸/api.php",
|
||||||
"sites": [
|
"sites": [
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"spider":"./jar/pg.jar;md5;2b8ee1791855c6e977c13bf78ac9ea13",
|
"spider":"./jar/pg.jar;md5;0291baf74f90cc4d908393c5dcbea4bb",
|
||||||
"lives":[{"name":"初秋语","type":0,"url":"./listx.txt"},
|
"lives":[{"name":"初秋语","type":0,"url":"./listx.txt"},
|
||||||
{"name":"YanG","type":0,"url":"https://fongmi.cachefly.net/YanG-1989/m3u/main/Adult.m3u"},
|
{"name":"YanG","type":0,"url":"https://fongmi.cachefly.net/YanG-1989/m3u/main/Adult.m3u"},
|
||||||
{"name":"atsushi","type":0,"url":"https://fongmi.cachefly.net/atsushi444/iptv-epg/main/Adult.m3u"},
|
{"name":"atsushi","type":0,"url":"https://fongmi.cachefly.net/atsushi444/iptv-epg/main/Adult.m3u"},
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { _, load } from './lib/cat.js';
|
import { _, load } from './lib/cat.js';
|
||||||
|
|
||||||
let key = '13bqg';
|
let key = '13bqg';
|
||||||
let url = 'https://m.13bqg.com';
|
let url = 'https://m.13bqg.cc';
|
||||||
let siteKey = '';
|
let siteKey = '';
|
||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -103,6 +103,7 @@ async function detail(id) {
|
|||||||
const $ = load(html);
|
const $ = load(html);
|
||||||
const detail = $('div.book-cell:first > div');
|
const detail = $('div.book-cell:first > div');
|
||||||
let vod = {
|
let vod = {
|
||||||
|
audio:1,
|
||||||
book_id: id,
|
book_id: id,
|
||||||
type_name: $('h1:first').text().trim().replace('有声小说',''),
|
type_name: $('h1:first').text().trim().replace('有声小说',''),
|
||||||
// vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'),
|
// vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'),
|
||||||
|
253
cat/js/230ts_open.js
Normal file
253
cat/js/230ts_open.js
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
// 网站搜索异常
|
||||||
|
import { load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = '爱上你听书网';
|
||||||
|
let HOST = 'https://wap.230ts.net';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
|
||||||
|
|
||||||
|
async function request(reqUrl, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || MOBILE_UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
const html = await request(HOST + '/sort/');
|
||||||
|
const $ = load(html);
|
||||||
|
let filterObj = {};
|
||||||
|
const class_parse = $('dl.pd-class:first > dd > a[href*=sort]');
|
||||||
|
let classes = [];
|
||||||
|
classes = _.map(class_parse, (cls) => {
|
||||||
|
let typeId = cls.attribs['href'];
|
||||||
|
typeId = typeId.replace(/.*?\/sort\/(.*).html/g, '$1');
|
||||||
|
return {
|
||||||
|
type_id: typeId,
|
||||||
|
type_name: cls.children[0].data,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const sortName = ['玄幻有声', '灵异有声', '综艺娱乐', '长篇评书', '都市有声', '军事有声', '职场有声', '其他有声'];
|
||||||
|
classes = _.sortBy(classes, (c) => {
|
||||||
|
const index = sortName.indexOf(c.type_name);
|
||||||
|
return index === -1 ? sortName.length : index;
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {
|
||||||
|
const link = HOST + '/top/lastupdate/1.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('ul.list-ul > li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const img = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('p.module-slide-author')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||||
|
vod_name: it.attribs.title.replace('有声小说',''),
|
||||||
|
vod_pic: HOST + img.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = HOST + '/sort/' + tid +'/' + (`${pg}`) + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('ul.book-ol > li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const img = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.book-meta')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||||
|
vod_name: it.attribs.title.replace('有声小说',''),
|
||||||
|
vod_pic: HOST + img.attribs['data-original'],
|
||||||
|
vod_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div.paging > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request(HOST + '/tingshu/' + id);
|
||||||
|
const $ = load(html);
|
||||||
|
const detail = $('div.book-cell:first > div');
|
||||||
|
let vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text().trim().replace('有声小说',''),
|
||||||
|
vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'),
|
||||||
|
vod_content: $('div.ellipsis').text().trim(),
|
||||||
|
};
|
||||||
|
for (const info of detail) {
|
||||||
|
const i = $(info).text().trim();
|
||||||
|
if (i.startsWith('类型:')) {
|
||||||
|
vod.vod_type = _.map($(info).find('a'), (a) => {
|
||||||
|
return a.children[0].data;
|
||||||
|
}).join('/');
|
||||||
|
} else if (i.startsWith('作者:')) {
|
||||||
|
vod.vod_director = _.map($(info).find('a'), (a) => {
|
||||||
|
return a.children[0].data;
|
||||||
|
}).join('/');
|
||||||
|
} else if (i.startsWith('演播:')) {
|
||||||
|
vod.vod_actor = _.map($(info).find('a'), (a) => {
|
||||||
|
return a.children[0].data;
|
||||||
|
}).join('/');
|
||||||
|
} else if (i.startsWith('连载中')) {
|
||||||
|
vod.vod_remarks = i.substring(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const playlist = _.map($('#playlist > ul > li > a'), (it) => {
|
||||||
|
return it.children[0].data + '$' + it.attribs.href.replace(/\/mp3\/(.*).html/g, '$1');
|
||||||
|
});
|
||||||
|
vod.vod_play_from = '道长在线';
|
||||||
|
vod.vod_play_url = playlist.join('#');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + '/mp3/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const iframe = $('body iframe[src*=player]');
|
||||||
|
const iframeHtml = (
|
||||||
|
await req(HOST + iframe[0].attribs.src, {
|
||||||
|
headers: {
|
||||||
|
'Referer': link,
|
||||||
|
'User-Agent': MOBILE_UA,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).content;
|
||||||
|
const playUrl = iframeHtml.match(/mp3:'(.*?)'/)[1];
|
||||||
|
if (playUrl.indexOf('m4a') >= 0 || playUrl.indexOf('mp3') >= 0 ) {
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
const iframeHtml = (
|
||||||
|
await req(HOST + iframe[0].attribs.src, {
|
||||||
|
headers: {
|
||||||
|
'Referer': link,
|
||||||
|
'User-Agent': MOBILE_UA,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).content;
|
||||||
|
const playUrl = playUrl + '.m4a' + iframeHtml.match(/(\?.*?)'/)[1];
|
||||||
|
if (playUrl.indexOf('http') >= 0) {
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const iframeHtml = (
|
||||||
|
await req(HOST + iframe[0].attribs.src, {
|
||||||
|
headers: {
|
||||||
|
'Referer': link,
|
||||||
|
'User-Agent': MOBILE_UA,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).content;
|
||||||
|
const playUrl2 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
|
||||||
|
if (playUrl2.indexOf('\?') >= 0) {
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl2,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const playUrl3 = playUrl2 + playUrl
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl3,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
if (playUrl.indexOf('http') >= 0) {
|
||||||
|
const playUrl = playUrl + '.m4a';
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const iframeHtml = (
|
||||||
|
await req(HOST + iframe[0].attribs.src, {
|
||||||
|
headers: {
|
||||||
|
'Referer': link,
|
||||||
|
'User-Agent': MOBILE_UA,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).content;
|
||||||
|
const playUrl4 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl4 + '.m4a',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick) {
|
||||||
|
const link = HOST + '/search.html?searchtype=name&searchword=' + wd +'&page=1';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('ul.book-ol > li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const img = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.book-meta')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||||
|
vod_name: it.attribs.title.replace('有声小说',''),
|
||||||
|
vod_pic: img.attribs['data-original'],
|
||||||
|
vod_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
135
cat/js/360ba_open.js
Normal file
135
cat/js/360ba_open.js
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let siteUrl = 'https://m.360ba.co/';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
let headers = {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Linux; Android 12; Redmi K30 Build/SKQ1.210908.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/96.0.4664.104 Mobile Safari/537.36',
|
||||||
|
'Referer': siteUrl,
|
||||||
|
'Origin': siteUrl,
|
||||||
|
};
|
||||||
|
|
||||||
|
async function request(reqUrl, postData, post) {
|
||||||
|
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: post ? 'post' : 'get',
|
||||||
|
headers: headers,
|
||||||
|
data: postData || {},
|
||||||
|
postType: post ? '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: '篮球',
|
||||||
|
},{
|
||||||
|
type_id: '99',
|
||||||
|
type_name: '综合',
|
||||||
|
}];
|
||||||
|
//let filterObj = genFilterObj();
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
// filters: filterObj
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
let url = siteUrl + 'api/web/live_lists/' + tid;
|
||||||
|
let videos = await getVideos(url);
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
page: 1,
|
||||||
|
pagecount: 1,
|
||||||
|
limit: 0,
|
||||||
|
total: videos.length
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
const video = {
|
||||||
|
vod_play_from: 'Leospring',
|
||||||
|
vod_play_url: '播放' + '$' + id,
|
||||||
|
vod_content: '该资源由LeoSpring采集分享,公众号【蚂蚁科技杂谈】',
|
||||||
|
};
|
||||||
|
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 + 'api/web/search?keyword=' + wd;
|
||||||
|
const data = JSON.parse(await request(url))['data']['ball'];
|
||||||
|
|
||||||
|
let videos = _.map(data, (n) => {
|
||||||
|
let id = n['url'];
|
||||||
|
let name = n['league_name_zh'] + ' ' + n['home_team_zh'] + ' VS ' + n['away_team_zh'];
|
||||||
|
let pic = n['cover'];
|
||||||
|
let remarks = 'LIVING';
|
||||||
|
return {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: name,
|
||||||
|
vod_pic: pic,
|
||||||
|
vod_remarks: remarks,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: id,
|
||||||
|
header: headers
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getVideos(url) {
|
||||||
|
const data = JSON.parse(await request(url))['data']['data'];
|
||||||
|
|
||||||
|
let videos = _.map(data, (n) => {
|
||||||
|
let id = n['url'];
|
||||||
|
let name = n['league_name_zh'] + ' ' + n['home_team_zh'] + ' VS ' + n['away_team_zh'];
|
||||||
|
let pic = n['cover'];
|
||||||
|
let remarks = 'LIVING';
|
||||||
|
return {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: name,
|
||||||
|
vod_pic: pic,
|
||||||
|
vod_remarks: remarks,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return videos;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -1,183 +0,0 @@
|
|||||||
import { Crypto, load, _ } from './lib/cat.js';
|
|
||||||
|
|
||||||
let siteUrl = 'https://4kysxz.top';
|
|
||||||
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: '16',
|
|
||||||
type_name: '高清电影',
|
|
||||||
},{
|
|
||||||
type_id: '17',
|
|
||||||
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) {
|
|
||||||
if (!pg) pg = 1;
|
|
||||||
if (pg <= 0) pg = 1;
|
|
||||||
let url = siteUrl + '/category-' + tid + '_' + pg + '.html';
|
|
||||||
let videos = await getVideos(url);
|
|
||||||
return JSON.stringify({
|
|
||||||
list: videos,
|
|
||||||
page: pg,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function detail(id) {
|
|
||||||
try {
|
|
||||||
const html = await request(id);
|
|
||||||
const $ = load(html);
|
|
||||||
|
|
||||||
|
|
||||||
let actors = _.map($('div.entry-content.u-text-format.u-clearfix > div:nth-child(10) > div > span > span'), (n) => {
|
|
||||||
return $(n).text().split(' ')[0];
|
|
||||||
});
|
|
||||||
let actor = actors.join(' ');
|
|
||||||
|
|
||||||
let directors = _.map($('div.entry-content.u-text-format.u-clearfix > div:nth-child(8) > div > span'), (n) => {
|
|
||||||
return $(n).text().split(' ')[0];
|
|
||||||
});
|
|
||||||
let director = directors.join(' ');
|
|
||||||
|
|
||||||
let title = $('div.site-content > section > div > header > h1').text().trim();
|
|
||||||
|
|
||||||
let content = '该影视由【Leospring】采集分享';
|
|
||||||
let playUrlStr = '';
|
|
||||||
let playFromStr = '';
|
|
||||||
//高清直播
|
|
||||||
const cards = $('div.entry-content.u-text-format.u-clearfix > custag > ul > li > a');
|
|
||||||
if (cards.length > 0) {
|
|
||||||
let playUrls = _.map(cards, (n) => {
|
|
||||||
let playUrl = n.attribs['href'];
|
|
||||||
if (playUrl.indexOf('url=') > 0) {
|
|
||||||
playUrl = playUrl.split('url=')[1].split('&name')[0];
|
|
||||||
}
|
|
||||||
return $(n).text() + '$' + playUrl;
|
|
||||||
});
|
|
||||||
playUrlStr = playUrls.join('#');
|
|
||||||
playFromStr = '高清直播';
|
|
||||||
}
|
|
||||||
|
|
||||||
//磁力链接
|
|
||||||
const tbs = $('loginshow > table');
|
|
||||||
let playFrom = '';
|
|
||||||
let nameUrls = [];
|
|
||||||
for(let i = 0;i< tbs.length;i++) {
|
|
||||||
if (i%2 == 0) {
|
|
||||||
playFrom = $(tbs[i]).find('tbody > tr >td').text().replaceAll('WEB', '磁力');
|
|
||||||
} else if (i%2 == 1) {
|
|
||||||
const tds = $(tbs[i]).find('tbody > tr >td');
|
|
||||||
let nameUrl = '';
|
|
||||||
for (let j = 0;j < tds.length;j++) {
|
|
||||||
if (j%2 == 0) {
|
|
||||||
nameUrl = $(tds[j]).text().split('.')[0].split(' ')[0];
|
|
||||||
} else if (j%2==1){
|
|
||||||
nameUrl = nameUrl + '$' + $(tds[j]).text().split('【')[0];
|
|
||||||
nameUrls.push(nameUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (playFromStr.length > 0) {
|
|
||||||
playFromStr += '$$$';
|
|
||||||
playUrlStr += '$$$';
|
|
||||||
}
|
|
||||||
playFromStr += playFrom;
|
|
||||||
playUrlStr += nameUrls.join('#');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const video = {
|
|
||||||
vod_actor: actor,
|
|
||||||
vod_play_from: playFromStr,
|
|
||||||
vod_play_url: playUrlStr,
|
|
||||||
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.php?q=' + wd
|
|
||||||
//console.log('search url:', url);
|
|
||||||
let videos = await getVideos(url);
|
|
||||||
return JSON.stringify({
|
|
||||||
list: videos,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function play(flag, id, flags) {
|
|
||||||
return JSON.stringify({
|
|
||||||
parse: 0,
|
|
||||||
url: id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getVideos(url) {
|
|
||||||
const html = await request(url);
|
|
||||||
const $ = load(html);
|
|
||||||
const cards = $('div.row.posts-wrapper >div > article > div.entry-media > div > a')
|
|
||||||
let videos = _.map(cards, (n) => {
|
|
||||||
let id = n.attribs['href'];
|
|
||||||
let name = $($(n).find('img')[0]).attr('alt').replaceAll('<strong>','').replaceAll('</strong>', '').split(' ')[0];
|
|
||||||
let pic = $($(n).find('img')[0]).attr('data-src');
|
|
||||||
return {
|
|
||||||
vod_id: id,
|
|
||||||
vod_name: name,
|
|
||||||
vod_pic: pic,
|
|
||||||
vod_remarks: '',
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return videos;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function __jsEvalReturn() {
|
|
||||||
return {
|
|
||||||
init: init,
|
|
||||||
home: home,
|
|
||||||
homeVod: homeVod,
|
|
||||||
category: category,
|
|
||||||
detail: detail,
|
|
||||||
play: play,
|
|
||||||
search: search,
|
|
||||||
};
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
1
cat/js/91doutu_open.js
Normal file
1
cat/js/91doutu_open.js
Normal file
File diff suppressed because one or more lines are too long
171
cat/js/91free_open.js
Normal file
171
cat/js/91free_open.js
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = '1free';
|
||||||
|
let HOST = 'https://91d.top';//歪片星球.com
|
||||||
|
let url = '';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E230 Safari/601.1';
|
||||||
|
|
||||||
|
async function request(reqUrl, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
let html = await request(HOST);
|
||||||
|
url = html.match(/<a href="(http.*www.*)" target=.*>/)[1]
|
||||||
|
console.debug('跳转地址 =====>' + url); // js_debug.log
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
let classes = [{"type_id":1,"type_name":"电影"},{"type_id":2,"type_name":"追剧"},{"type_id":3,"type_name":"综艺"},{"type_id":4,"type_name":"动漫"}];
|
||||||
|
let filterObj = {
|
||||||
|
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"纪录片","v":"20"},{"n":"动作片","v":"6"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"喜剧片","v":"7"}]},{"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":"lang","name":"语言","value":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"欧美剧","v":"14"},{"n":"港台剧","v":"15"},{"n":"日韩剧","v":"16"},{"n":"泰剧","v":"21"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"3"},{"n":"大陆综艺","v":"22"},{"n":"港台综艺","v":"25"},{"n":"日韩综艺","v":"24"},{"n":"欧美综艺","v":"23"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"4"},{"n":"国产动漫","v":"26"},{"n":"日韩动漫","v":"28"},{"n":"欧美动漫","v":"27"},{"n":"港台动漫","v":"29"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = url + '/vodshow/' + (extend.cateId || tid) + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '--' + (extend.lang || '') + '----' + pg + '---' + (extend.year || '') + '.html';//https://91free.live/vodshow/6-%E7%BE%8E%E5%9B%BD-hits--%E8%8B%B1%E8%AF%AD----2---2022.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('div.module-items a.module-poster-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item)[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/\/voddetail\/(.*?).html/g, '$1'),
|
||||||
|
vod_name: k.attribs.alt,
|
||||||
|
vod_pic: k.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request( url + '/voddetail/' + id + '.html');
|
||||||
|
const $ = load(html);
|
||||||
|
const vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text().trim(),
|
||||||
|
vod_type: $('.module-info-tag a').text(),
|
||||||
|
vod_actor: $('.module-info-item-content').text(),
|
||||||
|
vod_pic: $('.module-info img:first').attr('data-src'),
|
||||||
|
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||||
|
vod_content: $('.module-info-introduction-content p').text().trim(),
|
||||||
|
};
|
||||||
|
let playMap = {};
|
||||||
|
const tabs = $('div.module-tab-items-box div.module-tab-item span');
|
||||||
|
const playlists = $('div.module-play-list-content');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
const from = $(tab).text();
|
||||||
|
let list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
const title = $(it).text();
|
||||||
|
const playUrl = it.attribs.href.replace(/\/vodplay\/(.*?).html/g, '$1');
|
||||||
|
if (title.length == 0) title = it.children[0].data.trim();
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push( title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
const urls = _.values(playMap);
|
||||||
|
let vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = url + '/vodplay/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
const playUrl = js.url;
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let data = await request(url + '/phsch/' + '/page/' + pg + '/wd/' + wd + '.html');//https://www.physkan.com/phsch/page/2/wd/%E6%88%91.html
|
||||||
|
const $ = load(data);
|
||||||
|
const items = $('div.module-items > div.module-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/\/v\/(.*?).html/g, '$1'),
|
||||||
|
vod_name: k.attribs.alt,
|
||||||
|
vod_pic: k.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -1,144 +0,0 @@
|
|||||||
import { _ } from './lib/cat.js';
|
|
||||||
|
|
||||||
let key = 'bookan';
|
|
||||||
let url = 'https://api.bookan.com.cn';
|
|
||||||
let siteKey = '';
|
|
||||||
let siteType = 0;
|
|
||||||
|
|
||||||
async function request(reqUrl, agentSp) {
|
|
||||||
let res = await req(reqUrl, {
|
|
||||||
method: 'get',
|
|
||||||
});
|
|
||||||
return res.content;
|
|
||||||
}
|
|
||||||
|
|
||||||
// cfg = {skey: siteKey, ext: extend}
|
|
||||||
async function init(cfg) {
|
|
||||||
siteKey = cfg.skey;
|
|
||||||
siteType = cfg.stype;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function home(filter) {
|
|
||||||
return JSON.stringify({
|
|
||||||
class: [
|
|
||||||
{ type_id: '1305', type_name: '少年读物' },
|
|
||||||
{ type_id: '1304', type_name: '儿童文学' },
|
|
||||||
{ type_id: '1320', type_name: '国学经典' },
|
|
||||||
{ type_id: '1306', type_name: '文艺少年' },
|
|
||||||
{ type_id: '1309', type_name: '育儿心经' },
|
|
||||||
{ type_id: '1310', type_name: '心理哲学' },
|
|
||||||
{ type_id: '1307', type_name: '青春励志' },
|
|
||||||
{ type_id: '1312', type_name: '历史小说' },
|
|
||||||
{ type_id: '1303', type_name: '故事会' },
|
|
||||||
{ type_id: '1317', type_name: '音乐戏剧' },
|
|
||||||
{ type_id: '1319', type_name: '相声评书' },
|
|
||||||
],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function homeVod() {
|
|
||||||
return JSON.stringify({
|
|
||||||
list: [],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function category(tid, pg, filter, extend) {
|
|
||||||
pg = pg || 1;
|
|
||||||
if (pg == 0) pg = 1;
|
|
||||||
let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`);
|
|
||||||
let data = JSON.parse(content).data;
|
|
||||||
let books = [];
|
|
||||||
for (const book of data.list) {
|
|
||||||
books.push({
|
|
||||||
vod_id: book.id,
|
|
||||||
vod_name: book.name,
|
|
||||||
vod_pic: book.cover,
|
|
||||||
vod_remarks: book.extra.author,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return JSON.stringify({
|
|
||||||
page: data.current_page,
|
|
||||||
pagecount: data.last_page,
|
|
||||||
limit: 24,
|
|
||||||
total: data.total,
|
|
||||||
list: books,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function detail(id) {
|
|
||||||
let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`);
|
|
||||||
let data = JSON.parse(content).data;
|
|
||||||
console.log(JSON.stringify(data));
|
|
||||||
|
|
||||||
let book = {
|
|
||||||
vod_id: id,
|
|
||||||
type_name: '',
|
|
||||||
vod_year: '',
|
|
||||||
vod_area: '',
|
|
||||||
vod_remarks: '',
|
|
||||||
vod_actor: '',
|
|
||||||
vod_director: '',
|
|
||||||
vod_content: '',
|
|
||||||
};
|
|
||||||
let us = _.map(data.list, function (b) {
|
|
||||||
return formatPlayUrl(b.title) + '$' + b.file;
|
|
||||||
}).join('#');
|
|
||||||
book.vod_play_from = '书卷';
|
|
||||||
book.vod_play_url = us;
|
|
||||||
|
|
||||||
return JSON.stringify({
|
|
||||||
list: [book],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatPlayUrl(name) {
|
|
||||||
return name
|
|
||||||
.trim()
|
|
||||||
.replace(/<|>|\.《.*?》/g, '. ')
|
|
||||||
.replace(/\$|#/g, ' ')
|
|
||||||
.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function proxy(segments, headers) {}
|
|
||||||
|
|
||||||
async function play(flag, id, flags) {
|
|
||||||
return JSON.stringify({
|
|
||||||
parse: 0,
|
|
||||||
url: id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function search(wd, quick, pg) {
|
|
||||||
pg = pg || 1;
|
|
||||||
if (pg == 0) pg = 1;
|
|
||||||
let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`);
|
|
||||||
let data = JSON.parse(content).data;
|
|
||||||
let books = [];
|
|
||||||
for (const book of data.list) {
|
|
||||||
books.push({
|
|
||||||
vod_id: book.id,
|
|
||||||
vod_name: book.name,
|
|
||||||
vod_pic: book.cover,
|
|
||||||
vod_remarks: book.extra.author,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return JSON.stringify({
|
|
||||||
page: data.current_page,
|
|
||||||
pagecount: data.last_page,
|
|
||||||
limit: 20,
|
|
||||||
total: data.total,
|
|
||||||
list: books,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function __jsEvalReturn() {
|
|
||||||
return {
|
|
||||||
init: init,
|
|
||||||
home: home,
|
|
||||||
homeVod: homeVod,
|
|
||||||
category: category,
|
|
||||||
detail: detail,
|
|
||||||
play: play,
|
|
||||||
search: search,
|
|
||||||
};
|
|
||||||
}
|
|
50
cat/js/README.md
Normal file
50
cat/js/README.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
## Support using private Gitee or GitHub repositories as remote config.
|
||||||
|
* github://<your personal access token>@github.com/<owner>/<repo>/<ref>/<file path>
|
||||||
|
* gitee://<your access token>@gitee.com/<owner>/<repo>/<ref>/<file path>
|
||||||
|
* github://ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/omii/catvod/main/config_open.json
|
||||||
|
* gitee://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@gitee.com/omii/catvod/master/config_open.json
|
||||||
|
* https://omii%40qq.com:88888888@dav.jianguoyun.com/dav/cat/js/config_open.json
|
||||||
|
|
||||||
|
|
||||||
|
## personal access token
|
||||||
|
* Settings > Developer settings > Personal access tokens > Token (classic) > Generate new token
|
||||||
|
* Settings > Developer settings > Personal access tokens > Fine-grained tokens > Generate new token
|
||||||
|
|
||||||
|
|
||||||
|
## 远端配置:
|
||||||
|
* github://ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/omiitop/CatVod/main/js/config_open.json
|
||||||
|
* github://github_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/omiitop/CatVod/main/js/config_open.json
|
||||||
|
|
||||||
|
|
||||||
|
## 本地配置:
|
||||||
|
* assets://js/config_open.json
|
||||||
|
|
||||||
|
## 远程配置教程:
|
||||||
|
* https://omii.top/1296.html
|
||||||
|
|
||||||
|
## iOS签名教程
|
||||||
|
* https://omii.top/826.html
|
||||||
|
* https://omii.top/1498.html 推荐
|
||||||
|
|
||||||
|
## 自定义背景
|
||||||
|
"color": [
|
||||||
|
{
|
||||||
|
"light": { "bg": "https://i2.100024.xyz/2024/01/13/qrnuwt.webp", "bgMask": "0x50ffffff", "primary": "0xFF2B6C00", "onPrimary": "0xFFFFFFFF", "primaryContainer": "0xFFA6F779", "onPrimaryContainer": "0xFF082100", "secondary": "0xFF55624C", "onSecondary": "0xFFFFFFFF", "secondaryContainer": "0xFFD9E7CA", "onSecondaryContainer": "0xFF131F0D", "tertiary": "0xFF386666", "onTertiary": "0xFFFFFFFF", "tertiaryContainer": "0xFFBBEBEB", "onTertiaryContainer": "0xFF002020", "error": "0xFFBA1A1A", "onError": "0xFFFFFFFF", "errorContainer": "0xFFFFDAD6", "onErrorContainer": "0xFF410002", "background": "0xFFFDFDF5", "onBackground": "0xFF1A1C18", "surface": "0xFFFDFDF5", "onSurface": "0xFF1A1C18", "surfaceVariant": "0xFFE0E4D6", "onSurfaceVariant": "0xFF1A1C18", "inverseSurface": "0xFF2F312C", "onInverseSurface": "0xFFF1F1EA", "outline": "0xFF74796D", "outlineVariant": "0xFFC3C8BB", "shadow": "0xFF000000", "scrim": "0xFF000000", "inversePrimary": "0xFF8CDA60", "surfaceTint": "0xFF2B6C00" },
|
||||||
|
"dark": { "bg": "https://i2.100024.xyz/2024/01/13/qrc37o.webp", "bgMask": "0x50000000", "primary": "0xFF8CDA60", "onPrimary": "0xFF133800", "primaryContainer": "0xFF1F5100", "onPrimaryContainer": "0xFFA6F779", "secondary": "0xFFBDCBAF", "onSecondary": "0xFF283420", "secondaryContainer": "0xFF3E4A35", "onSecondaryContainer": "0xFFD9E7CA", "tertiary": "0xFFA0CFCF", "onTertiary": "0xFF003737", "tertiaryContainer": "0xFF1E4E4E", "onTertiaryContainer": "0xFFBBEBEB", "error": "0xFFFFB4AB", "errorContainer": "0xFF93000A", "onError": "0xFF690005", "onErrorContainer": "0xFFFFDAD6", "background": "0xFF1A1C18", "onBackground": "0xFFE3E3DC", "outline": "0xFF8D9286", "onInverseSurface": "0xFF1A1C18", "inverseSurface": "0xFFE3E3DC", "inversePrimary": "0xFF2B6C00", "shadow": "0xFF000000", "surfaceTint": "0xFF8CDA60", "outlineVariant": "0xFF43483E", "scrim": "0xFF000000", "surface": "0xFF1A1C18", "onSurface": "0xFFC7C7C0", "surfaceVariant": "0xFF43483E", "onSurfaceVariant": "0xFFC7C7C0" }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
## 自助添加接口格式:
|
||||||
|
{
|
||||||
|
"key": "wogg",
|
||||||
|
"name": "🟢 玩偶",
|
||||||
|
"type": 3,
|
||||||
|
"api": "./wogg_open.js",
|
||||||
|
"ext": "填入阿里token"
|
||||||
|
},
|
||||||
|
|
||||||
|
"key"、"name" 内:与其他不重复的名称均可。
|
||||||
|
"type" 3为影视,10为有声读物
|
||||||
|
"api" 填写js路径,"ext" 填写扩展内容,例如玩偶的token。
|
||||||
|
以上由omii.top提供
|
1
cat/js/acgwd_open.js
Normal file
1
cat/js/acgwd_open.js
Normal file
File diff suppressed because one or more lines are too long
1
cat/js/appv2.js
Normal file
1
cat/js/appv2.js
Normal file
File diff suppressed because one or more lines are too long
170
cat/js/baozimh_open.js
Normal file
170
cat/js/baozimh_open.js
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
import { Crypto, _, load } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'baozimh';
|
||||||
|
let url = 'https://cn.baozimh.com';
|
||||||
|
const img = 'https://static-tw.baozimh.com/cover/';
|
||||||
|
|
||||||
|
const img2 = '?w=285&h=375&q=100';
|
||||||
|
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
|
||||||
|
|
||||||
|
async function request(reqUrl) {
|
||||||
|
let resp = await req(reqUrl, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return resp.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
var html = await request(url + '/classify');
|
||||||
|
const $ = load(html);
|
||||||
|
|
||||||
|
let filterObj = { c1: [] };
|
||||||
|
|
||||||
|
for (const nav of $('div.classify div.nav')) {
|
||||||
|
const as = $(nav).find('a.item');
|
||||||
|
const checkUrl = decodeURIComponent(as[1].attribs.href);
|
||||||
|
const reg = /type=(.*)®ion=(.*)&state=(.*)&filter=(.*)/;
|
||||||
|
const matchs = checkUrl.match(reg);
|
||||||
|
let typeKey = '';
|
||||||
|
let typeIdx = 1;
|
||||||
|
if (matchs[1] != 'all') {
|
||||||
|
typeKey = 'type';
|
||||||
|
typeIdx = 1;
|
||||||
|
} else if (matchs[2] != 'all') {
|
||||||
|
typeKey = 'region';
|
||||||
|
typeIdx = 2;
|
||||||
|
} else if (matchs[3] != 'all') {
|
||||||
|
typeKey = 'state';
|
||||||
|
typeIdx = 3;
|
||||||
|
} else if (matchs[4] != '*') {
|
||||||
|
typeKey = 'filter';
|
||||||
|
typeIdx = 4;
|
||||||
|
}
|
||||||
|
const tvals = [];
|
||||||
|
for (const a of as) {
|
||||||
|
tvals.push({
|
||||||
|
n: $(a).text().trim(),
|
||||||
|
v: decodeURIComponent(a.attribs.href).match(reg)[typeIdx],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
filterObj['c1'].push({
|
||||||
|
key: typeKey,
|
||||||
|
name: '',
|
||||||
|
wrap: typeIdx == 1 ? 1 : 0,
|
||||||
|
init: typeIdx == 4 ? '*' : 'all',
|
||||||
|
value: tvals,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
class: [{ type_name: 'all', type_id: 'c1' }],
|
||||||
|
filters: filterObj,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
let link = `${url}/api/bzmhq/amp_comic_list?type=${extend.type || 'all'}®ion=${extend.region || 'all'}&state=${extend.state || 'all'}&filter=${extend.filter || '*'}`;
|
||||||
|
link += '&page=' + pg + '&limit=36&language=cn';
|
||||||
|
var html = await request(link);
|
||||||
|
const data = JSON.parse(html);
|
||||||
|
let books = [];
|
||||||
|
for (const book of data.items) {
|
||||||
|
books.push({
|
||||||
|
book_id: book.comic_id,
|
||||||
|
book_name: book.name,
|
||||||
|
book_pic: img + book.topic_img + img2,
|
||||||
|
book_remarks: book.author || '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: books.length == 36 ? pg + 1 : pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
var html = await request(`${url}/comic/${id}`);
|
||||||
|
const $ = load(html);
|
||||||
|
let book = {
|
||||||
|
book_director: $('[data-hid$=og:novel:author]')[0].attribs.content || '',
|
||||||
|
book_content: $('[data-hid$=og:description]')[0].attribs.content || '',
|
||||||
|
};
|
||||||
|
|
||||||
|
const formatUrl = (a) => {
|
||||||
|
return $(a).text().replace(/\$|#/g, ' ').trim() + '$' + decodeURIComponent(a.attribs.href);
|
||||||
|
};
|
||||||
|
|
||||||
|
let urls = _.map($('div#chapter-items a.comics-chapters__item'), formatUrl);
|
||||||
|
urls.push(..._.map($('div#chapters_other_list a.comics-chapters__item'), formatUrl));
|
||||||
|
if (urls.length == 0) {
|
||||||
|
urls = _.reverse(_.map($('div.pure-g a.comics-chapters__item'), formatUrl));
|
||||||
|
}
|
||||||
|
book.volumes = '默認';
|
||||||
|
book.urls = urls.join('#');
|
||||||
|
|
||||||
|
return {
|
||||||
|
list: [book],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
var html = await request(url + id);
|
||||||
|
const $ = load(html);
|
||||||
|
|
||||||
|
var content = [];
|
||||||
|
for (const img of $('amp-img')) {
|
||||||
|
content.push(img.attribs.src);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
content: content,
|
||||||
|
};
|
||||||
|
} catch (e) {}
|
||||||
|
return {
|
||||||
|
content: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
var html = await request(`${url}/search?q=${wd}`);
|
||||||
|
const $ = load(html);
|
||||||
|
const books = [];
|
||||||
|
for (const a of $('div.classify-items a.comics-card__poster')) {
|
||||||
|
books.push({
|
||||||
|
book_id: a.attribs.href.replace('/comic/', ''),
|
||||||
|
book_name: a.attribs.title,
|
||||||
|
book_pic: $(a).find('amp-img:first')[0].attribs.src,
|
||||||
|
book_remarks: '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
page: 1,
|
||||||
|
pagecount: 1,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
1
cat/js/bb_douban_open.js
Normal file
1
cat/js/bb_douban_open.js
Normal file
File diff suppressed because one or more lines are too long
164
cat/js/bengou_open.js
Normal file
164
cat/js/bengou_open.js
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
import { Crypto, _, load } from 'assets://js/lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'bengou';
|
||||||
|
let HOST = 'https://www.bengou.co';
|
||||||
|
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
|
||||||
|
|
||||||
|
async function request(reqUrl) {
|
||||||
|
let resp = await req(reqUrl, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': PC_UA,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return resp.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
const classes = [{'type_id':'all','type_name':'all'}];
|
||||||
|
const filterObj = {
|
||||||
|
'all':[
|
||||||
|
{'key':'type','name':'进度','init':'all','value':[{'n':'全部','v':'all'},{'n':'连载','v':'lianzai'},{'n':'完结','v':'wanjie'}]},
|
||||||
|
{'key':'type','name':'地区','init':'all','value':[{'n':'日韩','v':'rihan'},{'n':'内地','v':'neidi'},{'n':'港台','v':'gangntai'},{'n':'欧美','v':'oumei'},{'n':'其他','v':'qita'}]},
|
||||||
|
{'key':'type','name':'读者','init':'all','value':[{'n':'少年','v':'shaonianqu'},{'n':'少女','v':'shaonvqu'},{'n':'青年','v':'qingnian'},{'n':'少儿','v':'shaoer'}]},
|
||||||
|
{'key':'type','name':'题材','init':'all','value':[{'n':'热血','v':'rexue'},{'n':'格斗','v':'gedou'},{'n':'科幻','v':'kehuan'},{'n':'竞技','v':'jingji'},{'n':'搞笑','v':'gaoxiao'},{'n':'推理','v':'tuili'},{'n':'恐怖','v':'kongbu'},{'n':'耽美','v':'danmei'},{'n':'少女','v':'shaonv'},{'n':'恋爱','v':'lianai'},{'n':'生活','v':'shenghuo'},{'n':'战争','v':'zhanzheng'},{'n':'故事','v':'gushi'},{'n':'冒险','v':'maoxian'},{'n':'魔幻','v':'mohuan'},{'n':'玄幻','v':'xuanhuan'},{'n':'校园','v':'xiaoyuan'},{'n':'悬疑','v':'xuanyi'},{'n':'萌系','v':'mengxi'},{'n':'穿越','v':'chuanyue'},{'n':'后宫','v':'hougong'},{'n':'都市','v':'dushi'},{'n':'武侠','v':'wuxia'},{'n':'历史','v':'lishi'},{'n':'同人','v':'tongren'},{'n':'励志','v':'lizhi'},{'n':'百合','v':'baihe'},{'n':'治愈','v':'zhiyu'},{'n':'机甲','v':'jijia'},{'n':'纯爱','v':'chunai'},{'n':'美食','v':'meishi'},{'n':'血腥','v':'xuexing'},{'n':'僵尸','v':'jiangshi'},{'n':'恶搞','v':'egao'},{'n':'虐心','v':'nuexin'},{'n':'动作','v':'dongzuo'},{'n':'惊险','v':'jingxian'},{'n':'唯美','v':'weimei'},{'n':'震撼','v':'zhenhan'},{'n':'复仇','v':'fuchou'},{'n':'侦探','v':'zhentan'},{'n':'脑洞','v':'naodong'},{'n':'奇幻','v':'qihuan'},{'n':'宫斗','v':'gongdou'},{'n':'爆笑','v':'baoxiao'},{'n':'运动','v':'yundong'},{'n':'青春','v':'qingchun'},{'n':'灵异','v':'lingyi'},{'n':'古风','v':'gufeng'},{'n':'权谋','v':'quanmou'},{'n':'节操','v':'jiecao'},{'n':'明星','v':'mingxing'},{'n':'暗黑','v':'anhei'},{'n':'社会','v':'shehui'},{'n':'浪漫','v':'langman'},{'n':'栏目','v':'lanmu'},{'n':'仙侠','v':'xianxia'}]},
|
||||||
|
{'key':'type','name':'字母','init':'all','value':[{'n':'A','v':'lettera'},{'n':'B','v':'letterb'},{'n':'C','v':'letterc'},{'n':'D','v':'letterd'},{'n':'E','v':'lettere'},{'n':'F','v':'letterf'},{'n':'G','v':'letterg'},{'n':'H','v':'letterh'},{'n':'I','v':'letteri'},{'n':'J','v':'letterj'},{'n':'K','v':'letterk'},{'n':'L','v':'letterl'},{'n':'M','v':'letterm'},{'n':'N','v':'lettern'},{'n':'O','v':'lettero'},{'n':'P','v':'letterp'},{'n':'Q','v':'letterq'},{'n':'R','v':'letterr'},{'n':'S','v':'letters'},{'n':'T','v':'lettert'},{'n':'U','v':'letteru'},{'n':'V','v':'letterv'},{'n':'W','v':'letterw'},{'n':'X','v':'letterx'},{'n':'Y','v':'lettery'},{'n':'Z','v':'letterz'}]},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
let page = '';
|
||||||
|
if (pg > 1) {
|
||||||
|
page = `${pg}.html`;
|
||||||
|
}
|
||||||
|
const link = HOST + `/${extend.type || 'all'}/${page}`;
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = $('.dmList li');
|
||||||
|
const books = _.map(list, (item) => {
|
||||||
|
const $item = $(item);
|
||||||
|
const $a = $item.find('dt a:first');
|
||||||
|
const $img = $item.find('img:first');
|
||||||
|
const $span = $item.find('span:first');
|
||||||
|
return {
|
||||||
|
book_id: $a.attr('href'),
|
||||||
|
book_name: $a.text(),
|
||||||
|
book_pic: $img.attr('src'),
|
||||||
|
book_remarks: $span.text(),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('.NewPages a:contains(下一页)').length > 0;
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: hasMore ? pg + 1 : pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request(HOST + id);
|
||||||
|
const $ = load(html);
|
||||||
|
const book = {
|
||||||
|
book_name: $('.title h1').text(),
|
||||||
|
book_director: $('.info p:contains(原著作者) a').text().trim(),
|
||||||
|
book_content: $('.introduction').text().trim(),
|
||||||
|
book_remarks: $('.title a:first').text(),
|
||||||
|
};
|
||||||
|
const list = $('.plist a');
|
||||||
|
const urls = _.map(list, (item) => {
|
||||||
|
const $item = $(item);
|
||||||
|
let title = $item.text().trim();
|
||||||
|
if (_.isEmpty(title)) {
|
||||||
|
title = '观看'
|
||||||
|
}
|
||||||
|
const href = $item.attr('href');
|
||||||
|
return title + '$' + href;
|
||||||
|
}).join('#');
|
||||||
|
book.volumes = '笨狗';
|
||||||
|
book.urls = urls;
|
||||||
|
|
||||||
|
return {
|
||||||
|
list: [book],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
const html = await request(HOST + id);
|
||||||
|
const matches = html.match(/var qTcms_S_m_murl_e=\"(.*)\";/);
|
||||||
|
const decoded = base64Decode(matches[1]);
|
||||||
|
const picList = decoded.split('$');
|
||||||
|
const content = [];
|
||||||
|
for (let i = 0; i < picList.length; i += 2) {
|
||||||
|
content.push(picList[i]);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
content: content,
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
console.debug('error: ' + e);
|
||||||
|
return {
|
||||||
|
content: '',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function base64Decode(text) {
|
||||||
|
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
let page = '';
|
||||||
|
if (pg > 1) {
|
||||||
|
page = `&page=${pg}`;
|
||||||
|
}
|
||||||
|
const link = HOST + `/statics/search.aspx?key=${encodeURIComponent(wd)}${page}`;
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = $('.dmList li');
|
||||||
|
const books = _.map(list, (item) => {
|
||||||
|
const $item = $(item);
|
||||||
|
const $a = $item.find('dt a:first');
|
||||||
|
const $img = $item.find('img:first');
|
||||||
|
const $span = $item.find('span:first');
|
||||||
|
return {
|
||||||
|
book_id: $a.attr('href'),
|
||||||
|
book_name: $a.text(),
|
||||||
|
book_pic: $img.attr('src'),
|
||||||
|
book_remarks: $span.text(),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('.NewPages a:contains(下一页)').length > 0;
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: hasMore ? pg + 1 : pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
1
cat/js/bilibili.js
Normal file
1
cat/js/bilibili.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{Crypto,load,_}from"assets://js/lib/cat.js";let key="bilibili",url="",siteKey="",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",cookie={};async function request(reqUrl,referer,mth,data,hd){var headers={"User-Agent":UA,Cookie:_.map(cookie,(value,key)=>key+"="+value).join(";")},referer=(referer&&(headers.referer=encodeURIComponent(referer)),await req(reqUrl,{method:mth||"get",headers:headers,data:data,postType:"post"===mth?"form":""}));return referer.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype,url=cfg.ext}async function home(filter){return(await request(url)).replaceAll("1$/$1","1$/$0")}async function homeVod(){return"{}"}async function category(tid,pg,filter,extend){pg<=0&&(pg=1);let api=url+"?t="+tid+"&pg="+pg;return extend&&(tid=Object.entries(extend).map(([key,val]=entry)=>"&"+key+"="+val),api=(api+=tid)+("&f="+encodeURIComponent(JSON.stringify(extend)))),request(api)}async function detail(id){return request(url+"?ids="+id)}async function play(flag,id,flags){return request(url.replace("/bilibili","/play")+"?bvid="+id+"&from=open")}async function search(wd,quick){return request(url+"?wd="+wd)}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
|
1
cat/js/bilibili_open.js
Normal file
1
cat/js/bilibili_open.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
import{Crypto,load,_}from"assets://js/lib/cat.js";let key="bilibili",url="",siteKey="",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",cookie={};async function request(reqUrl,referer,mth,data,hd){var headers={"User-Agent":UA,Cookie:_.map(cookie,(value,key)=>key+"="+value).join(";")},referer=(referer&&(headers.referer=encodeURIComponent(referer)),await req(reqUrl,{method:mth||"get",headers:headers,data:data,postType:"post"===mth?"form":""}));return referer.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype,url=cfg.ext}async function home(filter){return(await request(url)).replaceAll("1$/$1","1$/$0")}async function homeVod(){return"{}"}async function category(tid,pg,filter,extend){pg<=0&&(pg=1);let api=url+"?t="+tid+"&pg="+pg;return extend&&(tid=Object.entries(extend).map(([key,val]=entry)=>"&"+key+"="+val),api=(api+=tid)+("&f="+encodeURIComponent(JSON.stringify(extend)))),request(api)}async function detail(id){return request(url+"?ids="+id)}async function play(flag,id,flags){return request(url.replace("/bilibili","/play")+"?bvid="+id+"&from=open")}async function search(wd,quick){return request(url+"?wd="+wd)}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
|
1
cat/js/bililive_open.js
Normal file
1
cat/js/bililive_open.js
Normal file
File diff suppressed because one or more lines are too long
1
cat/js/book18_open.js
Normal file
1
cat/js/book18_open.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
|||||||
import { _ } from './lib/cat.js';
|
import { _ } from './lib/cat.js';
|
||||||
|
|
||||||
let key = 'bookkan';
|
let key = 'bookan';
|
||||||
let url = 'https://api.bookan.com.cn';
|
let url = 'https://api.bookan.com.cn';
|
||||||
let siteKey = '';
|
let siteKey = '';
|
||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
@ -64,7 +64,7 @@ async function detail(id) {
|
|||||||
let data = JSON.parse(content).data;
|
let data = JSON.parse(content).data;
|
||||||
|
|
||||||
let book = {
|
let book = {
|
||||||
audio: 1,
|
audio:1,
|
||||||
book_id: id,
|
book_id: id,
|
||||||
type_name: '',
|
type_name: '',
|
||||||
book_year: '',
|
book_year: '',
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
//bbQ0FUT1BMEGNhaWppLmpzGC4vbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgJfDnNpdGVLZXkQc2l0ZVR5cGUEVUEOYmFzZVVybAhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAxoZWFkZXIUVXNlci1BZ2VudAZ1cmwGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlEHR5cGVfcGlkCHB1c2gOdHlwZV9pZBJ0eXBlX25hbWUSc3RyaW5naWZ5DmZpbHRlcnMEe30GdGlkBHBnDGV4dGVuZAx2aWRlb3MgP2FjPXZpZGVvbGlzdCZ0PQgmcGc9CGxpc3QMdm9kX2lkEHZvZF9uYW1lDnZvZF9waWMWdm9kX3JlbWFya3MQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwEaWQGdm9kJD9hYz12aWRlb2xpc3QmaWRzPQ5pc0VtcHR5EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEADqgDAAEAqgMADgAGAaABAAAAAQ8KRQCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAG2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAagDDQEI6DS+AF8FAL4BXwYAvgJfBwC+A18IAL4EXwkAvgVfCgC+Bl8LAL4HXwwAvghfDQC+CV8OACm/4LPhBOMAAADiv18EACmkAwELAQA2Bg0NIQAElgIOYgYBtAMBAAECAwAjAcgDAAEArAMBCK4DAgiyAwQIz0HlAAAAEWYAAA7PQeYAAAARZgEADs9B5wAAABFmAgAOBi6kAwgEAzo6Og5DBgG2AwABAAMBABYB0AMBACCwAwMIYQAAC8diAAAE6QAAAHFlAABJYgAAKKQDDgMSDUQOYgYBuAMBAQEEAQAdAtQDAAEA1gMBACC2AwYAYQAAOOwAAADPC9vsTO0AAADui8diAABB7gAAAC6kAxQEEiYmEg5iBgG6AwEHAQcCAKIBCN4DAAEA4AMBADDiAwEBMOQDAQIw5gMBAzDoAwEEIOoDAQUg7AMCBiCyAwQIuAMHAGEFAGEEAGEDAGECAGEBAGEAAGUAAMfcYgAA7YvIOJgAAABC9wAAAGIBACQBAMliAgBBHgAAAMomAADBBAvBBWEGAGIDAH3qNsEGYgYAQfgAAACzqugoYgQAQvkAAAALYgYAQfoAAABM+gAAAGIGAEH7AAAATPsAAAAkAQAOgADoyA6DOJgAAABC/AAAAAtiBABMHgAAAGIFAEz9AAAAJAEALqQDHA5dFyZYMBwSOj/HITorKw5iBgG8AwAAAAEAAAYABP4AAAAupAMuAQMOYgYBvgMEBQQHAgDqAQn+AwABAIAEAAEA3gMAAQCCBAABAOADAQAw4gMBATDkAwECMIQEAQMg7AMDBCCyAwQIuAMHAGEDAGECAGEBAGEAANCzpOgDtNRlAAAEAwEAAJ3PnQQEAQAAndCdx9xiAADti8g4mAAAAEL3AAAAYgEAJAEAySYAAMphBABiAgBBBQEAAH3qRMEEYgMAQvkAAAALYgQAQQYBAABMBgEAAGIEAEEHAQAATAcBAABiBABBCAEAAEwIAQAAYgQAQQkBAABMCQEAACQBAA6AAOi6DoM4mAAAAEL8AAAACzgKAQAA0O1MCwEAAGICAEEMAQAATAwBAAA4CgEAAGICAEENAQAA7UwNAQAAYgIAQQ4BAABMDgEAAGIDAEwFAQAAJAEALqQDMxQ/JmcmWBdTMEREREQXIzo/RGJEKw5iBgHAAwEFAQQDAJwCBp4EAAEA4AMBADDiAwEBMOQDAQIw7AMBAzCgBAEEILIDBAi4AwcAqgMADGEEAGEDAGECAGEBAGEAAGUAAAQRAQAAnc+dx9xiAADti8g4mAAAAEL3AAAAYgEAJAEAyWICAEEFAQAAs0fKZQIAQhIBAABiAwAkAQDoBwT+AAAALgtiAwBBBgEAAEwGAQAAYgMAQQcBAABMBwEAAGIDAEH7AAAATPsAAABiAwBBCAEAAEwIAQAAYgMAQRMBAABMEwEAAGIDAEEUAQAATBQBAABiAwBBFQEAABHpAw6/TBUBAABiAwBBFgEAABHpAw6/TBYBAABiAwBBCQEAABHpAw6/TAkBAABiAwBBFwEAAEwXAQAAYgMAQRgBAABMGAEAAGIDAEEZAQAATBkBAADBBDiYAAAAQvwAAAALYgQAJgEATAUBAAAkAQAupANMGE4/Jlg6UxwICERERERERF1dXURERA46Og5iBgHCAwMAAwQAABsDtAQAAQCeBAABANoBAAEAOJgAAABC/AAAAAuzTPcAAADQTOoAAAAkAQAupANpBAM6ISEOYgYBxAMDBQMHAgDRAQi2BAABALgEAAEAgAQAAQDgAwEAMOIDAQEw5AMBAjCEBAEDIKAEAwQwsgMECLgDBwBhAwBhAgBhAQBhAADRs6ToA7TVZQAABB0BAACdz50EBAEAAJ3RncfcYgAA7YvIOJgAAABC9wAAAGIBACQBAMkmAADKYQQAYgIAQQUBAAB96kTBBGIDAEL5AAAAC2IEAEEGAQAATAYBAABiBABBBwEAAEwHAQAAYgQAQQgBAABMCAEAAGIEAEEJAQAATAkBAAAkAQAOgADoug6DOJgAAABC/AAAAAs4CgEAAGICAEELAQAA7UwLAQAAYgIAQQwBAABMDAEAAGIDAEwFAQAAJAEALqQDcRI/JmcmWBdTMEREREQXIjpiRCsOQwYBqAMAAAACBwAyALQDBQC6AwgAvAMJAL4DCgDAAwsAwgMMAMQDDQAL20zaAAAA3EzdAAAA3UzeAAAA3kzfAAAAXgQATOAAAABeBQBM4QAAAF4GAEziAAAAKKQDhwEJAwghISEhKysr
|
//bbQ0FUT1BTEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoaY2F0ZWdvcmllc09iagZvbmUIY2F0ZQJlCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lDnR5cGVfaWQQdHlwZV9waWQIcHVzaBJzdHJpbmdpZnkOZmlsdGVycw5jb25zb2xlCmRlYnVnBHt9BnRpZARwZwxleHRlbmQMdmlkZW9zID9hYz12aWRlb2xpc3QmdD0IJnBnPQhsaXN0DHZvZF9pZBB2b2RfbmFtZQ52b2RfcGljFnZvZF9yZW1hcmtzEHBhcnNlSW50CHBhZ2UScGFnZWNvdW50CmxpbWl0CnRvdGFsBGlkBnZvZCQ/YWM9dmlkZW9saXN0Jmlkcz0Qdm9kX3llYXIQdm9kX2FyZWESdm9kX2FjdG9yGHZvZF9kaXJlY3RvchZ2b2RfY29udGVudBp2b2RfcGxheV9mcm9tGHZvZF9wbGF5X3VybAhmbGFnBHdkCnF1aWNrHD9hYz1kZXRhaWwmd2Q9D6QDAaYDAQAPqAMAAQCqAwAOAAYBoAEAAAABEApLAKoDAAysAwAJrgMBCbADAgmyAwMJtAMECbYDBQG4AwYBugMHAbwDCAG+AwkBwAMKAcIDCwHEAwwBxgMNAagDDgEI6DS+AF8GAL4BXwcAvgJfCAC+A18JAL4EXwoAvgVfCwC+Bl8MAL4HXw0AvghfDgC+CV8PACm/4LPhBOQAAADiv18EACYAAF8FACmkAwEMAQA2Bg0NIRcABswCDmIGAbYDAQABAgQAYwHKAwABAKwDAQiuAwIIsgMECLQDBQjPQeYAAAARZgAADs9B5wAAABFmAQAOz0HoAAAAlwRIAAAAqegOz0HoAAAAEWYCAA7qMM9B6AAAAJcESQAAAKnoIc9B6AAAAEHpAAAAEWYCAA7PQegAAABB2gAAABFmAwAOBi6kAwkIAzo6TjpYU1QOQwYBuAMAAQADAQAWAdQDAQAgsAMDCGEAAAvHYgAABOsAAABxZQAASWIAACikAxQDEg1EDmIGAboDAQEBBAEAHQLSAwABANgDAQAguAMHAGEAADjtAAAAzwvb7EzuAAAA7ovHYgAAQe8AAAAupAMaBBImJhIOYgYBvAMBCgEJBACaAwvgAwABAOIDAQAw5AMBATDmAwICMOgDAgMw6gMCBCDsAwIFIO4DAgYg8AMDByDyAxEHIPQDFQIDsgMECLoDCACqAwAMtAMFCGEBAGEAAGUAAMfcYgAA7YvIbGsBAABhBgBhBQBhBABhAwBhAgA4mAAAAEL7AAAAYgEAJAEAyWICAEEeAAAAyiYAAMEEC8EFC8EGYQcAYgMAfeuwAMEHZQIAQvwAAABlAwAkAQCW6DBlAwBC/QAAAGIHAEH+AAAAJAEAaYcAAABiBgBiBwBB/gAAAHFiBwBB/wAAAEnqbWIHAEEAAQAAOEUAAACq6DZiBwBBAAEAALOq6FFiBABCAQEAAAtiBwBB/wAAAEz/AAAAYgcAQf4AAABM/gAAACQBAA7qKGIEAEIBAQAAC2IHAEH/AAAATP8AAABiBwBB/gAAAEz+AAAAJAEADoAAaU////8Og2UCAEL8AAAAZQMAJAEAluhCYQgAZQMAfeozwQhiBgBiCABHOEUAAACq6CJiBABCAQEAAAtiBgBiCABHTP8AAABiCABM/gAAACQBAA6AAOjLDoM4mAAAAEICAQAAC2IEAEweAAAAYgUATAMBAAAkAQAPLsEJbBcAAAA4BAEAAEIFAQAAwAkkAQAODuoCLwYupAMiICEXJmdYMBwSEj9Ye20NUz/HDcgwWDpOqSI6KysXK1MXDmIGAb4DAAAAAQAABgAEBgEAAC6kA0oBAw5iBgHAAwQFBAcCAPUBCY4EAAEAkAQAAQDgAwABAJIEAAEA4gMBADDkAwEBMOYDAQIwlAQBAyDwAwMEILIDBAi6AwgAYQMAYQIAYQEAYQAA0DhFAAAAqRHpBQ7Qs6ToA7TUZQAABAsBAACdz50EDAEAAJ3QncfcYgAA7YvIOJgAAABC+wAAAGIBACQBAMkmAADKYQQAYgIAQQ0BAAB96kTBBGIDAEIBAQAAC2IEAEEOAQAATA4BAABiBABBDwEAAEwPAQAAYgQAQRABAABMEAEAAGIEAEERAQAATBEBAAAkAQAOgADoug6DOJgAAABCAgEAAAs4EgEAANDtTBMBAABiAgBBFAEAAEwUAQAAOBIBAABiAgBBFQEAAO1MFQEAAGICAEEWAQAATBYBAABiAwBMDQEAACQBAC6kA08UP11nJlgXUzBEREREFyM6P0RiRCsOYgYBwgMBBQEEAwCcAgauBAABAOIDAQAw5AMBATDmAwECMPADAQMwsAQBBCCyAwQIugMIAKoDAAxhBABhAwBhAgBhAQBhAABlAAAEGQEAAJ3PncfcYgAA7YvIOJgAAABC+wAAAGIBACQBAMliAgBBDQEAALNHymUCAEL8AAAAYgMAJAEA6AcEBgEAAC4LYgMAQQ4BAABMDgEAAGIDAEEPAQAATA8BAABiAwBB/gAAAEz+AAAAYgMAQRABAABMEAEAAGIDAEEaAQAATBoBAABiAwBBGwEAAEwbAQAAYgMAQRwBAAAR6QMOv0wcAQAAYgMAQR0BAAAR6QMOv0wdAQAAYgMAQREBAAAR6QMOv0wRAQAAYgMAQR4BAABMHgEAAGIDAEEfAQAATB8BAABiAwBBIAEAAEwgAQAAwQQ4mAAAAEICAQAAC2IEACYBAEwNAQAAJAEALqQDaBhOPyZYOlMcCAhERERERERdXV1EREQOOjoOYgYBxAMDAAMEAAAbA8IEAAEArgQAAQDaAQABADiYAAAAQgIBAAALs0z7AAAA0EzpAAAAJAEALqQDhQEEAzohIQ5iBgHGAwMFAwcCANwBCMQEAAEAxgQAAQCQBAABAOIDAQAw5AMBATDmAwECMJQEAQMgsAQDBDCyAwQIugMIAGEDAGECAGEBAGEAANE4RQAAAKkR6QUO0bOk6AO01WUAAAQkAQAAnc+dBAwBAACd0Z3H3GIAAO2LyDiYAAAAQvsAAABiAQAkAQDJJgAAymEEAGICAEENAQAAfepEwQRiAwBCAQEAAAtiBABBDgEAAEwOAQAAYgQAQQ8BAABMDwEAAGIEAEEQAQAATBABAABiBABBEQEAAEwRAQAAJAEADoAA6LoOgziYAAAAQgIBAAALOBIBAABiAgBBEwEAAO1MEwEAAGICAEEUAQAATBQBAABiAwBMDQEAACQBAC6kA40BEj9dZyZYF1MwRERERBciOmJEKw5DBgGoAwAAAAIHADIAtgMGALwDCQC+AwoAwAMLAMIDDADEAw0AxgMOAAvbTNsAAADcTN4AAADdTN8AAADeTOAAAABeBABM4QAAAF4FAEziAAAAXgYATOMAAAAopAOjAQkDCCEhISErKys=
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
207
cat/js/copymanga_open.js
Normal file
207
cat/js/copymanga_open.js
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
import { Crypto, _, load } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'copymanga';
|
||||||
|
let url = 'https://www.mangacopy.com';
|
||||||
|
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
|
||||||
|
|
||||||
|
async function request(reqUrl) {
|
||||||
|
let resp = await req(reqUrl, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': PC_UA,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return resp.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
var html = await request(url + '/comics');
|
||||||
|
const $ = load(html);
|
||||||
|
let filterObj = {};
|
||||||
|
|
||||||
|
let region = {
|
||||||
|
key: 'region',
|
||||||
|
name: '地區',
|
||||||
|
init: '',
|
||||||
|
};
|
||||||
|
let regionValues = [];
|
||||||
|
regionValues.push({ n: '全部', v: '' });
|
||||||
|
regionValues.push({ n: '日漫', v: '0' });
|
||||||
|
regionValues.push({ n: '韓漫', v: '1' });
|
||||||
|
regionValues.push({ n: '美漫', v: '2' });
|
||||||
|
region['value'] = regionValues;
|
||||||
|
|
||||||
|
let ordering = {
|
||||||
|
key: 'ordering',
|
||||||
|
name: '排序',
|
||||||
|
init: '-datetime_updated',
|
||||||
|
};
|
||||||
|
let orderingValues = [];
|
||||||
|
orderingValues.push({ n: '更新時間↓', v: '-datetime_updated' });
|
||||||
|
orderingValues.push({ n: '更新時間↑', v: 'datetime_updated' });
|
||||||
|
orderingValues.push({ n: '熱門↓', v: '-popular' });
|
||||||
|
orderingValues.push({ n: '熱門↑', v: 'popular' });
|
||||||
|
ordering['value'] = orderingValues;
|
||||||
|
|
||||||
|
let status = {
|
||||||
|
key: 'sort',
|
||||||
|
name: '狀態',
|
||||||
|
init: '',
|
||||||
|
};
|
||||||
|
let statusValues = [];
|
||||||
|
statusValues.push({ n: '全部', v: '' });
|
||||||
|
statusValues.push({ n: '連載中', v: '0' });
|
||||||
|
statusValues.push({ n: '已完結', v: '1' });
|
||||||
|
statusValues.push({ n: '短篇', v: '2' });
|
||||||
|
status['value'] = statusValues;
|
||||||
|
|
||||||
|
filterObj['c1'] = [];
|
||||||
|
|
||||||
|
let themeValues = [{ n: '全部', v: '' }];
|
||||||
|
for (const a of $('div.classify-right>a[href*="theme="]')) {
|
||||||
|
themeValues.push({
|
||||||
|
n: $(a).text().trim(),
|
||||||
|
v: a.attribs.href.match(/.*?theme=(.*)&/)[1],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_.each(_.chunk(themeValues, 11), (vals) => {
|
||||||
|
let theme = {
|
||||||
|
key: 'theme',
|
||||||
|
name: '',
|
||||||
|
init: '',
|
||||||
|
value: vals,
|
||||||
|
};
|
||||||
|
filterObj['c1'].push(theme);
|
||||||
|
});
|
||||||
|
|
||||||
|
filterObj['c1'].push(region);
|
||||||
|
filterObj['c1'].push(status);
|
||||||
|
filterObj['c1'].push(ordering);
|
||||||
|
|
||||||
|
return {
|
||||||
|
class: [{ type_name: 'all', type_id: 'c1' }],
|
||||||
|
filters: filterObj,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
let link = url + `/comics?theme=${extend.theme || ''}®ion=${extend.region || ''}&status=${extend.status || ''}&ordering=${extend.ordering || '-datetime_updated'}`;
|
||||||
|
if (pg > 1) {
|
||||||
|
link += '&offset=' + (pg - 1) * 50 + '&limit=50';
|
||||||
|
}
|
||||||
|
var html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = eval($('div[class="row exemptComic-box"]')[0].attribs.list);
|
||||||
|
let books = [];
|
||||||
|
for (const book of list) {
|
||||||
|
books.push({
|
||||||
|
book_id: book.path_word,
|
||||||
|
book_name: book.name,
|
||||||
|
book_pic: book.cover,
|
||||||
|
book_remarks: book.author ? book.author[0].name : '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: list.length == 50 ? pg + 1 : pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
var html = await request(url + `/comic/${id}`);
|
||||||
|
const $ = load(html);
|
||||||
|
let book = {
|
||||||
|
book_name: $('h6').text().trim(),
|
||||||
|
book_director: _.map($('span.comicParticulars-right-txt>a[href*="/author/"]'), (a) => $(a).text().trim()).join('/'),
|
||||||
|
book_content: $('p.intro').text().trim(),
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = JSON.parse(await request(url + `/comicdetail/${id}/chapters`)).results;
|
||||||
|
var key = Crypto.enc.Utf8.parse('xxxmanga.woo.key');
|
||||||
|
var iv = Crypto.enc.Utf8.parse(data.substr(0, 16));
|
||||||
|
var src = Crypto.enc.Hex.parse(data.substr(16));
|
||||||
|
var dst = Crypto.AES.decrypt({ ciphertext: src }, key, { iv: iv, padding: Crypto.pad.Pkcs7 });
|
||||||
|
dst = Crypto.enc.Utf8.stringify(dst);
|
||||||
|
|
||||||
|
const groups = JSON.parse(dst).groups;
|
||||||
|
|
||||||
|
let urls = _.map(groups.default.chapters, (c) => {
|
||||||
|
return c.name + '$' + id + '|' + c.id;
|
||||||
|
}).join('#');
|
||||||
|
book.volumes = '默認';
|
||||||
|
book.urls = urls;
|
||||||
|
|
||||||
|
return {
|
||||||
|
list: [book],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
var info = id.split('|');
|
||||||
|
var html = await request(url + `/comic/${info[0]}/chapter/${info[1]}`);
|
||||||
|
const $ = load(html);
|
||||||
|
const data = $('div.imageData')[0].attribs.contentkey;
|
||||||
|
var key = Crypto.enc.Utf8.parse('xxxmanga.woo.key');
|
||||||
|
var iv = Crypto.enc.Utf8.parse(data.substr(0, 16));
|
||||||
|
var src = Crypto.enc.Hex.parse(data.substr(16));
|
||||||
|
var dst = Crypto.AES.decrypt({ ciphertext: src }, key, { iv: iv, padding: Crypto.pad.Pkcs7 });
|
||||||
|
dst = Crypto.enc.Utf8.stringify(dst);
|
||||||
|
const list = JSON.parse(dst);
|
||||||
|
var content = [];
|
||||||
|
for (let index = 0; index < list.length; index++) {
|
||||||
|
const element = list[index];
|
||||||
|
content[index] = element.url;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
content: content,
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
return {
|
||||||
|
content: '',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
const link = `${url}/api/kb/web/searcha/comics?offset=${pg > 1 ? ((pg - 1) * 12).toString() : ''}&platform=2&limit=12&q=${wd}&q_type=`;
|
||||||
|
var list = JSON.parse(await request(link)).results.list;
|
||||||
|
const books = [];
|
||||||
|
for (const book of list) {
|
||||||
|
books.push({
|
||||||
|
book_id: book.path_word,
|
||||||
|
book_name: book.name,
|
||||||
|
book_pic: book.cover,
|
||||||
|
book_remarks: book.author ? book.author[0].name : '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: list.length == 12 ? pg + 1 : pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -1,12 +1,12 @@
|
|||||||
import { Crypto, load, _ } from './lib/cat.js';
|
// 自动从 地址发布页 获取&跳转url地址
|
||||||
|
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||||
|
|
||||||
let key = 'czzy';
|
let key = 'czzy';
|
||||||
let url = 'https://www.czzy88.com/';
|
let host = 'https://cz01.vip/'; // 厂长地址发布页
|
||||||
|
let url = '';
|
||||||
let siteKey = '';
|
let siteKey = '';
|
||||||
let siteType = 0;
|
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';
|
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';
|
||||||
|
|
||||||
const cookie = {};
|
const cookie = {};
|
||||||
|
|
||||||
async function request(reqUrl, referer, mth, data, hd) {
|
async function request(reqUrl, referer, mth, data, hd) {
|
||||||
@ -48,13 +48,43 @@ async function request(reqUrl, referer, mth, data, hd) {
|
|||||||
async function init(cfg) {
|
async function init(cfg) {
|
||||||
siteKey = cfg.skey;
|
siteKey = cfg.skey;
|
||||||
siteType = cfg.stype;
|
siteType = cfg.stype;
|
||||||
|
url = await checkValidUrl(cfg.ext);
|
||||||
|
console.debug('厂长跳转地址 =====>' + url); // js_debug.log
|
||||||
|
}
|
||||||
|
|
||||||
|
async function checkValidUrl(ext) {
|
||||||
|
let validUrl = ext;
|
||||||
|
if (_.isEmpty(ext)) {
|
||||||
|
let html = await request(host);
|
||||||
|
let matches = html.matchAll(/推荐访问<a href="(.*)"/g);
|
||||||
|
for (let match of matches) {
|
||||||
|
try {
|
||||||
|
let rcmdUrl = match[1];
|
||||||
|
let res = await req(rcmdUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
},
|
||||||
|
redirect: 0,
|
||||||
|
});
|
||||||
|
let location = res.headers['location'];
|
||||||
|
if (!_.isEmpty(location)) {
|
||||||
|
validUrl = location;
|
||||||
|
} else {
|
||||||
|
validUrl = rcmdUrl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return validUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function home(filter) {
|
async function home(filter) {
|
||||||
let filterObj = {};
|
let filterObj = {};
|
||||||
const html = await request(url + '/movie_bt');
|
const html = await request(url + '/movie_bt');
|
||||||
const $ = load(html);
|
const $ = load(html);
|
||||||
const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]');
|
|
||||||
const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a');
|
const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a');
|
||||||
let tag = {
|
let tag = {
|
||||||
key: 'tag',
|
key: 'tag',
|
||||||
@ -66,6 +96,7 @@ async function home(filter) {
|
|||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
tag['init'] = tag.value[0].v;
|
tag['init'] = tag.value[0].v;
|
||||||
|
const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]');
|
||||||
let classes = _.map(series, (s) => {
|
let classes = _.map(series, (s) => {
|
||||||
let typeId = s.attribs['cat-url'];
|
let typeId = s.attribs['cat-url'];
|
||||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1);
|
typeId = typeId.substring(typeId.lastIndexOf('/') + 1);
|
||||||
@ -133,7 +164,6 @@ async function detail(id) {
|
|||||||
const detail = $('ul.moviedteail_list > li');
|
const detail = $('ul.moviedteail_list > li');
|
||||||
let vod = {
|
let vod = {
|
||||||
vod_id: id,
|
vod_id: id,
|
||||||
vod_name: $('div.moviedteail_tt > h1').text().trim(),
|
|
||||||
vod_pic: $('div.dyimg img:first').attr('src'),
|
vod_pic: $('div.dyimg img:first').attr('src'),
|
||||||
vod_remarks: '',
|
vod_remarks: '',
|
||||||
vod_content: stripHtmlTag($('div.yp_context').html()).trim(),
|
vod_content: stripHtmlTag($('div.yp_context').html()).trim(),
|
||||||
@ -238,4 +268,4 @@ export function __jsEvalReturn() {
|
|||||||
play: play,
|
play: play,
|
||||||
search: search,
|
search: search,
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -89,6 +89,7 @@ async function category(tid, pg, filter, extend) {
|
|||||||
|
|
||||||
async function detail(id) {
|
async function detail(id) {
|
||||||
const vod = {
|
const vod = {
|
||||||
|
audio: 1,
|
||||||
book_id: id,
|
book_id: id,
|
||||||
type_name: '',
|
type_name: '',
|
||||||
book_year: '',
|
book_year: '',
|
||||||
|
File diff suppressed because one or more lines are too long
1
cat/js/doubanbb.js
Normal file
1
cat/js/doubanbb.js
Normal file
File diff suppressed because one or more lines are too long
@ -5,7 +5,7 @@ import { initAli, detailContent, playContent } from './lib/ali.js';
|
|||||||
let siteKey = 'dovx';
|
let siteKey = 'dovx';
|
||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
let siteUrl = 'https://api.dovx.tk';
|
let siteUrl = 'https://api.dovx.tk';
|
||||||
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/
|
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
|
||||||
|
|
||||||
async function request(reqUrl) {
|
async function request(reqUrl) {
|
||||||
let res = await req(reqUrl, {
|
let res = await req(reqUrl, {
|
||||||
|
1
cat/js/duanju5_open.js
Normal file
1
cat/js/duanju5_open.js
Normal file
File diff suppressed because one or more lines are too long
@ -2,8 +2,8 @@
|
|||||||
import { load, _ } from './lib/cat.js';
|
import { load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
let key = 'duboku';
|
let key = 'duboku';
|
||||||
let HOST = 'https://www.duboku.tv';
|
let HOST = 'https://u.duboku.io';
|
||||||
// let HOST = 'https://u.duboku.io';
|
// let HOST = 'https://www.duboku.tv';
|
||||||
let siteKey = '';
|
let siteKey = '';
|
||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
|
|
||||||
|
147
cat/js/fengche_open.js
Normal file
147
cat/js/fengche_open.js
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
import { _, Uri, load } from 'assets://js/lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'fengche';
|
||||||
|
let HOST = 'https://www.qyy158.com';
|
||||||
|
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
|
||||||
|
|
||||||
|
async function request(reqUrl) {
|
||||||
|
const resp = await req(reqUrl, {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': PC_UA,
|
||||||
|
},
|
||||||
|
buffer: 1,
|
||||||
|
});
|
||||||
|
return gbk.decode(resp.content);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
const classes = [{'type_id':'all','type_name':'all'}];
|
||||||
|
const filterObj = {
|
||||||
|
'all':[{'key':'area','name':'地域','init':'','value':[{'n':'全部','v':''},{'n':'大陆','v':'1'},{'n':'日本','v':'2'},{'n':'韩国','v':'3'},{'n':'欧美','v':'4'}]},{'key':'class','name':'类别','init':'','wrap':1,'value':[{'n':'全部','v':''},{'n':'霸总','v':'bazong'},{'n':'修真','v':'xiuzhen'},{'n':'恋爱','v':'lianai'},{'n':'校园','v':'xiaoyuan'},{'n':'冒险','v':'maoxian'},{'n':'搞笑','v':'gaoxiao'},{'n':'生活','v':'shenghuo'},{'n':'热血','v':'rexue'},{'n':'架空','v':'jiakong'},{'n':'后宫','v':'hougong'},{'n':'玄幻','v':'xuanhuan'},{'n':'悬疑','v':'xuanyi'},{'n':'恐怖','v':'kongbu'},{'n':'灵异','v':'lingyi'},{'n':'动作','v':'dongzuo'},{'n':'科幻','v':'kehuan'},{'n':'战争','v':'zhanzheng'},{'n':'古风','v':'gufeng'},{'n':'穿越','v':'chuanyue'},{'n':'竞技','v':'jingji'},{'n':'励志','v':'lizhi'},{'n':'同人','v':'tongren'},{'n':'真人','v':'zhenren'},{'n':'其他','v':'qita'},{'n':'总裁','v':'zongcai'},{'n':'异能','v':'yineng'},{'n':'韩漫','v':'hanman'},{'n':'剧情','v':'juqing'},{'n':'大女主','v':'danvzhu'},{'n':'都市','v':'dushi'},{'n':'格斗','v':'gedou'},{'n':'武侠','v':'wuxia'},{'n':'日常','v':'richang'},{'n':'纯爱','v':'chunai'},{'n':'国漫','v':'guoman'},{'n':'推理','v':'tuili'},{'n':'少年','v':'shaonain'},{'n':'奇幻','v':'qihuan'},{'n':'短篇','v':'duanpian'},{'n':'ABO','v':'abo'},{'n':'运动','v':'yundong'},{'n':'萌系','v':'mengxi'},{'n':'爆笑','v':'baoxiao'},{'n':'蔷薇','v':'qiangwei'},{'n':'百合','v':'baihe'},{'n':'BG','v':'bg'}]},{'key':'status','name':'状态','init':'','value':[{'n':'全部','v':''},{'n':'连载中','v':'1'},{'n':'已完结','v':'2'}]}],
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
const uri = new Uri(`${HOST}/sort/`);
|
||||||
|
if (extend.class) {
|
||||||
|
uri.addQueryParam('class', extend.class);
|
||||||
|
}
|
||||||
|
if (extend.area) {
|
||||||
|
uri.addQueryParam('area', extend.area);
|
||||||
|
}
|
||||||
|
if (extend.status) {
|
||||||
|
uri.addQueryParam('status', extend.status);
|
||||||
|
}
|
||||||
|
if (pg > 1) {
|
||||||
|
uri.addQueryParam('page', pg);
|
||||||
|
}
|
||||||
|
const link = uri.toString();
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = $('.cartoon-block-box .cart-item');
|
||||||
|
const books = _.map(list, (item) => {
|
||||||
|
const $item = $(item);
|
||||||
|
const $cover = $item.find('.cart-cover');
|
||||||
|
const $img = $cover.find('img:first');
|
||||||
|
const $p = $item.find('.cart-info p:first');
|
||||||
|
const $remark = $item.find('.new-chapter');
|
||||||
|
return {
|
||||||
|
book_id: $cover.attr('href').replace(/.*\/info\/(.*)\//, '$1'),
|
||||||
|
book_name: $p.text(),
|
||||||
|
book_pic: $img.attr('src'),
|
||||||
|
book_remarks: $remark.text(),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('.pagelink a.next').length > 0;
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: hasMore ? pg + 1 : pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request(`${HOST}/info/${id}/`);
|
||||||
|
const $ = load(html);
|
||||||
|
const book = {
|
||||||
|
book_name: $('h1.title').text().trim(),
|
||||||
|
book_director: $('.mt10:contains(作者)').text().substring(3).trim(),
|
||||||
|
book_content: $('.line-clamp-4:contains(简介)').text().substring(3).trim(),
|
||||||
|
};
|
||||||
|
const list = $('.chapter-list li');
|
||||||
|
const urls = _.map(list, (item) => {
|
||||||
|
const $item = $(item).find('a');
|
||||||
|
const title = $item.text();
|
||||||
|
const href = `/info/${id}/${$item.attr('href')}`;
|
||||||
|
return title + '$' + href;
|
||||||
|
}).join('#');
|
||||||
|
book.volumes = '章节';
|
||||||
|
book.urls = urls;
|
||||||
|
return {
|
||||||
|
list: [book],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const html = await request(`${HOST}${id}`);
|
||||||
|
const $ = load(html);
|
||||||
|
const images = $('.chapter-content img');
|
||||||
|
const content = _.map(images, (image) => {
|
||||||
|
return $(image).attr('data-original');
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
content: content,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg == 0) pg = 1;
|
||||||
|
const link = `${HOST}/search/${encodeURIComponent(wd)}/`;
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = $('.cartoon-block-box .cart-item');
|
||||||
|
const books = _.map(list, (item) => {
|
||||||
|
const $item = $(item);
|
||||||
|
const $cover = $item.find('.cart-cover');
|
||||||
|
const $img = $cover.find('img:first');
|
||||||
|
const $p = $item.find('.cart-info p:first');
|
||||||
|
const $remark = $item.find('.new-chapter');
|
||||||
|
return {
|
||||||
|
book_id: $cover.attr('href').replace(/.*\/info\/(.*)\//, '$1'),
|
||||||
|
book_name: $p.text(),
|
||||||
|
book_pic: $img.attr('src'),
|
||||||
|
book_remarks: $remark.text(),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: pg,
|
||||||
|
list: books,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
222
cat/js/freeok_open.js
Normal file
222
cat/js/freeok_open.js
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'freeok';
|
||||||
|
let HOST = 'https://www.freeok.vip';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
let cookie = '';
|
||||||
|
|
||||||
|
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, reqCookie) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
'Referer': HOST,
|
||||||
|
'cookie': reqCookie
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
if (cfg.hasOwnProperty('ext')) {
|
||||||
|
if (cfg.ext.hasOwnProperty('host')) {
|
||||||
|
HOST = cfg.ext.host;
|
||||||
|
}
|
||||||
|
if (cfg.ext.hasOwnProperty('cookie')) {
|
||||||
|
cookie = cfg.ext.cookie;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
let classes = [{"type_id":"1","type_name":"电影"},{"type_id":"2","type_name":"剧集"},{"type_id":"3","type_name":"动漫"},{"type_id":"4","type_name":"综艺"},{"type_id":"5","type_name":"少儿"}];
|
||||||
|
let filterObj = {
|
||||||
|
"1":[{"key":"class","name":"剧情","init":"","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":"地区","init":"","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":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","init":"","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"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","init":"2","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"6"},{"n":"港台剧","v":"7"},{"n":"日韩剧","v":"8"},{"n":"欧美剧","v":"9"},{"n":"海外剧","v":"10"},{"n":"其他剧","v":"11"}]},{"key":"class","name":"剧情","init":"","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":"其他"}]},{"key":"area","name":"地区","init":"","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":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","init":"","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"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"key":"class","name":"剧情","init":"","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":"少年"}]},{"key":"area","name":"地区","init":"","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":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","init":"","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"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","init":"","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":"其他"}]},{"key":"area","name":"地区","init":"","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":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","init":"","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"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"5":[{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
}
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let page = '';
|
||||||
|
if (pg > 1) {
|
||||||
|
page = pg;
|
||||||
|
}
|
||||||
|
const link = HOST + '/vodshow/' + (extend.cateId || tid) + '-' + (extend.area || '') + '-' + (extend.by || '') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '----' + page + '---' + (extend.year || '') + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('a.module-item');
|
||||||
|
const covers = $('.module-item-cover');
|
||||||
|
let videos = _.map(items, (item, index) => {
|
||||||
|
const cover = $(covers[index]);
|
||||||
|
const img = cover.find('img:first')[0];
|
||||||
|
const remarks = $(cover.find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: item.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||||
|
vod_name: item.attribs.title,
|
||||||
|
vod_pic: img.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('a.page-next:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request(HOST + '/voddetail/' + id + '.html');
|
||||||
|
const $ = load(html);
|
||||||
|
const vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text(),
|
||||||
|
vod_type: $('.module-info-tag-link:eq(2) a:first').text().trim(),
|
||||||
|
vod_year: $('.module-info-tag-link:eq(0)').text().trim(),
|
||||||
|
vod_area: $('.module-info-tag-link:eq(1)').text().trim(),
|
||||||
|
vod_director: $('.module-info-item:contains(导演:)').text().trim().substring(3).trim().replace(/\/$/g, ''),
|
||||||
|
vod_actor: $('.module-info-item:contains(主演:)').text().trim().substring(3).trim().replace(/\/$/g, ''),
|
||||||
|
vod_pic: $('.module-info-poster .module-item-pic img:first').attr('data-original'),
|
||||||
|
vod_remarks : $('.module-info-item:contains(集数:)').text().trim().substring(3) || '',
|
||||||
|
vod_content: $('.module-info-introduction-content').text().trim(),
|
||||||
|
};
|
||||||
|
let playMap = {};
|
||||||
|
let tabs = $('.module-tab-items-box .module-tab-item');
|
||||||
|
let playlists = $('.module-play-list');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
let from = tab.children[0].children[0].data;
|
||||||
|
if (from.includes('夸克')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
let title = it.children[0].children[0].data;
|
||||||
|
let playUrl = it.attribs.href.replace(/.*?\/vodplay\/(.*).html/g, '$1');
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push(title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
let urls = _.values(playMap);
|
||||||
|
let vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + '/vodplay/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html, true);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
let playUrl = js.url;
|
||||||
|
if (js.encrypt == 1) {
|
||||||
|
playUrl = unescape(playUrl);
|
||||||
|
} else if (js.encrypt == 2) {
|
||||||
|
playUrl = unescape(base64Decode(playUrl));
|
||||||
|
}
|
||||||
|
let playHtml = await request('https://www.freeok.vip/okplay/?url=' + playUrl);
|
||||||
|
playUrl = decryptUrl(playHtml);
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
header: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function decryptUrl(html) {
|
||||||
|
const result = html.match(/var config = {[\w\W]*}[\w\W]*player/);
|
||||||
|
const jsConfig = eval(result[0].replace(/player$/g, ';config'));
|
||||||
|
const url = jsConfig.url;
|
||||||
|
const $ = load(html);
|
||||||
|
const textStr = $('meta[name="viewport"]').attr('id').replace('now_', '');
|
||||||
|
const idStr = $('meta[charset="UTF-8"]').attr('id').replace('now_', '');
|
||||||
|
let keyList = [];
|
||||||
|
let sortedList = [];
|
||||||
|
let keyStr = '';
|
||||||
|
for (let index = 0; index < idStr.length; index++) {
|
||||||
|
keyList.push({
|
||||||
|
'id': idStr[index],
|
||||||
|
'text': textStr[index]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
sortedList = keyList.sort((a, b)=> a.id - b.id);
|
||||||
|
for (const item of sortedList) {
|
||||||
|
keyStr += item.text;
|
||||||
|
}
|
||||||
|
const md5Key = Crypto.MD5(keyStr + '0xd8@pS^vOL$WuOF3').toString();
|
||||||
|
const endStr = Crypto.enc.Utf8.parse(md5Key.substring(16));
|
||||||
|
const iv = Crypto.enc.Utf8.parse(md5Key.substring(0, 16));
|
||||||
|
const decrypted = Crypto.AES.decrypt(url, endStr, {
|
||||||
|
'iv': iv,
|
||||||
|
'mode': Crypto.mode.CBC,
|
||||||
|
'padding': Crypto.pad.Pkcs7,
|
||||||
|
});
|
||||||
|
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
|
||||||
|
return decryptedUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
function base64Decode(text) {
|
||||||
|
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
let html = await request(HOST + '/vod-so/-------------.html?wd=' + wd, cookie);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('div.module-card-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const title = $(item).find('.module-card-item-title a:first')[0];
|
||||||
|
const cover = $(item).find('.module-item-cover');
|
||||||
|
const img = cover.find('img:first')[0];
|
||||||
|
const remarks = $(cover.find('.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: title.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||||
|
vod_name: title.children[0].children[0].data,
|
||||||
|
vod_pic: img.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
1
cat/js/funletu_open.js
Normal file
1
cat/js/funletu_open.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
1
cat/js/hula8_open.js
Normal file
1
cat/js/hula8_open.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
|||||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
let key = 'ikanbot';
|
let key = 'ikanbot';
|
||||||
let url = 'https://www.aikanbot.com';
|
let url = 'https://www.aikanbot.com';
|
||||||
|
@ -116,7 +116,8 @@ async function detail(id) {
|
|||||||
vod_area: $(detail).find('h3:nth-child(4)').text(),
|
vod_area: $(detail).find('h3:nth-child(4)').text(),
|
||||||
vod_actor: $(detail).find('h3:nth-child(5)').text(),
|
vod_actor: $(detail).find('h3:nth-child(5)').text(),
|
||||||
};
|
};
|
||||||
const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2&token=9109590b194731fde643ce27924fcf6f', {
|
const token = getToken($);
|
||||||
|
const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=1&token=' + token, {
|
||||||
headers: {
|
headers: {
|
||||||
Referer: 'play',
|
Referer: 'play',
|
||||||
'User-Agent': UA,
|
'User-Agent': UA,
|
||||||
@ -182,6 +183,22 @@ async function detail(id) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getToken($) {
|
||||||
|
const currentId = $('#current_id').val();
|
||||||
|
let eToken = $('#e_token').val();
|
||||||
|
if (!currentId || !eToken) return '';
|
||||||
|
const idLength = currentId.length;
|
||||||
|
const subId = currentId.substring(idLength - 4, idLength);
|
||||||
|
let keys = [];
|
||||||
|
for (let i = 0; i < subId.length; i++) {
|
||||||
|
const curInt = parseInt(subId[i]);
|
||||||
|
const splitPos = curInt % 3 + 1;
|
||||||
|
keys[i] = eToken.substring(splitPos, splitPos + 8);
|
||||||
|
eToken = eToken.substring(splitPos + 8, eToken.length);
|
||||||
|
}
|
||||||
|
return keys.join('');
|
||||||
|
}
|
||||||
|
|
||||||
function base64Encode(text) {
|
function base64Encode(text) {
|
||||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||||
}
|
}
|
||||||
@ -258,4 +275,4 @@ export function __jsEvalReturn() {
|
|||||||
proxy: proxy,
|
proxy: proxy,
|
||||||
search: search,
|
search: search,
|
||||||
};
|
};
|
||||||
}
|
}
|
166
cat/js/jinm_open.js
Normal file
166
cat/js/jinm_open.js
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
import { Crypto, load, _, jinja2 } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'jinm';
|
||||||
|
let HOST = 'https://jinman.tv';
|
||||||
|
let url = '';
|
||||||
|
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, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
let html = await request(HOST);
|
||||||
|
url = html.match(/<a href="(.*)" target=.*>点击进入</)[1];
|
||||||
|
console.debug('跟剧跳转地址 =====>' + url); // js_debug.log
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
let classes = [{"type_id":1,"type_name":"电影"},{"type_id":2,"type_name":"追剧"},{"type_id":4,"type_name":"综艺"},{"type_id":3,"type_name":"动漫"},{"type_id":5,"type_name":"纪录片"},{"type_id":20,"type_name":"电影解说"}];
|
||||||
|
let filterObj = {
|
||||||
|
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"警匪","v":"/class/警匪"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"},{"n":"枪战","v":"/class/枪战"},{"n":"恐怖","v":"/class/恐怖"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"经典","v":"/class/经典"},{"n":"青春","v":"/class/青春"},{"n":"文艺","v":"/class/文艺"},{"n":"微电影","v":"/class/微电影"},{"n":"古装","v":"/class/古装"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"农 村","v":"/class/农村"},{"n":"儿童","v":"/class/儿童"},{"n":"网络电影","v":"/class/网络电影"},{"n":"体育赛事","v":"/class/体育赛事"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽 南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"letter","name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"偶像","v":"/class/偶像"},{"n":"爱情","v":"/class/爱情"},{"n":"言情","v":"/class/言情"},{"n":"古装","v":"/class/古装"},{"n":"历史","v":"/class/历史"},{"n":"玄幻","v":"/class/玄幻"},{"n":"谍战","v":"/class/谍战"},{"n":"历险","v":"/class/历险"},{"n":"都市","v":"/class/都市"},{"n":"科幻","v":"/class/科幻"},{"n":"军旅","v":"/class/军旅"},{"n":"喜剧","v":"/class/喜剧"},{"n":"武侠","v":"/class/武侠"},{"n":"江湖","v":"/class/江湖"},{"n":"罪案","v":"/class/罪案"},{"n":"青春","v":"/class/青春"},{"n":"家庭","v":"/class/家庭"},{"n":"战争","v":"/class/战争"},{"n":"悬疑","v":"/class/悬疑"},{"n":"穿越","v":"/class/穿越"},{"n":"宫廷","v":"/class/宫廷"},{"n":"神话","v":"/class/神话"},{"n":"商战","v":"/class/商战"},{"n":"警匪","v":"/class/警匪"},{"n":"动作","v":"/class/动作"},{"n":"惊悚","v":"/class/惊悚"},{"n":"剧情","v":"/class/剧情"},{"n":"同性","v":"/class/同性"},{"n":"奇幻","v":"/class/奇幻"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"letter","name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"番剧","v":"/class/番剧"},{"n":"国创","v":"/class/国创"},{"n":"热血","v":"/class/热血"},{"n":"格斗","v":"/class/格斗"},{"n":"机战","v":"/class/机战"},{"n":"少女","v":"/class/少女"},{"n":"竞技","v":"/class/竞技"},{"n":"科幻","v":"/class/科幻"},{"n":"魔幻","v":"/class/魔幻"},{"n":"爆笑","v":"/class/爆笑"},{"n":"推理","v":"/class/推理"},{"n":"冒险","v":"/class/冒险"},{"n":"恋爱","v":"/class/恋爱"},{"n":"校园","v":"/class/校园"},{"n":"治愈","v":"/class/治愈"},{"n":"泡面","v":"/class/泡面"},{"n":"穿越","v":"/class/穿越"},{"n":"灵异","v":"/class/灵异"},{"n":"耽美","v":"/class/耽美"},{"n":"动画","v":"/class/动画"},{"n":"电影","v":"/class/电影"},{"n":"其它","v":"/class/其它/"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它/"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"letter","name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"综艺","v":"/class/综艺"},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"曲艺","v":"/class/曲艺"},{"n":"生活","v":"/class/生活"},{"n":"游戏互动","v":"/class/游戏互动"},{"n":"财经","v":"/class/财经"},{"n":"求职","v":"/class/求职"},{"n":"脱口秀","v":"/class/脱口秀"},{"n":"真人秀","v":"/class/真人秀/"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它/"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"letter","name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"5":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"文化","v":"/class/文化"},{"n":"探索","v":"/class/探索"},{"n":"军事","v":"/class/军事"},{"n":"解密","v":"/class/解密"},{"n":"科技","v":"/class/科技"},{"n":"历史","v":"/class/历史"},{"n":"人物","v":"/class/人物"},{"n":"自然","v":"/class/自然"},{"n":"其它","v":"/class/其它/"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法 国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"其它","v":"/area/其它/"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"letter","name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"20":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战 争","v":"/class/战争"},{"n":"警匪","v":"/class/警匪"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"},{"n":"枪战","v":"/class/枪战"},{"n":"恐怖","v":"/class/恐怖"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"经典","v":"/class/经典"},{"n":"青春","v":"/class/青春"},{"n":"文艺","v":"/class/文艺"},{"n":"微电影","v":"/class/微电影"},{"n":"古 装","v":"/class/古装"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"农村","v":"/class/农村"},{"n":"儿童","v":"/class/儿童"},{"n":"网络电影","v":"/class/网络电影"},{"n":"伦理","v":"/class/伦理"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"letter","name":"字母","value":[{"n":"字母","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = url + '/index.php/vod/show' + (extend.area || '') + (extend.by || '/by/time') + (extend.class || '') + '/id/' + tid + (extend.lang || '') + (extend.letter || '') + '/page/' + pg + (extend.year || '') + '.html';//https://jinmantv.com/index.php/vod/show/area/%E7%BE%8E%E5%9B%BD/by/hits/class/%E5%8A%A8%E4%BD%9C/id/1/lang/%E8%8B%B1%E8%AF%AD/year/2022.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('div.main a.module-poster-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item)[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: k.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
var html = await request( url + '/index.php/vod/detail/id/' + id + '.html');
|
||||||
|
var $ = load(html);
|
||||||
|
var vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text().trim(),
|
||||||
|
vod_type: $('.module-info-tag a').text(),
|
||||||
|
vod_actor: $('.module-info-items a').text(),
|
||||||
|
vod_pic: $('.video-cover img:first').attr('src'),
|
||||||
|
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||||
|
vod_content: $('.show-desc p').text().trim().replace('如果你喜欢', '').replace('记得来金曼TV在线观看。', ''),
|
||||||
|
};
|
||||||
|
var playMap = {};
|
||||||
|
var tabs = $('div.module-tab-items-box div.module-tab-item span');
|
||||||
|
var playlists = $('div.module-play-list-content');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
var from = $(tab).text();
|
||||||
|
var list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
var title = $(it).text();
|
||||||
|
var playUrl = it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1');
|
||||||
|
if (title.length == 0) title = it.children[0].data.trim();
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push( title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
var urls = _.values(playMap);
|
||||||
|
var vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = url + '/index.php/vod/play/id/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
const playUrl = js.url;
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let data = await request(url + '/index.php/vod/search/page/' + pg + '/wd/' + wd + '.html');//https://fun.tvoled.net/index.php/vod/search/page/2/wd/%E6%88%91.html
|
||||||
|
const $ = load(data);
|
||||||
|
const items = $('div.module-items div.module-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1'),
|
||||||
|
vod_name: k.attribs.alt,
|
||||||
|
vod_pic: k.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import { Crypto, load, _, dayjs } from './lib/cat.js';
|
import { Crypto, load, _, dayjs } from 'assets://js/lib/cat.js';
|
||||||
|
|
||||||
let key = 'jiohub';
|
let key = 'jiohub';
|
||||||
let url = 'https://jiohub.top';
|
let url = 'https://jiohub.top';
|
File diff suppressed because one or more lines are too long
8
cat/js/kkys_open2.js
Normal file
8
cat/js/kkys_open2.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import{Crypto,dayjs,jinja2,_}from"assets://js/lib/cat.js";let key="kkys",url="https://api1.baibaipei.com:8899",device={},siteKey="",siteType=0;async function request(reqUrl,postData,agentSp,get){var ts=dayjs().valueOf().toString(),rand=randStr(32),sign=Crypto.MD5("abcdexxxdd2daklmn25129_"+ts+"_"+rand).toString().toLowerCase(),agentSp={"user-agent":agentSp||device.ua},sign=(reqUrl.includes("baibaipei")&&(agentSp["device-id"]=device.id,agentSp["push-token"]="",agentSp.sign=sign,agentSp.time=ts,agentSp.md5=rand,agentSp.version="2.1.3",agentSp["system-model"]=device.model,agentSp["system-brand"]=device.brand,agentSp["system-version"]=device.release),await req(reqUrl,{method:get?"get":"post",headers:agentSp,data:postData||{},postType:get?"":"form"}));return sign.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype;cfg=await local.get(key,"device");if(0<cfg.length)try{device=JSON.parse(cfg)}catch(error){}_.isEmpty(device)&&((device=randDevice()).id=randStr(33).toLowerCase(),device.ua="okhttp/4.1.0",await local.set(key,"device",JSON.stringify(device)))}async function home(filter){var classes=[],filterObj={};for(const type of JSON.parse(await request(url+"/api.php/Index/getTopVideoCategory")).data){var typeName=type.nav_name;if("推荐"!=typeName){var typeId=type.nav_type_id.toString();if(classes.push({type_id:typeId,type_name:typeName}),filter)try{var key,filterAll=[],filterData=JSON.parse(await request(url+"/api.php/Video/getFilterType",{type:typeId})).data;for(key of Object.keys(filterData)){var itemValues=filterData[key];"plot"===key&&(key="class");let typeExtendName="";switch(key){case"class":typeExtendName="类型";break;case"area":typeExtendName="地区";break;case"lang":typeExtendName="语言";break;case"year":typeExtendName="年代";break;case"sort":typeExtendName="排序"}if(0!==typeExtendName.length){var newTypeExtend={key:key,name:typeExtendName},newTypeExtendKV=[];for(let j=0;j<itemValues.length;j++){var name=itemValues[j],value="sort"===key?j+"":"全部"===name?"0":name;newTypeExtendKV.push({n:name,v:value})}newTypeExtend.init="sort"===key?"1":newTypeExtendKV[0].v,newTypeExtend.value=newTypeExtendKV,filterAll.push(newTypeExtend)}}_.isEmpty(filterAll)||(filterObj[typeId]=filterAll)}catch(e){console.log(e)}}}return JSON.stringify({class:classes,filters:filterObj})}async function homeVod(){var videos=[];for(const item of JSON.parse(await request(url+"/api.php/Index/getHomePage",{type:1,p:1})).data.video)if(0===item.title.styleType)for(const vObj of item.list)videos.push({vod_id:vObj.vod_id,vod_name:vObj.vod_name,vod_pic:vObj.vod_pic,vod_remarks:vObj.vod_remarks||vObj.vod_score||""});return JSON.stringify({list:videos})}async function category(tid,pg,filter,extend){0==pg&&(pg=1);var reqUrl=url+"/api.php/Video/getFilterVideoList",extend=JSON.parse(jinja2(`{
|
||||||
|
"type": "{{tid}}",
|
||||||
|
"p": "{{pg}}",
|
||||||
|
"area": "{{ext.area|default(0)}}",
|
||||||
|
"year": "{{ext.year|default(0)}}",
|
||||||
|
"sort": "{{ext.sort|default(0)}}",
|
||||||
|
"class": "{{ext.class|default(0)}}"
|
||||||
|
}`,{ext:extend,tid:tid,pg:pg})),tid=(console.log(extend),JSON.parse(await request(reqUrl,extend)).data),videos=[];for(const vod of tid.data)videos.push({vod_id:vod.vod_id,vod_name:vod.vod_name,vod_pic:vod.vod_pic,vod_remarks:vod.vod_remarks||vod.vod_score||""});return JSON.stringify({page:parseInt(tid.current_page),pagecount:parseInt(tid.last_page),limit:parseInt(tid.per_page),total:parseInt(tid.total),list:videos})}async function detail(id){var id=JSON.parse(await request(url+"/api.php/Video/getVideoInfo",{video_id:id})).data.video,vod={vod_id:id.vod_id,vod_name:id.vod_name,vod_pic:id.vod_pic,type_name:id.vod_class,vod_year:id.vod_year,vod_area:id.vod_area,vod_remarks:id.vod_remarks||"",vod_actor:id.vod_actor,vod_director:id.vod_director,vod_content:id.vod_content.trim()},playlist={};for(const item of id.vod_play){var from=item.playerForm;if("jp"!==from&&"xg"!==from){let urls=[];for(const u of item.url)urls.push(formatPlayUrl(vod.vod_name,u.title)+"$"+u.play_url);!playlist.hasOwnProperty(from)&&0<urls.length&&(playlist[from]=urls)}}parse=id.parse||[],vod.vod_play_from=_.keys(playlist).join("$$$");var vod_play_url=[];for(const urlist of _.values(playlist))vod_play_url.push(urlist.join("#"));return vod.vod_play_url=vod_play_url.join("$$$"),JSON.stringify({list:[vod]})}var parse=[];async function play(flag,id,flags){try{if((0<=id.indexOf("youku")||0<=id.indexOf("iqiyi")||0<=id.indexOf("v.qq.com")||0<=id.indexOf("pptv")||0<=id.indexOf("le.com")||0<=id.indexOf("1905.com")||0<=id.indexOf("mgtv"))&&0<parse.length)for(let index=0;index<parse.length;index++)try{var p=parse[index];let res=await req(p+id,{headers:{"user-agent":"okhttp/4.1.0"}});if((result=jsonParse(id,JSON.parse(res.content))).url)return result.parse=0,JSON.stringify(result)}catch(error){}if(0<=id.indexOf("jqq-")){var jqqHeader=await request(url+"/jqqheader.json",null,null,!0),jqqHeaders=JSON.parse(jqqHeader),ids=id.split("-"),jxJqq=await req("https://api.juquanquanapp.com/app/drama/detail?dramaId="+ids[1]+"&episodeSid="+ids[2]+"&quality=LD",{headers:jqqHeaders}),jqqInfo=JSON.parse(jxJqq.content);if(jqqInfo.data.playInfo.url)return JSON.stringify({parse:0,playUrl:"",url:jqqInfo.data.playInfo.url})}var result,res=await request(url+"/video.php",{url:id});return(result=jsonParse(id,JSON.parse(res).data)).url?(result.parse=0,JSON.stringify(result)):JSON.stringify({parse:0,playUrl:"",url:id})}catch(e){return console.log(e),JSON.stringify({parse:0,url:id})}}async function search(wd,quick){var videos=[];for(const vod of JSON.parse(await request(url+"/api.php/Search/getSearch",{key:wd,type_id:0,p:1})).data.data)videos.push({vod_id:vod.vod_id,vod_name:vod.vod_name,vod_pic:vod.vod_pic,vod_remarks:vod.vod_remarks||vod.vod_score||""});return JSON.stringify({list:videos})}const charStr="abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";function randStr(len,withNum){for(var _str="",containsNum=void 0===withNum||withNum,i=0;i<len;i++){var idx=_.random(0,containsNum?charStr.length-1:charStr.length-11);_str+=charStr[idx]}return _str}function randDevice(){return{brand:"Huawei",model:"HUAWEI Mate 20",release:"10",buildId:randStr(3,!1).toUpperCase()+_.random(11,99)+randStr(1,!1).toUpperCase()}}function formatPlayUrl(src,name){return name.trim().replaceAll(src,"").replace(/<|>|《|》/g,"").replace(/\$|#/g," ").trim()}function jsonParse(input,json){try{let url=json.url??"";if(!(url=url.startsWith("//")?"https:"+url:url).startsWith("http"))return{};let headers=json.headers||{};var ua=(json["user-agent"]||"").trim(),referer=(0<ua.length&&(headers["User-Agent"]=ua),(json.referer||"").trim());return 0<referer.length&&(headers.Referer=referer),_.keys(headers).forEach(hk=>{headers[hk]||delete headers[hk]}),{header:headers,url:url}}catch(error){console.log(error)}return{}}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
|
159
cat/js/klm_open.js
Normal file
159
cat/js/klm_open.js
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
import { Crypto, load, _, jinja2 } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'klm';
|
||||||
|
let HOST = 'https://www.ksksl.com';
|
||||||
|
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, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
let classes = [{"type_id":"dy","type_name":"电影"},{"type_id":"tv","type_name":"追剧"},{"type_id":"zy","type_name":"综艺"},{"type_id":"dm","type_name":"动漫"},{"type_id":"jl","type_name":"纪录片"}];
|
||||||
|
let filterObj = {
|
||||||
|
"dy":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"}]},{"key":"class","name":"分类","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"警匪","v":"/class/警匪"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"},{"n":"枪战","v":"/class/枪战"},{"n":"恐怖","v":"/class/恐怖"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"经典","v":"/class/经典"},{"n":"青春","v":"/class/青春"},{"n":"文艺","v":"/class/文艺"},{"n":"古装","v":"/class/古装"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"农村","v":"/class/农村"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"tv":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"}]},{"key":"class","name":"分类","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"言情","v":"/class/言情"},{"n":"武侠","v":"/class/武侠"},{"n":"偶像","v":"/class/美国"},{"n":"家庭","v":"/class/家庭"},{"n":"喜剧","v":"/class/喜剧"},{"n":"战争","v":"/class/战争"},{"n":"军旅","v":"/class/军旅"},{"n":"谍战","v":"/class/谍战"},{"n":"悬疑","v":"/class/悬疑"},{"n":"罪案","v":"/class/罪案"},{"n":"穿越","v":"/class/穿越"},{"n":"宫廷","v":"/class/宫廷"},{"n":"历史","v":"/class/历史"},{"n":"神话","v":"/class/神话"},{"n":"科幻","v":"/class/科幻"},{"n":"年代","v":"/class/年代"},{"n":"农村","v":"/class/农村"},{"n":"商战","v":"/class/商战"},{"n":"剧情","v":"/class/剧情"},{"n":"奇幻","v":"/class/奇幻"},{"n":"网剧","v":"/class/网剧"},{"n":"都市","v":"/class/都市"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"zy":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"}]},{"key":"class","name":"分类","value":[{"n":"全部","v":""},{"n":"表演","v":"/class/表演"},{"n":"播报","v":"/class/播报"},{"n":"访谈","v":"/class/访谈"},{"n":"体验","v":"/class/体验"},{"n":"养成","v":"/class/养成"},{"n":"游戏","v":"/class/游戏"},{"n":"亲子","v":"/class/亲子"},{"n":"美食","v":"/class/美食"},{"n":"情感","v":"/class/情感"},{"n":"选秀","v":"/class/选秀"},{"n":"益智","v":"/class/益智"},{"n":"晚会","v":"/class/晚会"},{"n":"音乐","v":"/class/音乐"},{"n":"文化","v":"/class/文化"},{"n":"喜剧","v":"/class/喜剧"},{"n":"曲艺","v":"/class/曲艺"},{"n":"职场","v":"/class/职场"},{"n":"脱口秀","v":"/class/脱口秀"},{"n":"文艺","v":"/class/文艺"},{"n":"竞技","v":"/class/竞技"},{"n":"潮流文化","v":"/class/潮流文化"},{"n":"体育","v":"/class/体育"},{"n":"资讯","v":"/class/资讯"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"dm":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"中国香港","v":"/area/中国香港"},{"n":"中国台湾","v":"/area/中国台湾"},{"n":"美国","v":"/area/美国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"}]},{"key":"class","name":"分类","value":[{"n":"全部","v":""},{"n":"热门","v":"/class/热门"},{"n":"搞笑","v":"/class/搞笑"},{"n":"番剧","v":"/class/番剧"},{"n":"国创","v":"/class/国创"},{"n":"大电影","v":"/class/大电影"},{"n":"热血","v":"/class/热血"},{"n":"催泪","v":"/class/催泪"},{"n":"励志","v":"/class/励志"},{"n":"机战","v":"/class/机战"},{"n":"格斗","v":"/class/格斗"},{"n":"恋爱","v":"/class/恋爱"},{"n":"科幻","v":"/class/科幻"},{"n":"奇幻","v":"/class/奇幻"},{"n":"魔幻","v":"/class/魔幻"},{"n":"推理","v":"/class/推理"},{"n":"校园","v":"/class/校园"},{"n":"日常","v":"/class/日常"},{"n":"经典","v":"/class/经典"},{"n":"历史","v":"/class/历史"},{"n":"美食","v":"/class/美食"},{"n":"武侠","v":"/class/武侠"},{"n":"玄幻","v":"/class/玄幻"},{"n":"竞技","v":"/class/竞技"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"jl":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/中国大陆"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"国外","v":"/area/国外"},{"n":"其他","v":"/area/其他"}]},{"key":"class","name":"分类","value":[{"n":"全部","v":""},{"n":"社会","v":"/class/社会"},{"n":"动物","v":"/class/动物"},{"n":"文化","v":"/class/文化"},{"n":"自然","v":"/class/自然"},{"n":"人文","v":"/class/人文"},{"n":"军事","v":"/class/军事"},{"n":"历史","v":"/class/历史"},{"n":"记录","v":"/class/记录"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = HOST + '/show/' + tid + (extend.area || '') + (extend.by || '/by/time') + (extend.class || '') + '/page/' + pg + (extend.year || '') + '.html';//https://www.ksksl.com/show/dy/area/%E7%BE%8E%E5%9B%BD/class/%E5%8A%A8%E4%BD%9C/page/2.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('ul.dx-list > li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const remarks = $($(item).find('span.vod_remarks')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: it.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div.page_info> ul > a').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
var html = await request( HOST + '/voddetail/' + id + '.html');
|
||||||
|
var $ = load(html);
|
||||||
|
var vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text().trim(),
|
||||||
|
vod_type: $('.video-info-actor:eq(1)').text(),
|
||||||
|
vod_actor: $('.info-main a').text(),
|
||||||
|
vod_pic: $('.video-cover img:first').attr('src'),
|
||||||
|
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||||
|
vod_content: $('.vod_content').text().trim(),
|
||||||
|
};
|
||||||
|
var playMap = {};
|
||||||
|
var tabs = $('div.player_info h2');
|
||||||
|
var playlists = $('div.play_li');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
var from = tab.children[0].data;
|
||||||
|
var list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
var title = it.children[0].data;
|
||||||
|
var playUrl = it.attribs.href.replace(/.*?\/vodplay\/(.*).html/g, '$1');
|
||||||
|
if (title.length == 0) title = it.children[0].data.trim();
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push( title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
var urls = _.values(playMap);
|
||||||
|
var vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + '/vodplay/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
const playUrl = js.url;
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let data = await request(HOST + '/ch/page/' + pg + '/wd/' + wd + '.html');//https://www.ksksl.com/ch/page/2/wd/%E6%88%91.html
|
||||||
|
const $ = load(data);
|
||||||
|
const items = $('ul.dx-list > li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const remarks = $($(item).find('span.vod_remarks')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/\/voddetail\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: it.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div.page_info > ul > a').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -1,346 +0,0 @@
|
|||||||
import { Crypto, dayjs, jinja2, Uri, _ } from './lib/cat.js';
|
|
||||||
|
|
||||||
let key = 'kunyu77';
|
|
||||||
let url = 'http://api.tyun77.cn';
|
|
||||||
let device = {};
|
|
||||||
let timeOffset = 0;
|
|
||||||
let siteKey = '';
|
|
||||||
let siteType = 0;
|
|
||||||
|
|
||||||
async function request(reqUrl, agentSp) {
|
|
||||||
let sj = dayjs().unix() - timeOffset;
|
|
||||||
let uri = new Uri(reqUrl);
|
|
||||||
uri.addQueryParam('pcode', '010110005');
|
|
||||||
uri.addQueryParam('version', '2.1.6');
|
|
||||||
uri.addQueryParam('devid', device.id);
|
|
||||||
uri.addQueryParam('package', 'com.sevenVideo.app.android');
|
|
||||||
uri.addQueryParam('sys', 'android');
|
|
||||||
uri.addQueryParam('sysver', device.release);
|
|
||||||
uri.addQueryParam('brand', device.brand);
|
|
||||||
uri.addQueryParam('model', device.model.replaceAll(' ', '_'));
|
|
||||||
uri.addQueryParam('sj', sj);
|
|
||||||
let keys = [];
|
|
||||||
for (var i = 0; i < uri.queryPairs.length; i++) {
|
|
||||||
keys.push(uri.queryPairs[i][0]);
|
|
||||||
}
|
|
||||||
keys = _.sortBy(keys, function (name) {
|
|
||||||
return name;
|
|
||||||
});
|
|
||||||
let tkSrc = uri.path();
|
|
||||||
for (let k of keys) {
|
|
||||||
let v = uri.getQueryParamValue(k);
|
|
||||||
v = encodeURIComponent(v);
|
|
||||||
tkSrc += v;
|
|
||||||
}
|
|
||||||
tkSrc += sj;
|
|
||||||
tkSrc += 'XSpeUFjJ';
|
|
||||||
console.log(tkSrc);
|
|
||||||
let tk = Crypto.MD5(tkSrc).toString().toLowerCase();
|
|
||||||
console.log(tk);
|
|
||||||
let header = {
|
|
||||||
'user-agent': agentSp || 'okhttp/3.12.0',
|
|
||||||
t: sj,
|
|
||||||
TK: tk,
|
|
||||||
};
|
|
||||||
let res = await req(uri.toString(), {
|
|
||||||
headers: header,
|
|
||||||
});
|
|
||||||
|
|
||||||
let serverTime = res.headers.date; // dart all response header key is lowercase
|
|
||||||
let content = res.content;
|
|
||||||
let serverTimeS = dayjs(serverTime).unix();
|
|
||||||
timeOffset = dayjs().unix() - serverTimeS;
|
|
||||||
// console.log(content);
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function init(cfg) {
|
|
||||||
siteKey = cfg.skey;
|
|
||||||
siteType = cfg.stype;
|
|
||||||
var deviceKey = 'device';
|
|
||||||
var deviceInfo = await local.get(key, deviceKey);
|
|
||||||
if (deviceInfo.length > 0) {
|
|
||||||
try {
|
|
||||||
device = JSON.parse(deviceInfo);
|
|
||||||
} catch (error) {}
|
|
||||||
}
|
|
||||||
if (_.isEmpty(device)) {
|
|
||||||
device = randDevice();
|
|
||||||
device.id = randStr(32).toLowerCase();
|
|
||||||
device.ua = 'Dalvik/2.1.0 (Linux; U; Android ' + device.release + '; ' + device.model + ' Build/' + device.buildId + ')';
|
|
||||||
await local.set(key, deviceKey, JSON.stringify(device));
|
|
||||||
}
|
|
||||||
|
|
||||||
await request(url + '/api.php/provide/getDomain');
|
|
||||||
await request(url + '/api.php/provide/config');
|
|
||||||
await request(url + '/api.php/provide/checkUpgrade');
|
|
||||||
await request(url + '/api.php/provide/channel');
|
|
||||||
}
|
|
||||||
|
|
||||||
async function home(filter) {
|
|
||||||
let data = JSON.parse(await request(url + '/api.php/provide/filter')).data;
|
|
||||||
let classes = [];
|
|
||||||
let filterObj = {};
|
|
||||||
let filterAll = [];
|
|
||||||
for (const key in data) {
|
|
||||||
classes.push({
|
|
||||||
type_id: key,
|
|
||||||
type_name: data[key][0].cat,
|
|
||||||
});
|
|
||||||
if (!filter) continue;
|
|
||||||
try {
|
|
||||||
let typeId = key.toString();
|
|
||||||
if (_.isEmpty(filterAll)) {
|
|
||||||
let filterData = JSON.parse(await request(url + '/api.php/provide/searchFilter?type_id=0&pagenum=1&pagesize=1')).data.conditions;
|
|
||||||
// console.log(filterData);
|
|
||||||
// 年份
|
|
||||||
let year = {
|
|
||||||
key: 'year',
|
|
||||||
name: '年份',
|
|
||||||
init: '',
|
|
||||||
};
|
|
||||||
let yearValues = [];
|
|
||||||
yearValues.push({ n: '全部', v: '' });
|
|
||||||
filterData.y.forEach((e) => {
|
|
||||||
yearValues.push({ n: e.name, v: e.value });
|
|
||||||
});
|
|
||||||
year['value'] = yearValues;
|
|
||||||
// 地区
|
|
||||||
let area = {
|
|
||||||
key: 'area',
|
|
||||||
name: '地区',
|
|
||||||
init: '',
|
|
||||||
};
|
|
||||||
let areaValues = [];
|
|
||||||
areaValues.push({ n: '全部', v: '' });
|
|
||||||
filterData.a.forEach((e) => {
|
|
||||||
areaValues.push({ n: e.name, v: e.value });
|
|
||||||
});
|
|
||||||
area['value'] = areaValues;
|
|
||||||
// 类型
|
|
||||||
let type = {
|
|
||||||
key: 'category',
|
|
||||||
name: '类型',
|
|
||||||
init: '',
|
|
||||||
};
|
|
||||||
let typeValues = [];
|
|
||||||
typeValues.push({ n: '全部', v: '' });
|
|
||||||
filterData.scat.forEach((e) => {
|
|
||||||
typeValues.push({ n: e.name, v: e.value });
|
|
||||||
});
|
|
||||||
type['value'] = typeValues;
|
|
||||||
|
|
||||||
filterAll.push(year, area, type);
|
|
||||||
}
|
|
||||||
if (!_.isEmpty(filterAll)) {
|
|
||||||
filterObj[typeId] = filterAll;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// console.log(classes);
|
|
||||||
// console.log(filterObj);
|
|
||||||
return JSON.stringify({
|
|
||||||
class: classes,
|
|
||||||
filters: filterObj,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function homeVod() {
|
|
||||||
let data = JSON.parse(await request(url + '/api.php/provide/homeBlock?type_id=0')).data;
|
|
||||||
let blocks = data.blocks;
|
|
||||||
let videos = [];
|
|
||||||
for (const block of blocks) {
|
|
||||||
let name = block.block_name;
|
|
||||||
if (name.indexOf('热播') >= 0) continue;
|
|
||||||
let contents = block.contents;
|
|
||||||
for (const content of contents) {
|
|
||||||
videos.push({
|
|
||||||
vod_id: content.id,
|
|
||||||
vod_name: content.title,
|
|
||||||
vod_pic: content.videoCover,
|
|
||||||
vod_remarks: content.msg,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return JSON.stringify({
|
|
||||||
list: videos,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function category(tid, pg, filter, extend) {
|
|
||||||
let reqUrl = url + '/api.php/provide/searchFilter?type_id=' + tid + '&pagenum=' + pg + '&pagesize=24&';
|
|
||||||
reqUrl += jinja2('year={{ext.year}}&category={{ext.category}}&area={{ext.area}}', { ext: extend });
|
|
||||||
let data = JSON.parse(await request(reqUrl)).data;
|
|
||||||
let videos = [];
|
|
||||||
for (const vod of data.result) {
|
|
||||||
videos.push({
|
|
||||||
vod_id: vod.id,
|
|
||||||
vod_name: vod.title,
|
|
||||||
vod_pic: vod.videoCover,
|
|
||||||
vod_remarks: vod.msg,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return JSON.stringify({
|
|
||||||
page: parseInt(data.page),
|
|
||||||
pagecount: data.pagesize,
|
|
||||||
limit: 24,
|
|
||||||
total: data.total,
|
|
||||||
list: videos,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function detail(id) {
|
|
||||||
let data = JSON.parse(await request(url + '/api.php/provide/videoDetail?ids=' + id)).data;
|
|
||||||
console.log(data);
|
|
||||||
let vod = {
|
|
||||||
vod_id: data.id,
|
|
||||||
vod_name: data.videoName,
|
|
||||||
vod_pic: data.videoCover,
|
|
||||||
type_name: data.subCategory,
|
|
||||||
vod_year: data.year,
|
|
||||||
vod_area: data.area,
|
|
||||||
vod_remarks: data.msg,
|
|
||||||
vod_actor: data.actor,
|
|
||||||
vod_director: data.director,
|
|
||||||
vod_content: data.brief.trim(),
|
|
||||||
};
|
|
||||||
let episodes = JSON.parse(await request(url + '/api.php/provide/videoPlaylist?ids=' + id)).data.episodes;
|
|
||||||
let playlist = {};
|
|
||||||
for (const episode of episodes) {
|
|
||||||
let playurls = episode.playurls;
|
|
||||||
for (const playurl of playurls) {
|
|
||||||
let from = playurl.playfrom;
|
|
||||||
let t = formatPlayUrl(vod.vod_name, playurl.title);
|
|
||||||
if (t.length == 0) t = playurl.title.trim();
|
|
||||||
if (!playlist.hasOwnProperty(from)) {
|
|
||||||
playlist[from] = [];
|
|
||||||
}
|
|
||||||
playlist[from].push(t + '$' + playurl.playurl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
vod.vod_play_from = _.keys(playlist).join('$$$');
|
|
||||||
let urls = _.values(playlist);
|
|
||||||
let vod_play_url = [];
|
|
||||||
for (const urlist of urls) {
|
|
||||||
vod_play_url.push(urlist.join('#'));
|
|
||||||
}
|
|
||||||
vod.vod_play_url = vod_play_url.join('$$$');
|
|
||||||
return JSON.stringify({
|
|
||||||
list: [vod],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function play(flag, id, flags) {
|
|
||||||
try {
|
|
||||||
let data = JSON.parse(await request(url + '/api.php/provide/parserUrl?url=' + id + '&retryNum=0')).data;
|
|
||||||
let playHeader = data.playHeader;
|
|
||||||
let jxUrl = data.url;
|
|
||||||
let res = await req(jxUrl, {
|
|
||||||
headers: {
|
|
||||||
'user-agent': 'okhttp/3.12.0',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
let result = jsonParse(id, JSON.parse(res.content));
|
|
||||||
result['parse'] = 0;
|
|
||||||
if (playHeader) {
|
|
||||||
result.header = _.merge(result.header, playHeader);
|
|
||||||
}
|
|
||||||
return JSON.stringify(result);
|
|
||||||
} catch (e) {
|
|
||||||
return JSON.stringify({
|
|
||||||
parse: 0,
|
|
||||||
url: id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function search(wd, quick, pg) {
|
|
||||||
let page = pg || 1;
|
|
||||||
if (page == 0) page = 1;
|
|
||||||
let data = JSON.parse(await request(url + '/api.php/provide/searchVideo?searchName=' + wd + '&pg=' + page, 'okhttp/3.12.0'));
|
|
||||||
let videos = [];
|
|
||||||
for (const vod of data.data) {
|
|
||||||
videos.push({
|
|
||||||
vod_id: vod.id,
|
|
||||||
vod_name: vod.videoName,
|
|
||||||
vod_pic: vod.videoCover,
|
|
||||||
vod_remarks: vod.msg,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return JSON.stringify({
|
|
||||||
page: page,
|
|
||||||
pagecount: data.pages,
|
|
||||||
list: videos,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789';
|
|
||||||
function randStr(len, withNum) {
|
|
||||||
var _str = '';
|
|
||||||
let containsNum = withNum === undefined ? true : withNum;
|
|
||||||
for (var i = 0; i < len; i++) {
|
|
||||||
let idx = _.random(0, containsNum ? charStr.length - 1 : charStr.length - 11);
|
|
||||||
_str += charStr[idx];
|
|
||||||
}
|
|
||||||
return _str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function randDevice() {
|
|
||||||
return {
|
|
||||||
brand: 'Huawei',
|
|
||||||
model: 'HUAWEI Mate 20',
|
|
||||||
release: '10',
|
|
||||||
buildId: randStr(3, false).toUpperCase() + _.random(11, 99) + randStr(1, false).toUpperCase(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatPlayUrl(src, name) {
|
|
||||||
return name
|
|
||||||
.trim()
|
|
||||||
.replaceAll(src, '')
|
|
||||||
.replace(/<|>|《|》/g, '')
|
|
||||||
.replace(/\$|#/g, ' ')
|
|
||||||
.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
function jsonParse(input, json) {
|
|
||||||
try {
|
|
||||||
let url = json.url ?? '';
|
|
||||||
if (url.startsWith('//')) {
|
|
||||||
url = 'https:' + url;
|
|
||||||
}
|
|
||||||
if (!url.startsWith('http')) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
let headers = json['headers'] || {};
|
|
||||||
let ua = (json['user-agent'] || '').trim();
|
|
||||||
if (ua.length > 0) {
|
|
||||||
headers['User-Agent'] = ua;
|
|
||||||
}
|
|
||||||
let referer = (json['referer'] || '').trim();
|
|
||||||
if (referer.length > 0) {
|
|
||||||
headers['Referer'] = referer;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
header: headers,
|
|
||||||
url: url,
|
|
||||||
};
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function __jsEvalReturn() {
|
|
||||||
return {
|
|
||||||
init: init,
|
|
||||||
home: home,
|
|
||||||
homeVod: homeVod,
|
|
||||||
category: category,
|
|
||||||
detail: detail,
|
|
||||||
play: play,
|
|
||||||
search: search,
|
|
||||||
};
|
|
||||||
}
|
|
167
cat/js/l0l_open.js
Normal file
167
cat/js/l0l_open.js
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'dyxs';
|
||||||
|
let HOST = 'https://www.l0l.tv';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E230 Safari/601.1';
|
||||||
|
|
||||||
|
async function request(reqUrl, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
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":"综艺"},{"type_id":4,"type_name":"动漫"}];
|
||||||
|
let filterObj = {
|
||||||
|
"1":[{"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":"历史"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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":"其他"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = HOST + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '-' + (extend.class || '') + '-----' + pg + '---' + (extend.year || '') + '/';//https://www.l0l.tv/vodshow/1-%E7%BE%8E%E5%9B%BD-hits-%E5%8A%A8%E4%BD%9C-%E8%8B%B1%E8%AF%AD-------2022.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('div.module-items div.module-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a')[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-text')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href,
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: k.attribs['data-src'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request( HOST + id);
|
||||||
|
const $ = load(html);
|
||||||
|
const vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text().trim(),
|
||||||
|
vod_type: $('.video-info-aux a').text(),
|
||||||
|
vod_actor: $('.video-info-main a').text(),
|
||||||
|
vod_pic: $('.module-item-pic img:first').attr('data-src'),
|
||||||
|
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||||
|
vod_content: $('.video-info-content span').text().trim(),
|
||||||
|
};
|
||||||
|
let playMap = {};
|
||||||
|
const tabs = $('div.module-tab-content > div.module-tab-item > span');
|
||||||
|
const playlists = $('div.sort-item');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
const from = tab.children[0].data;
|
||||||
|
let list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
const title = $(it).text();
|
||||||
|
const playUrl = it.attribs.href;
|
||||||
|
if (title.length == 0) title = it.children[0].data.trim();
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push( title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
const urls = _.values(playMap);
|
||||||
|
let vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + id;
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
const playUrl = unescape(js.url);
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let data = await request(HOST + '/vodsearch/' + wd + '----------' + pg + '---' + '.html');//https://www.l0l.tv/vodsearch/%E6%88%91----------2---.html
|
||||||
|
const $ = load(data);
|
||||||
|
const items = $('div.module-items div.module-search-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a')[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.video-serial')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href,
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: k.attribs['data-src'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
1
cat/js/lbgs_book_open.js
Normal file
1
cat/js/lbgs_book_open.js
Normal file
File diff suppressed because one or more lines are too long
1
cat/js/lbgs_book_open2.js
Normal file
1
cat/js/lbgs_book_open2.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
//bbQ0FUT1AtFGxpYi9hbGkuanMsYXNzZXRzOi8vanMvbGliL2NhdC5qcxguL2FsaV9hcGkuanMOaW5pdEFsaRpkZXRhaWxDb250ZW50FnBsYXlDb250ZW50MGRldGFpbENvbnRlbnRWb2RQbGF5RnJvbS5kZXRhaWxDb250ZW50Vm9kUGxheVVybAJfEGluaXRTb21lEHNldFRva2VuDGdldFZvZBpwbGF5ZXJDb250ZW50JnBsYXllckNvbnRlbnRCeUZsYWcUYWxpUGF0dGVybhBwYXJzZVZvZAZleHQEaWQObWF0Y2hlcwZ2b2QSZGV0YWlsU3RyCm1hdGNoEnN0cmluZ2lmeQhsaXN0DmNvbnNvbGUKZGVidWcOc2hhcmVJZAxmaWxlSWQOaXNFbXB0eQhmbGFnBmlkcwxyZXN1bHQCKwIjBZ9TO3UuLS0tLS1wbGF5Q29udGVudC0tLS0tLS0QcGxheUZyb20CaQWFjQVuBiQkJAhwdXNoB59TO3UjAAeFjQVuIwAOcGxheVVybBh2b2RfcGxheV91cmwPpAMCpgOoAwUAB6oDAAisAwAKrgMAC7ADAAyyAwAGALQDAAG2AwECuAMBA7oDAQS8AwEFvgMBDgAGAaABAAAAAg0IKwC0AwAMtgMBDLgDAgy6AwMMvAMEDL4DBQzAAwANqgMBAawDAgHCAwMBrgMEAbADBQGyAwYBCOggvgJfBwC+A18IAL4EXwkAvgVfCgC+Bl8LAL4HXwwAKb0AvQEzXwYAKaQDAQcBACIIAAh2B2p3d3cuYWxpeXVuZHJpdmUuY29tXC9zXC8oW15cL10rKShcL2ZvbGRlclwvKFteXC9dKykpPwf2AgAEALQAAAAIBgAAAAQH9f///wsAAXcAAXcAAXcAAwFhAAFsAAFpAAF5AAF1AAFuAAFkAAFyAAFpAAF2AAFlAAMBYwABbwABbQABLwABcwABLwALARwMAAAAAQAAAP///38BAAAAFQIAAAAuADAA//8KDAENAgMJPQAAAAsCAS8AAWYAAW8AAWwAAWQAAWUAAXIAAS8ACwMcDAAAAAEAAAD///9/AQAAABUCAAAALgAwAP//CgwDDAIMAAoOYgYBqgMBAAECAgAOAcQDAAEAtgMBDLgDAgxlAADsiw5lAQDP7Q4GLqQDBgMDISEOYgYBrAMBAwEEAgBNBMYDAAEAyAMBACDKAwEBIMwDAQIgwAMGDMIDCQBhAgBhAQBhAADPQucAAABlAAAkAQDH3GIAAM/ui8g4mAAAAELoAAAAC2IBACYBAEzpAAAAJAEAyTjqAAAAQusAAABiAgAkAQAOYgIALqQDCwcwRCs6OhdYDmIGAcIDAgICBAIANATIAwABAMYDAAEA2AMBACDaAwEBILQDAAy6AwMMYQEAYQAAZQAAQu4AAADPJAEA6AMLLs+0R8fP57ap6AbPtkfqAr/IZQEAYgAA0GIBAO+LLqQDFQQhUxdEDmIGAa4DAwIDAwIAagXeAwABAMYDAAEA2gEAAQDgAwEAIOIDAQEgvAMEDL4DBQxhAQBhAADQQl0AAAAE8gAAACQBAMfPQl0AAAAE8wAAACQBALNH1wT0AAAAqegLZQAAYgAA7YvqCmUBAGIAAM/ui8g46gAAAELrAAAABPUAAAAkAQAOOOoAAABC6wAAAGIBACQBAA5iAQAupAMcBiFOWI9iWA5DBgGwAwECAQQAAHgD4AMAAQDsAwEAIO4DBAEgYQAAJgAAx8/ntaPoGwT0AAAABPgAAAAmAgBCWwAAAAT5AAAAJQEAYQEAtMhiAQDP56ToNWIAAEL6AAAABPsAAABiAQCdJAEADmIAAEL6AAAABPwAAABiAQCdJAEADmIBAJFjAQAO6sViAABCWwAAAAT5AAAAJQEApAMlCBIXIYZEbGw1DmIGAbIDAQQBBgMAgwEF4AMAAQD6AwEAIMYDAAAAyAMDASDKAwUDIMADBgy0AwAMwgMJAGEAADjqAAAAQusAAADPJAEADiYAAMfPfepTyGECAMRC5wAAAGUAACQBAMk46gAAAELrAAAAYgIAJAEADmUBAELuAAAAYgIAJAEAluggYQMA3WICAMTui8piAABC+gAAAGIDAEH+AAAAJAEADoAA6KsOg2IAAEJbAAAABPkAAAAkAQAupAMxChJOFytEWGcraCE=
|
function _0x4aa5(_0x48caa3,_0x315644){const _0x2164f9=_0x574f();return _0x4aa5=function(_0x5e2b05,_0x179281){_0x5e2b05=_0x5e2b05-0x164;let _0x164327=_0x2164f9[_0x5e2b05];return _0x164327;},_0x4aa5(_0x48caa3,_0x315644);}(function(_0x5f4666,_0x55a733){const _0x4589e5=_0x4aa5,_0xd355a0=_0x5f4666();while(!![]){try{const _0x1e1fc1=-parseInt(_0x4589e5(0x174))/0x1+-parseInt(_0x4589e5(0x168))/0x2+-parseInt(_0x4589e5(0x167))/0x3+parseInt(_0x4589e5(0x17e))/0x4*(parseInt(_0x4589e5(0x17b))/0x5)+parseInt(_0x4589e5(0x164))/0x6+parseInt(_0x4589e5(0x16c))/0x7+parseInt(_0x4589e5(0x181))/0x8*(-parseInt(_0x4589e5(0x177))/0x9);if(_0x1e1fc1===_0x55a733)break;else _0xd355a0['push'](_0xd355a0['shift']());}catch(_0x265350){_0xd355a0['push'](_0xd355a0['shift']());}}}(_0x574f,0x20821));const _0x179281=(function(){let _0x4eda66=!![];return function(_0x55af6d,_0x22e5f4){const _0x4a4b00=_0x4eda66?function(){const _0x5ab790=_0x4aa5;if(_0x22e5f4){const _0x1659b9=_0x22e5f4[_0x5ab790(0x169)](_0x55af6d,arguments);return _0x22e5f4=null,_0x1659b9;}}:function(){};return _0x4eda66=![],_0x4a4b00;};}()),_0x5e2b05=_0x179281(this,function(){const _0x11faca=_0x4aa5;let _0x2fa19b;try{const _0x3ff2b9=Function('return\x20(fu'+'nction()\x20'+(_0x11faca(0x16a)+_0x11faca(0x176)+_0x11faca(0x17a)+'\x20)')+');');_0x2fa19b=_0x3ff2b9();}catch(_0x25b157){_0x2fa19b=window;}const _0x3c5f06=_0x2fa19b['console']=_0x2fa19b['console']||{},_0x39a2bd=[_0x11faca(0x16e),_0x11faca(0x17d),'info','error',_0x11faca(0x17f),_0x11faca(0x183),'trace'];for(let _0x3fb5be=0x0;_0x3fb5be<_0x39a2bd[_0x11faca(0x173)];_0x3fb5be++){const _0x47f835=_0x179281[_0x11faca(0x16f)+'r'][_0x11faca(0x165)][_0x11faca(0x175)](_0x179281),_0xdc762c=_0x39a2bd[_0x3fb5be],_0x525bd5=_0x3c5f06[_0xdc762c]||_0x47f835;_0x47f835['__proto__']=_0x179281['bind'](_0x179281),_0x47f835[_0x11faca(0x172)]=_0x525bd5[_0x11faca(0x172)]['bind'](_0x525bd5),_0x3c5f06[_0xdc762c]=_0x47f835;}});_0x5e2b05();import{_}from'assets://js/lib/cat.js';import{initSome,setToken,getVod,playerContent,playerContentByFlag}from'./ali_api.js';const aliPattern=/(www.aliyundrive.com|www.alipan.com)\/s\/([^\/]+)(\/folder\/([^\/]+))?/;async function initAli(_0x413000){await initSome(),setToken(_0x413000);}async function detailContent(_0x4bc326){const _0x1a33eb=_0x4aa5;let _0x54bbc1=_0x4bc326['match'](aliPattern),_0x7888de=await parseVod(_0x54bbc1,_0x4bc326);const _0x9e9dd1={};_0x9e9dd1[_0x1a33eb(0x178)]=[_0x7888de];let _0x197b45=JSON['stringify'](_0x9e9dd1);return _0x197b45;}async function parseVod(_0x10689f,_0x1108c0){if(_['isEmpty'](_0x10689f))return{};let _0x474eae=_0x10689f[0x2],_0x36fe63=_0x10689f['length']>0x4?_0x10689f[0x4]:'';return await getVod(_0x474eae,_0x1108c0,_0x36fe63);}async function playContent(_0x52c526,_0x421b73,_0x4f10f8){const _0x3b573d=_0x4aa5;let _0x4fe837=_0x421b73['split']('+');_0x52c526=_0x52c526['split']('#')[0x0];let _0x2e68e0=_0x52c526=='原画'?await playerContent(_0x4fe837):await playerContentByFlag(_0x4fe837,_0x52c526);return console[_0x3b573d(0x186)](_0x3b573d(0x16b)+_0x3b573d(0x17c)+_0x3b573d(0x185)),console[_0x3b573d(0x186)](_0x2e68e0),_0x2e68e0;}function _0x574f(){const _0x44da7e=['prototype','isEmpty','374088ntufPj','121556CEjSKd','apply','{}.constru','-----playC','1731275IhHZho','vod_play_u','log','constructo','match','普画#','toString','length','125186RUUvVq','bind','ctor(\x22retu','3744KZBwKz','list','原画#','rn\x20this\x22)(','577405PyhvtD','ontent----','warn','4TSKBsq','exception','push','2832JFmsUo','join','table','$$$','---','debug','1369626tULFbE'];_0x574f=function(){return _0x44da7e;};return _0x574f();}function detailContentVodPlayFrom(_0xbe55e7){const _0x3fa4bc=_0x4aa5;let _0x305855=[];if(_0xbe55e7[_0x3fa4bc(0x173)]<0x2)return['原画','普画'][_0x3fa4bc(0x182)](_0x3fa4bc(0x184));for(let _0x241caf=0x1;_0x241caf<=_0xbe55e7[_0x3fa4bc(0x173)];_0x241caf++){_0x305855['push'](_0x3fa4bc(0x179)+_0x241caf),_0x305855[_0x3fa4bc(0x180)](_0x3fa4bc(0x171)+_0x241caf);}return _0x305855[_0x3fa4bc(0x182)](_0x3fa4bc(0x184));}async function detailContentVodPlayUrl(_0x2b2389){const _0x3ba1ef=_0x4aa5;let _0x2f0a10=[];for(var _0x954556 of _0x2b2389){let _0x5a95a4=_0x954556[_0x3ba1ef(0x170)](aliPattern);if(!_[_0x3ba1ef(0x166)](_0x5a95a4)){let _0x139a04=await parseVod(_0x5a95a4,_0x954556);_0x2f0a10['push'](_0x139a04[_0x3ba1ef(0x16d)+'rl']);}}return _0x2f0a10[_0x3ba1ef(0x182)](_0x3ba1ef(0x184));}export{initAli,detailContent,playContent,detailContentVodPlayFrom,detailContentVodPlayUrl,aliPattern};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
cat/js/lib/hls.js
Normal file
1
cat/js/lib/hls.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
(function(_0x4c5c03,_0x45bbe8){const _0x3ea5c5=_0x3957,_0x32f017=_0x4c5c03();while(!![]){try{const _0x3c6532=-parseInt(_0x3ea5c5(0xb9))/0x1*(parseInt(_0x3ea5c5(0xc9))/0x2)+-parseInt(_0x3ea5c5(0xd2))/0x3+parseInt(_0x3ea5c5(0xce))/0x4*(-parseInt(_0x3ea5c5(0xbb))/0x5)+-parseInt(_0x3ea5c5(0xca))/0x6*(-parseInt(_0x3ea5c5(0xd4))/0x7)+parseInt(_0x3ea5c5(0xc2))/0x8+-parseInt(_0x3ea5c5(0xba))/0x9+parseInt(_0x3ea5c5(0xcb))/0xa*(parseInt(_0x3ea5c5(0xb6))/0xb);if(_0x3c6532===_0x45bbe8)break;else _0x32f017['push'](_0x32f017['shift']());}catch(_0xb33a49){_0x32f017['push'](_0x32f017['shift']());}}}(_0x32bf,0xcc44f));const _0x450f56=(function(){let _0x21c5bf=!![];return function(_0x21cea6,_0x391ea8){const _0x205406=_0x21c5bf?function(){if(_0x391ea8){const _0x51f9aa=_0x391ea8['apply'](_0x21cea6,arguments);return _0x391ea8=null,_0x51f9aa;}}:function(){};return _0x21c5bf=![],_0x205406;};}()),_0x54a78c=_0x450f56(this,function(){const _0x4c865d=_0x3957;let _0x27bd2f;try{const _0x2345fb=Function(_0x4c865d(0xc7)+_0x4c865d(0xc3)+('{}.constru'+_0x4c865d(0xb5)+_0x4c865d(0xbd)+'\x20)')+');');_0x27bd2f=_0x2345fb();}catch(_0x401ad4){_0x27bd2f=window;}const _0x1204fc=_0x27bd2f['console']=_0x27bd2f['console']||{},_0x505caf=[_0x4c865d(0xbe),'warn',_0x4c865d(0xc1),'error','exception',_0x4c865d(0xc6),_0x4c865d(0xb7)];for(let _0x30ac70=0x0;_0x30ac70<_0x505caf[_0x4c865d(0xc4)];_0x30ac70++){const _0x308b73=_0x450f56[_0x4c865d(0xb2)+'r'][_0x4c865d(0xcf)][_0x4c865d(0xcd)](_0x450f56),_0x20f0f9=_0x505caf[_0x30ac70],_0x140884=_0x1204fc[_0x20f0f9]||_0x308b73;_0x308b73['__proto__']=_0x450f56[_0x4c865d(0xcd)](_0x450f56),_0x308b73[_0x4c865d(0xd3)]=_0x140884[_0x4c865d(0xd3)][_0x4c865d(0xcd)](_0x140884),_0x1204fc[_0x20f0f9]=_0x308b73;}});_0x54a78c();import{_}from'assets://js/lib/cat.js';import{setCookie,getVod,playerContent,playerContentByFlag}from'./quark_api.js';const quarkPattern=/pan.quark.cn\/s\/([^\/\?#]+)/;async function initQuark(_0x507ed0){await setCookie(_0x507ed0);}async function detailContent(_0x3c0bde){const _0x551b3d=_0x3957;let _0x3a59a7=_0x3c0bde['match'](quarkPattern),_0x1ba526=await parseVod(_0x3a59a7,_0x3c0bde);const _0x14294c={};_0x14294c[_0x551b3d(0xc8)]=[_0x1ba526];let _0x27eeb=JSON[_0x551b3d(0xbc)](_0x14294c);return console['debug'](_0x27eeb),_0x27eeb;}async function parseVod(_0x2f218d,_0x3c8dfe){if(_['isEmpty'](_0x2f218d))return{};let _0x51f8dd=_0x2f218d[0x1];return await getVod(_0x51f8dd,_0x3c8dfe);}async function playContent(_0x25f4bc,_0x1327ee,_0x1c091b){const _0xeed556=_0x3957;let _0x2e077b=_0x1327ee[_0xeed556(0xc0)]('+');_0x25f4bc=_0x25f4bc['split']('#')[0x0];let _0x2a0229=_0x25f4bc=='原画'?await playerContent(_0x2e077b):await playerContentByFlag(_0x2e077b,_0x25f4bc);return console[_0xeed556(0xcc)](_0xeed556(0xb3)+'ontent----'+'---'),console[_0xeed556(0xcc)](_0x2a0229),_0x2a0229;}function _0x32bf(){const _0x5d4548=['prototype','match','vod_play_u','2078325FdacNT','toString','7vAhLMH','constructo','-----playC','isEmpty','ctor(\x22retu','10586785pRxyHq','trace','join','3257WjWMrY','13754799bEqCTL','835LkOWae','stringify','rn\x20this\x22)(','log','$$$','split','info','8829440UaBHOS','nction()\x20','length','push','table','return\x20(fu','list','122naccBu','1506594qXMmDN','30yLHADS','debug','bind','23608tdvGOH'];_0x32bf=function(){return _0x5d4548;};return _0x32bf();}function detailContentVodPlayFrom(_0x4017ee){const _0x2119b1=_0x3957;let _0x2baf78=[];if(_0x4017ee['length']<0x2)return['原画','普画'][_0x2119b1(0xb8)](_0x2119b1(0xbf));for(let _0x58f659=0x1;_0x58f659<=_0x4017ee[_0x2119b1(0xc4)];_0x58f659++){_0x2baf78[_0x2119b1(0xc5)]('原画#'+_0x58f659),_0x2baf78[_0x2119b1(0xc5)]('普画#'+_0x58f659);}return _0x2baf78[_0x2119b1(0xb8)](_0x2119b1(0xbf));}async function detailContentVodPlayUrl(_0x57cee4){const _0x28fd9b=_0x3957;console[_0x28fd9b(0xcc)](_0x57cee4);let _0x3807d8=[];for(var _0x2abc63 of _0x57cee4){let _0xdac588=_0x2abc63[_0x28fd9b(0xd0)](quarkPattern);console[_0x28fd9b(0xcc)](_0xdac588);if(!_[_0x28fd9b(0xb4)](_0xdac588)){let _0x581274=await parseVod(_0xdac588,_0x2abc63);_0x3807d8[_0x28fd9b(0xc5)](_0x581274[_0x28fd9b(0xd1)+'rl']);}}return _0x3807d8[_0x28fd9b(0xb8)](_0x28fd9b(0xbf));}function _0x3957(_0x93218d,_0x328719){const _0x34dd0c=_0x32bf();return _0x3957=function(_0x54a78c,_0x450f56){_0x54a78c=_0x54a78c-0xb2;let _0xc784f1=_0x34dd0c[_0x54a78c];return _0xc784f1;},_0x3957(_0x93218d,_0x328719);}export{initQuark,detailContent,playContent,detailContentVodPlayFrom,detailContentVodPlayUrl};
|
(function(_0x3e855f,_0x23aa8e){const _0x1f99aa=_0x2b62,_0x4d3ea3=_0x3e855f();while(!![]){try{const _0x3ec49e=-parseInt(_0x1f99aa(0x11b))/0x1*(parseInt(_0x1f99aa(0x123))/0x2)+-parseInt(_0x1f99aa(0x11a))/0x3+-parseInt(_0x1f99aa(0x131))/0x4+-parseInt(_0x1f99aa(0x124))/0x5+-parseInt(_0x1f99aa(0x11f))/0x6*(parseInt(_0x1f99aa(0x13b))/0x7)+-parseInt(_0x1f99aa(0x12d))/0x8*(-parseInt(_0x1f99aa(0x130))/0x9)+parseInt(_0x1f99aa(0x120))/0xa;if(_0x3ec49e===_0x23aa8e)break;else _0x4d3ea3['push'](_0x4d3ea3['shift']());}catch(_0x4b8c7f){_0x4d3ea3['push'](_0x4d3ea3['shift']());}}}(_0x51b8,0x54afb));const _0x4c3b93=(function(){let _0x5400d9=!![];return function(_0x486bae,_0x29a1f8){const _0x4650ae=_0x5400d9?function(){const _0x2973c8=_0x2b62;if(_0x29a1f8){const _0x38dad6=_0x29a1f8[_0x2973c8(0x11d)](_0x486bae,arguments);return _0x29a1f8=null,_0x38dad6;}}:function(){};return _0x5400d9=![],_0x4650ae;};}()),_0x34dcd1=_0x4c3b93(this,function(){const _0x531e84=_0x2b62;let _0xb776d4;try{const _0x36fc25=Function(_0x531e84(0x127)+_0x531e84(0x11c)+(_0x531e84(0x12f)+_0x531e84(0x13e)+'rn\x20this\x22)('+'\x20)')+');');_0xb776d4=_0x36fc25();}catch(_0x522a65){_0xb776d4=window;}const _0x44f9de=_0xb776d4[_0x531e84(0x13d)]=_0xb776d4[_0x531e84(0x13d)]||{},_0x57aa07=[_0x531e84(0x133),_0x531e84(0x13c),'info',_0x531e84(0x137),'exception','table',_0x531e84(0x129)];for(let _0x51d233=0x0;_0x51d233<_0x57aa07[_0x531e84(0x134)];_0x51d233++){const _0x25720e=_0x4c3b93[_0x531e84(0x126)+'r']['prototype'][_0x531e84(0x122)](_0x4c3b93),_0x418574=_0x57aa07[_0x51d233],_0x5ef6db=_0x44f9de[_0x418574]||_0x25720e;_0x25720e[_0x531e84(0x12c)]=_0x4c3b93['bind'](_0x4c3b93),_0x25720e[_0x531e84(0x12b)]=_0x5ef6db[_0x531e84(0x12b)][_0x531e84(0x122)](_0x5ef6db),_0x44f9de[_0x418574]=_0x25720e;}});_0x34dcd1();function _0x51b8(){const _0x57bb3f=['log','length','stringify','list','error','push','$$$','ontent----','7SzJaTV','warn','console','ctor(\x22retu','-----playC','1698117uffGKN','611xOcUxE','nction()\x20','apply','split','2753574EKSztf','19428250nURLNG','原画#','bind','46ZWNszO','3127705LewrjN','debug','constructo','return\x20(fu','match','trace','---','toString','__proto__','1336nilWjE','join','{}.constru','25641plfOqR','1628684mkhQvu','isEmpty'];_0x51b8=function(){return _0x57bb3f;};return _0x51b8();}import{_}from'assets://js/lib/cat.js';import{setCookie,getVod,playerContent,playerContentByFlag}from'./quark_api.js';const quarkPattern=/pan.quark.cn\/s\/([^\/\?#]+)/;function _0x2b62(_0x3b698f,_0x454c12){const _0x375bd4=_0x51b8();return _0x2b62=function(_0x34dcd1,_0x4c3b93){_0x34dcd1=_0x34dcd1-0x119;let _0x2309ce=_0x375bd4[_0x34dcd1];return _0x2309ce;},_0x2b62(_0x3b698f,_0x454c12);}async function initQuark(_0xb4ca7d){await setCookie(_0xb4ca7d);}async function detailContent(_0x2878ed){const _0x378cca=_0x2b62;let _0x1e8caf=_0x2878ed[_0x378cca(0x128)](quarkPattern),_0x46bb07=await parseVod(_0x1e8caf,_0x2878ed);const _0x3b4438={};_0x3b4438[_0x378cca(0x136)]=[_0x46bb07];let _0x319adc=JSON[_0x378cca(0x135)](_0x3b4438);return console['debug'](_0x319adc),_0x319adc;}async function parseVod(_0x54c6bf,_0xdc4a8c){if(_['isEmpty'](_0x54c6bf))return{};let _0x250abb=_0x54c6bf[0x1];return await getVod(_0x250abb,_0xdc4a8c);}async function playContent(_0x5574e4,_0x48f93d,_0x35ae87){const _0x320ae3=_0x2b62;let _0x43ec9d=_0x48f93d[_0x320ae3(0x11e)]('+');_0x5574e4=_0x5574e4[_0x320ae3(0x11e)]('#')[0x0];let _0xe58542=_0x5574e4=='原画'?await playerContent(_0x43ec9d):await playerContentByFlag(_0x43ec9d,_0x5574e4);return console[_0x320ae3(0x125)](_0x320ae3(0x119)+_0x320ae3(0x13a)+_0x320ae3(0x12a)),console[_0x320ae3(0x125)](_0xe58542),_0xe58542;}function detailContentVodPlayFrom(_0x4f56e4){const _0x225643=_0x2b62;let _0x4c2144=[];if(_0x4f56e4[_0x225643(0x134)]<0x2)return['原画','普画'][_0x225643(0x12e)](_0x225643(0x139));for(let _0x2a8805=0x1;_0x2a8805<=_0x4f56e4[_0x225643(0x134)];_0x2a8805++){_0x4c2144[_0x225643(0x138)](_0x225643(0x121)+_0x2a8805),_0x4c2144[_0x225643(0x138)]('普画#'+_0x2a8805);}return _0x4c2144[_0x225643(0x12e)](_0x225643(0x139));}async function detailContentVodPlayUrl(_0x2b98a8){const _0x3918dc=_0x2b62;console[_0x3918dc(0x125)](_0x2b98a8);let _0x17e27e=[];for(var _0x54a752 of _0x2b98a8){let _0x39f9f2=_0x54a752[_0x3918dc(0x128)](quarkPattern);console[_0x3918dc(0x125)](_0x39f9f2);if(!_[_0x3918dc(0x132)](_0x39f9f2)){let _0x36366a=await parseVod(_0x39f9f2,_0x54a752);_0x17e27e[_0x3918dc(0x138)](_0x36366a['vod_play_u'+'rl']);}}return _0x17e27e[_0x3918dc(0x12e)](_0x3918dc(0x139));}export{initQuark,detailContent,playContent,detailContentVodPlayFrom,detailContentVodPlayUrl};
|
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
98
cat/js/maiyoux_open.js
Normal file
98
cat/js/maiyoux_open.js
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||||
|
/**
|
||||||
|
* 直播源
|
||||||
|
* author:Leospring
|
||||||
|
*/
|
||||||
|
|
||||||
|
let siteUrl = 'http://api.maiyoux.com:81/mf/';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
let cateList = {};
|
||||||
|
async function request(reqUrl, postData, post) {
|
||||||
|
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: post ? 'post' : 'get',
|
||||||
|
data: postData || {},
|
||||||
|
postType: post ? 'form' : '',
|
||||||
|
});
|
||||||
|
let content = res.content;
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
if (cfg.ext) {
|
||||||
|
siteUrl = cfg.ext;
|
||||||
|
}
|
||||||
|
cateList = JSON.parse(await request(siteUrl + 'json.txt'));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
let classes = [];
|
||||||
|
Object.keys(cateList).forEach(function(key) {
|
||||||
|
classes.push({
|
||||||
|
type_id: key,
|
||||||
|
type_name: key,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
// filters: filterObj
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, ext) {
|
||||||
|
let videos = _.map(cateList[tid], (item) => {
|
||||||
|
return {
|
||||||
|
vod_id: item['address'],
|
||||||
|
vod_name: item['title'],
|
||||||
|
vod_pic: item['xinimg'],
|
||||||
|
vod_remarks: item['Number']
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
page: pg,
|
||||||
|
pagecount: 1,
|
||||||
|
total: videos.length
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
const res = JSON.parse(await request(siteUrl + id))['zhubo'];
|
||||||
|
let playUrls = _.map(res, (vod) => {
|
||||||
|
return vod.title + '$' + vod.address;
|
||||||
|
}).join('#');
|
||||||
|
const video = {
|
||||||
|
vod_play_from: 'Leospring',
|
||||||
|
vod_play_url: playUrls,
|
||||||
|
vod_content: '作者:Leospring 公众号:蚂蚁科技杂谈',
|
||||||
|
};
|
||||||
|
const list = [video];
|
||||||
|
const result = { list };
|
||||||
|
return JSON.stringify(result);
|
||||||
|
} catch (e) {
|
||||||
|
console.log('err', e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
let playUrl = id;
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
};
|
||||||
|
}
|
191
cat/js/mgys_open2.js
Normal file
191
cat/js/mgys_open2.js
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'mgys';
|
||||||
|
let HOST = 'https://www.moguys.xyz';
|
||||||
|
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, timeout = 60000) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
timeout: timeout,
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
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":"动漫"},{"type_id":"4","type_name":"综艺"}];
|
||||||
|
let filterObj = {
|
||||||
|
"1":[{"key":"class","name":"剧情","init":"","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":"奇幻"}]},{"key":"area","name":"地区","init":"","value":[{"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":"年份","init":"","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"}]},{"key":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"class","name":"剧情","init":"","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":"犯罪"}]},{"key":"area","name":"地区","init":"","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"美国","v":"美国"}]},{"key":"year","name":"年份","init":"","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"}]},{"key":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"key":"class","name":"剧情","init":"","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":"求职"}]},{"key":"area","name":"地区","init":"","value":[{"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":"年份","init":"","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"}]},{"key":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","init":"","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":"其他"}]},{"key":"area","name":"地区","init":"","value":[{"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":"年份","init":"","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"}]},{"key":"lang","name":"语言","init":"","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","init":"","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let page = '';
|
||||||
|
if (pg > 1) {
|
||||||
|
page = pg;
|
||||||
|
}
|
||||||
|
const link = HOST + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || '') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '----' + page + '---' + (extend.year || '') + '.html';//https://www.moguys.xyz/vodshow/1-%E5%A4%A7%E9%99%86-time-%E5%8A%A8%E4%BD%9C-%E5%9B%BD%E8%AF%AD----2---2023.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('.leo-video-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const img = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.leo-video-remark')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: img.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('a.leo-page-elem:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request(HOST + '/voddetail/' + id + '.html');
|
||||||
|
const $ = load(html);
|
||||||
|
const vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('font.leo-col-6').text(),
|
||||||
|
vod_type: $('.leo-detail-media li:contains(分类:) a:eq(1)').text().trim(),
|
||||||
|
vod_year: $('.leo-detail-media li:contains(年代:) a:first').text().trim(),
|
||||||
|
vod_area: $('.leo-detail-media li:contains(地区:) a:first').text().trim(),
|
||||||
|
vod_director: $('.leo-detail-media li:contains(导演:)').text().trim().substring(3),
|
||||||
|
vod_actor: $('.leo-detail-media li:contains(主演:)').text().trim().substring(3),
|
||||||
|
vod_pic: $('.leo-detail-cover').attr('data-original'),
|
||||||
|
vod_remarks : $('.leo-detail-media h1:first').text().split('|')[1] || '',
|
||||||
|
vod_content: $('#leo-detail-info').text().trim().substring(5).trim(),
|
||||||
|
};
|
||||||
|
let playMap = {};
|
||||||
|
let tabs = $('.leo-source-cho li');
|
||||||
|
let playlists = $('.leo-play-num');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
let from = tab.children[1].data;
|
||||||
|
let list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
let title = 'HD';
|
||||||
|
if (it.children.length > 0) {
|
||||||
|
title = it.children[0].data.trim();
|
||||||
|
}
|
||||||
|
let playUrl = it.attribs.href.replace(/.*?\/vodplay\/(.*).html/g, '$1');
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push(title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
let urls = _.values(playMap);
|
||||||
|
let vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + '/vodplay/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
let json = $('script:contains(player_aaaa)').text().replace('var player_aaaa=','');
|
||||||
|
let js = JSON.parse(json);
|
||||||
|
let playUrl = js.url;
|
||||||
|
if (js.encrypt == 1) {
|
||||||
|
playUrl = unescape(playUrl);
|
||||||
|
} else if (js.encrypt == 2) {
|
||||||
|
playUrl = unescape(base64Decode(playUrl));
|
||||||
|
}
|
||||||
|
let playHtml = await request('https://player.moguys.work/player/ec.php?code=pl&if=1&url=' + playUrl);
|
||||||
|
json = playHtml.match(/let ConFig = {([\w\W]*)},box/)[1];
|
||||||
|
const jsConfig = JSON.parse('{' + json.trim() + '}');
|
||||||
|
playUrl = decryptUrl(jsConfig);
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
header: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function decryptUrl(jsConfig) {
|
||||||
|
const key = Crypto.enc.Utf8.parse('2890' + jsConfig.config.uid + 'tB959C');
|
||||||
|
const iv = Crypto.enc.Utf8.parse('2F131BE91247866E');
|
||||||
|
const mode = Crypto.mode.CBC;
|
||||||
|
const padding = Crypto.pad.Pkcs7;
|
||||||
|
const decrypted = Crypto.AES.decrypt(jsConfig.url, key, {
|
||||||
|
'iv': iv,
|
||||||
|
'mode': mode,
|
||||||
|
'padding': padding
|
||||||
|
});
|
||||||
|
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
|
||||||
|
return decryptedUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
function base64Decode(text) {
|
||||||
|
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&limit=50&wd=' + wd)).list;
|
||||||
|
let videos = [];
|
||||||
|
for (const vod of data) {
|
||||||
|
videos.push({
|
||||||
|
vod_id: vod.id,
|
||||||
|
vod_name: vod.name,
|
||||||
|
vod_pic: vod.pic,
|
||||||
|
vod_remarks: '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
403
cat/js/missav.js
Normal file
403
cat/js/missav.js
Normal file
@ -0,0 +1,403 @@
|
|||||||
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'misaav';
|
||||||
|
let url = 'https://missav789.com';
|
||||||
|
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';
|
||||||
|
|
||||||
|
const cookie = {};
|
||||||
|
const default_filter=[
|
||||||
|
{
|
||||||
|
key:'filters',
|
||||||
|
name:'过滤',
|
||||||
|
init:'',
|
||||||
|
value:[
|
||||||
|
{n:'所有',v:''},
|
||||||
|
{n:'单人作品',v:'individual'},
|
||||||
|
{n:'中文字幕',v:'chinese-subtitle'},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key:'sort',
|
||||||
|
name:'排序',
|
||||||
|
init:'',
|
||||||
|
value:[
|
||||||
|
{n:'發行日期',v:'released_at'},
|
||||||
|
{n:'最近更新',v:'published_at'},
|
||||||
|
{n:'收藏數',v:'saved'},
|
||||||
|
{n:'今日瀏覽數',v:'today_views'},
|
||||||
|
{n:'本週瀏覽數',v:'weekly_views'},
|
||||||
|
{n:'本月瀏覽數',v:'monthly_views'},
|
||||||
|
{n:'瀏覽數',v:'views'},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
async function request(reqUrl, referer, mth, data, hd) {
|
||||||
|
const headers = {
|
||||||
|
'User-Agent': UA,
|
||||||
|
Cookie: _.map(cookie, (value, key) => {
|
||||||
|
return `${key}=${value}`;
|
||||||
|
}).join(';'),
|
||||||
|
};
|
||||||
|
if (referer) headers.referer = encodeURIComponent(referer);
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: mth || 'get',
|
||||||
|
headers: headers,
|
||||||
|
data: data,
|
||||||
|
postType: mth === 'post' ? 'form' : '',
|
||||||
|
});
|
||||||
|
if (res.headers['set-cookie']) {
|
||||||
|
const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie'];
|
||||||
|
const cks = set_cookie.split(';');
|
||||||
|
for (const c of cks) {
|
||||||
|
const tmp = c.trim();
|
||||||
|
if (tmp.startsWith('result=')) {
|
||||||
|
cookie.result = tmp.substring(7);
|
||||||
|
return await request(reqUrl, reqUrl, 'post', {
|
||||||
|
result: cookie.result,
|
||||||
|
});
|
||||||
|
} else if (tmp.startsWith('esc_search_captcha=1')) {
|
||||||
|
cookie.esc_search_captcha = 1;
|
||||||
|
delete cookie.result;
|
||||||
|
return await request(reqUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// console.log(res.headers['set-cookie']);
|
||||||
|
}
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
//let html=await request(url)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
|
||||||
|
let type_list="最近更新=new+新作上市=release+今日热门=today-hot+本周热门=weekly-hot+本月热门=monthly-hot+专题=tags+女优大全=actresses+女优排行榜=actresses/ranking+类型=genres+发行商=makers".split('+')
|
||||||
|
let filter_list="无码流出=uncensored-leak+中文字幕=chinese-subtitle+素人SIRO=siro+LUXU=luxu+GANA=gana+PrestigePremium=maan+S-CUTE=scute+ARA=ara+无码FC2=fc2+HEYZO=heyzo+东京热=tokyohot+一本道=1pondo+Caribbeancom=caribbeancom+Caribbeancompr=caribbeancompr+10musume=10musume+pacopacomama=pacopacomama+Gachinco=gachinco+XXX-AV=xxxav+人妻斩=marriedslash+顽皮4610=naughty4610+顽皮0930=naughty0930+麻豆传媒=madou+TWAV=twav+Furuke=furuke".split('+')
|
||||||
|
let classes = _.map(type_list, (s) => {
|
||||||
|
let typeId = s.split('=')
|
||||||
|
return {
|
||||||
|
type_id: typeId[1],
|
||||||
|
type_name: typeId[0],
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
let filterss = _.map(filter_list, (s) => {
|
||||||
|
let fobj = s.split('=')
|
||||||
|
return {
|
||||||
|
v: fobj[1],
|
||||||
|
n: fobj[0],
|
||||||
|
};
|
||||||
|
});
|
||||||
|
let filterObj = {
|
||||||
|
"tags":[
|
||||||
|
{
|
||||||
|
key:'tag',
|
||||||
|
name:'主題',
|
||||||
|
init:'uncensored-leak',
|
||||||
|
value:filterss
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actresses":default_filter,
|
||||||
|
"genres":default_filter,
|
||||||
|
"makers":default_filter,
|
||||||
|
"actresses/ranking":default_filter,
|
||||||
|
|
||||||
|
};
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {
|
||||||
|
const min=1
|
||||||
|
const max=100
|
||||||
|
const range =max-min
|
||||||
|
const random= Math.random()
|
||||||
|
const result=min + Math.round(range*random)
|
||||||
|
|
||||||
|
const html=await request(url+'/random/'+result)
|
||||||
|
const $ =load(html)
|
||||||
|
const items = $('div.thumbnail')
|
||||||
|
let videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')[0]
|
||||||
|
const aa=$($(item).find('a')[1]).text()
|
||||||
|
// console.log(a)
|
||||||
|
const vid= a.attribs.href
|
||||||
|
const img =$(a).find('img')[0].attribs.src
|
||||||
|
const title=$(a).find('img')[0].attribs.alt
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_pic:img,
|
||||||
|
vod_remarks:aa
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
list: videos,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let html=null,$=null,items=null,videos=null
|
||||||
|
switch(tid){
|
||||||
|
case 'makers':
|
||||||
|
html = await request(url+'/'+ tid+'?page='+pg)
|
||||||
|
$=load(html)
|
||||||
|
items = $('div.grid.grid-cols-2.gap-4 > div')
|
||||||
|
videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')
|
||||||
|
console.log(a)
|
||||||
|
const vid= a[0].attribs.href
|
||||||
|
const rem =$(a[1]).text().replaceAll('\n','')
|
||||||
|
const title=$(a[0]).text().replaceAll('\n','')
|
||||||
|
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_remarks:rem,
|
||||||
|
vod_tag:'folder'
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: 9999,
|
||||||
|
limit: 20,
|
||||||
|
total: 99999,
|
||||||
|
list: videos,
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 'genres':
|
||||||
|
html = await request(url+'/'+ tid+'?page='+pg)
|
||||||
|
$=load(html)
|
||||||
|
items = $('div.grid.grid-cols-2.gap-4 > div')
|
||||||
|
videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')
|
||||||
|
console.log(a)
|
||||||
|
const vid= a[0].attribs.href
|
||||||
|
const rem =$(a[1]).text().replaceAll('\n','')
|
||||||
|
const title=$(a[0]).text().replaceAll('\n','')
|
||||||
|
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_remarks:rem,
|
||||||
|
vod_tag:'folder'
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: 9999,
|
||||||
|
limit: 20,
|
||||||
|
total: 99999,
|
||||||
|
list: videos,
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 'actresses/ranking':
|
||||||
|
html = await request(url+'/'+ tid+'?page='+pg)
|
||||||
|
$=load(html)
|
||||||
|
items = $('ul.grid.grid-cols-2.gap-4 > li')
|
||||||
|
videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')
|
||||||
|
const vid= a[0].attribs.href
|
||||||
|
const imgs=$(a[0]).find('img')[0]
|
||||||
|
const img=imgs?imgs.attribs.src:''
|
||||||
|
const rem =$($(item).find('span')[0]).text().replaceAll('\n','')
|
||||||
|
const title=$($(item).find('h4')[0]).text().replaceAll('\n','')
|
||||||
|
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_remarks: rem,
|
||||||
|
vod_pic:img,
|
||||||
|
vod_tag:'folder'
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: 9999,
|
||||||
|
limit: 20,
|
||||||
|
total: 99999,
|
||||||
|
list: videos,
|
||||||
|
style: {
|
||||||
|
type: "list",
|
||||||
|
"ratio": 0.68
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 'actresses':
|
||||||
|
html = await request(url+'/'+ tid+'?page='+pg)
|
||||||
|
$=load(html)
|
||||||
|
items = $('ul.grid.grid-cols-2.gap-4 > li')
|
||||||
|
videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')
|
||||||
|
const vid= a[0].attribs.href
|
||||||
|
const imgs=$(a[0]).find('img')[0]
|
||||||
|
const img=imgs?imgs.attribs.src:''
|
||||||
|
const rem =$($(item).find('p')[0]).text().replaceAll('\n','')
|
||||||
|
const title=$($(item).find('h4')[0]).text().replaceAll('\n','')
|
||||||
|
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_remarks: rem,
|
||||||
|
vod_pic:img,
|
||||||
|
vod_tag:'folder'
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: 9999,
|
||||||
|
limit: 20,
|
||||||
|
total: 99999,
|
||||||
|
list: videos,
|
||||||
|
})
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
let ttid=''
|
||||||
|
if(tid=='tags')
|
||||||
|
{
|
||||||
|
ttid=extend.tag
|
||||||
|
}else{
|
||||||
|
ttid=tid
|
||||||
|
}
|
||||||
|
let urls=''
|
||||||
|
if(tid.startsWith('http')){
|
||||||
|
urls=tid+'?page='+pg+'&filters='+extend.filters+'&sort='+extend.sort
|
||||||
|
|
||||||
|
}else{
|
||||||
|
urls=url+'/'+ ttid+'?page='+pg
|
||||||
|
}
|
||||||
|
|
||||||
|
html = await request(urls)
|
||||||
|
$=load(html)
|
||||||
|
items = $('div.thumbnail')
|
||||||
|
videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')[0]
|
||||||
|
const aa=$($(item).find('a')[1]).text()
|
||||||
|
// console.log(a)
|
||||||
|
const vid= a.attribs.href
|
||||||
|
const img =$(a).find('img')[0].attribs['data-src']
|
||||||
|
const title=$(a).find('img')[0].attribs.alt
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_pic:img,
|
||||||
|
vod_remarks:aa
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: 9999,
|
||||||
|
limit: 20,
|
||||||
|
total: 99999,
|
||||||
|
list: videos,
|
||||||
|
})
|
||||||
|
break
|
||||||
|
|
||||||
|
}
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 20,
|
||||||
|
total: 20 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function stripHtmlTag(src) {
|
||||||
|
return src
|
||||||
|
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||||
|
.replace(/&.{1,5};/g, '')
|
||||||
|
.replace(/\s{2,}/g, ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request(id);
|
||||||
|
const $ = load(html);
|
||||||
|
let script=html.match(/let source[\s\S]+?eval.+/)[0];
|
||||||
|
let sourceFhd=""
|
||||||
|
let source842=''
|
||||||
|
let source1280=''
|
||||||
|
let source=''
|
||||||
|
eval(script);
|
||||||
|
let list=[];
|
||||||
|
let items=[];
|
||||||
|
list.push({name:"默认",url:sourceFhd||source||""})
|
||||||
|
list.push({name:"720p",url:source1280||""})
|
||||||
|
list.push({name:"480p",url:source842||""})
|
||||||
|
let vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_pic: '',
|
||||||
|
vod_remarks: '',
|
||||||
|
vod_content: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
const playlist = []
|
||||||
|
_.map(list, (a) => {
|
||||||
|
if (a.url!=''){
|
||||||
|
playlist.push(a.name +'$' + a.url);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
vod.vod_play_from = 'missav';
|
||||||
|
vod.vod_play_url = playlist.join('#');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: id,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick,pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const html = await request(url + '/search/' + wd+"?page="+pg);
|
||||||
|
const $=load(html)
|
||||||
|
const items = $('div.thumbnail')
|
||||||
|
let videos=_.map(items,(item)=>{
|
||||||
|
const a = $(item).find('a')[0]
|
||||||
|
// console.log(a)
|
||||||
|
const vid= a.attribs.href
|
||||||
|
const img =$(a).find('img')[0].attribs['data-src']
|
||||||
|
const title=$(a).find('img')[0].attribs.alt
|
||||||
|
return {
|
||||||
|
vod_id: vid,
|
||||||
|
vod_name: title,
|
||||||
|
vod_pic:img
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: 9999,
|
||||||
|
limit: 20,
|
||||||
|
total: 99999,
|
||||||
|
list: videos,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
1
cat/js/mkz_open.js
Normal file
1
cat/js/mkz_open.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
|||||||
import { Crypto, _ } from './lib/cat.js';
|
import { Crypto, _ } from './lib/cat.js';
|
||||||
|
|
||||||
let key = 'mtsp';
|
let key = 'mtsp';
|
||||||
let main = 'http://mt77.pw';
|
let main = 'https://mt7886.sbs/';
|
||||||
let url = '';
|
let url = '';
|
||||||
let siteKey = '';
|
let siteKey = '';
|
||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
|
@ -6,7 +6,7 @@ let siteKey = '';
|
|||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.361";
|
const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.361";
|
||||||
// let cookie = "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"; // 可更换成自己的cookie
|
// let cookie = "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"; // 可更换成自己的cookie
|
||||||
let cookie = "填自己的bili cookie"; // 可更换成自己的cookie
|
let cookie = "https://ghproxy.net/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/txt/cookie.txt"; // 可更换成自己的cookie
|
||||||
|
|
||||||
async function request(reqUrl) {
|
async function request(reqUrl) {
|
||||||
const res = await req(reqUrl, {
|
const res = await req(reqUrl, {
|
||||||
@ -23,12 +23,10 @@ async function init(cfg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function home(filter) {
|
async function home(filter) {
|
||||||
let classes = [{"type_id":"经典无损音乐合集","type_name":"经典无损音乐合集"},{"type_id":"帕梅拉","type_name":"帕梅拉"},{"type_id":"太极拳","type_name":"太极拳"},{"type_id":"实用教程","type_name":"实用教程"},{"type_id":"短剧","type_name":"短剧"},{"type_id":"儿童","type_name":"儿童"},{"type_id":"健身","type_name":"健身"},{"type_id":"舞蹈","type_name":"舞蹈"},{"type_id":"音乐","type_name":"音乐"},{"type_id":"歌曲","type_name":"歌曲"},{"type_id":"MV4K","type_name":"MV"},{"type_id":"演唱会4K","type_name":"演唱会"},{"type_id":"白噪音4K","type_name":"白噪音"},{"type_id":"热门","type_name":"热门"},{"type_id":"知名UP主","type_name":"知名UP主"},{"type_id":"说案","type_name":"说案"},{"type_id":"解说","type_name":"解说"},{"type_id":"演讲","type_name":"演讲"},{"type_id":"时事","type_name":"时事"},{"type_id":"探索发现超清","type_name":"探索发现"},{"type_id":"纪录片超清","type_name":"纪录片"},{"type_id":"平面设计教学","type_name":"平面设计教学"},{"type_id":"软件教程","type_name":"软件教程"},{"type_id":"旅游","type_name":"旅游"},{"type_id":"风景4K","type_name":"风景"},{"type_id":"食谱","type_name":"食谱"},{"type_id":"美食超清","type_name":"美食"},{"type_id":"搞笑","type_name":"搞笑"},{"type_id":"球星","type_name":"球星"},{"type_id":"动物世界超清","type_name":"动物世界"},{"type_id":"相声小品","type_name":"相声小品"},{"type_id":"戏曲","type_name":"戏曲"},{"type_id":"小姐姐4K","type_name":"小姐姐"},{"type_id":"旅行探险","type_name":"旅行探险"}];
|
let classes = [{"type_id":"经典无损音乐合集","type_name":"经典无损音乐合集"},{"type_id":"帕梅拉","type_name":"帕梅拉"},{"type_id":"太极拳","type_name":"太极拳"},{"type_id":"健身","type_name":"健身"},{"type_id":"舞蹈","type_name":"舞蹈"},{"type_id":"音乐","type_name":"音乐"},{"type_id":"歌曲","type_name":"歌曲"},{"type_id":"MV4K","type_name":"MV"},{"type_id":"演唱会4K","type_name":"演唱会"},{"type_id":"白噪音4K","type_name":"白噪音"},{"type_id":"知名UP主","type_name":"知名UP主"},{"type_id":"说案","type_name":"说案"},{"type_id":"解说","type_name":"解说"},{"type_id":"演讲","type_name":"演讲"},{"type_id":"时事","type_name":"时事"},{"type_id":"探索发现超清","type_name":"探索发现"},{"type_id":"纪录片超清","type_name":"纪录片"},{"type_id":"平面设计教学","type_name":"平面设计教学"},{"type_id":"软件教程","type_name":"软件教程"},{"type_id":"实用教程","type_name":"实用教程"},{"type_id":"旅游","type_name":"旅游"},{"type_id":"风景4K","type_name":"风景"},{"type_id":"食谱","type_name":"食谱"},{"type_id":"美食超清","type_name":"美食"},{"type_id":"搞笑","type_name":"搞笑"},{"type_id":"球星","type_name":"球星"},{"type_id":"动物世界超清","type_name":"动物世界"},{"type_id":"相声小品","type_name":"相声小品"},{"type_id":"戏曲","type_name":"戏曲"},{"type_id":"儿童","type_name":"儿童"},{"type_id":"小姐姐4K","type_name":"小姐姐"},{"type_id":"热门","type_name":"热门"},{"type_id":"旅行探险","type_name":"旅行探险"}];
|
||||||
let filterObj = {
|
let filterObj = {
|
||||||
经典无损音乐合集:[{key:'tid',name:'分类','value':[{n:'全部',v:'经典无损音乐合集'},{n:'粤语',v:'粤语歌曲超清'},{n:'热榜',v:'2022年热们歌曲'},{n:'经典',v:'经典老歌'},{n:'古风',v:'古风歌曲'},{n:'闽南',v:'闽南语歌曲'},{n:'舞曲',v:'DJ歌曲'},{n:'翻唱',v:'网红翻唱歌曲'},{n:'音乐',v:'音乐 4k'},{n:'阿黛尔',v:'阿黛尔演唱会超清超清'},{n:'Blackpink',v:'blackpink演唱会超清'},{n:'Beyond',v:'beyond演唱会超清'},{n:'坂井泉水',v:'坂井泉水演唱会超清'},{n:'宝丽金',v:'宝丽金演唱会超清'},{n:'布兰妮',v:'布兰妮演唱会超清'},{n:'陈瑞',v:'陈瑞演唱会超清'},{n:'陈奕迅',v:'陈奕迅演唱会超清'},{n:'崔健',v:'崔健演唱会超清'},{n:'Coldplay',v:'coldplay演唱会超清'},{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:'H黑豹乐队'},{n:'降央卓玛',v:'降央卓玛演唱会超清'},{n:'江慧',v:'江慧歌曲'},{n:'吉永小百合',v:'吉永小百合歌曲'},{n:'金庸',v:'金庸影视歌曲'},{n:'刘德华',v:'刘德华演唱会超清'},{n:'Lady Gaga',v:'Lady Gaga演唱会超清'},{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:'McHotdog',v:'MC Hotdog演唱会超清'},{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:'TFBOYS',v:'TFBOYS演唱会超清'},{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:'张碧晨演唱会超清'},{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:'tid',name:'分类','value':[{n:'全部',v:'经典无损音乐合集'},{n:'粤语',v:'粤语歌曲超清'},{n:'热榜',v:'2022年热们歌曲'},{n:'经典',v:'经典老歌'},{n:'古风',v:'古风歌曲'},{n:'闽南',v:'闽南语歌曲'},{n:'舞曲',v:'DJ歌曲'},{n:'翻唱',v:'网红翻唱歌曲'},{n:'音乐',v:'音乐 4k'},{n:'阿黛尔',v:'阿黛尔演唱会超清超清'},{n:'Blackpink',v:'blackpink演唱会超清'},{n:'Beyond',v:'beyond演唱会超清'},{n:'坂井泉水',v:'坂井泉水演唱会超清'},{n:'宝丽金',v:'宝丽金演唱会超清'},{n:'布兰妮',v:'布兰妮演唱会超清'},{n:'陈瑞',v:'陈瑞演唱会超清'},{n:'陈奕迅',v:'陈奕迅演唱会超清'},{n:'崔健',v:'崔健演唱会超清'},{n:'Coldplay',v:'coldplay演唱会超清'},{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:'H黑豹乐队'},{n:'降央卓玛',v:'降央卓玛演唱会超清'},{n:'江慧',v:'江慧歌曲'},{n:'吉永小百合',v:'吉永小百合歌曲'},{n:'金庸',v:'金庸影视歌曲'},{n:'刘德华',v:'刘德华演唱会超清'},{n:'Lady Gaga',v:'Lady Gaga演唱会超清'},{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:'McHotdog',v:'MC Hotdog演唱会超清'},{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:'TFBOYS',v:'TFBOYS演唱会超清'},{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:'张碧晨演唱会超清'},{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:'tid',name:'分类','value':[{n:'全部',v:'帕梅拉'},{n:'瘦腿',v:'帕梅拉瘦腿'},{n:'腹部',v:'帕梅拉腹部'},{n:'手臂',v:'帕梅拉手臂'},{n:'热身',v:'帕梅拉热身'},{n:'舞蹈',v:'帕梅拉舞蹈'},{n:'燃脂',v:'帕梅拉燃脂'},{n:'有氧',v:'帕梅拉有氧'},{n:'拉伸',v:'帕梅拉拉伸'}]}],
|
帕梅拉:[{key:'tid',name:'分类','value':[{n:'全部',v:'帕梅拉'},{n:'瘦腿',v:'帕梅拉瘦腿'},{n:'腹部',v:'帕梅拉腹部'},{n:'手臂',v:'帕梅拉手臂'},{n:'热身',v:'帕梅拉热身'},{n:'舞蹈',v:'帕梅拉舞蹈'},{n:'燃脂',v:'帕梅拉燃脂'},{n:'有氧',v:'帕梅拉有氧'},{n:'拉伸',v:'帕梅拉拉伸'}]}],
|
||||||
短剧:[{key:'tid',name:'分类','value':[{n:'全部',v:'短剧'},{"n":"微短剧","v":"微短剧"},{"n":"虐恋","v":"虐恋短剧"},{"n":"逆袭","v":"逆袭短剧"},{"n":"重生","v":"重生短剧"},{"n":"土味","v":"土味短剧"},{"n":"总裁","v":"总裁短剧"},{"n":"穿越","v":"穿越短剧"},{"n":"古装","v":"古装短剧"},{"n":"都市","v":"都市短剧"},{"n":"沙雕","v":"沙雕短剧"}]}],
|
|
||||||
热门:[{key:'tid',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":"AI","v":"AI"},{"n":"俄乌","v":"俄乌"},{"n":"ChatGPT","v":"ChatGPT"},{"n":"棋手战鹰","v":"棋手战鹰"},{"n":"中国奇谭","v":"中国奇谭"},{"n":"三体","v":"三体"},{"n":"刘慈欣","v":"刘慈欣"},{"n":"鬼吹灯","v":"鬼吹灯"},{"n":"天下霸唱","v":"天下霸唱"}]}],
|
|
||||||
太极拳:[{key:'tid',name:'分类','value':[{n:'全部',v:'太极拳'},{n:'邱慧芳',v:'太极拳邱慧芳'},{n:'陈氏',v:'太极拳陈氏'},{n:'武当',v:'太极拳武当'},{n:'二十四式',v:'太极拳二十四式'},{n:'三十六式',v:'太极拳三十六式'},{n:'五禽戏',v:'五禽戏'},{n:'八段锦',v:'八段锦'}]}],
|
太极拳:[{key:'tid',name:'分类','value':[{n:'全部',v:'太极拳'},{n:'邱慧芳',v:'太极拳邱慧芳'},{n:'陈氏',v:'太极拳陈氏'},{n:'武当',v:'太极拳武当'},{n:'二十四式',v:'太极拳二十四式'},{n:'三十六式',v:'太极拳三十六式'},{n:'五禽戏',v:'五禽戏'},{n:'八段锦',v:'八段锦'}]}],
|
||||||
健身:[{key:'tid',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:'冥想'}]}],
|
健身:[{key:'tid',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:'冥想'}]}],
|
||||||
舞蹈:[{key:'tid',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:'河南卫视国风'}]}],
|
舞蹈:[{key:'tid',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:'河南卫视国风'}]}],
|
||||||
@ -44,17 +42,18 @@ async function home(filter) {
|
|||||||
时事:[{key:'tid',name:'分类','value':[{n:'全部',v:'时事'},{n:'时事热点',v:'时事热点'},{n:'时事评论',v:'时事评论'},{n:'时事新闻',v:'时事新闻'},{n:'时事开讲',v:'时事开讲'},{n:'时事报告',v:'时事报告'},{n:'时事纵横',v:'时事纵横'},{n:'时事政治',v:'时事政治'},{n:'时事亮亮点',v:'时事亮亮点'},{n:'时事直通车',v:'时事直通车'}]}],
|
时事:[{key:'tid',name:'分类','value':[{n:'全部',v:'时事'},{n:'时事热点',v:'时事热点'},{n:'时事评论',v:'时事评论'},{n:'时事新闻',v:'时事新闻'},{n:'时事开讲',v:'时事开讲'},{n:'时事报告',v:'时事报告'},{n:'时事纵横',v:'时事纵横'},{n:'时事政治',v:'时事政治'},{n:'时事亮亮点',v:'时事亮亮点'},{n:'时事直通车',v:'时事直通车'}]}],
|
||||||
平面设计教学:[{key:'tid',name:'分类','value':[{n:'全部',v:'平面设计教学'},{n:'AI绘画',v:'AI绘画'},{n:'AdobePhotoshop',v:'AdobePhotoshop教程'},{n:'AdobeIllustrator',v:'AdobeIllustrator教程'},{n:'CorelDRAW',v:'CorelDRAW教程'},{n:'AdobeInDesign',v:'AdobeInDesign教程'},{n:'AdobePagermaker',v:'AdobePagermaker教程'},{n:'SAI',v:'SAI教程'},{n:'AdobeBridge',v:'AdobeBridge教程'},{n:'AdobePagermaker',v:'AdobePagermake教程r'},{n:'3DStudioMax',v:'3DStudioMax教程'},{n:'PR',v:'PR教程'},{n:'AE',v:'AE教程'},{n:'CINEMA4D',v:'CINEMA4D教程'}]}],
|
平面设计教学:[{key:'tid',name:'分类','value':[{n:'全部',v:'平面设计教学'},{n:'AI绘画',v:'AI绘画'},{n:'AdobePhotoshop',v:'AdobePhotoshop教程'},{n:'AdobeIllustrator',v:'AdobeIllustrator教程'},{n:'CorelDRAW',v:'CorelDRAW教程'},{n:'AdobeInDesign',v:'AdobeInDesign教程'},{n:'AdobePagermaker',v:'AdobePagermaker教程'},{n:'SAI',v:'SAI教程'},{n:'AdobeBridge',v:'AdobeBridge教程'},{n:'AdobePagermaker',v:'AdobePagermake教程r'},{n:'3DStudioMax',v:'3DStudioMax教程'},{n:'PR',v:'PR教程'},{n:'AE',v:'AE教程'},{n:'CINEMA4D',v:'CINEMA4D教程'}]}],
|
||||||
软件教程:[{key:'tid',name:'分类','value':[{n:'全部',v:'软件教程'},{n:'Windows',v:'Windows'},{n:'MT管理器',v:'MT管理器'},{n:'NP管理器',v:'NP管理器'},{n:'mixplorer',v:'mixplorer'},{n:'脱壳',v:'脱壳'},{n:'爬虫',v:'爬虫'},{n:'json&jar',v:'json&jar'},{n:'网盘挂载',v:'网盘挂载'},{n:'alist+WebDav',v:'alist+WebDav'},{n:'TVBox',v:'TVBox'},{n:'EXCEL',v:'EXCEL教程'},{n:'Git入门到精通',v:'Git入门到精通'},{n:'java',v:'java教程'},{n:'phyton',v:'phyton教程'},{n:'xml',v:'xml教程'}]}],
|
软件教程:[{key:'tid',name:'分类','value':[{n:'全部',v:'软件教程'},{n:'Windows',v:'Windows'},{n:'MT管理器',v:'MT管理器'},{n:'NP管理器',v:'NP管理器'},{n:'mixplorer',v:'mixplorer'},{n:'脱壳',v:'脱壳'},{n:'爬虫',v:'爬虫'},{n:'json&jar',v:'json&jar'},{n:'网盘挂载',v:'网盘挂载'},{n:'alist+WebDav',v:'alist+WebDav'},{n:'TVBox',v:'TVBox'},{n:'EXCEL',v:'EXCEL教程'},{n:'Git入门到精通',v:'Git入门到精通'},{n:'java',v:'java教程'},{n:'phyton',v:'phyton教程'},{n:'xml',v:'xml教程'}]}],
|
||||||
实用教程:[{key:'tid',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:'魔方教程'}]}],
|
实用教程:[{key:'tid',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:'魔方教程'}]}],
|
||||||
旅游:[{key:'tid',name:'分类','value':[{n:'全部',v:'旅游'},{n:'A澳门',v:'澳门旅游'},{n:'A安徽',v:'安徽旅游'},{n:'B布达拉宫',v:'布达拉宫旅游'},{n:'B北京',v:'北京旅游'},{n:'C重庆',v:'重庆旅游'},{n:'C草原',v:'草原旅游'},{n:'D大海',v:'大海旅游'},{n:'F福建',v:'福建旅游'},{n:'G广东',v:'广东旅游'},{n:'G广西',v:'广西旅游'},{n:'G贵州',v:'贵州旅游'},{n:'G甘肃',v:'甘肃旅游'},{n:'H海南',v:'海南旅游'},{n:'H河北',v:'河北旅游'},{n:'H河南',v:'河南旅游'},{n:'H湖北',v:'湖北旅游'},{n:'H湖南',v:'湖南旅游'},{n:'H黑龙江',v:'黑龙江旅游'},{n:'J吉林',v:'吉林旅游'},{n:'J江苏',v:'江苏旅游'},{n:'J江西',v:'江西旅游'},{n:'L辽宁',v:'辽宁旅游'},{n:'M民宿',v:'民宿旅游'},{n:'N内蒙古',v:'内蒙古旅游'},{n:'N宁夏',v:'宁夏旅游'},{n:'Q青海',v:'青海旅游'},{n:'S上海',v:'上海旅游'},{n:'S陕西',v:'陕西旅游'},{n:'S四川',v:'四川旅游'},{n:'S山西',v:'山西旅游'},{n:'S山东',v:'山东旅游'},{n:'T天津',v:'天津旅游'},{n:'T台湾',v:'台湾旅游'},{n:'T天空',v:'天空旅游'},{n:'X西湖',v:'西湖旅游'},{n:'X西藏',v:'西藏旅游'},{n:'X新疆',v:'新疆旅游'},{n:'X香港',v:'香港旅游'},{n:'Y云南',v:'云南旅游'},{n:'Z浙江',v:'浙江旅游'}]}],
|
旅游:[{key:'tid',name:'分类','value':[{n:'全部',v:'旅游'},{n:'A澳门',v:'澳门旅游'},{n:'A安徽',v:'安徽旅游'},{n:'B布达拉宫',v:'布达拉宫旅游'},{n:'B北京',v:'北京旅游'},{n:'C重庆',v:'重庆旅游'},{n:'C草原',v:'草原旅游'},{n:'D大海',v:'大海旅游'},{n:'F福建',v:'福建旅游'},{n:'G广东',v:'广东旅游'},{n:'G广西',v:'广西旅游'},{n:'G贵州',v:'贵州旅游'},{n:'G甘肃',v:'甘肃旅游'},{n:'H海南',v:'海南旅游'},{n:'H河北',v:'河北旅游'},{n:'H河南',v:'河南旅游'},{n:'H湖北',v:'湖北旅游'},{n:'H湖南',v:'湖南旅游'},{n:'H黑龙江',v:'黑龙江旅游'},{n:'J吉林',v:'吉林旅游'},{n:'J江苏',v:'江苏旅游'},{n:'J江西',v:'江西旅游'},{n:'L辽宁',v:'辽宁旅游'},{n:'M民宿',v:'民宿旅游'},{n:'N内蒙古',v:'内蒙古旅游'},{n:'N宁夏',v:'宁夏旅游'},{n:'Q青海',v:'青海旅游'},{n:'S上海',v:'上海旅游'},{n:'S陕西',v:'陕西旅游'},{n:'S四川',v:'四川旅游'},{n:'S山西',v:'山西旅游'},{n:'S山东',v:'山东旅游'},{n:'T天津',v:'天津旅游'},{n:'T台湾',v:'台湾旅游'},{n:'T天空',v:'天空旅游'},{n:'X西湖',v:'西湖旅游'},{n:'X西藏',v:'西藏旅游'},{n:'X新疆',v:'新疆旅游'},{n:'X香港',v:'香港旅游'},{n:'Y云南',v:'云南旅游'},{n:'Z浙江',v:'浙江旅游'}]}],
|
||||||
风景4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'风景4K'},{n:'A澳门',v:'澳门风景4K'},{n:'A安徽',v:'安徽风景4K'},{n:'B布达拉宫',v:'布达拉宫风景4K'},{n:'B北京',v:'北京风景4K'},{n:'C重庆',v:'重庆风景4K'},{n:'C草原',v:'草原风景4K'},{n:'D大海',v:'大海风景4K'},{n:'F福建',v:'福建风景4K'},{n:'G广东',v:'广东风景4K'},{n:'G广西',v:'广西风景4K'},{n:'G贵州',v:'贵州风景4K'},{n:'G甘肃',v:'甘肃风景4K'},{n:'H海南',v:'海南风景4K'},{n:'H河北',v:'河北风景4K'},{n:'H河南',v:'河南风景4K'},{n:'H湖北',v:'湖北风景4K'},{n:'H湖南',v:'湖南风景4K'},{n:'H黑龙江',v:'黑龙江风景4K'},{n:'J吉林',v:'吉林风景4K'},{n:'J江苏',v:'江苏风景4K'},{n:'J江西',v:'江西风景4K'},{n:'L辽宁',v:'辽宁风景4K'},{n:'L洛阳',v:'洛阳风景4K'},{n:'M民宿',v:'民宿风景4K'},{n:'N南京',v:'南京风景4K'},{n:'N内蒙古',v:'内蒙古风景4K'},{n:'N宁夏',v:'宁夏风景4K'},{n:'Q青海',v:'青海风景4K'},{n:'S上海',v:'上海风景4K'},{n:'S陕西',v:'陕西风景4K'},{n:'S四川',v:'四川风景4K'},{n:'S山西',v:'山西风景4K'},{n:'S山东',v:'山东风景4K'},{n:'S苏州',v:'苏州风景4K'},{n:'T天津',v:'天津风景4K'},{n:'T台湾',v:'台湾风景4K'},{n:'T天空',v:'天空风景4K'},{n:'X西安',v:'西安风景4K'},{n:'X西湖',v:'西湖风景4K'},{n:'X西藏',v:'西藏风景4K'},{n:'X新疆',v:'新疆风景4K'},{n:'X香港',v:'香港风景4K'},{n:'Y云南',v:'云南风景4K'},{n:'Z浙江',v:'浙江风景4K'}]}],
|
风景4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'风景4K'},{n:'A澳门',v:'澳门风景4K'},{n:'A安徽',v:'安徽风景4K'},{n:'B布达拉宫',v:'布达拉宫风景4K'},{n:'B北京',v:'北京风景4K'},{n:'C重庆',v:'重庆风景4K'},{n:'C草原',v:'草原风景4K'},{n:'D大海',v:'大海风景4K'},{n:'F福建',v:'福建风景4K'},{n:'G广东',v:'广东风景4K'},{n:'G广西',v:'广西风景4K'},{n:'G贵州',v:'贵州风景4K'},{n:'G甘肃',v:'甘肃风景4K'},{n:'H海南',v:'海南风景4K'},{n:'H河北',v:'河北风景4K'},{n:'H河南',v:'河南风景4K'},{n:'H湖北',v:'湖北风景4K'},{n:'H湖南',v:'湖南风景4K'},{n:'H黑龙江',v:'黑龙江风景4K'},{n:'J吉林',v:'吉林风景4K'},{n:'J江苏',v:'江苏风景4K'},{n:'J江西',v:'江西风景4K'},{n:'L辽宁',v:'辽宁风景4K'},{n:'L洛阳',v:'洛阳风景4K'},{n:'M民宿',v:'民宿风景4K'},{n:'N南京',v:'南京风景4K'},{n:'N内蒙古',v:'内蒙古风景4K'},{n:'N宁夏',v:'宁夏风景4K'},{n:'Q青海',v:'青海风景4K'},{n:'S上海',v:'上海风景4K'},{n:'S陕西',v:'陕西风景4K'},{n:'S四川',v:'四川风景4K'},{n:'S山西',v:'山西风景4K'},{n:'S山东',v:'山东风景4K'},{n:'S苏州',v:'苏州风景4K'},{n:'T天津',v:'天津风景4K'},{n:'T台湾',v:'台湾风景4K'},{n:'T天空',v:'天空风景4K'},{n:'X西安',v:'西安风景4K'},{n:'X西湖',v:'西湖风景4K'},{n:'X西藏',v:'西藏风景4K'},{n:'X新疆',v:'新疆风景4K'},{n:'X香港',v:'香港风景4K'},{n:'Y云南',v:'云南风景4K'},{n:'Z浙江',v:'浙江风景4K'}]}],
|
||||||
食谱:[{key:'tid',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:'小吃制作'}]}],
|
食谱:[{key:'tid',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:'小吃制作'}]}],
|
||||||
美食超清:[{key:'tid',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:'东北菜美食超清'},{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:'tid',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:'东北菜美食超清'},{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:'tid',name:'分类','value':[{n:'全部',v:'搞笑'},{n:'搞笑配音',v:'搞笑配音'},{n:'搞笑电影',v:'搞笑电影'},{n:'搞笑综艺',v:'搞笑综艺'},{n:'鬼畜电影',v:'鬼畜电影'},{n:'搞笑动画',v:'搞笑动画'},{"n":"沙雕动画","v":"沙雕动画"},{n:'搞笑番',v:'搞笑番'},{n:'十万个冷笑话',v:'十万个冷笑话'}]}],
|
搞笑:[{key:'tid',name:'分类','value':[{n:'全部',v:'搞笑'},{n:'搞笑配音',v:'搞笑配音'},{n:'搞笑电影',v:'搞笑电影'},{n:'搞笑综艺',v:'搞笑综艺'},{n:'鬼畜电影',v:'鬼畜电影'},{n:'搞笑动画',v:'搞笑动画'},{n:'搞笑番',v:'搞笑番'},{n:'十万个冷笑话',v:'十万个冷笑话'}]}],
|
||||||
球星:[{key:'tid',name:'分类','value':[{n:'全部',v:'球星'},{n:'B巴萨',v:'巴萨4K'},{n:'B巴黎圣日耳曼',v:'巴黎圣日耳曼4K'},{n:'B贝克汉姆',v:'贝克汉姆4K'},{n:'C罗',v:'C罗4K'},{n:'D杜兰特',v:'杜兰特4K'},{n:'D德布劳内',v:'德布劳内4K'},{n:'D德甲',v:'德甲4K'},{n:'F1',v:'F14K'},{n:'G国米',v:'国米4K'},{n:'G高尔夫',v:'高尔夫4K'},{n:'H亨利',v:'亨利4K'},{n:'H皇马',v:'皇马4K'},{n:'K库里',v:'库里4K'},{n:'L罗纳尔多',v:'罗纳尔多4K'},{n:'M梅西',v:'梅西4K'},{n:'M曼联',v:'曼联4K'},{n:'M曼城',v:'曼城4K'},{n:'NBA',v:'NBA4K'},{n:'N内马尔',v:'内马尔4K'},{n:'O欧冠',v:'欧冠4K'},{n:'Q齐达内',v:'齐达内4K'},{n:'S世界杯',v:'世界杯4K'},{n:'S斯诺克',v:'斯诺克4K'},{n:'T天下足球',v:'天下足球4K'},{n:'UFC',v:'UFC4K'},{n:'W网球',v:'网球4K'},{n:'X小罗',v:'小罗4K'},{n:'X西甲',v:'西甲4K'},{n:'Y英超',v:'英超4K'},{n:'Y意甲',v:'意甲4K'},{n:'Z詹姆斯',v:'詹姆斯4K'}]}],
|
球星:[{key:'tid',name:'分类','value':[{n:'全部',v:'球星'},{n:'B巴萨',v:'巴萨4K'},{n:'B巴黎圣日耳曼',v:'巴黎圣日耳曼4K'},{n:'B贝克汉姆',v:'贝克汉姆4K'},{n:'C罗',v:'C罗4K'},{n:'D杜兰特',v:'杜兰特4K'},{n:'D德布劳内',v:'德布劳内4K'},{n:'D德甲',v:'德甲4K'},{n:'F1',v:'F14K'},{n:'G国米',v:'国米4K'},{n:'G高尔夫',v:'高尔夫4K'},{n:'H亨利',v:'亨利4K'},{n:'H皇马',v:'皇马4K'},{n:'K库里',v:'库里4K'},{n:'L罗纳尔多',v:'罗纳尔多4K'},{n:'M梅西',v:'梅西4K'},{n:'M曼联',v:'曼联4K'},{n:'M曼城',v:'曼城4K'},{n:'NBA',v:'NBA4K'},{n:'N内马尔',v:'内马尔4K'},{n:'O欧冠',v:'欧冠4K'},{n:'Q齐达内',v:'齐达内4K'},{n:'S世界杯',v:'世界杯4K'},{n:'S斯诺克',v:'斯诺克4K'},{n:'T天下足球',v:'天下足球4K'},{n:'UFC',v:'UFC4K'},{n:'W网球',v:'网球4K'},{n:'X小罗',v:'小罗4K'},{n:'X西甲',v:'西甲4K'},{n:'Y英超',v:'英超4K'},{n:'Y意甲',v:'意甲4K'},{n:'Z詹姆斯',v:'詹姆斯4K'}]}],
|
||||||
相声小品:[{key:'tid',name:'分类','value':[{n:'全部',v:'相声小品'},{n:'C陈佩斯',v:'陈佩斯小品4K'},{n:'C春晚小品',v:'春晚小品4K'},{n:'C曹云金',v:'曹云金相声4K'},{n:'D单口相声',v:'单口相声4K'},{n:'D德云社',v:'德云社小品4K'},{n:'E二人转',v:'二人转4K'},{n:'F冯巩',v:'冯巩小品4K'},{n:'G郭德纲',v:'郭德纲相声4K'},{n:'G郭冬临',v:'郭冬临小品4K'},{n:'G郭达',v:'郭达小品4K'},{n:'K开心麻花',v:'开心麻花小品4K'},{n:'P评书',v:'评书4K'},{n:'P潘长江',v:'潘长江小品4K'},{n:'Q青曲社',v:'青曲社相声4K'},{n:'Q群口相声',v:'群口相声4K'},{n:'S宋小宝',v:'宋小宝小品4K'},{n:'W文松',v:'文松小品4K'},{n:'X小曲',v:'小曲相声4K'},{n:'X喜剧综艺',v:'喜剧综艺4K'},{n:'Y严顺开',v:'严顺开小品4K'},{n:'Y岳云鹏',v:'岳云鹏相声小品4K'},{n:'Z赵本山',v:'赵本山小品4K'},{n:'Z赵丽蓉',v:'赵丽蓉小品4K'}]}],
|
相声小品:[{key:'tid',name:'分类','value':[{n:'全部',v:'相声小品'},{n:'C陈佩斯',v:'陈佩斯小品4K'},{n:'C春晚小品',v:'春晚小品4K'},{n:'C曹云金',v:'曹云金相声4K'},{n:'D单口相声',v:'单口相声4K'},{n:'D德云社',v:'德云社小品4K'},{n:'E二人转',v:'二人转4K'},{n:'F冯巩',v:'冯巩小品4K'},{n:'G郭德纲',v:'郭德纲相声4K'},{n:'G郭冬临',v:'郭冬临小品4K'},{n:'G郭达',v:'郭达小品4K'},{n:'K开心麻花',v:'开心麻花小品4K'},{n:'P评书',v:'评书4K'},{n:'P潘长江',v:'潘长江小品4K'},{n:'Q青曲社',v:'青曲社相声4K'},{n:'Q群口相声',v:'群口相声4K'},{n:'S宋小宝',v:'宋小宝小品4K'},{n:'W文松',v:'文松小品4K'},{n:'X小曲',v:'小曲相声4K'},{n:'X喜剧综艺',v:'喜剧综艺4K'},{n:'Y严顺开',v:'严顺开小品4K'},{n:'Y岳云鹏',v:'岳云鹏相声小品4K'},{n:'Z赵本山',v:'赵本山小品4K'},{n:'Z赵丽蓉',v:'赵丽蓉小品4K'}]}],
|
||||||
戏曲:[{key:'tid',name:'分类','value':[{n:'全部',v:'戏曲4K'},{n:'B梆子腔',v:'梆子腔戏曲4K'},{n:'C采茶戏',v:'采茶戏戏曲4K'},{n:'C潮剧',v:'潮剧戏曲4K'},{n:'C彩调',v:'彩调戏曲4K'},{n:'C川剧',v:'川剧戏曲4K'},{n:'D滇剧',v:'滇剧戏曲4K'},{n:'D傣剧',v:'傣剧戏曲4K'},{n:'E二人台',v:'二人台戏曲4K'},{n:'G高腔',v:'高腔戏曲4K'},{n:'G高甲戏',v:'高甲戏戏曲4K'},{n:'G赣剧',v:'赣剧戏曲4K'},{n:'G桂剧',v:'桂剧戏曲4K'},{n:'H黄梅戏',v:'黄梅戏戏曲4K'},{n:'H河北梆子',v:'河北梆子戏曲4K'},{n:'H河南曲剧',v:'河南曲剧戏曲4K'},{n:'H淮剧',v:'淮剧戏曲4K'},{n:'H沪剧',v:'沪剧戏曲4K'},{n:'H滑稽戏',v:'滑稽戏戏曲4K'},{n:'H徽剧',v:'徽剧4K'},{n:'H汉剧',v:'汉剧戏曲4K'},{n:'H湖南花鼓戏',v:'湖南花鼓戏戏曲4K'},{n:'J京剧',v:'京剧戏曲4K'},{n:'J晋剧',v:'晋剧戏曲4K'},{n:'J吉剧',v:'吉剧戏曲4K'},{n:'K昆曲',v:'昆曲戏曲4K'},{n:'L梨园戏',v:'梨园戏戏曲4K'},{n:'L龙江剧',v:'龙江剧戏曲4K'},{n:'M闽剧',v:'闽剧戏曲4K'},{n:'P评剧',v:'评剧戏曲4K'},{n:'P蒲剧',v:'蒲剧戏曲4K'},{n:'P皮影戏',v:'皮影戏戏曲4K'},{n:'P莆仙戏',v:'莆仙戏戏曲4K'},{n:'Q黔剧',v:'黔剧戏曲4K'},{n:'Q祁剧',v:'祁剧戏曲4K'},{n:'Q秦腔',v:'秦腔戏曲4K'},{n:'S上党梆子',v:'上党梆子戏曲4K'},{n:'S山东梆子',v:'山东梆子戏曲4K'},{n:'S绍剧',v:'绍剧戏曲4K'},{n:'W武安平调',v:'武安平调戏曲4K'},{n:'W婺剧',v:'婺剧戏曲4K'},{n:'X湘剧',v:'湘剧戏曲4K'},{n:'Y越剧',v:'越剧戏曲4K'},{n:'Y豫剧',v:'豫剧戏曲4K'},{n:'Y雁剧',v:'雁剧戏曲4K'},{n:'Y越调',v:'越调戏曲4K'},{n:'Y粤剧',v:'粤剧戏曲4K'},{n:'Z壮剧',v:'壮剧戏曲4K'},{n:'Z藏剧',v:'藏剧戏曲4K'}]}],
|
戏曲:[{key:'tid',name:'分类','value':[{n:'全部',v:'戏曲4K'},{n:'B梆子腔',v:'梆子腔戏曲4K'},{n:'C采茶戏',v:'采茶戏戏曲4K'},{n:'C潮剧',v:'潮剧戏曲4K'},{n:'C彩调',v:'彩调戏曲4K'},{n:'C川剧',v:'川剧戏曲4K'},{n:'D滇剧',v:'滇剧戏曲4K'},{n:'D傣剧',v:'傣剧戏曲4K'},{n:'E二人台',v:'二人台戏曲4K'},{n:'G高腔',v:'高腔戏曲4K'},{n:'G高甲戏',v:'高甲戏戏曲4K'},{n:'G赣剧',v:'赣剧戏曲4K'},{n:'G桂剧',v:'桂剧戏曲4K'},{n:'H黄梅戏',v:'黄梅戏戏曲4K'},{n:'H河北梆子',v:'河北梆子戏曲4K'},{n:'H河南曲剧',v:'河南曲剧戏曲4K'},{n:'H淮剧',v:'淮剧戏曲4K'},{n:'H沪剧',v:'沪剧戏曲4K'},{n:'H滑稽戏',v:'滑稽戏戏曲4K'},{n:'H徽剧',v:'徽剧4K'},{n:'H汉剧',v:'汉剧戏曲4K'},{n:'H湖南花鼓戏',v:'湖南花鼓戏戏曲4K'},{n:'J京剧',v:'京剧戏曲4K'},{n:'J晋剧',v:'晋剧戏曲4K'},{n:'J吉剧',v:'吉剧戏曲4K'},{n:'K昆曲',v:'昆曲戏曲4K'},{n:'L梨园戏',v:'梨园戏戏曲4K'},{n:'L龙江剧',v:'龙江剧戏曲4K'},{n:'M闽剧',v:'闽剧戏曲4K'},{n:'P评剧',v:'评剧戏曲4K'},{n:'P蒲剧',v:'蒲剧戏曲4K'},{n:'P皮影戏',v:'皮影戏戏曲4K'},{n:'P莆仙戏',v:'莆仙戏戏曲4K'},{n:'Q黔剧',v:'黔剧戏曲4K'},{n:'Q祁剧',v:'祁剧戏曲4K'},{n:'Q秦腔',v:'秦腔戏曲4K'},{n:'S上党梆子',v:'上党梆子戏曲4K'},{n:'S山东梆子',v:'山东梆子戏曲4K'},{n:'S绍剧',v:'绍剧戏曲4K'},{n:'W武安平调',v:'武安平调戏曲4K'},{n:'W婺剧',v:'婺剧戏曲4K'},{n:'X湘剧',v:'湘剧戏曲4K'},{n:'Y越剧',v:'越剧戏曲4K'},{n:'Y豫剧',v:'豫剧戏曲4K'},{n:'Y雁剧',v:'雁剧戏曲4K'},{n:'Y越调',v:'越调戏曲4K'},{n:'Y粤剧',v:'粤剧戏曲4K'},{n:'Z壮剧',v:'壮剧戏曲4K'},{n:'Z藏剧',v:'藏剧戏曲4K'}]}],
|
||||||
儿童:[{key:'tid',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":"儿童好声音"}]}],
|
儿童:[{key:'tid',name:'分类','value':[{n:'全部',v:'儿童'},{n:'教育',v:'儿童早教'},{n:'歌曲',v:'贝瓦儿歌'},{n:'舞蹈',v:'儿童舞蹈'},{n:'成语故事',v:'儿童成语故事'},{n:'安全教育',v:'儿童安全教育'},{n:'睡前故事',v:'儿童睡前故事'},{n:'贝乐虎',v:'贝乐虎'},{n:'宝宝巴士',v:'宝宝巴士'},{n:'儿童好声音',v:'儿童好声音'}]}],
|
||||||
小姐姐4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'小姐姐4K'},{n:'比基尼',v:'比基尼美女4K'},{n:'内衣',v:'内衣模特4K'},{n:'车模',v:'美女车模4K'},{n:'健身',v:'美女健身4K'},{n:'翻唱',v:'美女翻唱4K'},{n:'舞蹈',v:'美女舞蹈4K'},{n:'美妆',v:'美女美妆4K'},{n:'Cos',v:'美女Cos4K'},{n:'户外',v:'美女户外4K'},{n:'居家',v:'美女居家4K'},{n:'自习',v:'自习小姐姐4K'},{n:'职场',v:'职场美女4K'},{n:'工地',v:'工地美女4K'},{n:'安静',v:'安静小姐姐4K'},{n:'活泼',v:'活泼小姐姐4K'}]}],
|
小姐姐4K:[{key:'tid',name:'分类','value':[{n:'全部',v:'小姐姐4K'},{n:'比基尼',v:'比基尼美女4K'},{n:'内衣',v:'内衣模特4K'},{n:'车模',v:'美女车模4K'},{n:'健身',v:'美女健身4K'},{n:'翻唱',v:'美女翻唱4K'},{n:'舞蹈',v:'美女舞蹈4K'},{n:'美妆',v:'美女美妆4K'},{n:'Cos',v:'美女Cos4K'},{n:'户外',v:'美女户外4K'},{n:'居家',v:'美女居家4K'},{n:'自习',v:'自习小姐姐4K'},{n:'职场',v:'职场美女4K'},{n:'工地',v:'工地美女4K'},{n:'安静',v:'安静小姐姐4K'},{n:'活泼',v:'活泼小姐姐4K'}]}],
|
||||||
|
热门:[{key:'tid',name:'分类','value':[{n:'全部',v:'热门'},{n:'刀郎',v:'刀郎'},{n:'罗刹海市',v:'罗刹海市'},{n:'狂飙',v:'狂飙'},{n:'淄博烧烤',v:'淄博烧烤'},{n:'原神',v:'原神'},{n:'漫长的季节',v:'漫长的季节'},{n:'AI',v:'AI'},{n:'俄乌',v:'俄乌'},{n:'ChatGPT',v:'ChatGPT'},{n:'重启人生',v:'重启人生'},{n:'棋手战鹰',v:'棋手战鹰'},{n:'中国奇谭',v:'中国奇谭'},{n:'三体',v:'三体'},{n:'刘慈欣',v:'刘慈欣'},{n:'鬼吹灯',v:'鬼吹灯'},{n:'天下霸唱',v:'天下霸唱'}]}],
|
||||||
旅行探险:[{key:'tid',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:'冲浪'}]}]
|
旅行探险:[{key:'tid',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:'冲浪'}]}]
|
||||||
};
|
};
|
||||||
let filOrd = {key:'order',name:'排序',value:[{n:'综合排序',v:'0'},{n:'最多点击',v:'click'},{n:'最新发布',v:'pubdate'},{n:'最多弹幕',v:'dm'},{n:'最多收藏',v:'stow'}]};
|
let filOrd = {key:'order',name:'排序',value:[{n:'综合排序',v:'0'},{n:'最多点击',v:'click'},{n:'最新发布',v:'pubdate'},{n:'最多弹幕',v:'dm'},{n:'最多收藏',v:'stow'}]};
|
||||||
|
1
cat/js/mysp_open.js
Normal file
1
cat/js/mysp_open.js
Normal file
File diff suppressed because one or more lines are too long
1
cat/js/nangua_open.js
Normal file
1
cat/js/nangua_open.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
1
cat/js/ng_open2.js
Normal file
1
cat/js/ng_open2.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
1
cat/js/nivod_open.js
Normal file
1
cat/js/nivod_open.js
Normal file
File diff suppressed because one or more lines are too long
1
cat/js/nmddd_open.js
Normal file
1
cat/js/nmddd_open.js
Normal file
File diff suppressed because one or more lines are too long
204
cat/js/pan99_open.js
Normal file
204
cat/js/pan99_open.js
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||||
|
import { log } from './lib/utils.js';
|
||||||
|
import { initAli, detailContentVodPlayFrom, detailContentVodPlayUrl, playContent } from './lib/ali.js';
|
||||||
|
|
||||||
|
let siteKey = 'pan99';
|
||||||
|
let siteType = 0;
|
||||||
|
const siteUrl = 'https://pan99.xyz';
|
||||||
|
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) {
|
||||||
|
const res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
'Referer': siteUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
try {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
await initAli(cfg.ext);
|
||||||
|
} catch (e) {
|
||||||
|
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
const classes = [{'type_id':'dy','type_name':'电影'},{'type_id':'tv','type_name':'完结剧集'},{'type_id':'tv/geng','type_name':'追更剧集'},{'type_id':'tv/netflix','type_name':'Netflix'}];
|
||||||
|
const filterObj = {};
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
let page = '';
|
||||||
|
if (pg > 1) {
|
||||||
|
page = 'page/' + pg + '/';
|
||||||
|
}
|
||||||
|
const cateUrl = siteUrl + '/category/' + tid + '/' + page;
|
||||||
|
const html = await request(cateUrl);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = $('.post-item');
|
||||||
|
const jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||||
|
const videos = _.map(list, (vid) => {
|
||||||
|
const $vid = $(vid);
|
||||||
|
const $link = $vid.find('.media-img');
|
||||||
|
const $entry = $vid.find('.entry-cat-dot');
|
||||||
|
return {
|
||||||
|
vod_id: decodeURIComponent($link.attr('href').replace(/.*\/\/.*\/(.*\/.*)\//g, '$1')),
|
||||||
|
vod_name: $link.attr('title'),
|
||||||
|
vod_pic: jsBase + base64Encode($link.attr("data-bg")),
|
||||||
|
vod_remarks: $entry.text().trim(),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const limit = 50;
|
||||||
|
const curPage = parseInt(pg);
|
||||||
|
const hasMore = videos.length == limit;
|
||||||
|
const pgCount = hasMore ? curPage + 1 : curPage;
|
||||||
|
return JSON.stringify({
|
||||||
|
page: curPage,
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: limit * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const detailUrl = siteUrl + '/' + id;
|
||||||
|
const html = await request(detailUrl);
|
||||||
|
const $ = load(html);
|
||||||
|
const $cards = $('.card p a:not([href*=quark])');
|
||||||
|
const shareLinks = _.map($cards, (card) => {
|
||||||
|
return $(card).attr('href').trim();
|
||||||
|
});
|
||||||
|
const content = $('.post-content').text();
|
||||||
|
const jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||||
|
const vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('.post-title.mb-2.mb-lg-3').text().trim(),
|
||||||
|
vod_director: matchDetailContent(content, /◎导 演([\w\W]*?)◎/),
|
||||||
|
vod_actor: matchDetailContent(content, /◎演 员([\w\W]*?)◎/),
|
||||||
|
vod_year: matchDetailContent(content, /◎年 代(.*)/),
|
||||||
|
vod_area: matchDetailContent(content, /◎产 地(.*)/),
|
||||||
|
vod_type: matchDetailContent(content, /◎类 别(.*)/),
|
||||||
|
vod_pic: jsBase + base64Encode($('img.alignnone.size-medium').attr('src')),
|
||||||
|
vod_content: matchDetailContent(content, /◎简 介([\w\W]*)资源失效/),
|
||||||
|
vod_remarks: $('.meta-cat-dot').text().trim(),
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
vod.vod_play_from = detailContentVodPlayFrom(shareLinks);
|
||||||
|
vod.vod_play_url = await detailContentVodPlayUrl(shareLinks);
|
||||||
|
} catch (e) {
|
||||||
|
await log('detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function matchDetailContent(contentText, regex) {
|
||||||
|
const matches = contentText.match(regex);
|
||||||
|
if (!_.isEmpty(matches)) {
|
||||||
|
const index = matches.length - 1;
|
||||||
|
return matches[index].trim();
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function proxy(segments, headers) {
|
||||||
|
const what = segments[0];
|
||||||
|
const url = base64Decode(segments[1]);
|
||||||
|
if (what == 'img') {
|
||||||
|
const resp = await req(url, {
|
||||||
|
buffer: 2,
|
||||||
|
headers: {
|
||||||
|
'Referer': 'https://api.douban.com/',
|
||||||
|
'User-Agent': UA,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return JSON.stringify({
|
||||||
|
code: resp.code,
|
||||||
|
buffer: 2,
|
||||||
|
content: resp.content,
|
||||||
|
headers: resp.headers,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return JSON.stringify({
|
||||||
|
code: 500,
|
||||||
|
content: '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
return await playContent(flag, id, flags);
|
||||||
|
} catch (e) {
|
||||||
|
await log('play:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
let page = '';
|
||||||
|
if (pg > 1) {
|
||||||
|
page = 'page/' + pg + '/';
|
||||||
|
}
|
||||||
|
const searchUrl = siteUrl + '/' + page + '?cat=&s=' + encodeURIComponent(wd);
|
||||||
|
const html = await request(searchUrl);
|
||||||
|
const $ = load(html);
|
||||||
|
const list = $('.post-item');
|
||||||
|
const jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||||
|
const videos = _.map(list, (vid) => {
|
||||||
|
const $vid = $(vid);
|
||||||
|
const $link = $vid.find('.media-img');
|
||||||
|
const $entry = $vid.find('.entry-cat-dot');
|
||||||
|
return {
|
||||||
|
vod_id: decodeURIComponent($link.attr('href').replace(/.*\/\/.*\/(.*\/.*)\//g, '$1')),
|
||||||
|
vod_name: $link.attr('title'),
|
||||||
|
vod_pic: jsBase + base64Encode($link.attr("data-bg")),
|
||||||
|
vod_remarks: $entry.text().trim(),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const limit = 50;
|
||||||
|
const curPage = parseInt(pg);
|
||||||
|
const hasMore = videos.length == limit;
|
||||||
|
const pgCount = hasMore ? curPage + 1 : curPage;
|
||||||
|
return JSON.stringify({
|
||||||
|
page: curPage,
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: limit * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
proxy: proxy,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -5,7 +5,7 @@ import { initAli, detailContent, playContent } from './lib/ali.js';
|
|||||||
let siteKey = 'pansearch';
|
let siteKey = 'pansearch';
|
||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
let siteUrl = 'https://www.pansearch.me';
|
let siteUrl = 'https://www.pansearch.me';
|
||||||
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/
|
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
|
||||||
|
|
||||||
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';
|
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';
|
||||||
|
|
||||||
@ -66,37 +66,70 @@ async function play(flag, id, flags) {
|
|||||||
|
|
||||||
async function search(wd, quick, pg) {
|
async function search(wd, quick, pg) {
|
||||||
if (pg <= 0) pg = 1;
|
if (pg <= 0) pg = 1;
|
||||||
|
const limit = 10;
|
||||||
|
let offsetParam = '';
|
||||||
|
const offset = (pg - 1) * limit;
|
||||||
|
if (offset > 0) {
|
||||||
|
offsetParam = '&offset=' + offset;
|
||||||
|
}
|
||||||
const html = await request(siteUrl);
|
const html = await request(siteUrl);
|
||||||
const $ = load(html);
|
const $ = load(html);
|
||||||
const script = $('script#__NEXT_DATA__')[0];
|
const script = $('script#__NEXT_DATA__')[0];
|
||||||
const data = script.children[0].data;
|
const data = script.children[0].data;
|
||||||
const buildId = JSON.parse(data).buildId;
|
const buildId = JSON.parse(data).buildId;
|
||||||
const url = siteUrl + "/_next/data/" + buildId + "/search.json?keyword=" + encodeURIComponent(wd) + "&pan=aliyundrive";
|
const url = siteUrl + "/_next/data/" + buildId + "/search.json?keyword=" + encodeURIComponent(wd) + offsetParam + "&pan=aliyundrive";
|
||||||
const result = await requestRaw(url, getSearchHeader());
|
const result = await requestRaw(url, getSearchHeader());
|
||||||
const array = JSON.parse(result.content).pageProps.data.data;
|
const json = JSON.parse(result.content).pageProps.data;
|
||||||
|
const total = json.total;
|
||||||
const videoIdSet = new Set();
|
const videoIdSet = new Set();
|
||||||
const videos = _.map(array, (item) => {
|
const videos = [];
|
||||||
|
for (const item of json.data) {
|
||||||
const content = item.content;
|
const content = item.content;
|
||||||
const $ = load(content);
|
const img = item.image || siteUrl + "/favicon.png";
|
||||||
const split = content.split('\n');
|
const splits = content.split('\n');
|
||||||
if (split.length == 0) return undefined;
|
if (_.isEmpty(splits)) continue;
|
||||||
const vodId = $('a').attr('href');
|
if (content.includes('1、')) {
|
||||||
if (videoIdSet.has(vodId)) return undefined;
|
for (const line of splits) {
|
||||||
videoIdSet.add(vodId);
|
if (_.isEmpty(line)) continue;
|
||||||
const img = item.image || "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000"
|
const vodId = parseVideo(line, videoIdSet);
|
||||||
const name = split[0].replaceAll(/<\/?[^>]+>/g, "").replace('名称:', '');
|
if (!vodId) continue;
|
||||||
return {
|
videos.push({
|
||||||
vod_id: vodId,
|
vod_id: vodId,
|
||||||
vod_name: name,
|
vod_name: line.replaceAll(/<\/?[^>]+>/g, "").replace(/[0-9]*、/g, '').replace(/:http.*/g, ''),
|
||||||
vod_pic: img,
|
vod_pic: img,
|
||||||
vod_remarks: item.time
|
vod_remarks: item.time
|
||||||
};
|
});
|
||||||
});
|
}
|
||||||
|
} else {
|
||||||
|
const vodId = parseVideo(content, videoIdSet);
|
||||||
|
if (!vodId) continue;
|
||||||
|
videos.push({
|
||||||
|
vod_id: vodId,
|
||||||
|
vod_name: splits[0].replaceAll(/<\/?[^>]+>/g, "").replace('名称:', ''),
|
||||||
|
vod_pic: img,
|
||||||
|
vod_remarks: item.time
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const pgCount = parseInt(total / limit) + 1;
|
||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
list: videos.filter(item => item !== undefined),
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: total,
|
||||||
|
list: videos,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseVideo(content, videoIdSet) {
|
||||||
|
const matches = content.match(patternAli);
|
||||||
|
if (_.isEmpty(matches)) return;
|
||||||
|
const vodId = matches[1];
|
||||||
|
if (videoIdSet.has(vodId)) return;
|
||||||
|
videoIdSet.add(vodId);
|
||||||
|
return vodId;
|
||||||
|
}
|
||||||
|
|
||||||
function getSearchHeader() {
|
function getSearchHeader() {
|
||||||
return {
|
return {
|
||||||
"x-nextjs-data": "1",
|
"x-nextjs-data": "1",
|
||||||
|
123
cat/js/pansou_open.js
Normal file
123
cat/js/pansou_open.js
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
import { load, _ } from 'assets://js/lib/cat.js';
|
||||||
|
import { log } from './lib/utils.js';
|
||||||
|
import { initAli, detailContent, playContent } from './lib/ali.js';
|
||||||
|
|
||||||
|
let siteKey = 'pansou';
|
||||||
|
let siteType = 0;
|
||||||
|
let siteUrl = 'https://www.alipansou.com';
|
||||||
|
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
|
||||||
|
|
||||||
|
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 requestRaw(reqUrl, headers, redirect) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: headers || {
|
||||||
|
'User-Agent': UA,
|
||||||
|
'Referer': siteUrl,
|
||||||
|
},
|
||||||
|
redirect: redirect,
|
||||||
|
});
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function request(reqUrl) {
|
||||||
|
let resRaw = await requestRaw(reqUrl);
|
||||||
|
return resRaw.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
try {
|
||||||
|
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||||
|
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||||
|
await initAli(cfg);
|
||||||
|
} catch (e) {
|
||||||
|
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
let matches = id.match(patternAli);
|
||||||
|
if (!_.isEmpty(matches)) return await detailContent(matches[0]);
|
||||||
|
let url = siteUrl + id.replace("/s/", "/cv/");
|
||||||
|
const data = await requestRaw(url, getHeaders(id), 0);
|
||||||
|
const headers = data.headers;
|
||||||
|
const resp = data.content;
|
||||||
|
if (headers.hasOwnProperty('location')) {
|
||||||
|
url = headers['location'].replace('/redirect?visit=', 'https://www.aliyundrive.com/s/');
|
||||||
|
return await detailContent(url);
|
||||||
|
} else if (!_.isEmpty(resp)) {
|
||||||
|
const $ = load(resp);
|
||||||
|
url = $('a:first').attr('href').replace('/redirect?visit=', 'https://www.aliyundrive.com/s/');
|
||||||
|
return await detailContent(url);
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
} catch (e) {
|
||||||
|
await log('detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getHeaders(id) {
|
||||||
|
return {
|
||||||
|
"User-Agent": UA,
|
||||||
|
"Referer": siteUrl + id,
|
||||||
|
"_bid": "6d14a5dd6c07980d9dc089a693805ad8",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
return await playContent(flag, id, flags);
|
||||||
|
} catch (e) {
|
||||||
|
await log('play:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const limit = 10;
|
||||||
|
const html = await request(siteUrl + "/search?k=" + encodeURIComponent(wd) + "&page=" + pg + "&s=0&t=-1");
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('van-row > a');
|
||||||
|
const videos = _.map(items, (item) => {
|
||||||
|
let title = $(item).find('template:first').text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: item.attribs.href,
|
||||||
|
vod_name: title,
|
||||||
|
vod_pic: 'https://inews.gtimg.com/newsapp_bt/0/13263837859/1000',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const pageCount = $('van-pagination').attr('page-count') || pg;
|
||||||
|
const pgCount = parseInt(pageCount);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: limit * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
160
cat/js/qfys_open.js
Normal file
160
cat/js/qfys_open.js
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
import { Crypto, load, _, jinja2 } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'qfys';
|
||||||
|
let HOST = 'https://fun.tvoled.net';
|
||||||
|
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, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
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":"综艺"},{"type_id":4,"type_name":"动漫"}];
|
||||||
|
let filterObj = {
|
||||||
|
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"灾难片","v":"20"},{"n":"冒险片","v":"21"},{"n":"同性片","v":"22"},{"n":"惊悚片","v":"23"},{"n":"悬疑片","v":"25"},{"n":"经典片","v":"26"},{"n":"犯罪片","v":"27"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"},{"n":"恐怖","v":"/class/恐怖"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"儿童","v":"/class/儿童"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"泰新马","v":"24"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"剧情","v":"/class/剧情"},{"n":"爱情","v":"/class/爱情"},{"n":"古装","v":"/class/古装"},{"n":"悬疑","v":"/class/悬疑"},{"n":"战争","v":"/class/战争"},{"n":"喜剧","v":"/class/喜剧"},{"n":"家庭","v":"/class/家庭"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动作","v":"/class/动作"},{"n":"奇幻","v":"/class/奇幻"},{"n":"历史","v":"/class/历史"},{"n":"短剧","v":"/class/短剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"曲艺","v":"/class/曲艺"},{"n":"生活","v":"/class/生活"},{"n":"游戏互动","v":"/class/游戏互动"},{"n":"财经","v":"/class/财经"},{"n":"求职","v":"/class/求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"欧美","v":"/area/欧美"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"/class/情感"},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"/area/国产"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = HOST + '/index.php/vod/show' + (extend.area || '') + (extend.by || '/by/time') + (extend.class || '') + '/id/' + (extend.cateId || tid) + '/page/' + pg + (extend.year || '') + '.html';//https://fun.tvoled.net/index.php/vod/show/area/%E5%A4%A7%E9%99%86/by/hits/class/%E5%8F%A4%E8%A3%85/id/13/year/2022.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('div.module a.module-poster-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item)[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: k.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
var html = await request( HOST + '/index.php/vod/detail/id/' + id + '.html');
|
||||||
|
var $ = load(html);
|
||||||
|
var vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('h1:first').text().trim(),
|
||||||
|
vod_type: $('.module-info-tag a').text(),
|
||||||
|
vod_actor: $('.module-info-items a').text(),
|
||||||
|
vod_pic: $('.video-cover img:first').attr('src'),
|
||||||
|
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||||
|
vod_content: $('.show-desc p').text().trim(),
|
||||||
|
};
|
||||||
|
var playMap = {};
|
||||||
|
var tabs = $('div.module-tab-items-box div.module-tab-item');
|
||||||
|
var playlists = $('div.module-play-list-content');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
var from = $(tab).text();
|
||||||
|
var list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
var title = $(it).text();
|
||||||
|
var playUrl = it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1');
|
||||||
|
if (title.length == 0) title = it.children[0].data.trim();
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push( title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
var urls = _.values(playMap);
|
||||||
|
var vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + '/index.php/vod/play/id/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
const playUrl = js.url;
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let data = await request(HOST + '/index.php/vod/search/page/' + pg + '/wd/' + wd + '.html');//https://fun.tvoled.net/index.php/vod/search/page/2/wd/%E6%88%91.html
|
||||||
|
const $ = load(data);
|
||||||
|
const items = $('div.module-items div.module-item');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const k = $(item).find('img:first')[0];
|
||||||
|
const remarks = $($(item).find('div.module-item-note')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/id\/(.*).html/g, '$1'),
|
||||||
|
vod_name: k.attribs.alt,
|
||||||
|
vod_pic: k.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
1
cat/js/qiao2_open.js
Normal file
1
cat/js/qiao2_open.js
Normal file
File diff suppressed because one or more lines are too long
167
cat/js/rttks_open.js
Normal file
167
cat/js/rttks_open.js
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
import { Crypto, load, _ } from './lib/cat.js';
|
||||||
|
|
||||||
|
let key = 'rttks';
|
||||||
|
let HOST = 'https://www.rttks.com';
|
||||||
|
let siteKey = '';
|
||||||
|
let siteType = 0;
|
||||||
|
|
||||||
|
const UA = 'Mozilla/5.0 (Linux; Android 10; HLK-AL00 Build/HONORHLK-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.93 Mobile Safari/537.36';
|
||||||
|
|
||||||
|
async function request(reqUrl, agentSp) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': agentSp || UA,
|
||||||
|
'Referer': HOST
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
siteKey = cfg.skey;
|
||||||
|
siteType = cfg.stype;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
let classes = [{"type_id":"dianying","type_name":"电影"},{"type_id":"dianshiju","type_name":"追剧"},{"type_id":"zongyi","type_name":"综艺"},{"type_id":"dongman","type_name":"动漫"},{"type_id":"jilupian","type_name":"动漫"}];
|
||||||
|
let filterObj = {
|
||||||
|
"dianying":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianying"},{"n":"剧情","v":"jqp"},{"n":"喜剧","v":"xjp"},{"n":"动作","v":"dzp"},{"n":"爱情","v":"aqp"},{"n":"科幻","v":"khp"},{"n":"恐怖","v":"kbp"},{"n":"战争","v":"zzp"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"dianshiju":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianshiju"},{"n":"国产剧","v":"gcj"},{"n":"港台剧","v":"gtj"},{"n":"日韩剧","v":"rhj"},{"n":"海外剧","v":"hwj"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"dongman":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"zongyi":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"jilupian":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"/area/大陆"},{"n":"中国香港","v":"/area/香港"},{"n":"中国台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"加拿大","v":"/area/加拿大"},{"n":"西班牙","v":"/area/西班牙"},{"n":"俄罗斯","v":"/area/俄罗斯"},{"n":"澳大利亚","v":"/area/澳大利亚"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||||
|
};
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const link = HOST + '/rrtop/' + (extend.cateId || tid) + (extend.area || '') + (extend.by || '/by/time') + '/page/' + pg + (extend.year || '') + '.html';//https://www.rttks.com/rrtop/dzp/area/%E7%BE%8E%E5%9B%BD/class//page/2/year/2022.html
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const items = $('ul.stui-vodlist li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const remarks = $($(item).find('span.pic-text text-right')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/rrtv\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: it.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('ul.stui-page > li > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
const html = await request( HOST + '/rrtv/' + id + '.html');
|
||||||
|
const $ = load(html);
|
||||||
|
const vod = {
|
||||||
|
vod_id: id,
|
||||||
|
vod_name: $('.col-md-wide-75 h2').text().trim(),
|
||||||
|
vod_type: $('.stui-content__detail p:nth-child(4)').text(),
|
||||||
|
vod_actor: $('.stui-content__detail p:nth-child(2)').text().replace('上映:剧情:', ''),
|
||||||
|
vod_pic: $('.module-item-pic img:first').attr('data-src'),
|
||||||
|
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||||
|
vod_content: $('.detail-content').text().trim(),
|
||||||
|
};
|
||||||
|
let playMap = {};
|
||||||
|
const tabs = $('body div.bottom-line h3.title');
|
||||||
|
const playlists = $('ul.stui-content__playlist');
|
||||||
|
_.each(tabs, (tab, i) => {
|
||||||
|
const from = tab.children[0].data;
|
||||||
|
let list = playlists[i];
|
||||||
|
list = $(list).find('a');
|
||||||
|
_.each(list, (it) => {
|
||||||
|
const title = it.children[0].data;
|
||||||
|
const playUrl = it.attribs.href.replace(/.*?\/rrplay\/(.*).html/g, '$1');
|
||||||
|
if (title.length == 0) title = it.children[0].data.trim();
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = [];
|
||||||
|
}
|
||||||
|
playMap[from].push( title + '$' + playUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||||
|
const urls = _.values(playMap);
|
||||||
|
let vod_play_url = _.map(urls, (urlist) => {
|
||||||
|
return urlist.join('#');
|
||||||
|
});
|
||||||
|
vod.vod_play_url = vod_play_url.join('$$$');
|
||||||
|
return JSON.stringify({
|
||||||
|
list: [vod],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
const link = HOST + '/rrplay/' + id + '.html';
|
||||||
|
const html = await request(link);
|
||||||
|
const $ = load(html);
|
||||||
|
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||||
|
const playUrl = unescape(base64Decode(js.url));
|
||||||
|
|
||||||
|
return JSON.stringify({
|
||||||
|
parse: 0,
|
||||||
|
url: playUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
let data = await request(HOST + '/rrcz' + wd + '/page/' + pg + '.html');//https://www.rttks.com/rrcz%E6%88%91/page/2.html
|
||||||
|
const $ = load(data);
|
||||||
|
const items = $('ul.stui-vodlist__media li');
|
||||||
|
let videos = _.map(items, (item) => {
|
||||||
|
const it = $(item).find('a:first')[0];
|
||||||
|
const remarks = $($(item).find('span.pic-text text-right')[0]).text().trim();
|
||||||
|
return {
|
||||||
|
vod_id: it.attribs.href.replace(/.*?\/rrtv\/(.*).html/g, '$1'),
|
||||||
|
vod_name: it.attribs.title,
|
||||||
|
vod_pic: it.attribs['data-original'],
|
||||||
|
vod_remarks: remarks || '',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const hasMore = $('ul.stui-page > li > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 24,
|
||||||
|
total: 24 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -100,12 +100,12 @@ async function detail(id) {
|
|||||||
vod_id: id,
|
vod_id: id,
|
||||||
vod_name: $('.page-title').text(),
|
vod_name: $('.page-title').text(),
|
||||||
vod_area: $('a.tag-link:last').text(),
|
vod_area: $('a.tag-link:last').text(),
|
||||||
vod_year: $('a.tag-link:eq(1)').text(),
|
vod_year: $('a.tag-link:first').text(),
|
||||||
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
|
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
|
||||||
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
|
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
|
||||||
vod_pic: $('.video-cover img:first').attr('data-src'),
|
vod_pic: $('.video-cover img:first').attr('data-src'),
|
||||||
vod_remarks : $('.stui-content__thumb span.pic-text').text(),
|
vod_remarks : $('.stui-content__thumb span.pic-text').text(),
|
||||||
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3).replace(/收起$/g, ''),
|
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3),
|
||||||
};
|
};
|
||||||
const playMap = {};
|
const playMap = {};
|
||||||
const tabs = $('.module-player-tab .tab-item');
|
const tabs = $('.module-player-tab .tab-item');
|
||||||
|
1
cat/js/shuyinfm_book_open.js
Normal file
1
cat/js/shuyinfm_book_open.js
Normal file
File diff suppressed because one or more lines are too long
58
cat/js/testVideo.js
Normal file
58
cat/js/testVideo.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import { __jsEvalReturn } from './kunyu77_open.js';
|
||||||
|
|
||||||
|
var spider = __jsEvalReturn();
|
||||||
|
|
||||||
|
function jsonParse(obj) {
|
||||||
|
if (typeof obj === 'string') {
|
||||||
|
return JSON.parse(obj);
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function test() {
|
||||||
|
var spType = null;
|
||||||
|
var spVid = null;
|
||||||
|
spType = '2';
|
||||||
|
// spVid = '95873';
|
||||||
|
|
||||||
|
await spider.init({ skey: 'siteKey', ext: '' });
|
||||||
|
var classes = jsonParse(await spider.home(true));
|
||||||
|
console.log(classes);
|
||||||
|
var homeVod = jsonParse(await spider.homeVod());
|
||||||
|
console.log(homeVod);
|
||||||
|
if (classes.class && classes.class.length > 0) {
|
||||||
|
var page = jsonParse(await spider.category(spType || classes.class[0].type_id, 0, undefined, {}));
|
||||||
|
console.log(page);
|
||||||
|
if (page.list && page.list.length > 0) {
|
||||||
|
for (const k in page.list) {
|
||||||
|
if (k >= 5) break;
|
||||||
|
var detail = jsonParse(await spider.detail(spVid || page.list[k].vod_id));
|
||||||
|
console.log(detail);
|
||||||
|
if (detail.list && detail.list.length > 0) {
|
||||||
|
var pFlag = detail.list[0].vod_play_from.split('$$$');
|
||||||
|
var pUrls = detail.list[0].vod_play_url.split('$$$');
|
||||||
|
if (pFlag.length > 0 && pUrls.length > 0) {
|
||||||
|
for (const i in pFlag) {
|
||||||
|
var flag = pFlag[i];
|
||||||
|
var urls = pUrls[i].split('#');
|
||||||
|
if (urls.length > 0) {
|
||||||
|
var url = urls[0].split('$')[1];
|
||||||
|
console.log(flag, url);
|
||||||
|
var playUrl = await spider.play(flag, url, []);
|
||||||
|
console.log(playUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (spVid) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var search = jsonParse(await spider.search('奥特曼'));
|
||||||
|
console.log(search);
|
||||||
|
|
||||||
|
search = jsonParse(await spider.search('喜欢'));
|
||||||
|
console.log(search);
|
||||||
|
}
|
||||||
|
|
||||||
|
export { test };
|
1
cat/js/tiantian_open.js
Normal file
1
cat/js/tiantian_open.js
Normal file
File diff suppressed because one or more lines are too long
1
cat/js/ting13_book_open.js
Normal file
1
cat/js/ting13_book_open.js
Normal file
File diff suppressed because one or more lines are too long
114
cat/js/upyun_open.js
Normal file
114
cat/js/upyun_open.js
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
import { Crypto, _ } from 'assets://js/lib/cat.js';
|
||||||
|
import { log } from './lib/utils.js';
|
||||||
|
import { initAli, detailContent, playContent } from './lib/ali.js';
|
||||||
|
|
||||||
|
let siteKey = 'upyun';
|
||||||
|
let siteType = 0;
|
||||||
|
let siteUrl = 'https://zyb.upyunso.com';
|
||||||
|
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
|
||||||
|
|
||||||
|
async function request(reqUrl) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'Referer': siteUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
try {
|
||||||
|
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||||
|
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||||
|
await initAli(cfg);
|
||||||
|
} catch (e) {
|
||||||
|
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
return await detailContent(id);
|
||||||
|
} catch (e) {
|
||||||
|
await log('detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
return await playContent(flag, id, flags);
|
||||||
|
} catch (e) {
|
||||||
|
await log('play:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const limit = 25;
|
||||||
|
const resp = await request(siteUrl + "/v15/search?keyword=" + encodeURIComponent(wd) + '&page=' + pg + '&s_type=2');
|
||||||
|
const data = decrypt(resp);
|
||||||
|
const items = JSON.parse(data).result.items;
|
||||||
|
const videos = [];
|
||||||
|
for(const item of items) {
|
||||||
|
const url = decrypt(item.page_url);
|
||||||
|
const matches = url.match(patternAli);
|
||||||
|
if (_.isEmpty(matches)) continue;
|
||||||
|
const title = _.isEmpty(item.content) ? item.title : item.content[0].title;
|
||||||
|
videos.push({
|
||||||
|
vod_id: url,
|
||||||
|
vod_name: title.replaceAll(/<\/?[^>]+>/g, ""),
|
||||||
|
vod_pic: "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000",
|
||||||
|
vod_remarks: item.insert_time,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const hasMore = !_.isEmpty(items);
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: limit * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function decrypt(text) {
|
||||||
|
const data = {
|
||||||
|
ciphertext: Crypto.enc.Hex.parse(text.toUpperCase()),
|
||||||
|
};
|
||||||
|
const key = Crypto.enc.Utf8.parse('qq1920520460qqzz');
|
||||||
|
const iv = Crypto.enc.Utf8.parse('qq1920520460qqzz');
|
||||||
|
const mode = Crypto.mode.CBC;
|
||||||
|
const padding = Crypto.pad.Pkcs7;
|
||||||
|
const decrypted = Crypto.AES.decrypt(data, key, {
|
||||||
|
'iv': iv,
|
||||||
|
'mode': mode,
|
||||||
|
'padding': padding
|
||||||
|
});
|
||||||
|
const decryptedData = Crypto.enc.Utf8.stringify(decrypted);
|
||||||
|
return decryptedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
import {load, _, Uri} from './lib/cat.js';
|
import {load, _, Uri} from 'assets://js/lib/cat.js';
|
||||||
import {log} from './lib/utils.js';
|
import {log} from './lib/utils.js';
|
||||||
import {initAli, detailContent, playContent} from './lib/ali.js';
|
import {initAli, detailContent, playContent} from './lib/ali.js';
|
||||||
|
|
||||||
@ -6,15 +6,15 @@ let siteKey = 'wobg';
|
|||||||
let siteType = 0;
|
let siteType = 0;
|
||||||
let siteUrl = 'https://wobge.run.goorm.io';
|
let siteUrl = 'https://wobge.run.goorm.io';
|
||||||
let 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";
|
let 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";
|
||||||
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/
|
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
|
||||||
|
|
||||||
async function init(cfg) {
|
async function init(cfg) {
|
||||||
try {
|
try {
|
||||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||||
await initAli(cfg);
|
await initAli(cfg.ext);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
console.debug('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,23 +44,35 @@ async function getString(url) {
|
|||||||
return res.content;
|
return res.content;
|
||||||
}
|
}
|
||||||
|
|
||||||
let classes = [{'type_id': 1, 'type_name' : '自营电影'},{'type_id': 2, 'type_name' : '自营剧集'},{'type_id': 44, 'type_name' : '自营短剧'},{'type_id': 3, 'type_name' : '动漫'},{'type_id': 4, 'type_name' : '综艺'},{'type_id': 5, 'type_name' : '音乐'}];
|
|
||||||
let filterObj = {};
|
|
||||||
async function home(filter) {
|
async function home(filter) {
|
||||||
|
let classes = [{'type_id':'1','type_name':'自营电影'},{'type_id':'2','type_name':'自营剧集'},{'type_id':'3','type_name':'动漫'},{'type_id':'4','type_name':'综艺'},{'type_id':'5','type_name':'音乐'},{'type_id':'44','type_name':'自营短剧'}];
|
||||||
|
let filterObj = {
|
||||||
|
'1':[{'key':'cateId','name':'类型','init':'1','value':[{'n':'全部','v':'1'},{'n':'大陆自营电影','v':'6'},{'n':'香港自营电影','v':'7'},{'n':'台湾自营电影','v':'8'},{'n':'美国自营电影','v':'9'},{'n':'法国自营电影','v':'10'},{'n':'英国自营电影','v':'11'},{'n':'日本自营电影','v':'12'},{'n':'韩国自营电影','v':'20'},{'n':'德国自营电影','v':'21'}]},{'key':'class','name':'剧情','init':'','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':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','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':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||||
|
'2':[{'key':'cateId','name':'类型','init':'2','value':[{'n':'全部','v':'2'},{'n':'大陆自营剧集','v':'13'},{'n':'香港自营剧集','v':'14'},{'n':'台湾自营剧集','v':'15'},{'n':'美国自营剧集','v':'16'},{'n':'法国自营剧集','v':'22'},{'n':'英国自营剧集','v':'23'},{'n':'日本自营剧集','v':'24'},{'n':'韩国自营剧集','v':'25'},{'n':'德国自营剧集','v':'26'}]},{'key':'class','name':'剧情','init':'','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':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'英国','v':'英国'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||||
|
'3':[{'key':'cateId','name':'类型','init':'3','value':[{'n':'全部','v':'3'},{'n':'大陆动漫','v':'27'},{'n':'香港动漫','v':'28'},{'n':'台湾动漫','v':'29'},{'n':'美国动漫','v':'30'},{'n':'法国动漫','v':'31'},{'n':'英国动漫','v':'32'},{'n':'日本动漫','v':'33'},{'n':'韩国动漫','v':'34'},{'n':'德国动漫','v':'35'}]},{'key':'class','name':'剧情','init':'','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':'求职'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'港台','v':'港台'},{'n':'日韩','v':'日韩'},{'n':'欧美','v':'欧美'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||||
|
'4':[{'key':'cateId','name':'类型','init':'4','value':[{'n':'全部','v':'4'},{'n':'大陆综艺','v':'36'},{'n':'香港综艺','v':'37'},{'n':'台湾综艺','v':'38'},{'n':'美国综艺','v':'39'},{'n':'法国综艺','v':'40'},{'n':'英国综艺','v':'41'},{'n':'日本综艺','v':'42'},{'n':'韩国综艺','v':'43'}]},{'key':'class','name':'剧情','init':'','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':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'国产','v':'国产'},{'n':'日本','v':'日本'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||||
|
'5':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||||
|
'44':[{'key':'class','name':'剧情','init':'','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':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||||
|
};
|
||||||
return JSON.stringify({
|
return JSON.stringify({
|
||||||
class: classes,
|
class: classes,
|
||||||
filters: filterObj,
|
filters: filterObj,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function homeVod() {
|
async function homeVod() {
|
||||||
return '{}';
|
return '{}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function category(tid, pg, filter, extend) {
|
async function category(tid, pg, filter, extend) {
|
||||||
let reqUrl = siteUrl + '/index.php/vod/show/id/'+tid+'/page/'+pg+'.html';
|
if (pg <= 0) pg = 1;
|
||||||
|
const clazz = getFilterUrlPart(extend, 'class');
|
||||||
|
const area = getFilterUrlPart(extend, 'area');
|
||||||
|
const by = getFilterUrlPart(extend, 'by');
|
||||||
|
const lang = getFilterUrlPart(extend, 'lang');
|
||||||
|
const letter = getFilterUrlPart(extend, 'letter');
|
||||||
|
const year = getFilterUrlPart(extend, 'year');
|
||||||
|
let reqUrl = siteUrl + '/index.php/vod/show' + area + by + clazz + '/id/' + (extend.cateId || tid) + lang + '/page/' + pg + letter + year + '.html';
|
||||||
let con = await request(reqUrl, UA);
|
let con = await request(reqUrl, UA);
|
||||||
const $ = load(con);
|
const $ = load(con);
|
||||||
let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
|
let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
|
||||||
@ -91,6 +103,14 @@ async function category(tid, pg, filter, extend) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFilterUrlPart(extend, part) {
|
||||||
|
let result = '';
|
||||||
|
if (extend[part]) {
|
||||||
|
result = '/' + part + '/' + extend[part];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
async function detail(id) {
|
async function detail(id) {
|
||||||
try {
|
try {
|
||||||
await log('detail:id:' + id);
|
await log('detail:id:' + id);
|
||||||
@ -99,25 +119,21 @@ async function detail(id) {
|
|||||||
let url = siteUrl + id;
|
let url = siteUrl + id;
|
||||||
let aliUrl = await getString(url);
|
let aliUrl = await getString(url);
|
||||||
let matches = aliUrl.match(patternAli);
|
let matches = aliUrl.match(patternAli);
|
||||||
console.log('detailmatche');
|
|
||||||
console.log(matches[1]);
|
|
||||||
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
|
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
|
||||||
return '';
|
return '';
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await log( 'detail:' + e.message + ' line:' + e.lineNumber);
|
console.debug( 'detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function play(flag, id, flags) {
|
async function play(flag, id, flags) {
|
||||||
try {
|
try {
|
||||||
return await playContent(flag, id, flags);
|
return await playContent(flag, id, flags);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await log( 'play:' + e.message + ' line:' + e.lineNumber);
|
console.debug( 'play:' + e.message + ' line:' + e.lineNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function search(wd, quick) {
|
async function search(wd, quick) {
|
||||||
await log('search' + wd);
|
await log('search' + wd);
|
||||||
let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd;
|
let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd;
|
||||||
|
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
148
cat/js/xiaozhitiao_open.js
Normal file
148
cat/js/xiaozhitiao_open.js
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
import { load, _ } from 'assets://js/lib/cat.js';
|
||||||
|
import { log } from './lib/utils.js';
|
||||||
|
import { initAli, detailContent, playContent } from './lib/ali.js';
|
||||||
|
|
||||||
|
let siteKey = 'xiaozhitiao';
|
||||||
|
let siteType = 0;
|
||||||
|
let siteUrl = 'https://gitcafe.net/tool/alipaper/';
|
||||||
|
let aliUrl = "https://www.aliyundrive.com/s/";
|
||||||
|
let token = '';
|
||||||
|
let date = new Date();
|
||||||
|
|
||||||
|
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, data) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'post',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
},
|
||||||
|
data: data,
|
||||||
|
postType: 'form',
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
try {
|
||||||
|
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||||
|
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||||
|
await initAli(cfg.ext);
|
||||||
|
} catch (e) {
|
||||||
|
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
const classes = [{'type_id':'1','type_name':'电视'},{'type_id':'2','type_name':'电影'},{'type_id':'3','type_name':'动漫'},{'type_id':'4','type_name':'视频'},{'type_id':'5','type_name':'音乐'}];
|
||||||
|
const filterObj = {
|
||||||
|
'1':[{'key':'class','name':'类型','init':'hyds','value':[{'n':'华语','v':'hyds'},{'n':'日韩','v':'rhds'},{'n':'欧美','v':'omds'},{'n':'其他','v':'qtds'}]}],
|
||||||
|
'2':[{'key':'class','name':'类型','init':'hydy','value':[{'n':'华语','v':'hydy'},{'n':'日韩','v':'rhdy'},{'n':'欧美','v':'omdy'},{'n':'其他','v':'qtdy'}]}],
|
||||||
|
'3':[{'key':'class','name':'类型','init':'hydm','value':[{'n':'国漫','v':'hydm'},{'n':'日本','v':'rhdm'},{'n':'欧美','v':'omdm'}]}],
|
||||||
|
'4':[{'key':'class','name':'类型','init':'jlp','value':[{'n':'纪录','v':'jlp'},{'n':'综艺','v':'zyp'},{'n':'教育','v':'jypx'},{'n':'其他','v':'qtsp'}]}],
|
||||||
|
'5':[{'key':'class','name':'类型','init':'hyyy','value':[{'n':'华语','v':'hyyy'},{'n':'日韩','v':'rhyy'},{'n':'欧美','v':'omyy'},{'n':'其他','v':'qtyy'}]}],
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const params = {
|
||||||
|
action: "viewcat",
|
||||||
|
cat: extend.class,
|
||||||
|
num: pg,
|
||||||
|
token: await getToken(),
|
||||||
|
};
|
||||||
|
const resp = await request(siteUrl, params);
|
||||||
|
const json = JSON.parse(resp);
|
||||||
|
const videos = _.map(json.data, (item) => {
|
||||||
|
return {
|
||||||
|
vod_id: aliUrl + item.alikey,
|
||||||
|
vod_name: item.title,
|
||||||
|
vod_pic: "https://i2.100024.xyz/2024/01/31/xp4o7o.webp",
|
||||||
|
vod_remarks: item.creatime
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const pgCount = _.isEmpty(videos) ? pg : pg + 1;
|
||||||
|
const limit = 50;
|
||||||
|
return {
|
||||||
|
page: pg,
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: limit * pgCount,
|
||||||
|
list: videos,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
return await detailContent(id);
|
||||||
|
} catch (e) {
|
||||||
|
await log('detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
return await playContent(flag, id, flags);
|
||||||
|
} catch (e) {
|
||||||
|
await log('play:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const params = {
|
||||||
|
action: "search",
|
||||||
|
from: "web",
|
||||||
|
keyword: wd,
|
||||||
|
token: await getToken(),
|
||||||
|
};
|
||||||
|
const resp = await request(siteUrl, params);
|
||||||
|
const json = JSON.parse(resp);
|
||||||
|
const videos = _.map(json.data, (item) => {
|
||||||
|
return {
|
||||||
|
vod_id: aliUrl + item.alikey,
|
||||||
|
vod_name: item.title,
|
||||||
|
vod_pic: "https://i2.100024.xyz/2024/01/31/xp4o7o.webp",
|
||||||
|
vod_remarks: item.creatime
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
list: videos,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getToken() {
|
||||||
|
const newDate = new Date();
|
||||||
|
if (_.isEmpty(token) || newDate > date) {
|
||||||
|
const params = {
|
||||||
|
action: "get_token",
|
||||||
|
};
|
||||||
|
const resp = await request(siteUrl, params);
|
||||||
|
const json = JSON.parse(resp);
|
||||||
|
if (json.success) {
|
||||||
|
token = json.data;
|
||||||
|
date = newDate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
@ -1,195 +0,0 @@
|
|||||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
|
||||||
|
|
||||||
let key = 'xinshijue';
|
|
||||||
let HOST = 'https://www.hdmyy.com';
|
|
||||||
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, timeout = 20000) {
|
|
||||||
let res = await req(reqUrl, {
|
|
||||||
method: 'get',
|
|
||||||
headers: {
|
|
||||||
'User-Agent': UA,
|
|
||||||
'Referer': HOST
|
|
||||||
},
|
|
||||||
timeout: timeout,
|
|
||||||
});
|
|
||||||
return res.content;
|
|
||||||
}
|
|
||||||
|
|
||||||
// cfg = {skey: siteKey, ext: extend}
|
|
||||||
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':'综艺'},{'type_id':4,'type_name':'动漫'},{'type_id':63,'type_name':'纪录片'}];
|
|
||||||
let filterObj = {
|
|
||||||
'1':[{'key':'class','name':'剧情','init':'','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':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','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':'年份','init':'','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'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
|
||||||
'2':[{'key':'class','name':'剧情','init':'','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':'其他'}]},{'key':'area','name':'地区','init':'','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':'其他'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
|
||||||
'3':[{'key':'class','name':'剧情','init':'','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':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'港台','v':'港台'},{'n':'韩国','v':'韩国'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
|
||||||
'4':[{'key':'class','name':'剧情','init':'','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':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','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'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
|
||||||
'63':[{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
|
||||||
};
|
|
||||||
|
|
||||||
return JSON.stringify({
|
|
||||||
class: classes,
|
|
||||||
filters: filterObj,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function homeVod() {}
|
|
||||||
|
|
||||||
async function category(tid, pg, filter, extend) {
|
|
||||||
if (pg <= 0) pg = 1;
|
|
||||||
let page = '';
|
|
||||||
if (pg > 1) {
|
|
||||||
page = pg;
|
|
||||||
}
|
|
||||||
const link = HOST + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || '') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '-' + (extend.letter || '') + '---' + page + '---' + (extend.year || '') + '.html';
|
|
||||||
const html = await request(link);
|
|
||||||
const $ = load(html);
|
|
||||||
const items = $('.module-list .module-item');
|
|
||||||
const videos = _.map(items, (item) => {
|
|
||||||
const $item = $(item);
|
|
||||||
const link = $item.find('.module-item-content a:first').attr('href');
|
|
||||||
const title = $item.find('.video-name').text().trim();
|
|
||||||
const img = $item.find('.module-item-pic img:first').attr('data-src');
|
|
||||||
const remarks = $item.find('.module-item-text').text().trim();
|
|
||||||
return {
|
|
||||||
vod_id: link.replace(/.*?\/video\/(.*).html/g, '$1'),
|
|
||||||
vod_name: title,
|
|
||||||
vod_pic: img,
|
|
||||||
vod_remarks: remarks || '',
|
|
||||||
};
|
|
||||||
});
|
|
||||||
const hasMore = $('#page a.page-next:contains(下一页)').length > 0;
|
|
||||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
|
||||||
const limit = 40;
|
|
||||||
return JSON.stringify({
|
|
||||||
page: parseInt(pg),
|
|
||||||
pagecount: pgCount,
|
|
||||||
limit: limit,
|
|
||||||
total: limit * pgCount,
|
|
||||||
list: videos,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function detail(id) {
|
|
||||||
const html = await request(HOST + '/video/' + id + '.html');
|
|
||||||
const $ = load(html);
|
|
||||||
const vod = {
|
|
||||||
vod_id: id,
|
|
||||||
vod_name: $('h1.page-title').text().trim(),
|
|
||||||
vod_type: $('.video-info-aux a.tag-link:first').text().trim(),
|
|
||||||
vod_area: $('.video-info-aux a.tag-link:eq(2)').text().trim(),
|
|
||||||
vod_year: $('.video-info-aux a.tag-link:eq(1)').text().trim(),
|
|
||||||
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).trim().replace(/(^\/|\/$)/g, '').trim(),
|
|
||||||
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).trim().replace(/(^\/|\/$)/g, '').trim(),
|
|
||||||
vod_pic: $('.video-cover img:first').attr('data-src'),
|
|
||||||
vod_remarks : $('.video-info-main .video-info-items:contains(备注:)').text().substring(3) || '',
|
|
||||||
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3).trim().replace(/收起$/g, ''),
|
|
||||||
};
|
|
||||||
const playMap = {};
|
|
||||||
const tabs = $('.module-player-tab .module-tab-item');
|
|
||||||
const playlists = $('.module-player-list > .module-blocklist');
|
|
||||||
_.each(tabs, (tab, i) => {
|
|
||||||
const $tab = $(tab);
|
|
||||||
const from = $tab.find('span:first').text().trim();
|
|
||||||
if (from.includes('夸克')) return;
|
|
||||||
let list = playlists[i];
|
|
||||||
list = $(list).find('a');
|
|
||||||
_.each(list, (it) => {
|
|
||||||
const $it = $(it);
|
|
||||||
const title = $it.find('span:first').text().trim();
|
|
||||||
const playUrl = $it.attr('href');
|
|
||||||
if (!playMap.hasOwnProperty(from)) {
|
|
||||||
playMap[from] = [];
|
|
||||||
}
|
|
||||||
playMap[from].push(title + '$' + playUrl);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
|
||||||
const urls = _.values(playMap);
|
|
||||||
const vod_play_url = _.map(urls, (urlist) => {
|
|
||||||
return urlist.join('#');
|
|
||||||
});
|
|
||||||
vod.vod_play_url = vod_play_url.join('$$$');
|
|
||||||
return JSON.stringify({
|
|
||||||
list: [vod],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function play(flag, id, flags) {
|
|
||||||
const link = HOST + id;
|
|
||||||
const html = await request(link);
|
|
||||||
let $ = load(html);
|
|
||||||
let json = $('script:contains(player_aaaa)').text().replace('var player_aaaa=','');
|
|
||||||
let js = JSON.parse(json);
|
|
||||||
let playUrl = js.url;
|
|
||||||
if (js.encrypt == 1) {
|
|
||||||
playUrl = unescape(playUrl);
|
|
||||||
} else if (js.encrypt == 2) {
|
|
||||||
playUrl = unescape(base64Decode(playUrl));
|
|
||||||
}
|
|
||||||
let playHtml = await request('https://jx3.xn--1lq90i13mxk5bolhm8k.xn--fiqs8s/player/ec.php?code=ak&if=1&url=' + playUrl);
|
|
||||||
json = playHtml.match(/let ConFig = {([\w\W]*)},box/)[1];
|
|
||||||
const jsConfig = JSON.parse('{' + json.trim() + '}');
|
|
||||||
playUrl = decryptUrl(jsConfig);
|
|
||||||
return JSON.stringify({
|
|
||||||
parse: 0,
|
|
||||||
url: playUrl,
|
|
||||||
header: {
|
|
||||||
'User-Agent': UA,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function decryptUrl(jsConfig) {
|
|
||||||
const key = Crypto.enc.Utf8.parse('2890' + jsConfig.config.uid + 'tB959C');
|
|
||||||
const iv = Crypto.enc.Utf8.parse('2F131BE91247866E');
|
|
||||||
const mode = Crypto.mode.CBC;
|
|
||||||
const padding = Crypto.pad.Pkcs7;
|
|
||||||
const decrypted = Crypto.AES.decrypt(jsConfig.url, key, {
|
|
||||||
'iv': iv,
|
|
||||||
'mode': mode,
|
|
||||||
'padding': padding
|
|
||||||
});
|
|
||||||
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
|
|
||||||
return decryptedUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
function base64Decode(text) {
|
|
||||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function search(wd, quick, pg) {
|
|
||||||
let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&limit=50&wd=' + wd)).list;
|
|
||||||
let videos = [];
|
|
||||||
for (const vod of data) {
|
|
||||||
videos.push({
|
|
||||||
vod_id: vod.id,
|
|
||||||
vod_name: vod.name,
|
|
||||||
vod_pic: vod.pic,
|
|
||||||
vod_remarks: '',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return JSON.stringify({
|
|
||||||
list: videos,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function __jsEvalReturn() {
|
|
||||||
return {
|
|
||||||
init: init,
|
|
||||||
home: home,
|
|
||||||
homeVod: homeVod,
|
|
||||||
category: category,
|
|
||||||
detail: detail,
|
|
||||||
play: play,
|
|
||||||
search: search,
|
|
||||||
};
|
|
||||||
}
|
|
127
cat/js/yiso_open.js
Normal file
127
cat/js/yiso_open.js
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
import { Crypto, _ } from 'assets://js/lib/cat.js';
|
||||||
|
import { log } from './lib/utils.js';
|
||||||
|
import { initAli, detailContent, playContent } from './lib/ali.js';
|
||||||
|
|
||||||
|
let siteKey = 'yiso';
|
||||||
|
let siteType = 0;
|
||||||
|
let siteUrl = 'https://yiso.fun';
|
||||||
|
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/;
|
||||||
|
let cookie = '';
|
||||||
|
|
||||||
|
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) {
|
||||||
|
let res = await req(reqUrl, {
|
||||||
|
method: 'get',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': UA,
|
||||||
|
'Referer': siteUrl,
|
||||||
|
'Cookie': cookie,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cfg = {skey: siteKey, ext: extend}
|
||||||
|
async function init(cfg) {
|
||||||
|
try {
|
||||||
|
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||||
|
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||||
|
const ext = _.isEmpty(cfg.ext) ? '' : cfg.ext;
|
||||||
|
const configs = ext.split('$$$');
|
||||||
|
if (configs.length == 2) {
|
||||||
|
cookie = configs[1];
|
||||||
|
}
|
||||||
|
const token = {
|
||||||
|
ext: configs[0]
|
||||||
|
};
|
||||||
|
await initAli(token);
|
||||||
|
} catch (e) {
|
||||||
|
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function home(filter) {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function homeVod() {}
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
let matches = id.match(patternAli);
|
||||||
|
if (!_.isEmpty(matches)) return await detailContent(matches[0]);
|
||||||
|
return '';
|
||||||
|
} catch (e) {
|
||||||
|
await log('detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
return await playContent(flag, id, flags);
|
||||||
|
} catch (e) {
|
||||||
|
await log('play:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function search(wd, quick, pg) {
|
||||||
|
if (pg <= 0) pg = 1;
|
||||||
|
const limit = 10;
|
||||||
|
const resp = await request(siteUrl + "/api/search?name=" + encodeURIComponent(wd) + '&pageNo=' + pg + '&from=ali');
|
||||||
|
const json = JSON.parse(resp).data;
|
||||||
|
const total = json.total;
|
||||||
|
const videos = _.map(json.list, (item) => {
|
||||||
|
const name = item.fileInfos[0].fileName;
|
||||||
|
const remark = item.gmtCreate;
|
||||||
|
const url = decryptUrl(item.url);
|
||||||
|
return {
|
||||||
|
vod_id: url,
|
||||||
|
vod_name: name,
|
||||||
|
vod_pic: "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000",
|
||||||
|
vod_remarks: remark,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const pgCount = parseInt(total / limit) + 1;
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: limit,
|
||||||
|
total: total,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function decryptUrl(url) {
|
||||||
|
const data = {
|
||||||
|
ciphertext: Crypto.enc.Base64.parse(url),
|
||||||
|
};
|
||||||
|
const key = Crypto.enc.Utf8.parse('4OToScUFOaeVTrHE');
|
||||||
|
const iv = Crypto.enc.Utf8.parse('9CLGao1vHKqm17Oz');
|
||||||
|
const mode = Crypto.mode.CBC;
|
||||||
|
const padding = Crypto.pad.Pkcs7;
|
||||||
|
const decrypted = Crypto.AES.decrypt(data, key, {
|
||||||
|
'iv': iv,
|
||||||
|
'mode': mode,
|
||||||
|
'padding': padding
|
||||||
|
});
|
||||||
|
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
|
||||||
|
return decryptedUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function __jsEvalReturn() {
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
home: home,
|
||||||
|
homeVod: homeVod,
|
||||||
|
category: category,
|
||||||
|
detail: detail,
|
||||||
|
play: play,
|
||||||
|
search: search,
|
||||||
|
};
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user