mirror of
https://github.com/qist/tvbox.git
synced 2025-01-24 03:04:56 +08:00
update all
This commit is contained in:
parent
78d81a5a85
commit
888a30e219
29
0821.json
29
0821.json
@ -26,7 +26,7 @@
|
||||
{"key":"csp_YGP","name":"预告片┃新片","type":3,"api":"csp_YGP","searchable":1,"quickSearch":1,"changeable":0},
|
||||
{"key":"csp_Bili","name":"哔哩┃合集","type":3,"api":"csp_Bili","searchable":1,"quickSearch":1,"style":{"type":"rect","ratio":1.597},"filterable":1,"changeable":0,"ext":"./json/chuqiuyu.json"},
|
||||
{"key":"csp_xuexi","name":"哔哩┃课堂","type":"3","api":"csp_Bili","searchable":"0","quickSearch":"0","style":{"type":"rect","ratio":1.597},"filterable":"1","changeable":0,"ext":"./json/xuexi.json"},
|
||||
{"key":"玩偶","name":"玩偶哥哥┃4K弹幕","type":3,"api":"csp_WoGG","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd$$$https://www.wogg.xyz/$$$弹"},
|
||||
{"key":"玩偶","name":"👽玩偶哥哥┃4K弹幕","type":3,"api":"csp_WoGG","searchable":1,"quickSearch":1,"changeable":0, "ext": {"aliToken":"tvfan/token.txt","quarkCookie":"tvfan/cookie.txt","from":"4k|auto|fhd","siteUrl":"https://api.wogg.xyz/","danMu":"弹"}},
|
||||
{"key":"csp_Aid","name":"急救┃指南","type":3,"api":"csp_FirstAid","searchable":1,"quickSearch":1,"changeable":0,"style": { "type": "rect", "ratio":3.8}},
|
||||
{"key":"lf_js_lf_live","name":"电视┃直播","type":3,"api":"./lib/lf_live_min.js","style":{ "type":"oval"},"searchable":1,"changeable":0,"quickSearch":1,"filterable":1,"ext":"./js/lf_live.txt"},
|
||||
{"key":"drpy_js_ikanbot3","name":"爱看机器人┃聚合","type":3,"api":"./lib/drpy2.min.js","searchable":1,"quickSearch":1,"changeable":1,"ext":"./js/ikanbot3.js","timeout":60},
|
||||
@ -44,17 +44,17 @@
|
||||
{"key":"原创","name":"原创┃无广","type":3,"api":"csp_YCyz","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"苹果","name":"苹果┃无广","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"白嫖","name":"白飘┃无广","type":3,"api":"csp_BaiPiao","playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext": "https://www.baipiaoys.com:9092/"},
|
||||
{"key":"厂长","name":"厂长┃无广","type":3,"api":"csp_Czsapp","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext": "https://www.czzy77.com/"},
|
||||
{"key":"77","name":"七七┃秒播","type":3,"api":"csp_Kunyu77","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"视觉","name":"视觉┃直连","type":3,"api":"csp_Xinsj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.80yy3.com/"},
|
||||
{"key":"厂长","name":"厂长┃无广","type":3,"api":"csp_Czsapp","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext": "https://www.czys03.com/"},
|
||||
{"key":"南瓜","name":"南瓜┃App","type":3,"api":"csp_NanGua","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"DiDuan","name":"低端┃外剧","type":3,"api":"csp_Ddrk","playerType":"2","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_Nmys","name":"农民┃直连","type":3,"api":"csp_Nmys","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"./json/nmys.json"},
|
||||
{"key":"农民","name":"农民┃秒播","type":3,"api":"csp_Nmys","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"./json/nmys.json"},
|
||||
{"key":"七七","name":"七七┃秒播","type":3,"api":"csp_Kunyu77","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"低端","name":"低端┃外剧","type":3,"api":"csp_Ddrk","playerType":"2","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"毛驴","name":"毛驴┃直连","type":3,"api":"csp_MLYS","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.maolvys.com/"},
|
||||
{"key":"萌米","name":"萌米┃App","type":3,"api":"csp_AppTT","timeout":15,"playerType":1,"ext":"AO7TcBkd8Iifux0Y8Qze6tVlMg=="},
|
||||
{"key":"Xinsj","name":"视觉┃直连","type":3,"api":"csp_Xinsj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.80yy3.com/"},
|
||||
{"key":"zxzj","name":"在线┃外剧","type":3,"api":"csp_Zxzj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.zxzja.com/"},
|
||||
{"key":"比特","name":"比特┃秒播","type":3,"api":"csp_Bttwoo","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"一起看 ","name":"一起┃App","type":3,"api":"csp_YQKan","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_Bttoo","name":"比特┃秒播","type":3,"api":"csp_Bttwoo","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"zxzj","name":"在线┃外剧","type":3,"api":"csp_Zxzj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.zxzja.com/"},
|
||||
{"key":"Lib","name": "立播┃直连","type": 3,"api": "csp_Libvio","timeout":15,"searchable": 1,"quickSearch": 1,"changeable":1,"ext":"https://www.libvio.pw/"},
|
||||
{"key":"Auete","name":"奥特┃直连","type": 3,"api":"csp_Auete","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://auete.pro/"},
|
||||
{"key":"贱贱","name":"贱贱┃p2p","type":3,"searchable":1,"quickSearch":1,"changeable":1,"playerType":"1","api":"./lib/drpy2.min.js","ext":"./js/荐片.js"},
|
||||
@ -64,14 +64,13 @@
|
||||
{"key":"csp_Anime1","name":"日本┃动漫","type": 3,"api": "csp_Anime1","searchable": 1,"quickSearch": 1,"filterable": 1},
|
||||
{"key":"csp_Yj1211","name":"网红┃直播","type": 3,"api": "csp_Yj1211","playerType":"1","searchable": 0,"quickSearch": 1,"changeable":0},
|
||||
{"key":"csp_Nbys","name":"泥巴┃飞","type":3,"api":"csp_NiNi","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_trj","name": "唐人街┃飞","type": 3,"api": "csp_Tangrenjie","searchable": 1,"quickSearch": 1,"filterable": 1},
|
||||
|
||||
{"key":"夸搜","name":"夸搜┃搜索","type":3,"api":"csp_QuarkPanso","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd"},
|
||||
{"key":"YiSo","name":"易搜┃搜索","type":3,"api":"csp_YiSo","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd"},
|
||||
{"key":"PanSou","name":"盘搜┃搜索","type":3,"api":"csp_PanSou","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd"},
|
||||
{"key":"UpYun","name":"Up搜┃搜索","type":3,"api":"csp_UpYun","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd"},
|
||||
{"key":"PanSearch","name":"盘Se┃搜索","type":3,"api":"csp_PanSearch","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd"},
|
||||
{"key":"push_agent","name":"手机┃推送","type":3,"api":"csp_Push","searchable":0,"quickSearch":0,"ext":"http://127.0.0.1:9978/file/TV/token.txt---4k|auto|fhd"},
|
||||
{"key":"夸搜","name":"夸搜┃搜索","type":3,"api":"csp_QuarkPanso","searchable":1,"quickSearch":1,"changeable":0,"ext": {"quarkCookie":"tvfan/cookie.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"YiSo","name":"易搜┃搜索","type":3,"api":"csp_YiSo","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"PanSou","name":"盘搜┃搜索","type":3,"api":"csp_PanSou","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"UpYun","name":"Up搜┃搜索","type":3,"api":"csp_UpYun","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"PanSearch","name":"盘Se┃搜索","type":3,"api":"csp_PanSearch","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"push_agent","name":"手机┃推送","type":3,"api":"csp_Push","searchable":0,"quickSearch":0,"ext": {"aliToken":"tvfan/token.txt","quarkCookie":"tvfan/cookie.txt","from":"4k|auto|fhd"}},
|
||||
|
||||
{"key":"csp_AList","name":"AList┃网盘","type":"3","api":"csp_AList","searchable":"0","quickSearch":"0","filterable":"1","changeable":0,"ext":"./json/alist.json"},
|
||||
{"key":"新6V","name":"新6V磁力┃慎用","type":3,"api":"csp_SixV","searchable":1,"quickSearch":1,"changeable":0,"ext": "http://www.xb6v.com/","timeout":60},
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/pg.jar;md5;29b4ef28be2f88e3ae3f37682e19e309",
|
||||
"spider":"./jar/pg.jar;md5;63350ce21576e80ee520cefd4dc0401b",
|
||||
"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":"俊于•综合","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"},
|
||||
@ -16,7 +16,7 @@
|
||||
{"key": "FirstAid","name": "急救 ","type": 3,"api": "csp_FirstAid","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "rect","ratio": 3.8}},
|
||||
{"key": "JustLive","name": "JustLive","type": 3,"api": "csp_JustLive","searchable": 1,"changeable": 0},
|
||||
{"key":"lf_js_lf_live","name":"直播","type":3,"api":"./lib/lf_live_min.js","style":{ "type":"oval"},"searchable":1,"changeable":0,"quickSearch":1,"filterable":1,"ext":"./js/lf_live.txt"},
|
||||
{"key":"drpy_js_ikanbot3","name":"爱看","type":3,"api":"./lib/drpy2.min.js","searchable":1,"quickSearch":1,"changeable":1,"ext":"./js/ikanbot3.js"},
|
||||
{ "key": "Ikanbot", "name": "爱看", "type": 3, "api": "csp_Ikanbot", "searchable": 1, "quickSearch": 1, "filterable": 1, "changeable": 1 , "ext":"https://v.ikanbot.com$$$proxy"},
|
||||
{"key":"T4-duanju5","name":"短剧屋","type":4,"api":"https://catbox.n13.club/duanju5.php","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":true},
|
||||
|
||||
{"key":"看球","name":"看球","type":3,"api":"csp_Kanqiu","searchable":1,"changeable":0,"style":{"type":"list"}},
|
||||
@ -44,6 +44,7 @@
|
||||
{"key":"Xinshijue","name":"新视觉","type":3,"api":"csp_Xinshijue","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.80yy3.com/$$$1$$$./lib/wogg.json"},
|
||||
{"key":"Yscapp","name":"影視車","type":3,"api":"csp_Yscapp","quickSearch":1, "changeable":1, "filterable":1, "timeout":30, "playerType":1, "playerType":1, "ext":"1"},
|
||||
{"key":"Bt0","name":"不太灵","type":3,"api":"csp_Bt0","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"null$$$null$$$1"},
|
||||
{"key":"ddys","name":"低端","type":3,"api":"csp_Ddys","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://ddys.pro/$$$proxy$$$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":"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"},
|
||||
|
33
0826.json
33
0826.json
@ -4,29 +4,29 @@
|
||||
|
||||
"sites":[
|
||||
{"key":"豆豆","name":"🌕公众号【神秘的哥哥们】","type": 3, "api": "csp_DouDou","searchable": 0,"quickSearch": 0,"filterable": 0},
|
||||
{"key":"玩偶","name":"👽玩偶哥哥┃4K弹幕","type":3,"api":"csp_WoGG","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd$$$https://www.wogg.xyz/$$$弹"},
|
||||
{"key":"玩偶","name":"👽玩偶哥哥┃4K弹幕","type":3,"api":"csp_WoGG","searchable":1,"quickSearch":1,"changeable":0, "ext": {"aliToken":"tvfan/token.txt","quarkCookie":"tvfan/cookie.txt","from":"4k|auto|fhd","siteUrl":"https://api.wogg.xyz/","danMu":"弹"}},
|
||||
{"key":"YGP","name":"🚀叨观荐影┃新片","type":3,"api":"csp_YGP","searchable":0,"quickSearch":0,"changeable":0},
|
||||
{"key":"短剧","name":"🌈上头┃短剧","type":3,"api":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/drpy2.min.js","ext":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/上头短剧.js","searchable": 1,"quickSearch": 1,"changeable":0},
|
||||
{"key":"酷看","name":"💡酷看┃秒播","type":3,"api":"csp_Kkys","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"原创","name":"☀原创┃无广","type":3,"api":"csp_YCyz","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"苹果","name":"🍎苹果┃无广","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"白嫖","name":"👻白飘┃无广","type":3,"api":"csp_BaiPiao","playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext": "https://www.baipiaoys.com:9092/"},
|
||||
{"key":"厂长","name":"📔厂长┃无广","type":3,"api":"csp_Czsapp","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext": "https://www.czzy77.com/"},
|
||||
{"key":"77","name":"👒七七┃秒播","type":3,"api":"csp_Kunyu77","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"视觉","name":"👓视觉┃直连","type":3,"api":"csp_Xinsj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.80yy3.com/"},
|
||||
{"key":"厂长","name":"📔厂长┃无广","type":3,"api":"csp_Czsapp","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1,"ext": "https://www.czys03.com/"},
|
||||
{"key":"南瓜","name":"🎃南瓜┃App","type":3,"api":"csp_NanGua","timeout":15,"playerType":2,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"DiDuan","name":"⏮️低端┃外剧","type":3,"api":"csp_Ddrk","playerType":"2","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"农民","name":"🌾农民┃秒播","type":3,"api":"csp_Nmys","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/nmys.json"},
|
||||
{"key":"七七","name":"👒七七┃秒播","type":3,"api":"csp_Kunyu77","timeout":15,"searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"低端","name":"⏮️低端┃外剧","type":3,"api":"csp_Ddrk","playerType":"2","searchable":1,"quickSearch":1,"changeable":1},
|
||||
|
||||
//{"key":"新星","name":"💥新星┃App","type":1,"api":"http://vipcom.xn--654a.cc/api.php/provide/vod/","playUrl":"json:http://json.xn--654a.cc/home/api?type=ys&uid=1323246&key=dfiopqzEHJKNOPSTY5&url=","searchable":1,"quickSearch":1,"changeable":1},
|
||||
|
||||
{"key":"csp_Nmys","name":"🌾农民┃直连","type":3,"api":"csp_Nmys","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/nmys.json"},
|
||||
|
||||
{"key":"毛驴","name":"🍓毛驴┃直连","type":3,"api":"csp_MLYS","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.maolvys.com/"},
|
||||
{"key":"萌米","name":"👀萌米┃App","type":3,"api":"csp_AppTT","timeout":15,"playerType":1,"ext":"AO7TcBkd8Iifux0Y8Qze6tVlMg=="},
|
||||
{"key":"Xinsj","name":"👓视觉┃直连","type":3,"api":"csp_Xinsj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.80yy3.com/"},
|
||||
{"key":"zxzj","name":"🍊在线┃外剧","type":3,"api":"csp_Zxzj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.zxzja.com/"},
|
||||
|
||||
{"key":"比特","name":"🍄比特┃秒播","type":3,"api":"csp_Bttwoo","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"一起看 ","name":"🎉一起┃App","type":3,"api":"csp_YQKan","searchable":1,"quickSearch":1,"changeable":1},
|
||||
|
||||
{"key":"csp_Bttoo","name":"🍄比特┃秒播","type":3,"api":"csp_Bttwoo","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"zxzj","name":"🍊在线┃外剧","type":3,"api":"csp_Zxzj","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://www.zxzja.com/"},
|
||||
{"key":"Lib","name": "🌟立播┃直连","type": 3,"api": "csp_Libvio","timeout":15,"searchable": 1,"quickSearch": 1,"changeable":1,"ext":"https://www.libvio.pw/"},
|
||||
{"key":"Auete","name":"🏝奥特┃直连","type": 3,"api":"csp_Auete","timeout":15,"searchable":1,"quickSearch":1,"changeable":1,"ext":"https://auete.pro/"},
|
||||
{"key":"贱贱","name":"🐭贱贱┃p2p","type":3,"searchable":1,"quickSearch":1,"changeable":1,"playerType":"1","api":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/drpy2.min.js","ext":"https://agit.ai/fantaiying/dr_py/raw/branch/main/js/荐片.js"},
|
||||
@ -52,12 +52,12 @@
|
||||
{"key":"有声小说js","name":"🎧有声┃小说","type":3,"api":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/drpy2.min.js","ext":"https://agit.ai/fantaiying/dr_py/raw/branch/main/js/有声小说吧.js","style":{"type":"rect","ratio":1},"searchable": 0,"quickSearch": 0,"changeable":0},
|
||||
{"key":"Aid","name":"🚑急救┃教学","type":3,"api":"csp_FirstAid","searchable":0,"quickSearch":0,"changeable":0,"style": { "type": "rect", "ratio":3.8}},
|
||||
|
||||
{"key":"夸搜","name":"🐺夸搜┃搜索","type":3,"api":"csp_QuarkPanso","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd"},
|
||||
{"key":"YiSo","name":"😹易搜┃搜索","type":3,"api":"csp_YiSo","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd"},
|
||||
{"key":"PanSou","name":"🦊盘搜┃搜索","type":3,"api":"csp_PanSou","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd"},
|
||||
{"key":"UpYun","name":"😻Up搜┃搜索","type":3,"api":"csp_UpYun","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd"},
|
||||
{"key":"PanSearch","name":"🙀盘Se┃搜索","type":3,"api":"csp_PanSearch","searchable":1,"quickSearch":1,"changeable":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd"},
|
||||
{"key":"push_agent","name":"🛴手机┃推送","type":3,"api":"csp_Push","searchable":0,"quickSearch":0,"ext":"http://127.0.0.1:9978/file/tvfan/token.txt---4k|auto|fhd"},
|
||||
{"key":"夸搜","name":"🐺夸搜┃搜索","type":3,"api":"csp_QuarkPanso","searchable":1,"quickSearch":1,"changeable":0,"ext": {"quarkCookie":"tvfan/cookie.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"YiSo","name":"😹易搜┃搜索","type":3,"api":"csp_YiSo","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"PanSou","name":"🦊盘搜┃搜索","type":3,"api":"csp_PanSou","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"UpYun","name":"😻Up搜┃搜索","type":3,"api":"csp_UpYun","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"PanSearch","name":"🙀盘Se┃搜索","type":3,"api":"csp_PanSearch","searchable":1,"quickSearch":1,"changeable":0,"ext": {"aliToken":"tvfan/token.txt","from":"4k|auto|fhd"}},
|
||||
{"key":"push_agent","name":"🛴手机┃推送","type":3,"api":"csp_Push","searchable":0,"quickSearch":0,"ext": {"aliToken":"tvfan/token.txt","quarkCookie":"tvfan/cookie.txt","from":"4k|auto|fhd"}},
|
||||
|
||||
|
||||
{"key":"Bili","name":"🅱哔哔┃合集","type": 3,"api": "csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":1,"quickSearch":0,"changeable":0,"ext":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/bilibili.json"},
|
||||
@ -68,13 +68,12 @@
|
||||
{"key":"初中课堂","name":"📚初中┃课堂","type":3,"api":"csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":0,"quickSearch":0,"changeable":0,"ext":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/初中课堂.json"},
|
||||
{"key":"高中教育","name":"📚高中┃课堂","type":3,"api":"csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":0,"quickSearch":0,"changeable":0,"ext":"https://agit.ai/fantaiying/fty/raw/branch/master/ext/高中课堂.json"},
|
||||
{"key":"Nbys","name":"🛫泥巴┃飞","type":3,"api":"csp_NiNi","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"csp_trj","name": "🛫唐人街┃飞","type": 3,"api": "csp_Tangrenjie","searchable": 1,"quickSearch": 1,"changeable":1},
|
||||
{"key":"fan","name":"导航 https://饭太硬.top","type":3,"api":"csp_XPath","searchable":0,"quickSearch":0,"changeable":0},
|
||||
{"key":"cc","name":"请勿相信视频中广告","type":3,"api":"csp_XPath","searchable":0,"quickSearch":0,"changeable":0}
|
||||
],
|
||||
|
||||
"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"]}],
|
||||
"rules":[{"name":"kk","hosts":["kuaikan"],"regex":["5","20.123","20.167","#EXT-X-DISCONTINUITY\\r*\\n*((?!#EXT-X-DISCONTINUITY)[\\s\\S])*?#EXT-X-KEY:METHOD((?!#EXT-X-DISCONTINUITY)[\\s\\S])*?#EXT-X-DISCONTINUITY"]},{"name":"yqk","hosts":["yqk"],"regex":["18.4","15.1666","#EXT-X-DISCONTINUITY\\r*\\n*((?!#EXT-X-DISCONTINUITY)[\\s\\S])*?#EXT-X-CUE-OUT((?!#EXT-X-DISCONTINUITY)[\\s\\S])*?#EXT-X-CUE-IN"]},{"name":"sn","hosts":["suonizy"],"regex":["#EXTINF.*?\\s+.*?original.*?\\.ts\\s+","15.1666","15.2666","16.3333","15.266667"]},{"name":"bf","hosts":["bfzy"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:3,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},{"name":"xx","hosts":["aws.ulivetv.net"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:8,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},{"name":"lz","hosts":["vip.lz","hd.lz","v.cdnlz","yzzy1.play"],"regex":["18.5333","19.52","18.6666"]},{"name":"ff","hosts":["vip.ffzy","hd.ffzy","ffzy"],"regex":["25.0666","25.08","20.52","25.1","25.1999"]},{"name":"hs","hosts":["huoshan.com"],"regex":["item_id="]},{"name":"dy","hosts":["douyin.com"],"regex":["is_play_url="]},{"name":"nm","hosts":["toutiaovod.com"],"regex":["video/tos/cn"]},{"name":"cl","hosts":["magnet"],"regex":["最 新","直 播","更 新"]}],
|
||||
"lives":[{"name":"多线ITV","type":0,"url":"https://mirror.ghproxy.com/raw.githubusercontent.com/ssili126/tv/main/itvlist.txt","playerType":1},{"name":"高速V6","type":0,"url":"https://live.fanmingming.com/tv/m3u/ipv6.m3u","playerType":1 },{ "name": "嗅探", "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0", "type": 0, "url": "https://xhdwc.tk/xiutan.m3u" }]
|
||||
"lives":[{"name":"ITV","type":0,"url":"https://mirror.ghproxy.com/raw.githubusercontent.com/ssili126/tv/main/itvlist.txt","playerType":1},{"name":"IPV6","type":0,"url":"https://live.fanmingming.com/tv/m3u/ipv6.m3u","playerType":1 },{ "name": "XIUTAN", "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0", "type": 0, "url": "https://xhdwc.tk/xiutan.m3u" }]
|
||||
|
||||
}
|
||||
|
10
9918.json
10
9918.json
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/pg.jar;md5;20951b7b8b4979ec1214839a2b2e36b8",
|
||||
"spider":"./jar/pg.jar;md5;63350ce21576e80ee520cefd4dc0401b",
|
||||
"lives":[{"name":"初秋语","type":0,"url":"./listx.txt"},
|
||||
{"name":"糖意","type":0,"url":"https://wp.weikete.cc/down.php/c3eecc14547f5e1e468718148c9f762f.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png","pass":true},
|
||||
{"name":"YanG","type":0,"url":"https://fongmi.cachefly.net/YanG-1989/m3u/main/Adult.m3u"},
|
||||
@ -72,23 +72,15 @@
|
||||
{"key":"drpy_js_玩偶姐姐","name":"玩偶姐姐","type":3,"api":"./lib/drpy2.min.js","ext":"./js/玩偶姐姐.js"},
|
||||
{"key":"drpy_js_朱古力","name":"朱古力","type":3,"api":"./lib/drpy2.min.js","ext":"./js/朱古力.js"},
|
||||
{"key": "奥斯卡资源网","name": "奥斯卡资源网","type": 1,"api": "https://aosikazy.com/api.php/provide/vod/"},
|
||||
//{"key":"zmcj88.com","name":"成人01","type":0,"api":"http://zmcj88.com/sapi?ac=videolist","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"jcspcj8.com","name":"成人02","type":0,"api":"http://jcspcj8.com/api?ac=videolist","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"madouse.la","name":"成人03","type":1,"api":"http://madouse.la/api.php/provide/vod/","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"99zywcj.com","name":"成人04","type":0,"api":"http://99zywcj.com/inc/sapi.php?ac=videolist","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"wmcj8.com","name":"成人05","type":0,"api":"http://wmcj8.com/inc/sapi.php","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"apilj.com","name":"成人06","type":1,"api":"http://apilj.com/api.php/provide/vod/at/json/","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"91md.me","name":"成人07","type":1,"api":"http://91md.me/api.php/provide/vod/","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"cjmygzy.com","name":"成人08","type":0,"api":"http://cjmygzy.com/inc/sapi.php?ac=videolist","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"dadiapi.com","name":"成人09","type":0,"api":"http://dadiapi.com/api.php","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"feifei67.com","name":"成人10","type":1,"api":"http://www.feifei67.com/api.php/provide/vod/","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"llzxcj.com","name":"成人11","type":0,"api":"http://llzxcj.com/inc/sck.php?ac=videolist","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"bttcj.com","name":"成人12","type":0,"api":"http://bttcj.com/inc/sapi.php","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"mygzycj.com","name":"成人13","type":0,"api":"http://mygzycj.com/api.php?ac=list","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"f2dcj6.com","name":"成人14","type":0,"api":"http://f2dcj6.com/sapi?ac=videolist","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"api.11bat.com","name":"成人15","type":0,"api":"http://api.11bat.com/api.php/provide/vod/at/xml","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"api.maozyapi.com","name":"成人16","type":1,"api":"https://api.maozyapi.com/inc/apijson_vod.php","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
//{"key":"888dav.com","name":"成人17","type":1,"api":"https://www.888dav.com/api.php/provide/vod/","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"apittzy.com","name":"成人18","type":1,"api":"https://apittzy.com/api.php/provide/vod/","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"gdlsp.com","name":"成人19","type":0,"api":"https://www.gdlsp.com/api/xml.php","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
{"key":"msnii.com","name":"成人20","type":0,"api":"https://www.msnii.com/api/xml.php","searchable":1,"recordable":0,"style":{"type":"rect","ratio":1.33},"header":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/117.0.0.0Safari/537.36"}},
|
||||
|
@ -232,6 +232,7 @@
|
||||
"分类": "电影$dianying#电视剧$dianshiju#动漫$dongmna#综艺$zongyi"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"key": "视觉",
|
||||
"name": "👓1080P┃视觉",
|
||||
@ -249,8 +250,8 @@
|
||||
"数组": "<a&&module-poster-item-info\"[不包含:夸克]",
|
||||
"标题": "title=\"&&\"",
|
||||
"副标题": "note\">&&</div>",
|
||||
"嗅探词": ".mp4#.m3u8",
|
||||
"过滤词": "/player/#/index/",
|
||||
"嗅探词": ".mp4#.m3u8#v3.douyinvod",
|
||||
"过滤词": "/player/#/index/#video.bj.bcebos.com#1000_b_video",
|
||||
"图片": "data-original=\"&&\"",
|
||||
"播放请求头": "User-Agent$Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
|
||||
"链接": "href=\"&&\"",
|
||||
@ -281,6 +282,7 @@
|
||||
"简介": "<p>&&</p>"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"key": "Auete",
|
||||
"name": "🏂1080P┃奥特",
|
||||
@ -697,6 +699,7 @@
|
||||
"wan.51img1.com",
|
||||
"iqiyi.hbuioo.com",
|
||||
"vip.ffzyad.com",
|
||||
"video.bj.bcebos.com",
|
||||
"https://lf1-cdn-tos.bytegoofy.com/obj/tos-cn-i-dy/455ccf9e8ae744378118e4bd289288dd"
|
||||
]
|
||||
}
|
||||
|
11
XYQ.json
11
XYQ.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"wallpaper": "https://picsum.photos/1280/720/?blur=2",
|
||||
"spider": "./jar/XYQ.jar;md5;5dbe95399010cd30706b01aa5624dbe0",
|
||||
"spider": "./jar/XYQ.jar;md5;0578e48b03db152d0f0bbb03704d4ab5",
|
||||
"lives": [
|
||||
{
|
||||
"name": "Yoursmile7",
|
||||
@ -80,7 +80,7 @@
|
||||
{"key":"csp_Ddys","name":"🐞低端影视","type":3,"api":"csp_Ddys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Kunyu77","name":"🐞77影视","type":3,"api":"csp_Kunyu77","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_JianPian","name":"🔨荐片","type":3,"api":"csp_JianPian","playerType":1,"searchable":1,"quickSearch":1,"filterable":1,"ext":"https://ownjpykxttjzuhy.jiesiwa.com"},
|
||||
{"key":"csp_Ikanbot","name": "👾Ikanbot","type": 3,"api": "csp_Ikanbot","searchable": 1,"quickSearch": 1,"filterable": 1},
|
||||
{"key":"csp_Ikanbot","name": "👾Ikanbot","type": 3,"api": "csp_Ikanbot","searchable": 1,"quickSearch": 1,"filterable": 1,"ext":"https://v.ikanbot.com"},
|
||||
//B站系列
|
||||
{"key":"csp_Bili","name":"🐞哔哩综合","type": 3,"api": "csp_Bili","searchable": 1,"quickSearch": 1,"filterable": 1,"ext":"./biliext/Bili.json"},
|
||||
{"key":"csp_Bili幼儿","name":"🐞哔哩幼儿","type":3,"api":"csp_Bili","searchable":0,"quickSearch":0,"filterable":1,"ext":"./biliext/幼儿乐园.json"},
|
||||
@ -114,7 +114,6 @@
|
||||
{"key": "csp_XYQHiker_A8影视","name":"A8影视(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/A8影视.json"},
|
||||
{"key": "csp_XYQHiker_极客影院","name":"极客影院(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/极客影院.json"},
|
||||
{"key": "csp_XYQHiker_臭蛋蛋影视","name":"臭蛋蛋影视(HM2)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/臭蛋蛋影视.json"},
|
||||
{"key": "csp_XYQHiker_农民影视","name":"🧑🏻农民影视(HM2)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/农民影视.json"},
|
||||
{"key": "csp_XYQHiker_奇趣影视","name":"奇趣影视(HM2)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/奇趣影视.json"},
|
||||
{"key": "csp_XYQHiker_乐鱼影视","name":"乐鱼影视(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/乐鱼影视.json"},
|
||||
{"key": "csp_XYQHiker_歪片星球","name":"歪片星球(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./XYQHiker/歪片星球.json"},
|
||||
@ -211,8 +210,8 @@
|
||||
{"host": "www.sharenice.net","rule": ["http.*?/play.{0,3}\\?[^url]{2,8}=.*","qianpailive.com","vid="]},
|
||||
//非凡,量子,索尼,暴风
|
||||
{"name":"暴风","hosts":["bfzy","bfbfvip"],"regex":["#EXTINF.*?\\s+.*?adjump.*?\\.ts\\s+"]},
|
||||
{"name":"量子","hosts":["vip.lz","hd.lz",".cdnlz"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6\\.666667,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXTINF.*?\\s+.*?1o.*?\\.ts\\s+"]},
|
||||
{"name":"非凡","hosts":["vip.ffzy","hd.ffzy"],"regex":["20.52","#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:7\\.400000,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXTINF.*?\\s+.*?1170(20|32).*?\\.ts\\s+","#EXTINF.*?\\s+.*?116977.*?\\.ts\\s+"]},
|
||||
{"name":"量子","hosts":["vip.lz","hd.lz",".cdnlz"],"regex":["17.19","#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:7\\.166667,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXTINF.*?\\s+.*?1o.*?\\.ts\\s+"]},
|
||||
{"name":"非凡","hosts":["vip.ffzy","hd.ffzy"],"regex":["17.99","#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6\\.400000,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXTINF.*?\\s+.*?1170(20|32).*?\\.ts\\s+","#EXTINF.*?\\s+.*?116977.*?\\.ts\\s+"]},
|
||||
{"name":"索尼","hosts":["suonizy"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:1\\.000000,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXTINF.*?\\s+.*?p1ayer.*?\\.ts\\s+","#EXTINF.*?\\s+.*?\\/video\\/original.*?\\.ts\\s+"]},
|
||||
{"name":"快看","hosts":["kuaikan"],"regex":["#EXT-X-KEY:METHOD=NONE\\r*\\n*#EXTINF:5,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXT-X-KEY:METHOD=NONE\\r*\\n*#EXTINF:2\\.4,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},
|
||||
{"name":"海外看","hosts":["haiwaikan"],"regex":["10.0099","10.3333","16.0599","8.1748","10.85"]},
|
||||
@ -224,4 +223,4 @@
|
||||
{"group":"硬解码","options":[{"category":4,"name":"opensles","value":"0"},{"category":4,"name":"overlay-format","value":"842225234"},{"category":4,"name":"framedrop","value":"1"},{"category":4,"name":"soundtouch","value":"1"},{"category":4,"name":"start-on-prepared","value":"1"},{"category":1,"name":"http-detect-range-support","value":"0"},{"category":1,"name":"fflags","value":"fastseek"},{"category":2,"name":"skip_loop_filter","value":"48"},{"category":4,"name":"reconnect","value":"1"},{"category":4,"name":"enable-accurate-seek","value":"0"},{"category":4,"name":"mediacodec","value":"1"},{"category":4,"name":"mediacodec-auto-rotate","value":"1"},{"category":4,"name":"mediacodec-handle-resolution-change","value":"1"},{"category":4,"name":"mediacodec-hevc","value":"1"},{"category":1,"name":"dns_cache_timeout","value":"600000000"}]}
|
||||
],
|
||||
"ads":["mimg.0c1q0l.cn","www.googletagmanager.com","www.google-analytics.com","mc.usihnbcq.cn","mg.g1mm3d.cn","mscs.svaeuzh.cn","cnzz.hhttm.top","tp.vinuxhome.com","cnzz.mmstat.com","www.baihuillq.com","s23.cnzz.com","z3.cnzz.com","c.cnzz.com","stj.v1vo.top","z12.cnzz.com","img.mosflower.cn","tips.gamevvip.com","ehwe.yhdtns.com","xdn.cqqc3.com","www.jixunkyy.cn","sp.chemacid.cn","hm.baidu.com","s9.cnzz.com","z6.cnzz.com","um.cavuc.com","mav.mavuz.com","wofwk.aoidf3.com","z5.cnzz.com","xc.hubeijieshikj.cn","tj.tianwenhu.com","xg.gars57.cn","k.jinxiuzhilv.com","cdn.bootcss.com","ppl.xunzhuo123.com","xomk.jiangjunmh.top","img.xunzhuo123.com","z1.cnzz.com","s13.cnzz.com","xg.huataisangao.cn","z7.cnzz.com","xg.huataisangao.cn","z2.cnzz.com","s96.cnzz.com","q11.cnzz.com","thy.dacedsfa.cn","xg.whsbpw.cn","s19.cnzz.com","z8.cnzz.com","s4.cnzz.com","f5w.as12df.top","ae01.alicdn.com","www.92424.cn","k.wudejia.com","vivovip.mmszxc.top","qiu.xixiqiu.com","cdnjs.hnfenxun.com","cms.qdwght.com","api.htpan.net"]
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
576fae86365190bf5b44b5a5de56fde1
|
||||
d070e350bde0dedca01f15f421418c76
|
304
cat/dist/index.js
vendored
304
cat/dist/index.js
vendored
File diff suppressed because one or more lines are too long
2
cat/dist/index.js.md5
vendored
2
cat/dist/index.js.md5
vendored
@ -1 +1 @@
|
||||
4393866d86b1531e38ec0699d5a57747
|
||||
e0fed13dde6b55b30f1ffb754630e27f
|
@ -82,6 +82,15 @@
|
||||
"timeout": 30,
|
||||
"ext": "{\"box\": \"CatOpen\", \"danmu\": false}"
|
||||
},
|
||||
{
|
||||
"key": "hanxiucao",
|
||||
"name": "🔞┃含羞草┃🔞",
|
||||
"playerType": 0,
|
||||
"type": 3,
|
||||
"api": "./js/hanxiucao.js",
|
||||
"timeout": 30,
|
||||
"ext": "{\"box\": \"CatOpen\", \"danmu\": false}"
|
||||
},
|
||||
{
|
||||
"key": "push_agent",
|
||||
"name": "┃推送┃",
|
||||
|
@ -81,6 +81,15 @@
|
||||
"timeout": 30,
|
||||
"ext": "{\"box\": \"TVBox\", \"danmu\": false}"
|
||||
},
|
||||
{
|
||||
"key": "hanxiucao",
|
||||
"name": "🔞┃含羞草┃🔞",
|
||||
"playerType": 0,
|
||||
"type": 3,
|
||||
"api": "./js/hanxiucao.js",
|
||||
"timeout": 30,
|
||||
"ext": "{\"box\": \"TVBox\", \"danmu\": false}"
|
||||
},
|
||||
{
|
||||
"key": "push_agent",
|
||||
"name": "┃推送┃",
|
||||
|
@ -71,9 +71,10 @@ class BilibiliSpider extends Spider {
|
||||
}
|
||||
|
||||
async init(cfg) {
|
||||
await this.initCookie(cfg["ext"]["cookie"])
|
||||
await super.init(cfg);
|
||||
await this.initCookie(this.cfgObj["cookie"])
|
||||
await this.spiderInit(null)
|
||||
this.danmuStaus = true
|
||||
}
|
||||
|
||||
getName() {
|
||||
@ -230,9 +231,14 @@ class BilibiliSpider extends Spider {
|
||||
const playUrl = j + '$' + aid + '+' + cid + '+' + qualityList.join(':') + '+' + descriptionList.join(':');
|
||||
playList.push(playUrl);
|
||||
}
|
||||
for (let quality of qualityList) {
|
||||
treeMap[`dash - ${this.play_url_obj[quality]}`] = playList.join("#")
|
||||
if (this.catOpenStatus) {
|
||||
for (let quality of qualityList) {
|
||||
treeMap[`dash - ${this.play_url_obj[quality]}`] = playList.join("#")
|
||||
}
|
||||
} else {
|
||||
await this.jadeLog.warning("TV暂不支持Dash播放")
|
||||
}
|
||||
|
||||
for (let quality of qualityList) {
|
||||
treeMap[`mp4 - ${this.play_url_obj[quality]}`] = playList.join("#")
|
||||
}
|
||||
@ -247,9 +253,14 @@ class BilibiliSpider extends Spider {
|
||||
const playUrl = title + '$' + aaid + '+' + cid + '+' + qualityList.join(':') + '+' + descriptionList.join(':');
|
||||
playList.push(playUrl);
|
||||
}
|
||||
for (let quality of qualityList) {
|
||||
treeMap["相关" + ` - ${this.play_url_obj[quality]}`] = playList.join("#")
|
||||
if (this.catOpenStatus) {
|
||||
for (let quality of qualityList) {
|
||||
treeMap["相关" + ` - ${this.play_url_obj[quality]}`] = playList.join("#")
|
||||
}
|
||||
} else {
|
||||
await this.jadeLog.warning("TV暂不支持相关播放")
|
||||
}
|
||||
|
||||
vodDetail.vod_play_from = Object.keys(treeMap).join("$$$");
|
||||
vodDetail.vod_play_url = Object.values(treeMap).join("$$$");
|
||||
return vodDetail
|
||||
@ -301,7 +312,10 @@ class BilibiliSpider extends Spider {
|
||||
this.result.header = this.getHeader()
|
||||
if (flag.indexOf("dash") > -1 || flag.indexOf('相关') > -1) {
|
||||
// dash mpd 代理
|
||||
this.playUrl = this.js2Base + Utils.base64Encode(aid + '+' + cid + '+' + quality_id)
|
||||
if (this.catOpenStatus) {
|
||||
this.playUrl = this.js2Base + Utils.base64Encode(aid + '+' + cid + '+' + quality_id)
|
||||
}
|
||||
|
||||
} else if (flag.indexOf('mp4') > -1) {
|
||||
// 直链
|
||||
const url = this.apiUrl + `/x/player/playurl`;
|
||||
|
253
cat/tjs/js/cilixiong.js
Normal file
253
cat/tjs/js/cilixiong.js
Normal file
@ -0,0 +1,253 @@
|
||||
/*
|
||||
* @File : cilixiong.js
|
||||
* @Author : jade
|
||||
* @Date : 2024/4/13 14:52
|
||||
* @Email : jadehh@1ive.com
|
||||
* @Software : Samples
|
||||
* @Desc :
|
||||
*/
|
||||
import {_, load} from '../lib/cat.js';
|
||||
import {VodDetail, VodShort} from "../lib/vod.js"
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {Spider} from "./spider.js"
|
||||
|
||||
class CiliXiongSpider extends Spider {
|
||||
constructor() {
|
||||
super();
|
||||
this.siteUrl = "https://www.cilixiong.com"
|
||||
this.cateObj = {"/movie/": "1", "/drama/": "2"}
|
||||
}
|
||||
|
||||
getAppName() {
|
||||
return "磁力熊"
|
||||
}
|
||||
|
||||
getName() {
|
||||
return "🐻┃磁力熊┃🐻"
|
||||
}
|
||||
|
||||
getJSName() {
|
||||
return "cilixiong"
|
||||
}
|
||||
|
||||
getType() {
|
||||
return 3
|
||||
}
|
||||
|
||||
async setClasses() {
|
||||
let $ = await this.getHtml()
|
||||
let navElements = $("[class=\"nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0\"]").find("li")
|
||||
for (const navElement of navElements) {
|
||||
let element = $(navElement).find("a")[0]
|
||||
let type_name = $(element).text()
|
||||
let type_id = element.attribs.href
|
||||
if (type_name !== "首页" && type_name !== "榜单" && type_name !== "留言") {
|
||||
this.classes.push(this.getTypeDic(type_name, type_id))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async getFilter($) {
|
||||
let extend_list = []
|
||||
let filerElements = $("[class=\"nav small\"]")
|
||||
let i = 1
|
||||
for (const filetElement of filerElements) {
|
||||
let extend_name = $($(filetElement).find("li")[0]).text().replaceAll(":", "")
|
||||
let extend_dic = {"key": (i).toString(), "name": extend_name, "value": []}
|
||||
for (const typeElement of $(filetElement).find("li").slice(1)) {
|
||||
let element = $(typeElement).find("a")[0]
|
||||
let type_id = element.attribs.href.split("-")[i]
|
||||
extend_dic["value"].push({"n": $(element).text(), "v": type_id})
|
||||
}
|
||||
i = i + 1
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
return extend_list
|
||||
}
|
||||
|
||||
async setFilterObj() {
|
||||
for (const type_dic of this.classes) {
|
||||
let type_id = type_dic["type_id"]
|
||||
if (type_id !== "最近更新") {
|
||||
let $ = await this.getHtml(this.siteUrl + type_id)
|
||||
this.filterObj[type_id] = await this.getFilter($)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async parseVodShortListFromDoc($) {
|
||||
let vod_list = []
|
||||
let vodElements = $("[class=\"col\"]")
|
||||
for (const vodElement of vodElements) {
|
||||
let vodShort = new VodShort()
|
||||
vodShort.vod_id = $(vodElement).find("a")[0].attribs.href
|
||||
vodShort.vod_pic = Utils.getStrByRegex(/background-image: url\('(.*?)'\)/, $(vodElement).find("[class=\"card-img\"]")[0].attribs["style"])
|
||||
vodShort.vod_name = $($(vodElement).find("h2")).text()
|
||||
let remarks = $($(vodElement).find("[class=\"rank bg-success p-1\"]")).text()
|
||||
vodShort.vod_remarks = "评分:" + remarks
|
||||
if (remarks !== "AD") {
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
async parseVodShortListFromDocBySearch($) {
|
||||
let vod_list = []
|
||||
let vodElements = $("[class=\"card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg position-relative\"]")
|
||||
for (const vodElement of vodElements){
|
||||
let vodShort= new VodShort()
|
||||
vodShort.vod_id = $(vodElement).find("a")[0].attribs.href
|
||||
vodShort.vod_name = $($(vodElement).find("[class=\"pt-5 lh-1 pb-2 h4\"]")).text()
|
||||
vodShort.vod_pic = Utils.getStrByRegex(/background-image: url\('(.*?)'\)/,$(vodElement).find("[class=\"card-img\"]")[0].attribs.style)
|
||||
vodShort.vod_remarks = "评分:" + $($(vodElement).find("[class=\"rank bg-success p-1\"]")).text()
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
async parseVodDetailFromDoc($) {
|
||||
let vodDetail = new VodDetail()
|
||||
let vodDetailElement = $("[class=\"row row-cols-1 row-cols-lg-3 align-items-stretch g-4 p-5 text-white\"]")
|
||||
vodDetail.vod_pic = $(vodDetailElement).find("img")[0].attribs.src
|
||||
vodDetail.vod_name = $($(vodDetailElement).find("h1")).text()
|
||||
let vodContentElements = $(vodDetailElement).find("[class=\"mb-2\"]").slice(1)
|
||||
for (const contentElement of vodContentElements) {
|
||||
let name = $(contentElement).text()
|
||||
if (name.indexOf("豆瓣评分") > -1) {
|
||||
vodDetail.vod_remarks = name
|
||||
}
|
||||
if (name.indexOf("类型") > -1) {
|
||||
vodDetail.type_name = name.replaceAll(":", "").replace("类型", "").replaceAll(":", "")
|
||||
}
|
||||
if (name.indexOf("上映地区") > -1) {
|
||||
vodDetail.vod_area = name.replaceAll(":", "").replace("上映地区", "").replaceAll(":", "")
|
||||
}
|
||||
if (name.indexOf("主演") > -1) {
|
||||
vodDetail.vod_actor = name.replaceAll(":", "").replace("主演", "").replaceAll(":", "")
|
||||
}
|
||||
if (name.indexOf("上映日期") > -1){
|
||||
vodDetail.vod_year = name.replaceAll(":", "").replace("上映日期", "").replaceAll(":", "")
|
||||
}
|
||||
|
||||
}
|
||||
vodDetail.vod_content = $($(vodDetailElement).find("[class=\"mv_card_box\"]")).text()
|
||||
let playerMap = {}
|
||||
let emebedVideoElements = $("[class=\"row col-md-12 embed_video\"]")
|
||||
let index = 1
|
||||
for (const emebedVideoElement of emebedVideoElements){
|
||||
let vodItems = []
|
||||
let playUrl = $($(emebedVideoElement).find("iframe"))[0].attribs["src"]
|
||||
vodItems.push("播放" + "$" + playUrl);
|
||||
playerMap["在线播放" + index.toString()+ "第一集在线播放预览"] = vodItems.join("#")
|
||||
index = index + 1
|
||||
}
|
||||
let mangetIndex = 1
|
||||
let mangetElements = $("[class=\"row col-md-12 text-white p-3 pt-1\"]").find("[class=\"container\"]")
|
||||
for (const mangenment of mangetElements){
|
||||
let vodItems = []
|
||||
let playElement = $($(mangenment).find("a"))[0]
|
||||
let playUrl = playElement.attribs.href
|
||||
let playName = $(playElement).text()
|
||||
if (playUrl.startsWith("magnet")){
|
||||
vodItems.push(playName + "$" + playUrl);
|
||||
}
|
||||
if (vodItems.length > 0){
|
||||
playerMap["磁力链接" + "-" + mangetIndex] = vodItems.join("#")
|
||||
mangetIndex = mangetIndex + 1
|
||||
}
|
||||
}
|
||||
|
||||
vodDetail.vod_play_from = Object.keys(playerMap).join("$$$");
|
||||
vodDetail.vod_play_url = Object.values(playerMap).join("$$$");
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
async setHomeVod() {
|
||||
let $ = await this.getHtml()
|
||||
this.homeVodList = await this.parseVodShortListFromDoc($)
|
||||
}
|
||||
|
||||
async setCategory(tid, pg, filter, extend) {
|
||||
let type = extend["1"] ?? "0"
|
||||
let area = extend["2"] ?? "0"
|
||||
let page = parseInt(pg) - 1
|
||||
let url = this.siteUrl + "/" + this.cateObj[tid] + `-${type}-${area}-${page}.html`
|
||||
await this.jadeLog.debug(`分类URL:${url}`)
|
||||
let $ = await this.getHtml(url)
|
||||
this.vodList = await this.parseVodShortListFromDoc($)
|
||||
}
|
||||
|
||||
async setDetail(id) {
|
||||
let $ = await this.getHtml(this.siteUrl + id)
|
||||
this.vodDetail = await this.parseVodDetailFromDoc($)
|
||||
}
|
||||
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
if (flag.indexOf("在线播放") > -1){
|
||||
let $ = await this.getHtml(this.siteUrl + id)
|
||||
this.playUrl = Utils.getStrByRegex(/const source = '(.*?)'/,$.html())
|
||||
}else{
|
||||
this.playUrl = id
|
||||
}
|
||||
}
|
||||
|
||||
async setSearch(wd, quick) {
|
||||
let params = {"classid":"1,2","show":"title","tempid":"1","keyboard":wd}
|
||||
let response = await this.post(this.siteUrl + "/e/search/index.php",params,this.getHeader())
|
||||
let $ = load(response)
|
||||
this.vodList = await this.parseVodShortListFromDocBySearch($)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let spider = new CiliXiongSpider()
|
||||
|
||||
async function init(cfg) {
|
||||
await spider.init(cfg)
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
return await spider.home(filter)
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return await spider.homeVod()
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
return await spider.category(tid, pg, filter, extend)
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
return await spider.detail(id)
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return await spider.play(flag, id, flags)
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
return await spider.search(wd, quick)
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {
|
||||
return await spider.proxy(segments, headers)
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
proxy: proxy
|
||||
};
|
||||
}
|
||||
|
||||
export {spider}
|
@ -17,12 +17,17 @@ class Doll extends Spider {
|
||||
super();
|
||||
this.siteUrl = "https://hongkongdollvideo.com"
|
||||
}
|
||||
getImgHeader(){
|
||||
let headers = this.getHeader()
|
||||
headers["Proxy"] = true
|
||||
return headers
|
||||
}
|
||||
|
||||
async spiderInit(inReq = null) {
|
||||
if (inReq !== null) {
|
||||
this.jsBase = await js2Proxy(inReq, "img", {});
|
||||
this.jsBase = await js2Proxy(inReq, "img", this.getImgHeader());
|
||||
} else {
|
||||
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'img/', {});
|
||||
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'img/', this.getImgHeader());
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,11 +66,12 @@ class Doll extends Spider {
|
||||
vodShort.vod_name = videoInfoElements[0].attribs["title"]
|
||||
vodShort.vod_remarks = $(videoInfoElements[1]).text()
|
||||
let pic = $(vodElement).find("img")[0].attribs["data-src"]
|
||||
if (this.catOpenStatus) {
|
||||
vodShort.vod_pic = this.jsBase + Utils.base64Encode(pic)
|
||||
} else {
|
||||
vodShort.vod_pic = pic
|
||||
}
|
||||
// if (this.catOpenStatus) {
|
||||
// vodShort.vod_pic = this.jsBase + Utils.base64Encode(pic)
|
||||
// } else {
|
||||
// vodShort.vod_pic = pic
|
||||
// }
|
||||
vodShort.vod_pic = pic
|
||||
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
@ -78,11 +84,12 @@ class Doll extends Spider {
|
||||
vodDetail.vod_name = $($(vodElement).find("[class=\"page-title\"]")[0]).text()
|
||||
vodDetail.vod_remarks = $(vodElement).find("[class=\"tag my-1 text-center\"]")[0].attribs["href"].replaceAll("/", "")
|
||||
let pic = $(vodElement).find("video")[0].attribs["poster"]
|
||||
if (this.catOpenStatus) {
|
||||
vodDetail.vod_pic = this.jsBase + Utils.base64Encode(pic)
|
||||
} else {
|
||||
vodDetail.vod_pic = pic
|
||||
}
|
||||
// if (this.catOpenStatus) {
|
||||
// vodDetail.vod_pic = this.jsBase + Utils.base64Encode(pic)
|
||||
// } else {
|
||||
// vodDetail.vod_pic = pic
|
||||
// }
|
||||
vodDetail.vod_pic = pic
|
||||
let html = $.html()
|
||||
let voteTag = Utils.getStrByRegex(/var voteTag="(.*?)";/g, html)
|
||||
// let videoInfoStr = Utils.getStrByRegex(/<script type="application\/ld\+json">(.*?)<\/script>/g, html)
|
||||
|
625
cat/tjs/js/hanxiucao.js
Normal file
625
cat/tjs/js/hanxiucao.js
Normal file
@ -0,0 +1,625 @@
|
||||
/*
|
||||
* @File : hanxiucao.js
|
||||
* @Author : jade
|
||||
* @Date : 2024/04/13 19:38
|
||||
* @Email : jadehh@1ive.com
|
||||
* @Software : Samples
|
||||
* @Desc :
|
||||
*/
|
||||
import {_, Crypto} from '../lib/cat.js';
|
||||
import {VodDetail, VodShort} from "../lib/vod.js"
|
||||
import {Spider} from "./spider.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
|
||||
|
||||
function He(e, {key: t, iv: s} = {}) {
|
||||
let VITE_APP_AES_KEY = "B77A9FF7F323B5404902102257503C2F"
|
||||
let VITE_APP_AES_IV = "B77A9FF7F323B5404902102257503C2F"
|
||||
var o = Crypto.enc.Utf8.parse(e)
|
||||
, A = Crypto.AES.encrypt(o, Crypto.enc.Utf8.parse(t || VITE_APP_AES_KEY), {
|
||||
iv: Crypto.enc.Utf8.parse(s || VITE_APP_AES_IV),
|
||||
mode: Crypto.mode.CBC,
|
||||
padding: Crypto.pad.Pkcs7
|
||||
});
|
||||
return Crypto.enc.Base64.stringify(A.ciphertext)
|
||||
}
|
||||
|
||||
function Kt() {
|
||||
const e = new Date;
|
||||
return He(parseInt(e.getTime() / 1e3) + e.getTimezoneOffset() * 60 + -1)
|
||||
}
|
||||
|
||||
function bt(e) {
|
||||
const wA = "46cc793c53dc451b"
|
||||
let t = Crypto.enc.Utf8.parse(wA)
|
||||
, s = Crypto.AES.decrypt(e, t, {
|
||||
mode: Crypto.mode.ECB,
|
||||
padding: Crypto.pad.Pkcs7
|
||||
});
|
||||
return Crypto.enc.Utf8.stringify(s).toString()
|
||||
}
|
||||
|
||||
class HanXiuCaoSpider extends Spider {
|
||||
constructor() {
|
||||
super();
|
||||
this.siteUrl = "https://api.qianyuewenhua.xyz"
|
||||
}
|
||||
|
||||
async spiderInit(inReq = null) {
|
||||
if (inReq !== null) {
|
||||
this.jsBase = await js2Proxy(inReq, "imgBt", this.getHeader());
|
||||
} else {
|
||||
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'imgBt/', this.getHeader());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
this.danmuStaus = true
|
||||
await this.spiderInit(null)
|
||||
}
|
||||
|
||||
getAppName() {
|
||||
return "含羞草"
|
||||
}
|
||||
|
||||
getName() {
|
||||
return "🔞┃含羞草┃🔞"
|
||||
}
|
||||
|
||||
getJSName() {
|
||||
return "hanxiucao"
|
||||
}
|
||||
|
||||
getType() {
|
||||
return 3
|
||||
}
|
||||
|
||||
getParams(params) {
|
||||
return {"endata": He(JSON.stringify(params)), "ents": Kt()}
|
||||
}
|
||||
|
||||
async setClasses() {
|
||||
let params = this.getParams({"channel": "pc"})
|
||||
let response = await this.post(this.siteUrl + "/panel/list", params, this.getHeader(), "")
|
||||
let resJson = JSON.parse(response)
|
||||
for (const data of resJson["data"]["list"]) {
|
||||
let type_id = data["panelId"]
|
||||
let type_name = data["panelName"]
|
||||
if (type_name !== "首页") {
|
||||
this.classes.push(this.getTypeDic(type_name, type_id))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async getFilter(Layouts) {
|
||||
let extend_list = []
|
||||
for (const data of Layouts) {
|
||||
let layoutObj = JSON.parse(data["layoutContent"])
|
||||
for (const layout of layoutObj["sortKeys"]) {
|
||||
let extend_dic = {}
|
||||
if (layout["label"] !== "综合排序") {
|
||||
extend_dic = {"key": "sorts", "name": layout["label"].toString(), value: []}
|
||||
extend_dic["value"].push({"n": "升序", "v": layout["value"].toString() + "-" + "升序"})
|
||||
extend_dic["value"].push({"n": "降序", "v": layout["value"].toString() + "-" + "降序"})
|
||||
} else {
|
||||
extend_dic = {"key": "sorts", "name": "排序", value: []}
|
||||
extend_dic["value"].push({"n": layout["label"].toString(), "v": layout["value"].toString()})
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
}
|
||||
|
||||
return extend_list
|
||||
}
|
||||
|
||||
|
||||
async getNvYouFilter(Layouts) {
|
||||
let extend_list = []
|
||||
let params = {
|
||||
"uids": [],
|
||||
"page": 1,
|
||||
"length": 20
|
||||
}
|
||||
for (let i = 0; i < Layouts.length; i++) {
|
||||
let data = Layouts[i]
|
||||
let layoutObj = JSON.parse(data["layoutContent"])
|
||||
params["uids"] = layoutObj["list"]
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + "/user/getUpList", this.getParams(params), this.getHeader(), ""))
|
||||
let extend_dic = {"key": `tags`, "name": data["layoutName"], value: []}
|
||||
for (const layout of resJson["data"]["list"]) {
|
||||
extend_dic["value"].push({"n": layout["user_nicename"], "v": JSON.stringify(layout)})
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
let sort_list = [
|
||||
{
|
||||
"key": "sorts",
|
||||
"name": "发布时间",
|
||||
"value": [
|
||||
{
|
||||
"n": "升序",
|
||||
"v": "1-升序"
|
||||
},
|
||||
{
|
||||
"n": "降序",
|
||||
"v": "1-降序"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "sorts",
|
||||
"name": "点赞数量",
|
||||
"value": [
|
||||
{
|
||||
"n": "升序",
|
||||
"v": "5-升序"
|
||||
},
|
||||
{
|
||||
"n": "降序",
|
||||
"v": "5-降序"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "sorts",
|
||||
"name": "收藏数量",
|
||||
"value": [
|
||||
{
|
||||
"n": "升序",
|
||||
"v": "6-升序"
|
||||
},
|
||||
{
|
||||
"n": "降序",
|
||||
"v": "6-降序"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
return [...extend_list, ...sort_list]
|
||||
}
|
||||
|
||||
async getZhuanTiFilter(Layouts) {
|
||||
let extend_list = []
|
||||
let params = {
|
||||
"page": 1,
|
||||
"length": 36,
|
||||
"subjectIds": []
|
||||
}
|
||||
for (let i = 0; i < Layouts.length; i++) {
|
||||
let data = Layouts[i]
|
||||
let layoutObj = JSON.parse(data["layoutContent"])
|
||||
params["subjectIds"] = layoutObj["list"]
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + "/subject/list", this.getParams(params), this.getHeader(), ""))
|
||||
let extend_dic = {"key": `tags`, "name": data["layoutName"], value: []}
|
||||
for (const layout of resJson["data"]["list"]) {
|
||||
extend_dic["value"].push({"n": layout["name"], "v": JSON.stringify(layout)})
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
let sort_dic = {
|
||||
"key": "sorts",
|
||||
"name": "排序",
|
||||
"value": [
|
||||
{
|
||||
"n": "推荐",
|
||||
"v": "8"
|
||||
},
|
||||
{
|
||||
"n": "最新",
|
||||
"v": "1"
|
||||
},
|
||||
{
|
||||
"n": "最热",
|
||||
"v": "2"
|
||||
}
|
||||
]
|
||||
}
|
||||
extend_list.push(sort_dic)
|
||||
return extend_list
|
||||
}
|
||||
|
||||
async getChuanMeiFilter(Layouts) {
|
||||
let extend_list = []
|
||||
let extend_dic = {"key": `tags`, "name": "传媒", value: []}
|
||||
for (let i = 0; i < Layouts.length; i++) {
|
||||
let data = Layouts[i]
|
||||
extend_dic["value"].push({"n": data["layoutName"], "v": data["layoutContent"]})
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
|
||||
for (const layout of JSON.parse(Layouts[0]["layoutContent"])["moreOrderType"]) {
|
||||
extend_dic = {"key": "sorts", "name": layout["label"].toString(), value: []}
|
||||
extend_dic["value"].push({"n": "升序", "v": layout["value"].toString() + "-" + "升序"})
|
||||
extend_dic["value"].push({"n": "降序", "v": layout["value"].toString() + "-" + "降序"})
|
||||
extend_list.push(extend_dic)
|
||||
}
|
||||
|
||||
extend_list.push(extend_dic)
|
||||
return extend_list
|
||||
}
|
||||
|
||||
async getHeJiFilter(Layouts) {
|
||||
let extend_list = []
|
||||
let params = {
|
||||
"page": 1,
|
||||
"length": 24,
|
||||
"gatherType": 1,
|
||||
"gatherIds": []
|
||||
}
|
||||
let extend_dic = {"key": `tags`, "name": "合集", value: []}
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + "/gather/getList", this.getParams(params), this.getHeader(), ""))
|
||||
for (const data of resJson["data"]["list"]) {
|
||||
extend_dic["value"].push({"n": data["name"], "v": data["gatherId"].toString()})
|
||||
}
|
||||
extend_list.push(extend_dic)
|
||||
return extend_list
|
||||
}
|
||||
|
||||
async setFilterObj() {
|
||||
for (let i = 0; i < this.classes.length; i++) {
|
||||
let type_dic = this.classes[i]
|
||||
let type_id = type_dic["type_id"]
|
||||
let type_name = type_dic["type_name"]
|
||||
let filterList = []
|
||||
if (type_id !== "最近更新") {
|
||||
type_id = parseInt(type_id)
|
||||
let params = this.getParams({"panelId": type_id})
|
||||
let response = await this.post(this.siteUrl + "/panel/get", params, this.getHeader(), "")
|
||||
let resJson = JSON.parse(response)
|
||||
let layoutList = resJson["data"]["info"]["Layouts"]
|
||||
let layOutObj = JSON.parse(resJson["data"]["info"]["Layouts"][0]["layoutContent"])
|
||||
if (type_id > 174 && type_id < 181) {
|
||||
let layOutObj = JSON.parse(resJson["data"]["info"]["Layouts"][0]["layoutContent"])
|
||||
type_id = type_id + "$" + JSON.stringify(layOutObj)
|
||||
filterList = await this.getFilter(layoutList)
|
||||
} else {
|
||||
switch (type_id) {
|
||||
case 172:
|
||||
filterList = await this.getHeJiFilter(layoutList)
|
||||
type_id = type_id + "$" + filterList[0]["value"][0]["v"]
|
||||
break
|
||||
case 173:
|
||||
filterList = await this.getChuanMeiFilter(layoutList)
|
||||
type_id = type_id + "$" + JSON.stringify(layOutObj)
|
||||
break
|
||||
case 182:
|
||||
filterList = await this.getNvYouFilter(layoutList)
|
||||
type_id = type_id + "$" + filterList[0]["value"][0]["v"]
|
||||
break
|
||||
case 209:
|
||||
filterList = await this.getZhuanTiFilter(layoutList)
|
||||
type_id = type_id + "$" + filterList[0]["value"][0]["v"]
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
this.classes[i] = this.getTypeDic(type_name, type_id)
|
||||
this.filterObj[type_id] = filterList
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async parseVodShortListFromJson(obj) {
|
||||
let vod_list = []
|
||||
for (const data of obj) {
|
||||
let vodShort = new VodShort()
|
||||
vodShort.vod_id = data["id"]
|
||||
vodShort.vod_name = data["name"]
|
||||
vodShort.vod_pic = this.jsBase + Utils.base64Encode(data["coverImgUrl"])
|
||||
if (data["hot"] === undefined) {
|
||||
vodShort.vod_remarks = "观看:" + (data["seeCount"] / 10000).toFixed(1).toString() + "W"
|
||||
} else {
|
||||
vodShort.vod_remarks = "热度:" + (data["hot"] / 1000).toFixed(1).toString() + "K"
|
||||
}
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
async parseVodShortListFromGatherJson(obj) {
|
||||
let vod_list = []
|
||||
for (const data of obj) {
|
||||
let vodShort = new VodShort()
|
||||
vodShort.vod_id = data["gatherId"]
|
||||
vodShort.vod_name = data["name"]
|
||||
vodShort.vod_pic = this.jsBase + Utils.base64Encode(data["coverImgUrl"])
|
||||
vod_list.push(vodShort)
|
||||
}
|
||||
return vod_list
|
||||
}
|
||||
|
||||
async parseVodDetailFromDoc(detailObj) {
|
||||
let vodDetail = new VodDetail()
|
||||
vodDetail.vod_name = detailObj["name"]
|
||||
vodDetail.vod_year = detailObj["addTime"]
|
||||
vodDetail.vod_pic = this.jsBase + Utils.base64Encode(detailObj["coverImgUrl"])
|
||||
vodDetail.type_name = detailObj["typeName"]
|
||||
vodDetail.vod_content = detailObj["tags"]
|
||||
let vodItems = []
|
||||
let params = {
|
||||
"videoId": detailObj["id"]
|
||||
}
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + "/videos/getPreUrl", this.getParams(params), this.getHeader(), ""))
|
||||
let playList = resJson["data"]["url"].split("?")
|
||||
let playUrl = playList[0] + "?sign" + playList[1].split("&sign").slice(-1)[0]
|
||||
vodItems.push(vodDetail.vod_name + "$" + playUrl)
|
||||
let playObj = {"线路1": vodItems.join("#")}
|
||||
vodDetail.vod_play_url = _.values(playObj).join('$$$');
|
||||
vodDetail.vod_play_from = _.keys(playObj).join('$$$');
|
||||
return vodDetail
|
||||
|
||||
}
|
||||
|
||||
async getHomeVod(params) {
|
||||
let params_str = this.getParams(params)
|
||||
let response = await this.post(this.siteUrl + "/videos/getList", params_str, this.getHeader(), "")
|
||||
return await this.parseVodShortListFromJson(JSON.parse(response)["data"]["list"])
|
||||
}
|
||||
|
||||
|
||||
async setHomeVod() {
|
||||
let vod_list1 = await this.getHomeVod({
|
||||
"page": 1,
|
||||
"length": 16,
|
||||
"offset": 0,
|
||||
"typeIds": [],
|
||||
"orderType": 1,
|
||||
"payType": [3, 4]
|
||||
})
|
||||
let vod_list2 = await this.getHomeVod({
|
||||
"page": 1,
|
||||
"length": 16,
|
||||
"offset": 0,
|
||||
"typeIds": [],
|
||||
"orderType": 3,
|
||||
"payType": [
|
||||
1
|
||||
]
|
||||
})
|
||||
let vod_list3 = await this.getHomeVod({
|
||||
"page": 1,
|
||||
"length": 32,
|
||||
"offset": 0,
|
||||
"typeIds": [],
|
||||
"orderType": 1,
|
||||
"payType": [
|
||||
3
|
||||
]
|
||||
})
|
||||
this.homeVodList = [...vod_list1, ...vod_list2, ...vod_list3];
|
||||
}
|
||||
|
||||
|
||||
getSortParams(params, extend) {
|
||||
let orderTypeStr = extend["sorts"] ?? ""
|
||||
if (!_.isEmpty(orderTypeStr)) {
|
||||
let orderType = orderTypeStr.split("-")[0]
|
||||
params["orderType"] = parseInt(orderType)
|
||||
let orderModeStr = orderTypeStr.split("-")[1]
|
||||
let orderMode = 0
|
||||
if (orderModeStr === "升序") {
|
||||
orderMode = "1"
|
||||
} else {
|
||||
orderMode = "0"
|
||||
}
|
||||
params["orderMode"] = parseInt(orderMode)
|
||||
}
|
||||
return params
|
||||
}
|
||||
|
||||
getTopParams(type_id, layOutObj, pg, extend) {
|
||||
let defaultOderType
|
||||
if (type_id === 180) {
|
||||
defaultOderType = "1"
|
||||
} else {
|
||||
defaultOderType = "7"
|
||||
}
|
||||
let orderMode = "1"
|
||||
let orderType
|
||||
let orderTypeStr = extend["sorts"] ?? defaultOderType
|
||||
let isOrderModel = false
|
||||
if (orderTypeStr.indexOf("-") > -1) {
|
||||
orderType = orderTypeStr.split("-")[0]
|
||||
let orderModeStr = orderTypeStr.split("-")[1]
|
||||
if (orderModeStr === "升序") {
|
||||
orderMode = "1"
|
||||
} else {
|
||||
orderMode = "0"
|
||||
}
|
||||
isOrderModel = true
|
||||
} else {
|
||||
orderType = defaultOderType
|
||||
}
|
||||
let params = {
|
||||
"orderType": parseInt(orderType), //或者7
|
||||
"tags": [],
|
||||
"length": 11,
|
||||
"page": parseInt(pg),
|
||||
"typeIds": layOutObj["classs"],
|
||||
"payType": layOutObj["payType"],
|
||||
}
|
||||
if (isOrderModel) {
|
||||
params["orderMode"] = parseInt(orderMode)
|
||||
}
|
||||
return params
|
||||
}
|
||||
|
||||
getChuanMeiParams(layOutObj, pg, extend) {
|
||||
let obj
|
||||
if (!_.isEmpty(extend["tags"])) {
|
||||
obj = JSON.parse(extend["tags"])
|
||||
} else {
|
||||
obj = layOutObj
|
||||
}
|
||||
let params = {
|
||||
"page": parseInt(pg),
|
||||
"length": 32,
|
||||
"offset": 32 * parseInt(pg - 1),
|
||||
"tag": obj["videoLables"].join(","),
|
||||
"typeIds": obj["classs"],
|
||||
"orderType": obj["orderType"],
|
||||
"payType": obj["payType"]
|
||||
}
|
||||
params = this.getSortParams(params, extend)
|
||||
return params
|
||||
}
|
||||
|
||||
getNvYouParams(layoutObj, pg, extend) {
|
||||
let obj
|
||||
if (!_.isEmpty(extend["tags"])) {
|
||||
obj = JSON.parse(extend["tags"])
|
||||
} else {
|
||||
obj = layoutObj
|
||||
}
|
||||
let params = {"videoSort": 1, "touid": obj["id"], "page": parseInt(pg), "length": 12, "orderType": 1}
|
||||
params = this.getSortParams(params, extend)
|
||||
return params
|
||||
}
|
||||
|
||||
getZhuantiParams(layoutObj, pg, extend) {
|
||||
let obj
|
||||
if (!_.isEmpty(extend["tags"])) {
|
||||
obj = JSON.parse(extend["tags"])
|
||||
} else {
|
||||
obj = layoutObj
|
||||
}
|
||||
let orderType = extend["sorts"] ?? "8"
|
||||
return {
|
||||
"page": parseInt(pg),
|
||||
"length": 12,
|
||||
"offset": 12 * (parseInt(pg) - 1),
|
||||
"orderType": parseInt(orderType),
|
||||
"subjectId": obj["id"]
|
||||
}
|
||||
}
|
||||
|
||||
async setCategory(tid, pg, filter, extend) {
|
||||
let tid_list = tid.split("$")
|
||||
let type_id = parseInt(tid_list[0])
|
||||
let layOutObj = JSON.parse(tid_list[1])
|
||||
let params = {}
|
||||
let url = "/videos/getList"
|
||||
if (type_id > 174 && type_id < 181) {
|
||||
params = this.getTopParams(type_id, layOutObj, pg, extend)
|
||||
} else {
|
||||
switch (type_id) {
|
||||
case 173:
|
||||
params = this.getChuanMeiParams(layOutObj, pg, extend)
|
||||
break
|
||||
case 182:
|
||||
params = this.getNvYouParams(layOutObj, pg, extend)
|
||||
url = "/user/getSpaceVideo"
|
||||
break
|
||||
case 209:
|
||||
params = this.getZhuantiParams(layOutObj, pg, extend)
|
||||
break
|
||||
case 172:
|
||||
let gatherId = extend["tags"] ?? layOutObj
|
||||
params = {
|
||||
"gatherId": parseInt(gatherId)
|
||||
}
|
||||
url = "/gather/getDetail"
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + url, this.getParams(params), this.getHeader(), ""))
|
||||
if (type_id === 172) {
|
||||
this.vodList = await this.parseVodShortListFromJson(resJson["data"]["info"]["videos"])
|
||||
} else {
|
||||
this.vodList = await this.parseVodShortListFromJson(resJson["data"]["list"])
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async setDetail(id) {
|
||||
let params = {
|
||||
"videoId": parseInt(id),
|
||||
"videoSort": 1
|
||||
}
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + "/videos/getInfo", this.getParams(params), this.getHeader(), ""))
|
||||
this.vodDetail = await this.parseVodDetailFromDoc(resJson["data"]["info"])
|
||||
}
|
||||
|
||||
|
||||
async proxy(segments, headers) {
|
||||
let what = segments[0];
|
||||
let url = Utils.base64Decode(segments[1]);
|
||||
if (what === 'imgBt') {
|
||||
let response = await req(url, {buffer: 0});
|
||||
return JSON.stringify({
|
||||
code: 200,
|
||||
buffer: 2,
|
||||
content: bt(response.content).replaceAll("data:image/jpeg;base64,", "").replaceAll("data:image/jpg;base64,", "").replaceAll("data:image/png;base64", ""),
|
||||
headers: headers,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async setSearch(wd, quick, pg) {
|
||||
let params = {
|
||||
"page": parseInt(pg),
|
||||
"length": 12,
|
||||
"type": 1,
|
||||
"key": wd
|
||||
}
|
||||
let resJson = JSON.parse(await this.post(this.siteUrl + "/base/globalSearch", this.getParams(params), this.getHeader(), ""))
|
||||
this.vodList = await this.parseVodShortListFromJson(resJson["data"]["infos"])
|
||||
this.result.setPage(parseInt(pg), resJson["data"]["count"] / 12, 12, resJson["data"]["count"])
|
||||
}
|
||||
}
|
||||
|
||||
let spider = new HanXiuCaoSpider()
|
||||
|
||||
async function init(cfg) {
|
||||
await spider.init(cfg)
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
return await spider.home(filter)
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return await spider.homeVod()
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
return await spider.category(tid, pg, filter, extend)
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
return await spider.detail(id)
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return await spider.play(flag, id, flags)
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
return await spider.search(wd, quick)
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {
|
||||
return await spider.proxy(segments, headers)
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
proxy: proxy
|
||||
};
|
||||
}
|
||||
|
||||
export {spider, bt}
|
@ -21,12 +21,20 @@ class JableTVSpider extends Spider {
|
||||
|
||||
async spiderInit(inReq = null) {
|
||||
if (inReq !== null) {
|
||||
this.jsBase = await js2Proxy(inReq, "img", {});
|
||||
this.jsBase = await js2Proxy(inReq, "img", this.getImgHeaders());
|
||||
} else {
|
||||
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'img/', {});
|
||||
this.jsBase = await js2Proxy(true, this.siteType, this.siteKey, 'img/', this.getImgHeaders());
|
||||
}
|
||||
}
|
||||
|
||||
getImgHeaders(){
|
||||
return {
|
||||
"User-Agent": "PostmanRuntime/7.37.3",
|
||||
"Postman-Token": "c2602692-1a05-4bb0-93cd-270afad97e87",
|
||||
"Host": "assets-cdn.jable.tv",
|
||||
"Proxy": true
|
||||
}
|
||||
}
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
@ -54,7 +62,7 @@ class JableTVSpider extends Spider {
|
||||
let header = {}
|
||||
header["User-Agent"] = "PostmanRuntime/7.36.3"
|
||||
header["Host"] = "jable.tv"
|
||||
// header["Postman-Token"] = "33290483-3c8d-413f-a160-0d3aea9e6f95"
|
||||
header["Postman-Token"] = "33290483-3c8d-413f-a160-0d3aea9e6f95"
|
||||
return header
|
||||
}
|
||||
|
||||
@ -169,11 +177,12 @@ class JableTVSpider extends Spider {
|
||||
let vodShort = new VodShort()
|
||||
let vod_pic = $(element).find("img").attr("data-src")
|
||||
if (vod_pic !== undefined) {
|
||||
if (this.catOpenStatus) {
|
||||
vodShort.vod_pic = this.jsBase + Utils.base64Encode(vod_pic)
|
||||
} else {
|
||||
vodShort.vod_pic = vod_pic
|
||||
}
|
||||
vodShort.vod_pic = vod_pic
|
||||
// if (this.catOpenStatus) {
|
||||
// vodShort.vod_pic = this.jsBase + Utils.base64Encode(vod_pic)
|
||||
// } else {
|
||||
// vodShort.vod_pic = vod_pic
|
||||
// }
|
||||
let url = $(element).find("a").attr("href");
|
||||
vodShort.vod_id = url.split("/")[4];
|
||||
vodShort.vod_name = url.split("/")[4];
|
||||
@ -197,11 +206,12 @@ class JableTVSpider extends Spider {
|
||||
let leftElement = $("[class=\"header-left\"]")
|
||||
vodDetail.vod_name = $($(leftElement).find("h4")).text();
|
||||
let vod_pic = Utils.getStrByRegex(/<video poster="(.*?)" id=/, $.html())
|
||||
if (this.catOpenStatus) {
|
||||
vodDetail.vod_pic = this.jsBase + Utils.base64Encode(vod_pic)
|
||||
} else {
|
||||
vodDetail.vod_pic = vod_pic
|
||||
}
|
||||
vodDetail.vod_pic = vod_pic
|
||||
// if (this.catOpenStatus) {
|
||||
// vodDetail.vod_pic = this.jsBase + Utils.base64Encode(vod_pic)
|
||||
// } else {
|
||||
// vodDetail.vod_pic = vod_pic
|
||||
// }
|
||||
vodDetail.vod_year = $($("[class=\"inactive-color\"]")).text()
|
||||
let episodeName = $($("[class=\"header-right d-none d-md-block\"] > h6")).text().replaceAll("\n", "").replaceAll("●", "")
|
||||
let vodItems = []
|
||||
|
@ -35,7 +35,7 @@ class Sp360Spider extends Spider {
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
this.danmuUrl = true
|
||||
this.danmuStaus = true
|
||||
}
|
||||
|
||||
async setClasses() {
|
||||
@ -518,9 +518,9 @@ class Sp360Spider extends Spider {
|
||||
let vodShort = new VodShort();
|
||||
vodShort.vod_id = data["id"] + "+" + tid
|
||||
if (!data["cover"].startsWith("http")) {
|
||||
vodShort.vod_pic = "https:" + data["cdncover"]
|
||||
vodShort.vod_pic = "https:" + data["cover"]
|
||||
} else {
|
||||
vodShort.vod_pic = data["cdncover"]
|
||||
vodShort.vod_pic = data["cover"]
|
||||
}
|
||||
vodShort.vod_name = data["title"]
|
||||
vodShort.vod_remarks = data["tag"]
|
||||
@ -624,7 +624,7 @@ class Sp360Spider extends Spider {
|
||||
}
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
if (this.danmuUrl) {
|
||||
if (this.danmuStaus && ! this.catOpenStatus) {
|
||||
this.danmuUrl = await this.danmuSpider.getVideoUrl(id, 0)
|
||||
}
|
||||
this.result.parse = 1 //启用自动解析
|
||||
|
@ -57,7 +57,7 @@ class Result {
|
||||
}
|
||||
|
||||
search(vod_list) {
|
||||
return JSON.stringify({"list": vod_list})
|
||||
return JSON.stringify({"list": vod_list,"page":this.page,"pagecount":this.pagecount,"total":this.total})
|
||||
}
|
||||
|
||||
detail(vod_detail) {
|
||||
@ -648,7 +648,7 @@ class Spider {
|
||||
if (this.danmuStaus && !this.catOpenStatus) {
|
||||
if (!_.isEmpty(this.danmuUrl)) {
|
||||
await this.jadeLog.debug("播放详情页面有弹幕,所以不需要再查找弹幕")
|
||||
return_result = this.result.setHeader(this.header).danmu(this.danmuUrl).play(this.playUrl)
|
||||
return_result = this.result.danmu(this.danmuUrl).play(this.playUrl)
|
||||
} else {
|
||||
let danmuUrl;
|
||||
try {
|
||||
@ -656,12 +656,12 @@ class Spider {
|
||||
} catch (e) {
|
||||
await this.jadeLog.error(`弹幕加载失败,失败原因为:${e}`)
|
||||
}
|
||||
return_result = this.result.setHeader(this.header).danmu(danmuUrl).play(this.playUrl)
|
||||
return_result = this.result.danmu(danmuUrl).play(this.playUrl)
|
||||
}
|
||||
|
||||
} else {
|
||||
await this.jadeLog.debug("不需要加载弹幕", true)
|
||||
return_result = this.result.setHeader(this.header).play(this.playUrl)
|
||||
return_result = this.result.play(this.playUrl)
|
||||
}
|
||||
}
|
||||
await this.jadeLog.info("播放页面解析完成", true)
|
||||
@ -695,17 +695,25 @@ class Spider {
|
||||
|
||||
async getImg(url, headers) {
|
||||
let resp;
|
||||
let use_proxy = false // 使用代理不需要加headers
|
||||
let vpn_proxy = headers["Proxy"] // 使用代理不需要加headers
|
||||
if (_.isEmpty(headers)) {
|
||||
headers = {Referer: url, 'User-Agent': Utils.CHROME}
|
||||
use_proxy = true
|
||||
}
|
||||
resp = await req(url, {buffer: 2, headers: headers,proxy:use_proxy});
|
||||
resp = await req(url, {buffer: 2, headers: headers,proxy:vpn_proxy});
|
||||
try {
|
||||
//二进制文件是不能使用Base64编码格式的
|
||||
Utils.base64Decode(resp.content)
|
||||
await this.jadeLog.error(`图片代理获取失败,重连失败`, true)
|
||||
this.reconnectTimes = 0
|
||||
return {"code": 500, "headers": headers, "content": "加载失败"}
|
||||
if (vpn_proxy){
|
||||
await this.jadeLog.error(`使用VPN代理,图片地址为:${url},headers:${JSON.stringify(headers)},代理失败,准备重连,输出内容为:${JSON.stringify(resp)}`)
|
||||
}else {
|
||||
await this.jadeLog.error(`使用普通代理,图片地址为:${url},headers:${JSON.stringify(headers)},代理失败,准备重连,输出内容为:${JSON.stringify(resp)}`)
|
||||
}
|
||||
if (this.reconnectTimes < this.maxReconnectTimes){
|
||||
this.reconnectTimes = this.reconnectTimes + 1
|
||||
return await this.getImg(url,headers)
|
||||
}else{
|
||||
return {"code": 500, "headers": headers, "content": "加载失败"}
|
||||
}
|
||||
} catch (e) {
|
||||
await this.jadeLog.debug("图片代理成功", true)
|
||||
this.reconnectTimes = 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
import {__jsEvalReturn} from './jable.js';
|
||||
import {__jsEvalReturn} from './bilibili.js';
|
||||
import * as Utils from "../lib/utils.js";
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ async function test() {
|
||||
await spider.init({
|
||||
skey: siteKey, stype: siteType, ext: {
|
||||
"token": "6827db23e5474d02a07fd7431d3d5a5a",
|
||||
"box": "TV",
|
||||
"box": "bilibili",
|
||||
"code": "1",
|
||||
"from": "justlive1",
|
||||
"danmu": true,
|
||||
@ -74,22 +74,32 @@ async function test() {
|
||||
|
||||
|
||||
|
||||
//测试分类列表
|
||||
let catePage = JSON.parse(await spider.category("历史记录", "1", undefined, {}));
|
||||
console.debug(JSON.stringify(catePage));
|
||||
|
||||
// 测试详情
|
||||
let detail1 = JSON.parse(await spider.detail("BV12r421t7nu"))
|
||||
let detail1 = JSON.parse(await spider.detail("BV1Pp421R7pn"))
|
||||
await testPlay(detail1)
|
||||
|
||||
|
||||
|
||||
let catePage = JSON.parse(await spider.category("2", "1", undefined, {}));
|
||||
console.debug(JSON.stringify(catePage));
|
||||
|
||||
// 测试搜索
|
||||
let search_page = JSON.parse(await spider.search("海贼王"))
|
||||
// 测试搜索
|
||||
let search_page = JSON.parse(await spider.search("王牌"))
|
||||
console.debug(JSON.stringify(search_page));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 测试详情
|
||||
if (search_page.list && search_page.list.length > 0) {
|
||||
for (const k in search_page.list) {
|
||||
|
@ -1,6 +1,15 @@
|
||||
{
|
||||
"video": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "cilixiong",
|
||||
"name": "🐻┃磁力熊┃🐻",
|
||||
"playerType": 0,
|
||||
"type": 3,
|
||||
"api": "./js/cilixiong.js",
|
||||
"timeout": 30,
|
||||
"ext": "{\"box\": \"CatOpen\", \"danmu\": false}"
|
||||
},
|
||||
{
|
||||
"key": "aiyingshi",
|
||||
"name": "🚀┃爱影视┃🚀",
|
||||
|
@ -1,5 +1,14 @@
|
||||
{
|
||||
"sites": [
|
||||
{
|
||||
"key": "cilixiong",
|
||||
"name": "🐻┃磁力熊┃🐻",
|
||||
"playerType": 0,
|
||||
"type": 3,
|
||||
"api": "./js/cilixiong.js",
|
||||
"timeout": 30,
|
||||
"ext": "{\"box\": \"TVBox\", \"danmu\": false}"
|
||||
},
|
||||
{
|
||||
"key": "aiyingshi",
|
||||
"name": "🚀┃爱影视┃🚀",
|
||||
|
BIN
jar/XBPQ.jar
BIN
jar/XBPQ.jar
Binary file not shown.
BIN
jar/XYQ.jar
BIN
jar/XYQ.jar
Binary file not shown.
BIN
jar/pg.jar
BIN
jar/pg.jar
Binary file not shown.
3
js.json
3
js.json
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/pg.jar;md5;20951b7b8b4979ec1214839a2b2e36b8",
|
||||
"spider":"./jar/pg.jar;md5;63350ce21576e80ee520cefd4dc0401b",
|
||||
"lives":[
|
||||
{"name":"live","type":0,"url":"./tvlive.txt","playerType":1,"ua":"okhttp/3.15","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,"ua":"okhttp/3.15","epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"}
|
||||
@ -44,6 +44,7 @@
|
||||
{"key":"Yscapp","name":"弹幕 | 影視車[jar]","type":3,"api":"csp_Yscapp","quickSearch":1, "changeable":1, "filterable":1, "timeout":30, "playerType":1, "playerType":1, "ext":"1"},
|
||||
{"key":"Moli","name":"弹幕 | HDmoli[jar]","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":"Bt0","name":"弹幕 | 不太灵[jar]","type":3,"api":"csp_Bt0","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"null$$$null$$$1"},
|
||||
{"key":"ddys","name":"弹幕 | 低端[jar]","type":3,"api":"csp_Ddys","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://ddys.pro/$$$proxy$$$1$$$"},
|
||||
{"key":"美剧迷","name":"弹幕 | 美剧迷[jar]","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":"弹幕 | 皮皮虾[jar]","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", "timeout":30},
|
||||
{"key":"新6V","name":"弹幕 | 新6V[jar]","type":3,"api":"csp_Xb6v","searchable":1,"changeable":1,"timeout":60,"ext":"http://127.0.0.1:9978/file/TV/token.json$$$https://www.66ss.org$$$1"},
|
||||
|
@ -11,3 +11,5 @@ ecdf7d6ffaaa 经典港剧合集1
|
||||
187062318ebc 经典港剧合集2
|
||||
9ebb62b93194 2023-2024跨年晚会合集
|
||||
2c9b026382f2 超高分书籍6000套
|
||||
0b709fd1f95c 魔卡少女樱
|
||||
e90b9775a78a dj
|
||||
|
@ -1,42 +0,0 @@
|
||||
{
|
||||
"token": "",
|
||||
"open_token": "",
|
||||
"thread_limit": 32,
|
||||
"is_vip": true,
|
||||
"vip_thread_limit": 0,
|
||||
"vod_flags": "4k|4kz|auto",
|
||||
"quark_thread_limit": 32,
|
||||
"quark_is_vip": false,
|
||||
"quark_vip_thread_limit": 16,
|
||||
"quark_flags": "4kz|auto",
|
||||
"uc_thread_limit": 0,
|
||||
"uc_is_vip": false,
|
||||
"uc_vip_thread_limit": 0,
|
||||
"uc_flags": "4kz|auto",
|
||||
"thunder_thread_limit": 2,
|
||||
"thunder_is_vip": false,
|
||||
"thunder_vip_thread_limit": 2,
|
||||
"thunder_flags": "4k|4kz|auto",
|
||||
"aliproxy": "",
|
||||
"aliproxy_url": "",
|
||||
"proxy": "",
|
||||
"open_api_url": "https://api.xhofe.top/alist/ali_open/",
|
||||
"danmu": true,
|
||||
"quark_danmu": true,
|
||||
"quark_cookie": "",
|
||||
"uc_cookie": "",
|
||||
"thunder_username": "",
|
||||
"thunder_password": "",
|
||||
"thunder_captchatoken": "",
|
||||
"yd_auth": "",
|
||||
"yd_thread_limit": 4,
|
||||
"yd_flags": "4kz|auto",
|
||||
"yd_danmu": true,
|
||||
"pikpak_username": "",
|
||||
"pikpak_password": "",
|
||||
"pikpak_flags": "4k|auto",
|
||||
"pikpak_thread_limit": 2,
|
||||
"pikpak_vip_thread_limit": 2,
|
||||
"pikpak_proxy": "",
|
||||
"pikpak_danmu": true
|
||||
}
|
BIN
lib/aliproxy.gz
Normal file
BIN
lib/aliproxy.gz
Normal file
Binary file not shown.
1
lib/aliproxy.md5
Normal file
1
lib/aliproxy.md5
Normal file
@ -0,0 +1 @@
|
||||
91e417bf6f771800fa82bb3061827d06
|
2
lib/drpy.min.js
vendored
2
lib/drpy.min.js
vendored
File diff suppressed because one or more lines are too long
2
lib/drpy2.min.js
vendored
2
lib/drpy2.min.js
vendored
File diff suppressed because one or more lines are too long
118
lib/getsearchtxt.py
Normal file
118
lib/getsearchtxt.py
Normal file
@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import re
|
||||
import json
|
||||
import requests
|
||||
import time
|
||||
import traceback
|
||||
import gzip
|
||||
|
||||
p=re.compile(r'.*/s/(.*)')
|
||||
skipp = re.compile(r'.*(cover|screen|频道).*',re.IGNORECASE)
|
||||
reqcount=1
|
||||
sharedict=set()
|
||||
|
||||
def getlist(w,shareid, fileid,morepage):
|
||||
global p
|
||||
global skipp
|
||||
global reqcount
|
||||
global sharedict
|
||||
|
||||
reqcount += 1
|
||||
if reqcount % 5 == 0:
|
||||
print(f"reqcount:{reqcount} shareid:{shareid} fileid:{fileid}",file=sys.stderr)
|
||||
#time.sleep(1)
|
||||
url = f'http://192.168.101.188:9978/proxy?do=pikpak&type=list&share_id={shareid}&file_id={fileid}&pass_code=&morepage={morepage}'
|
||||
print(f"url: {url}",file=sys.stderr)
|
||||
resp = requests.get(url)
|
||||
content = resp.content.decode('utf-8')
|
||||
lines = content.split("\n")
|
||||
if "folder" not in content and len(lines)<=4:
|
||||
return
|
||||
isfirst=True
|
||||
for line in lines:
|
||||
if isfirst:
|
||||
isfirst=False
|
||||
print(f"first line:{line}",file=sys.stderr)
|
||||
if skipp.match(line):
|
||||
continue
|
||||
linearr = line.split('\t')
|
||||
if len(linearr)>2:
|
||||
m = p.match(linearr[0])
|
||||
if m:
|
||||
arr = m.group(1).split("/")
|
||||
else:
|
||||
arr = linearr[0].split("/")
|
||||
shareid=arr[0]
|
||||
fileid=arr[1] if len(arr)>1 else ""
|
||||
if shareid+"/"+fileid in sharedict:
|
||||
print(f"skip shareid{shareid} fileid:{fileid}", file=sys.stderr)
|
||||
continue
|
||||
w.write(line+"\n")
|
||||
w.flush()
|
||||
if linearr[2] == "folder":
|
||||
getlist(w,shareid,fileid,False)
|
||||
|
||||
if len(lines)>0:
|
||||
getlist(w,shareid,fileid,True)
|
||||
|
||||
def main():
|
||||
try:
|
||||
f = gzip.open(sys.argv[1]+".raw.gz",mode="rt",encoding="utf-8")
|
||||
if f is not None:
|
||||
print(f"found gz raw file:{sys.argv[1]}.raw.gz, extract it",file=sys.stderr)
|
||||
with(open(sys.argv[1]+".raw","w",encoding="utf-8")) as w:
|
||||
while(True):
|
||||
lines = f.readlines()
|
||||
if len(lines)<=0:
|
||||
break
|
||||
for line in lines:
|
||||
line=line.strip()
|
||||
w.write(line+"\n")
|
||||
f.seek(0)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
f = open(sys.argv[1]+".raw","r",encoding="utf-8")
|
||||
except:
|
||||
f = None
|
||||
if f is not None:
|
||||
print("found old raw file")
|
||||
while True:
|
||||
lines = f.readlines()
|
||||
if len(lines)<=0:
|
||||
break
|
||||
for line in lines:
|
||||
linearr = line.split("\t")
|
||||
m = p.match(linearr[0])
|
||||
if m:
|
||||
arr = m.group(1).split("/")
|
||||
else:
|
||||
arr = linearr[0].split("/")
|
||||
if len(arr)>1:
|
||||
shareid = arr[0]
|
||||
fileid = arr[1]
|
||||
sharedict.add(shareid+"/"+fileid)
|
||||
f.close()
|
||||
print(f"old raw file record:{len(sharedict)}")
|
||||
else:
|
||||
print("no old raw file")
|
||||
with(open(sys.argv[1]+".raw","a+",encoding="utf-8")) as w:
|
||||
with(open(sys.argv[1],"r",encoding="utf-8")) as f:
|
||||
j = json.load(f)
|
||||
for c in j:
|
||||
shareid=c.get("type_id")
|
||||
fileid=""
|
||||
m = p.match(shareid)
|
||||
if m:
|
||||
arr = m.group(1).split("/")
|
||||
else:
|
||||
arr = shareid.split("/")
|
||||
shareid=arr[0]
|
||||
fileid=arr[1] if len(arr)>1 else ""
|
||||
if shareid+"/"+fileid in sharedict:
|
||||
continue
|
||||
getlist(w,shareid,fileid,False)
|
||||
|
||||
main()
|
Loading…
x
Reference in New Issue
Block a user