mirror of
https://github.com/ls125781003/tvboxtg.git
synced 2025-10-27 03:46:21 +00:00
3.13
up
This commit is contained in:
@@ -20,7 +20,6 @@
|
||||
{"key":"csp_Wetv","name":"🚗尘落","type":3,"api":"csp_Wetv","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Jiaozi","name":"🥣饺子","type":3,"api":"csp_Jiaozi","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Fantuan","name":"🍙饭团","type":3,"api":"csp_Fantuan","searchable":1,"quickSearch":1,"filterable":1,"click":"document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();","ext":"https://www.fantuan.vip"},
|
||||
{"key":"csp_Lgyy","name":"✨️️流光","type":3,"api":"csp_Lgyy","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"可可","name":"☕️可可","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./sub/可可影视.json"},
|
||||
{"key":"csp_Ddys","name":"📺低端","type":3,"api":"csp_Ddys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Kuaikan","name":"👀快看","type":3,"api":"csp_Kuaikan","searchable":1,"quickSearch":1,"filterable":1},
|
||||
@@ -63,8 +62,8 @@
|
||||
{"key":"AList","name":"🅰AList","type":3,"api":"csp_AList","searchable":1,"changeable":0,"ext":"./sub/alist.json"},
|
||||
{"key":"网盘集合","name":"🅿网盘集合|4K","type":3,"api":"csp_网盘集合","searchable":1,"filterable":0,"switchable":0,"ext":{"commonConfig":"http://127.0.0.1:9978/file/TVBox/peizhi.json","share":"./sub/网盘集合.json"}},
|
||||
{"key":"Youtube","name":"⚡Youtube(墙外)","type":3,"api":"csp_Youtube","searchable":1,"changeable":1,"style":{"type":"rect","ratio":1.433},"ext":{"json":"./sub/youtube.json","cookie":"http://127.0.0.1:9978/file/TVBox/youtubecookie.json"}},
|
||||
{"key":"Tg | 豆瓣","name":"🅿Tg|豆瓣(墙外)","type":3,"api":"csp_TgYunDouBanPan","searchable":1,"changeable":0,"ext":{"siteUrl":"http://127.0.0.1:9999","count":4,"channelUsername":"ucpanpan,ydypzyfx,tianyi_pd2,hao115,guaguale115,longzbija,dianyingshare,XiangxiuNB,yunpanpan,kuakeyun,zaihuayun,Quark_Movies,alyp_4K_Movies,vip115hot,yunpanshare,ucwangpan,Quark_Share_Channel,Aliyundrive_Share_Channel,shareAliyun,ikiviyyp,wanwansubchat,wangpanziyuan2021,alyp_1,quanziyuanshe","commonConfig":"http://127.0.0.1:9978/file/TVBox/peizhi.json","filter":"./sub/douban.json"}},
|
||||
{"key":"TgYunPan|本地","name":"🅿TgYunPan|本地(墙外)","type":3,"api":"csp_TgYunPanLocal","searchable":1,"filterable":0,"switchable":0,"ext":{"count":4,"channelUsername":"ucpanpan,ydypzyfx,tianyi_pd2,hao115,guaguale115,longzbija,dianyingshare,XiangxiuNB,yunpanpan,kuakeyun,zaihuayun,Quark_Movies,alyp_4K_Movies,vip115hot,yunpanshare,ucwangpan,Quark_Share_Channel,Aliyundrive_Share_Channel,shareAliyun,ikiviyyp,wanwansubchat,wangpanziyuan2021,alyp_1,quanziyuanshe","commonConfig":"http://127.0.0.1:9978/file/TVBox/peizhi.json"}},
|
||||
{"key":"Tg | 豆瓣","name":"🅿Tg|豆瓣(墙外)","type":3,"api":"csp_TgYunDouBanPan","searchable":1,"changeable":0,"ext":{"siteUrl":"http://127.0.0.1:9999","count":4,"channelUsername":"xx123pan,Q66Share,alyp_TV,ucpanpan,ucquark,tianyirigeng,shares_115,oneonefivewpfx,cloud189_group,tianyi_pd2,hao115,guaguale115,yunpanchat,ydypzyfx,tgsearchers,zaihuayun,PanjClub,NewQuark,Mbox115,yunpanpan,kuakeyun,Quark_Movies,qixingzhenren,alyp_4K_Movies,yunpanshare,shareAliyun,alyp_1","commonConfig":"http://127.0.0.1:9978/file/TVBox/peizhi.json","filter":"./sub/douban.json"}},
|
||||
{"key":"TgYunPan|本地","name":"🅿TgYunPan|本地(墙外)","type":3,"api":"csp_TgYunPanLocal","searchable":1,"filterable":0,"switchable":0,"ext":{"count":4,"channelUsername":"xx123pan,Q66Share,alyp_TV,ucpanpan,ucquark,tianyirigeng,shares_115,oneonefivewpfx,cloud189_group,tianyi_pd2,hao115,guaguale115,yunpanchat,ydypzyfx,tgsearchers,zaihuayun,PanjClub,NewQuark,Mbox115,yunpanpan,kuakeyun,Quark_Movies,qixingzhenren,alyp_4K_Movies,yunpanshare,shareAliyun,alyp_1","commonConfig":"http://127.0.0.1:9978/file/TVBox/peizhi.json"}},
|
||||
{"key":"push_agent","name":"🐧裙:926953902","type":3,"api":"csp_Push","searchable":0,"quickSearch":0,"ext":{"commonConfig":"http://127.0.0.1:9978/file/TVBox/peizhi.json"}},
|
||||
|
||||
{"key":"虎牙","name":"🐯虎牙直播","type":3,"api":"https://raw.gitmirror.com/fantaiying7/EXT/refs/heads/main/drpy2.js","ext":"https://raw.gitmirror.com/fantaiying7/EXT/refs/heads/main/huya2.js","style":{"type":"rect","ratio":1.755},"playerType":"2","searchable":0,"quickSearch":0,"changeable":0},
|
||||
|
||||
@@ -121,94 +121,76 @@ https://tv.iill.top/migu/dds
|
||||
https://tv.iill.top/migu/mgty
|
||||
|
||||
#INSERT_HERE
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠二级」03:50 1/4决赛 布赖代合作 vs 大不里士拖拉机 王子睿
|
||||
https://tv.iill.top/FB/v3aHzQ
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠精英」03:50 八分之一决赛 吉达国民 vs 赖扬 鲁靖明
|
||||
https://tv.iill.top/FB/rLWhmX
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠精英」03:50 八分之一决赛 利雅得新月 vs 塔什干棉农 张昊泽
|
||||
https://tv.iill.top/FB/WbJMGp
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠精英」17:50 八分之一决赛 光州 vs 神户胜利船 周楚雄
|
||||
https://tv.iill.top/FB/1Tg3G3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠精英」17:45 八分之一决赛 川崎前锋 vs 上海申花 涂远 马延峰 孙蕊
|
||||
https://tv.iill.top/FB/kpUyUM
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠二级」19:50 1/4决赛 本国联队 vs 广岛三箭 盛斌
|
||||
https://tv.iill.top/FB/jeQNDY
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」06:55 常规赛 篮网VS骑士 孔德昕
|
||||
https://tv.iill.top/NBA/NVI12E
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」06:55 常规赛 奇才VS活塞 王凯
|
||||
https://tv.iill.top/NBA/SrC7FA
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:25 常规赛 雄鹿VS步行者 季孟年
|
||||
https://tv.iill.top/NBA/E0nHEy
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:45 常规赛 快船VS鹈鹕 王冠证 徐咏 王羽希
|
||||
https://tv.iill.top/NBA/CYEKc6
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTA」02:00 郑钦文2-0科斯秋克 斯瓦泰克轻松晋级 郑钦文2-0科斯秋克 斯瓦泰克轻松晋级 赛场原声
|
||||
https://tv.iill.top/Migu/cuQP6X
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠二级」01:50 1/4决赛 沙亚赫 vs 迪拜国民 乔迁
|
||||
https://tv.iill.top/FB/d0xoft
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠二级」15:50 1/4决赛 悉尼FC vs 全北现代 梁祥宇
|
||||
https://tv.iill.top/FB/B3aJsg
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:25 常规赛 黄蜂VS老鹰 周赫
|
||||
https://tv.iill.top/NBA/mlb20C
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:25 常规赛 雷霆VS凯尔特人 蔡凯臣
|
||||
https://tv.iill.top/NBA/jkm0S0
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:25 常规赛 76人VS猛龙 刘芳宇
|
||||
https://tv.iill.top/NBA/V8mfl1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:55 常规赛 快船VS热火 吴博文
|
||||
https://tv.iill.top/NBA/eS96Zf
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:55 常规赛 快船VS热火 大史
|
||||
https://tv.iill.top/NBA/Uqsdu4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:55 常规赛 爵士VS灰熊 张浩岳
|
||||
https://tv.iill.top/NBA/E0KVQM
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:55 常规赛 独行侠VS马刺 邵化谦
|
||||
https://tv.iill.top/NBA/iC5irY
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」07:55 常规赛 太阳VS火箭 连睿 周鹏
|
||||
https://tv.iill.top/NBA/DJWRJ8
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」09:55 常规赛 尼克斯VS开拓者 王冠证 殷文玉
|
||||
https://tv.iill.top/NBA/UKJza0
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」09:45 常规赛 森林狼VS掘金 杨健 李根 裴优
|
||||
https://tv.iill.top/NBA/Q7RJL6
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTA」02:00 萨巴伦卡2-0卡塔尔 保利尼爆冷出局 萨巴伦卡2-0卡塔尔 保利尼爆冷出局 赛场原声
|
||||
https://tv.iill.top/Migu/csRU5g
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」09:30 【训练馆视角】直击国乒赛前训练 【训练馆视角】直击国乒赛前训练 训练馆
|
||||
https://tv.iill.top/Migu/wc86sJ
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「中女超」14:50 中女超 武汉车谷江大女足VS北京东方雨虹女足 清流播出
|
||||
https://tv.iill.top/Migu/8HErNT
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英雄联盟全球先锋赛」15:30 CFO vs HLE CFO vs HLE 官方解说
|
||||
https://tv.iill.top/Migu/uh3Wov
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」16:40 上海RNG.M vs 情久 上海RNG.M vs 情久 官方解说
|
||||
https://tv.iill.top/Migu/wpeaX7
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英雄联盟全球先锋赛」17:45 KC vs TES KC vs TES 官方解说
|
||||
https://tv.iill.top/Migu/q0GDo4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」17:30 王曼昱迎战迪亚兹 莫雷加德VS格罗特 王曼昱迎战迪亚兹 莫雷加德VS格罗特 小马哥 周冠达
|
||||
https://tv.iill.top/Migu/b6cMDK
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」18:30 王曼昱迎战迪亚兹 莫雷加德VS格罗特 王曼昱迎战迪亚兹 莫雷加德VS格罗特 周雨
|
||||
https://tv.iill.top/Migu/4qYtIQ
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」11:00 王曼昱迎战迪亚兹 莫雷加德VS格罗特 王曼昱迎战迪亚兹 莫雷加德VS格罗特 赛场原声
|
||||
https://tv.iill.top/Migu/J1OaKJ
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」11:00 王曼昱迎战迪亚兹 莫雷加德VS格罗特 王曼昱迎战迪亚兹 莫雷加德VS格罗特 混采区
|
||||
https://tv.iill.top/Migu/QNhjPM
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」11:00 王曼昱迎战迪亚兹 莫雷加德VS格罗特 王曼昱迎战迪亚兹 莫雷加德VS格罗特 英文解说
|
||||
https://tv.iill.top/Migu/ERQniU
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」17:30 王曼昱迎战迪亚兹 莫雷加德VS格罗特 王曼昱迎战迪亚兹 莫雷加德VS格罗特 狂欢Yeah
|
||||
https://tv.iill.top/Migu/oG1Jwu
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 排位赛 北京首钢园 VS 黑龙江上东 解说
|
||||
https://tv.iill.top/Migu/xPHQMz
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 排位赛 石家庄英励 VS 河南豫光金铅 解说
|
||||
https://tv.iill.top/Migu/mWKK8C
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 排位赛 福建晋江众腾 VS 武汉盛帆黄鹤 解说
|
||||
https://tv.iill.top/Migu/yI8pXy
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 排位赛 浙江稠州银行 VS 陕西天泽 解说
|
||||
https://tv.iill.top/Migu/M26Tib
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 常规赛第39轮 上海久事vs浙江稠州金租 李天宇 张兆旭
|
||||
https://tv.iill.top/Migu/qP4kmR
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 上海久事vs浙江稠州金租 张俊卿
|
||||
https://tv.iill.top/Migu/BOPnf3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 上海久事vs浙江稠州金租 金哲豪
|
||||
https://tv.iill.top/Migu/Tr0SJW
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 上海久事vs浙江稠州金租 现场原声
|
||||
https://tv.iill.top/Migu/lzcoUz
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:00 常规赛第39轮 天津先行者vs广州朗肽海本 张浩岳
|
||||
https://tv.iill.top/Migu/vWffR7
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 天津先行者vs广州朗肽海本 现场原声
|
||||
https://tv.iill.top/Migu/DMIoit
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:00 常规赛第39轮 广东东阳光vs四川丰谷酒业 蔡凯臣
|
||||
https://tv.iill.top/Migu/qtGb9n
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 广东东阳光vs四川丰谷酒业 翻译小余
|
||||
https://tv.iill.top/Migu/DRjKhu
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 广东东阳光vs四川丰谷酒业 字诚
|
||||
https://tv.iill.top/Migu/nRgkvZ
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 广东东阳光vs四川丰谷酒业 3D全真视频
|
||||
https://tv.iill.top/Migu/bO5WOg
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 广东东阳光vs四川丰谷酒业 现场原声
|
||||
https://tv.iill.top/Migu/IJfVRL
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:00 常规赛第39轮 福建晋江文旅vs宁波町渥 吴博文
|
||||
https://tv.iill.top/Migu/EpLuTF
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 福建晋江文旅vs宁波町渥 现场原声
|
||||
https://tv.iill.top/Migu/vyD0a3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:15 常规赛第39轮 北京北汽vs青岛国信制药 连睿 李根
|
||||
https://tv.iill.top/Migu/nz0BbA
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 北京北汽vs青岛国信制药 现场原声
|
||||
https://tv.iill.top/Migu/btjkRQ
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:30 常规赛第39轮 新疆伊力特vs深圳马可波罗 刘圳展
|
||||
https://tv.iill.top/Migu/WSotuL
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:50 常规赛第39轮 新疆伊力特vs深圳马可波罗 现场原声
|
||||
https://tv.iill.top/Migu/OCe9FP
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」20:00 济南RW侠 vs 佛山DRG 济南RW侠 vs 佛山DRG 官方解说
|
||||
https://tv.iill.top/Migu/PLNMZL
|
||||
https://tv.iill.top/Migu/43XsEd
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英雄联盟全球先锋赛」15:30 TL vs CFO TL vs CFO 官方解说
|
||||
https://tv.iill.top/Migu/2OHakK
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」16:40 北京JDG vs 长沙TES.A 北京JDG vs 长沙TES.A 官方解说
|
||||
https://tv.iill.top/Migu/94g2Nn
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「英雄联盟全球先锋赛」18:00 KC vs HLE KC vs HLE 官方解说
|
||||
https://tv.iill.top/Migu/0iaou2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」17:30 莎莎冲击八强席位 林诗栋迎战安宰贤 莎莎冲击八强席位 林诗栋迎战安宰贤 周冠达 周泽昊
|
||||
https://tv.iill.top/Migu/C5no2o
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」18:30 莎莎冲击八强席位 林诗栋迎战安宰贤 莎莎冲击八强席位 林诗栋迎战安宰贤 周雨
|
||||
https://tv.iill.top/Migu/s3AjvA
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」11:00 莎莎冲击八强席位 林诗栋迎战安宰贤 莎莎冲击八强席位 林诗栋迎战安宰贤 混采区
|
||||
https://tv.iill.top/Migu/PLe63Q
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」11:00 莎莎冲击八强席位 林诗栋迎战安宰贤 莎莎冲击八强席位 林诗栋迎战安宰贤 赛场原声
|
||||
https://tv.iill.top/Migu/4lJ7we
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」11:00 莎莎冲击八强席位 林诗栋迎战安宰贤 莎莎冲击八强席位 林诗栋迎战安宰贤 英文解说
|
||||
https://tv.iill.top/Migu/li0tWT
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 1/4决赛 东莞新彤盛 VS 山东赤水河酒 解说
|
||||
https://tv.iill.top/Migu/yrihOF
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 1/4决赛 四川蜀道远达 VS 江苏南钢 解说
|
||||
https://tv.iill.top/Migu/07kPcB
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 1/4决赛 山西竹叶青酒 VS 上海浦发银行 解说
|
||||
https://tv.iill.top/Migu/tCcVom
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WCBA」19:20 1/4决赛 内蒙古农信 VS 新疆国达氢 解说
|
||||
https://tv.iill.top/Migu/DrUDfi
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:00 常规赛第39轮 江苏肯帝亚vs北京控股 庄宁宇 王润陶
|
||||
https://tv.iill.top/Migu/4yvTG1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 江苏肯帝亚vs北京控股 洪超
|
||||
https://tv.iill.top/Migu/vRzv2z
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 江苏肯帝亚vs北京控股 周赫
|
||||
https://tv.iill.top/Migu/X63yY9
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 江苏肯帝亚vs北京控股 现场原声
|
||||
https://tv.iill.top/Migu/JCXQ8N
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:00 常规赛第39轮 山东高速vs山西汾酒 孙博 焦健 丁伟
|
||||
https://tv.iill.top/Migu/CTJIhK
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 山东高速vs山西汾酒 王新通
|
||||
https://tv.iill.top/Migu/i65Rl8
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 山东高速vs山西汾酒 石楷文
|
||||
https://tv.iill.top/Migu/xdFbbp
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「CBA」19:25 常规赛第39轮 山东高速vs山西汾酒 现场原声
|
||||
https://tv.iill.top/Migu/a9QGsl
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」20:00 广州TTG vs 上海EDG.M 广州TTG vs 上海EDG.M 官方解说
|
||||
https://tv.iill.top/Migu/IlXsQn
|
||||
|
||||
#EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" tvg-logo="https://epg.iill.top/logo/凤凰中文.png" http-user-agent="FengWatch/5.4.14" group-title="•港澳「限制」",鳳凰衛視·中文「限UA」
|
||||
http://dns.yiandrive.com:15907/phenix/fhzw
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
10
欧歌/api.json
10
欧歌/api.json
@@ -4,9 +4,9 @@
|
||||
"spider": "./spider.jar",
|
||||
"lives": [
|
||||
{
|
||||
"name": "公众号【杰歌软件app】接口即将关闭,请勿演示贩卖",
|
||||
"name": "公众号【光歌软件分享】测试完请删除,请勿演示贩卖",
|
||||
"type": 0,
|
||||
"url": "./lives/公众号【杰歌软件app】接口即将关闭,请勿演示贩卖.txt",
|
||||
"url": "./lives/公众号【光歌软件分享】测试完请删除,请勿演示贩卖.txt",
|
||||
"epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}"
|
||||
},
|
||||
{
|
||||
@@ -31,20 +31,20 @@
|
||||
"sites": [
|
||||
{
|
||||
"key": "豆瓣2",
|
||||
"name": "📢公众号【杰歌软件app】接口即将关闭,请勿演示贩卖",
|
||||
"name": "📢公众号【光歌软件分享】测试完请删除,请勿演示贩卖",
|
||||
"type": 3,
|
||||
"api": "csp_Douban",
|
||||
"searchable": 0
|
||||
},
|
||||
{
|
||||
"key": "豆瓣1",
|
||||
"name": "📢公众号【杰歌软件app】接口即将关闭,请勿演示贩卖公告❤更新:3/11❤",
|
||||
"name": "📢公众号【光歌软件分享】测试完请删除,请勿演示贩卖公告❤更新:3/11❤",
|
||||
"type": 3,
|
||||
"api": "csp_Notice",
|
||||
"searchable": 0,
|
||||
"changeable": 0,
|
||||
"jar": "./jars/豆瓣1.jar",
|
||||
"ext": "https://nxog.top/%E5%85%AC%E4%BC%97%E5%8F%B7%E6%AC%A7%E6%AD%8CAPP/ts/?b=公众号【杰歌软件app】接口即将关闭,请勿演示贩卖"
|
||||
"ext": "https://nxog.top/%E5%85%AC%E4%BC%97%E5%8F%B7%E6%AC%A7%E6%AD%8CAPP/ts/?b=公众号【光歌软件分享】测试完请删除,请勿演示贩卖"
|
||||
},
|
||||
{
|
||||
"key": "欧歌弹幕",
|
||||
|
||||
68
欧歌/api/gbk.js
Normal file
68
欧歌/api/gbk.js
Normal file
File diff suppressed because one or more lines are too long
577
欧歌/api/jinja.js
Normal file
577
欧歌/api/jinja.js
Normal file
@@ -0,0 +1,577 @@
|
||||
/*!
|
||||
* Jinja Templating for JavaScript v0.1.8
|
||||
* https://github.com/sstur/jinja-js
|
||||
*
|
||||
* This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
|
||||
*
|
||||
* In the interest of simplicity, it deviates from Jinja2 as follows:
|
||||
* - Line statements, cycle, super, macro tags and block nesting are not implemented
|
||||
* - auto escapes html by default (the filter is "html" not "e")
|
||||
* - Only "html" and "safe" filters are built in
|
||||
* - Filters are not valid in expressions; `foo|length > 1` is not valid
|
||||
* - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
|
||||
*
|
||||
* Notes:
|
||||
* - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
|
||||
* - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
|
||||
* - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
|
||||
* - `.2` is not a valid number literal; use `0.2`
|
||||
*
|
||||
*/
|
||||
/*global require, exports, module, define */
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
|
||||
})(this, (function (jinja) {
|
||||
"use strict";
|
||||
var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
|
||||
var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
|
||||
var NUMBER = /^[+-]?\d+(\.\d+)?$/;
|
||||
//non-primitive literals (array and object literals)
|
||||
var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
|
||||
//bare identifiers such as variables and in object literals: {foo: 'value'}
|
||||
var IDENTIFIERS = /[$_a-z][$\w]*/ig;
|
||||
var VARIABLES = /i(\.i|\[[@#i]\])*/g;
|
||||
var ACCESSOR = /(\.i|\[[@#i]\])/g;
|
||||
var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
|
||||
//extended (english) operators
|
||||
var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
|
||||
var LEADING_SPACE = /^\s+/;
|
||||
var TRAILING_SPACE = /\s+$/;
|
||||
|
||||
var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
|
||||
var TAGS = {
|
||||
'{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
|
||||
'{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
|
||||
'{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
|
||||
'{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
|
||||
};
|
||||
|
||||
var delimeters = {
|
||||
'{%': 'directive',
|
||||
'{{': 'output',
|
||||
'{#': 'comment'
|
||||
};
|
||||
|
||||
var operators = {
|
||||
and: '&&',
|
||||
or: '||',
|
||||
not: '!',
|
||||
is: '==',
|
||||
isnot: '!='
|
||||
};
|
||||
|
||||
var constants = {
|
||||
'true': true,
|
||||
'false': false,
|
||||
'null': null
|
||||
};
|
||||
|
||||
function Parser() {
|
||||
this.nest = [];
|
||||
this.compiled = [];
|
||||
this.childBlocks = 0;
|
||||
this.parentBlocks = 0;
|
||||
this.isSilent = false;
|
||||
}
|
||||
|
||||
Parser.prototype.push = function (line) {
|
||||
if (!this.isSilent) {
|
||||
this.compiled.push(line);
|
||||
}
|
||||
};
|
||||
|
||||
Parser.prototype.parse = function (src) {
|
||||
this.tokenize(src);
|
||||
return this.compiled;
|
||||
};
|
||||
|
||||
Parser.prototype.tokenize = function (src) {
|
||||
var lastEnd = 0, parser = this, trimLeading = false;
|
||||
matchAll(src, START_TOKEN, function (open, index, src) {
|
||||
//here we match the rest of the src against a regex for this tag
|
||||
var match = src.slice(index + open.length).match(TAGS[open]);
|
||||
match = (match ? match[0] : '');
|
||||
//here we sub out strings so we don't get false matches
|
||||
var simplified = match.replace(STRINGS, '@');
|
||||
//if we don't have a close tag or there is a nested open tag
|
||||
if (!match || ~simplified.indexOf(open)) {
|
||||
return index + 1;
|
||||
}
|
||||
var inner = match.slice(0, 0 - open.length);
|
||||
//check for white-space collapse syntax
|
||||
if (inner.charAt(0) === '-') var wsCollapseLeft = true;
|
||||
if (inner.slice(-1) === '-') var wsCollapseRight = true;
|
||||
inner = inner.replace(/^-|-$/g, '').trim();
|
||||
//if we're in raw mode and we are not looking at an "endraw" tag, move along
|
||||
if (parser.rawMode && (open + inner) !== '{%endraw') {
|
||||
return index + 1;
|
||||
}
|
||||
var text = src.slice(lastEnd, index);
|
||||
lastEnd = index + open.length + match.length;
|
||||
if (trimLeading) text = trimLeft(text);
|
||||
if (wsCollapseLeft) text = trimRight(text);
|
||||
if (wsCollapseRight) trimLeading = true;
|
||||
if (open === '{{{') {
|
||||
//liquid-style: make {{{x}}} => {{x|safe}}
|
||||
open = '{{';
|
||||
inner += '|safe';
|
||||
}
|
||||
parser.textHandler(text);
|
||||
parser.tokenHandler(open, inner);
|
||||
});
|
||||
var text = src.slice(lastEnd);
|
||||
if (trimLeading) text = trimLeft(text);
|
||||
this.textHandler(text);
|
||||
};
|
||||
|
||||
Parser.prototype.textHandler = function (text) {
|
||||
this.push('write(' + JSON.stringify(text) + ');');
|
||||
};
|
||||
|
||||
Parser.prototype.tokenHandler = function (open, inner) {
|
||||
var type = delimeters[open];
|
||||
if (type === 'directive') {
|
||||
this.compileTag(inner);
|
||||
} else if (type === 'output') {
|
||||
var extracted = this.extractEnt(inner, STRINGS, '@');
|
||||
//replace || operators with ~
|
||||
extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
|
||||
//put back || operators
|
||||
extracted.src = extracted.src.map(function (part) {
|
||||
return part.split('~').join('||');
|
||||
});
|
||||
var parts = this.injectEnt(extracted, '@');
|
||||
if (parts.length > 1) {
|
||||
var filters = parts.slice(1).map(this.parseFilter.bind(this));
|
||||
this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
|
||||
} else {
|
||||
this.push('filter(' + this.parseExpr(parts[0]) + ');');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Parser.prototype.compileTag = function (str) {
|
||||
var directive = str.split(' ')[0];
|
||||
var handler = tagHandlers[directive];
|
||||
if (!handler) {
|
||||
throw new Error('Invalid tag: ' + str);
|
||||
}
|
||||
handler.call(this, str.slice(directive.length).trim());
|
||||
};
|
||||
|
||||
Parser.prototype.parseFilter = function (src) {
|
||||
src = src.trim();
|
||||
var match = src.match(/[:(]/);
|
||||
var i = match ? match.index : -1;
|
||||
if (i < 0) return JSON.stringify([src]);
|
||||
var name = src.slice(0, i);
|
||||
var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
|
||||
args = this.parseExpr(args, {terms: true});
|
||||
return '[' + JSON.stringify(name) + ',' + args + ']';
|
||||
};
|
||||
|
||||
Parser.prototype.extractEnt = function (src, regex, placeholder) {
|
||||
var subs = [], isFunc = typeof placeholder == 'function';
|
||||
src = src.replace(regex, function (str) {
|
||||
var replacement = isFunc ? placeholder(str) : placeholder;
|
||||
if (replacement) {
|
||||
subs.push(str);
|
||||
return replacement;
|
||||
}
|
||||
return str;
|
||||
});
|
||||
return {src: src, subs: subs};
|
||||
};
|
||||
|
||||
Parser.prototype.injectEnt = function (extracted, placeholder) {
|
||||
var src = extracted.src, subs = extracted.subs, isArr = Array.isArray(src);
|
||||
var arr = (isArr) ? src : [src];
|
||||
var re = new RegExp('[' + placeholder + ']', 'g'), i = 0;
|
||||
arr.forEach(function (src, index) {
|
||||
arr[index] = src.replace(re, function () {
|
||||
return subs[i++];
|
||||
});
|
||||
});
|
||||
return isArr ? arr : arr[0];
|
||||
};
|
||||
|
||||
//replace complex literals without mistaking subscript notation with array literals
|
||||
Parser.prototype.replaceComplex = function (s) {
|
||||
var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
|
||||
parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
|
||||
return this.injectEnt(parsed, 'v');
|
||||
};
|
||||
|
||||
//parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
|
||||
//valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
|
||||
Parser.prototype.parseExpr = function (src, opts) {
|
||||
opts = opts || {};
|
||||
//extract string literals -> @
|
||||
var parsed1 = this.extractEnt(src, STRINGS, '@');
|
||||
//note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
|
||||
parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) {
|
||||
return (op in operators) ? before + operators[op] + after : s;
|
||||
});
|
||||
//sub out non-string literals (numbers/true/false/null) -> #
|
||||
// the distinction is necessary because @ can be object identifiers, # cannot
|
||||
var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) {
|
||||
return (s in constants || NUMBER.test(s)) ? '#' : null;
|
||||
});
|
||||
//sub out object/variable identifiers -> i
|
||||
var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
|
||||
//remove white-space
|
||||
parsed3.src = parsed3.src.replace(/\s+/g, '');
|
||||
|
||||
//the rest of this is simply to boil the expression down and check validity
|
||||
var simplified = parsed3.src;
|
||||
//sub out complex literals (objects/arrays) -> ~
|
||||
// the distinction is necessary because @ and # can be subscripts but ~ cannot
|
||||
while (simplified !== (simplified = this.replaceComplex(simplified))) ;
|
||||
//now @ represents strings, # represents other primitives and ~ represents non-primitives
|
||||
//replace complex variables (those with dot/subscript accessors) -> v
|
||||
while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ;
|
||||
//empty subscript or complex variables in subscript, are not permitted
|
||||
simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
|
||||
//sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
|
||||
simplified = simplified.replace(/[@#~v]/g, 'i');
|
||||
//sub out operators
|
||||
simplified = simplified.replace(OPERATORS, '%');
|
||||
//allow 'not' unary operator
|
||||
simplified = simplified.replace(/!+[i]/g, 'i');
|
||||
var terms = opts.terms ? simplified.split(',') : [simplified];
|
||||
terms.forEach(function (term) {
|
||||
//simplify logical grouping
|
||||
while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i'))) ;
|
||||
if (!term.match(/^i(%i)*/)) {
|
||||
throw new Error('Invalid expression: ' + src + " " + term);
|
||||
}
|
||||
});
|
||||
parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
|
||||
parsed2.src = this.injectEnt(parsed3, 'i');
|
||||
parsed1.src = this.injectEnt(parsed2, '#');
|
||||
return this.injectEnt(parsed1, '@');
|
||||
};
|
||||
|
||||
Parser.prototype.parseVar = function (src) {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
var str = args.pop(), index = args.pop();
|
||||
//quote bare object identifiers (might be a reserved word like {while: 1})
|
||||
if (src === 'i' && str.charAt(index + 1) === ':') {
|
||||
return '"i"';
|
||||
}
|
||||
var parts = ['"i"'];
|
||||
src.replace(ACCESSOR, function (part) {
|
||||
if (part === '.i') {
|
||||
parts.push('"i"');
|
||||
} else if (part === '[i]') {
|
||||
parts.push('get("i")');
|
||||
} else {
|
||||
parts.push(part.slice(1, -1));
|
||||
}
|
||||
});
|
||||
return 'get(' + parts.join(',') + ')';
|
||||
};
|
||||
|
||||
//escapes a name to be used as a javascript identifier
|
||||
Parser.prototype.escName = function (str) {
|
||||
return str.replace(/\W/g, function (s) {
|
||||
return '$' + s.charCodeAt(0).toString(16);
|
||||
});
|
||||
};
|
||||
|
||||
Parser.prototype.parseQuoted = function (str) {
|
||||
if (str.charAt(0) === "'") {
|
||||
str = str.slice(1, -1).replace(/\\.|"/, function (s) {
|
||||
if (s === "\\'") return "'";
|
||||
return s.charAt(0) === '\\' ? s : ('\\' + s);
|
||||
});
|
||||
str = '"' + str + '"';
|
||||
}
|
||||
//todo: try/catch or deal with invalid characters (linebreaks, control characters)
|
||||
return JSON.parse(str);
|
||||
};
|
||||
|
||||
|
||||
//the context 'this' inside tagHandlers is the parser instance
|
||||
var tagHandlers = {
|
||||
'if': function (expr) {
|
||||
this.push('if (' + this.parseExpr(expr) + ') {');
|
||||
this.nest.unshift('if');
|
||||
},
|
||||
'else': function () {
|
||||
if (this.nest[0] === 'for') {
|
||||
this.push('}, function() {');
|
||||
} else {
|
||||
this.push('} else {');
|
||||
}
|
||||
},
|
||||
'elseif': function (expr) {
|
||||
this.push('} else if (' + this.parseExpr(expr) + ') {');
|
||||
},
|
||||
'endif': function () {
|
||||
this.nest.shift();
|
||||
this.push('}');
|
||||
},
|
||||
'for': function (str) {
|
||||
var i = str.indexOf(' in ');
|
||||
var name = str.slice(0, i).trim();
|
||||
var expr = str.slice(i + 4).trim();
|
||||
this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
|
||||
this.nest.unshift('for');
|
||||
},
|
||||
'endfor': function () {
|
||||
this.nest.shift();
|
||||
this.push('});');
|
||||
},
|
||||
'raw': function () {
|
||||
this.rawMode = true;
|
||||
},
|
||||
'endraw': function () {
|
||||
this.rawMode = false;
|
||||
},
|
||||
'set': function (stmt) {
|
||||
var i = stmt.indexOf('=');
|
||||
var name = stmt.slice(0, i).trim();
|
||||
var expr = stmt.slice(i + 1).trim();
|
||||
this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
|
||||
},
|
||||
'block': function (name) {
|
||||
if (this.isParent) {
|
||||
++this.parentBlocks;
|
||||
var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
|
||||
this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
|
||||
} else if (this.hasParent) {
|
||||
this.isSilent = false;
|
||||
++this.childBlocks;
|
||||
blockName = 'block_' + (this.escName(name) || this.childBlocks);
|
||||
this.push('function ' + blockName + '() {');
|
||||
}
|
||||
this.nest.unshift('block');
|
||||
},
|
||||
'endblock': function () {
|
||||
this.nest.shift();
|
||||
if (this.isParent) {
|
||||
this.push('});');
|
||||
} else if (this.hasParent) {
|
||||
this.push('}');
|
||||
this.isSilent = true;
|
||||
}
|
||||
},
|
||||
'extends': function (name) {
|
||||
name = this.parseQuoted(name);
|
||||
var parentSrc = this.readTemplateFile(name);
|
||||
this.isParent = true;
|
||||
this.tokenize(parentSrc);
|
||||
this.isParent = false;
|
||||
this.hasParent = true;
|
||||
//silence output until we enter a child block
|
||||
this.isSilent = true;
|
||||
},
|
||||
'include': function (name) {
|
||||
name = this.parseQuoted(name);
|
||||
var incSrc = this.readTemplateFile(name);
|
||||
this.isInclude = true;
|
||||
this.tokenize(incSrc);
|
||||
this.isInclude = false;
|
||||
}
|
||||
};
|
||||
|
||||
//liquid style
|
||||
tagHandlers.assign = tagHandlers.set;
|
||||
//python/django style
|
||||
tagHandlers.elif = tagHandlers.elseif;
|
||||
|
||||
var getRuntime = function runtime(data, opts) {
|
||||
var defaults = {autoEscape: 'toJson'};
|
||||
var _toString = Object.prototype.toString;
|
||||
var _hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
var getKeys = Object.keys || function (obj) {
|
||||
var keys = [];
|
||||
for (var n in obj) if (_hasOwnProperty.call(obj, n)) keys.push(n);
|
||||
return keys;
|
||||
};
|
||||
var isArray = Array.isArray || function (obj) {
|
||||
return _toString.call(obj) === '[object Array]';
|
||||
};
|
||||
var create = Object.create || function (obj) {
|
||||
function F() {
|
||||
}
|
||||
|
||||
F.prototype = obj;
|
||||
return new F();
|
||||
};
|
||||
var toString = function (val) {
|
||||
if (val == null) return '';
|
||||
return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
|
||||
};
|
||||
var extend = function (dest, src) {
|
||||
var keys = getKeys(src);
|
||||
for (var i = 0, len = keys.length; i < len; i++) {
|
||||
var key = keys[i];
|
||||
dest[key] = src[key];
|
||||
}
|
||||
return dest;
|
||||
};
|
||||
//get a value, lexically, starting in current context; a.b -> get("a","b")
|
||||
var get = function () {
|
||||
var val, n = arguments[0], c = stack.length;
|
||||
while (c--) {
|
||||
val = stack[c][n];
|
||||
if (typeof val != 'undefined') break;
|
||||
}
|
||||
for (var i = 1, len = arguments.length; i < len; i++) {
|
||||
if (val == null) continue;
|
||||
n = arguments[i];
|
||||
val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
|
||||
}
|
||||
return (val == null) ? '' : val;
|
||||
};
|
||||
var set = function (n, val) {
|
||||
stack[stack.length - 1][n] = val;
|
||||
};
|
||||
var push = function (ctx) {
|
||||
stack.push(ctx || {});
|
||||
};
|
||||
var pop = function () {
|
||||
stack.pop();
|
||||
};
|
||||
var write = function (str) {
|
||||
output.push(str);
|
||||
};
|
||||
var filter = function (val) {
|
||||
for (var i = 1, len = arguments.length; i < len; i++) {
|
||||
var arr = arguments[i], name = arr[0], filter = filters[name];
|
||||
if (filter) {
|
||||
arr[0] = val;
|
||||
//now arr looks like [val, arg1, arg2]
|
||||
val = filter.apply(data, arr);
|
||||
} else {
|
||||
throw new Error('Invalid filter: ' + name);
|
||||
}
|
||||
}
|
||||
if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
|
||||
//auto escape if not explicitly safe or already escaped
|
||||
val = filters[opts.autoEscape].call(data, val);
|
||||
}
|
||||
output.push(val);
|
||||
};
|
||||
var each = function (obj, loopvar, fn1, fn2) {
|
||||
if (obj == null) return;
|
||||
var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length;
|
||||
var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}};
|
||||
push(ctx);
|
||||
for (var i = 0; i < len; i++) {
|
||||
extend(ctx.loop, {index: i + 1, index0: i});
|
||||
fn1(ctx[loopvar] = arr[i]);
|
||||
}
|
||||
if (len === 0 && fn2) fn2();
|
||||
pop();
|
||||
};
|
||||
var block = function (fn) {
|
||||
push();
|
||||
fn();
|
||||
pop();
|
||||
};
|
||||
var render = function () {
|
||||
return output.join('');
|
||||
};
|
||||
data = data || {};
|
||||
opts = extend(defaults, opts || {});
|
||||
var filters = extend({
|
||||
html: function (val) {
|
||||
return toString(val)
|
||||
.split('&').join('&')
|
||||
.split('<').join('<')
|
||||
.split('>').join('>')
|
||||
.split('"').join('"');
|
||||
},
|
||||
safe: function (val) {
|
||||
return val;
|
||||
},
|
||||
toJson: function (val) {
|
||||
if (typeof val === 'object') {
|
||||
return JSON.stringify(val);
|
||||
}
|
||||
return toString(val);
|
||||
}
|
||||
}, opts.filters || {});
|
||||
var stack = [create(data || {})], output = [];
|
||||
return {
|
||||
get: get,
|
||||
set: set,
|
||||
push: push,
|
||||
pop: pop,
|
||||
write: write,
|
||||
filter: filter,
|
||||
each: each,
|
||||
block: block,
|
||||
render: render
|
||||
};
|
||||
};
|
||||
|
||||
var runtime;
|
||||
|
||||
jinja.compile = function (markup, opts) {
|
||||
opts = opts || {};
|
||||
var parser = new Parser();
|
||||
parser.readTemplateFile = this.readTemplateFile;
|
||||
var code = [];
|
||||
code.push('function render($) {');
|
||||
code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
|
||||
code.push.apply(code, parser.parse(markup));
|
||||
code.push('return $.render();');
|
||||
code.push('}');
|
||||
code = code.join('\n');
|
||||
if (opts.runtime === false) {
|
||||
var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
|
||||
} else {
|
||||
runtime = runtime || (runtime = getRuntime.toString());
|
||||
fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
|
||||
}
|
||||
return {render: fn};
|
||||
};
|
||||
|
||||
jinja.render = function (markup, data, opts) {
|
||||
var tmpl = jinja.compile(markup);
|
||||
return tmpl.render(data, opts);
|
||||
};
|
||||
|
||||
jinja.templateFiles = [];
|
||||
|
||||
jinja.readTemplateFile = function (name) {
|
||||
var templateFiles = this.templateFiles || [];
|
||||
var templateFile = templateFiles[name];
|
||||
if (templateFile == null) {
|
||||
throw new Error('Template file not found: ' + name);
|
||||
}
|
||||
return templateFile;
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
* Helpers
|
||||
*/
|
||||
|
||||
function trimLeft(str) {
|
||||
return str.replace(LEADING_SPACE, '');
|
||||
}
|
||||
|
||||
function trimRight(str) {
|
||||
return str.replace(TRAILING_SPACE, '');
|
||||
}
|
||||
|
||||
function matchAll(str, reg, fn) {
|
||||
//copy as global
|
||||
reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
|
||||
var match;
|
||||
while ((match = reg.exec(str))) {
|
||||
var result = fn(match[0], match.index, str);
|
||||
if (typeof result == 'number') {
|
||||
reg.lastIndex = result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}));
|
||||
265
欧歌/api/jsencrypt.js
Normal file
265
欧歌/api/jsencrypt.js
Normal file
File diff suppressed because one or more lines are too long
1737
欧歌/api/json5.js
Normal file
1737
欧歌/api/json5.js
Normal file
File diff suppressed because one or more lines are too long
2
欧歌/api/node-rsa.js
Normal file
2
欧歌/api/node-rsa.js
Normal file
File diff suppressed because one or more lines are too long
2
欧歌/api/pako.min.js
vendored
Normal file
2
欧歌/api/pako.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
412
欧歌/api/模板.js
Normal file
412
欧歌/api/模板.js
Normal file
@@ -0,0 +1,412 @@
|
||||
if (typeof Object.assign !== 'function') {
|
||||
Object.assign = function () {
|
||||
let target = arguments[0];
|
||||
for (let i = 1; i < arguments.length; i++) {
|
||||
let source = arguments[i];
|
||||
for (let key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
}
|
||||
|
||||
// 通用免嗅探播放
|
||||
let common_lazy = `js:
|
||||
let html = request(input);
|
||||
let hconf = html.match(/r player_.*?=(.*?)</)[1];
|
||||
let json = JSON5.parse(hconf);
|
||||
let url = json.url;
|
||||
if (json.encrypt == '1') {
|
||||
url = unescape(url);
|
||||
} else if (json.encrypt == '2') {
|
||||
url = unescape(base64Decode(url));
|
||||
}
|
||||
if (/\\.(m3u8|mp4|m4a|mp3)/.test(url)) {
|
||||
input = {
|
||||
parse: 0,
|
||||
jx: 0,
|
||||
url: url,
|
||||
};
|
||||
} else {
|
||||
input;
|
||||
}`;
|
||||
// 默认嗅探播放
|
||||
|
||||
let def_lazy = `js:
|
||||
input = { parse: 1, url: input, js: '' };`;
|
||||
// 采集站播放
|
||||
|
||||
let cj_lazy = `js:
|
||||
if (/\\.(m3u8|mp4)/.test(input)) {
|
||||
input = { parse: 0, url: input };
|
||||
} else {
|
||||
if (rule.parse_url.startsWith('json:')) {
|
||||
let purl = rule.parse_url.replace('json:', '') + input;
|
||||
let html = request(purl);
|
||||
let json = JSON.parse(html);
|
||||
if (json.url) {
|
||||
input = { parse: 0, url: json.url };
|
||||
}
|
||||
} else {
|
||||
input = rule.parse_url + input;
|
||||
}
|
||||
}`;
|
||||
|
||||
function getMubans() {
|
||||
const mubanDict = { // 模板字典
|
||||
mx: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/vodshow/fyclass--------fypage---/',
|
||||
searchUrl: '/vodsearch/**----------fypage---/',
|
||||
class_parse: '.top_nav li;a&&Text;a&&href;.*/(.*?)/',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
filterable: 0,
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true,
|
||||
推荐: '.cbox_list;*;*;*;*;*',
|
||||
一级: 'ul.vodlist li;a&&title;a&&data-original;.pic_text&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h2&&Text;.content_detail:eq(1)&&li&&a:eq(2)&&Text',
|
||||
img: '.vodlist_thumb&&data-original',
|
||||
desc: '.content_detail:eq(1)&&li:eq(1)&&Text;.content_detail:eq(1)&&li&&a&&Text;.content_detail:eq(1)&&li&&a:eq(1)&&Text;.content_detail:eq(1)&&li:eq(2)&&Text;.content_detail:eq(1)&&li:eq(3)&&Text',
|
||||
content: '.content_desc&&span&&Text',
|
||||
tabs: '.play_source_tab&&a',
|
||||
lists: '.content_playlist:eq(#id) li',
|
||||
},
|
||||
搜索: '*',
|
||||
},
|
||||
mxpro: {
|
||||
title: '',
|
||||
host: '', // homeUrl:'/',
|
||||
url: '/vodshow/fyclass--------fypage---.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.navbar-items li:gt(0):lt(10);a&&Text;a&&href;/(\\d+)',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h1&&Text;.module-info-tag-link:eq(-1)&&Text',
|
||||
img: '.lazyload&&data-original||data-src||src',
|
||||
desc: '.module-info-item:eq(-2)&&Text;.module-info-tag-link&&Text;.module-info-tag-link:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(1)&&Text',
|
||||
content: '.module-info-introduction&&Text',
|
||||
tabs: '.module-tab-item',
|
||||
lists: '.module-play-list:eq(#id) a',
|
||||
tab_text: 'div--small&&Text',
|
||||
},
|
||||
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
||||
}, mxone5: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/show/fyclass--------fypage---.html',
|
||||
searchUrl: '/search/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?)\.html',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h1&&Text;.tag-link&&Text',
|
||||
img: '.module-item-pic&&img&&data-src',
|
||||
desc: '.video-info-items:eq(3)&&Text;.tag-link:eq(2)&&Text;.tag-link:eq(1)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text',
|
||||
content: '.vod_content&&Text',
|
||||
tabs: '.module-tab-item',
|
||||
lists: '.module-player-list:eq(#id)&&.scroll-content&&a',
|
||||
tab_text: 'div--small&&Text',
|
||||
},
|
||||
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||
}, 首图: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/vodshow/fyclass--------fypage---/',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
二级: {
|
||||
title: '.myui-content__detail .title--span&&Text;.myui-content__detail p.data:eq(3)&&Text',
|
||||
img: '.myui-content__thumb .lazyload&&data-original',
|
||||
desc: '.myui-content__detail p.otherbox&&Text;.year&&Text;.myui-content__detail p.data:eq(4)&&Text;.myui-content__detail p.data:eq(2)&&Text;.myui-content__detail p.data:eq(0)&&Text',
|
||||
content: '.content&&Text',
|
||||
tabs: '.myui-panel__head&&li',
|
||||
// tabs: '.nav-tabs&&li',
|
||||
lists: '.myui-content__list:eq(#id) li',
|
||||
},
|
||||
搜索: '#searchList li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href;.detail&&Text',
|
||||
}, 首图2: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/list/fyclass-fypage.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'UC_UA', // "Cookie": ""
|
||||
},
|
||||
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
二级: {
|
||||
title: '.stui-content__detail .title&&Text;.stui-content__detail&&p:eq(-2)&&a&&Text',
|
||||
title1: '.stui-content__detail .title&&Text;.stui-content__detail&&p&&Text',
|
||||
img: '.stui-content__thumb .lazyload&&data-original',
|
||||
desc: '.stui-content__detail p&&Text;.stui-content__detail&&p:eq(-2)&&a:eq(2)&&Text;.stui-content__detail&&p:eq(-2)&&a:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text;.stui-content__detail p:eq(1)&&Text',
|
||||
desc1: '.stui-content__detail p:eq(4)&&Text;;;.stui-content__detail p:eq(1)&&Text',
|
||||
content: '.detail&&Text',
|
||||
tabs: '.stui-pannel__head h3',
|
||||
tabs1: '.stui-vodlist__head h3',
|
||||
lists: '.stui-content__playlist:eq(#id) li',
|
||||
},
|
||||
搜索: 'ul.stui-vodlist__media,ul.stui-vodlist,#searchList li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href;.detail&&Text',
|
||||
}, 默认: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '',
|
||||
searchUrl: '',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
filterable: 0,
|
||||
filter: '',
|
||||
filter_url: '',
|
||||
filter_def: {},
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: '#side-menu li;a&&Text;a&&href;/(.*?)\.html',
|
||||
cate_exclude: '',
|
||||
play_parse: true,
|
||||
lazy: def_lazy,
|
||||
double: true,
|
||||
推荐: '列表1;列表2;标题;图片;描述;链接;详情',
|
||||
一级: '列表;标题;图片;描述;链接;详情',
|
||||
二级: {
|
||||
title: 'vod_name;vod_type',
|
||||
img: '图片链接',
|
||||
desc: '主要信息;年代;地区;演员;导演',
|
||||
content: '简介',
|
||||
tabs: '',
|
||||
lists: 'xx:eq(#id)&&a',
|
||||
tab_text: 'body&&Text',
|
||||
list_text: 'body&&Text',
|
||||
list_url: 'a&&href',
|
||||
},
|
||||
搜索: '列表;标题;图片;描述;链接;详情',
|
||||
}, vfed: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'UC_UA',
|
||||
},
|
||||
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text',
|
||||
img: '.fed-list-info&&a&&data-original',
|
||||
desc: '.fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text',
|
||||
content: '.fed-part-esan&&Text',
|
||||
tabs: '.fed-drop-boxs&&.fed-part-rows&&li',
|
||||
lists: '.fed-play-item:eq(#id)&&ul:eq(1)&&li',
|
||||
},
|
||||
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
||||
}, 海螺3: {
|
||||
title: '',
|
||||
host: '',
|
||||
searchUrl: '/v_search/**----------fypage---.html',
|
||||
url: '/vod_____show/fyclass--------fypage---.html',
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
||||
cate_exclude: '明星|专题|最新|排行',
|
||||
limit: 40,
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
double: true,
|
||||
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
二级: {
|
||||
title: '.hl-dc-title&&Text;.hl-dc-content&&li:eq(6)&&Text',
|
||||
img: '.hl-lazy&&data-original',
|
||||
desc: '.hl-dc-content&&li:eq(10)&&Text;.hl-dc-content&&li:eq(4)&&Text;.hl-dc-content&&li:eq(5)&&Text;.hl-dc-content&&li:eq(2)&&Text;.hl-dc-content&&li:eq(3)&&Text',
|
||||
content: '.hl-content-text&&Text',
|
||||
tabs: '.hl-tabs&&a',
|
||||
tab_text: 'a--span&&Text',
|
||||
lists: '.hl-plays-list:eq(#id)&&li',
|
||||
},
|
||||
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
}, 海螺2: {
|
||||
title: '',
|
||||
host: '',
|
||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
||||
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
||||
limit: 40,
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
double: true,
|
||||
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
||||
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h2&&Text;.deployment&&Text',
|
||||
img: '.lazy&&data-original',
|
||||
desc: '.deployment&&Text',
|
||||
content: '.ec-show&&Text',
|
||||
tabs: '#tag&&a',
|
||||
lists: '.play_list_box:eq(#id)&&li',
|
||||
},
|
||||
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
}, 短视: {
|
||||
title: '',
|
||||
host: '', // homeUrl:'/',
|
||||
url: '/channel/fyclass-fypage.html',
|
||||
searchUrl: '/search.html?wd=**',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA', // "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
||||
cate_exclude: '解析|动态',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h1&&Text;.content-rt&&p:eq(0)&&Text',
|
||||
img: '.img&&img&&data-src',
|
||||
desc: '.content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text',
|
||||
content: '.zkjj_a&&Text',
|
||||
tabs: '.py-tabs&&option',
|
||||
lists: '.player:eq(#id) li',
|
||||
},
|
||||
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
||||
}, 短视2: {
|
||||
title: '',
|
||||
host: '',
|
||||
class_name: '电影&电视剧&综艺&动漫',
|
||||
class_url: '1&2&3&4',
|
||||
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
headers: {'User-Agent': 'MOBILE_UA'},
|
||||
url: '/index.php/api/vod#type=fyclass&page=fypage',
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
filter_url: '',
|
||||
filter: {},
|
||||
filter_def: {},
|
||||
detailUrl: '/index.php/vod/detail/id/fyid.html',
|
||||
play_parse: true,
|
||||
lazy: common_lazy,
|
||||
limit: 6,
|
||||
推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
|
||||
一级: 'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list.map(function(it){it.vod_pic=urljoin2(input.split("/i")[0],it.vod_pic);return it});',
|
||||
二级: {
|
||||
title: '.slide-info-title&&Text;.slide-info:eq(2)--strong&&Text',
|
||||
img: '.detail-pic&&data-original',
|
||||
desc: '.slide-info-remarks&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(1)--strong&&Text;.info-parameter&&ul&&li:eq(3)&&Text',
|
||||
content: '#height_limit&&Text',
|
||||
tabs: '.anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a',
|
||||
tab_text: 'a--span&&Text',
|
||||
lists: '.anthology-list-box:eq(#id) li',
|
||||
},
|
||||
搜索: 'json:list;name;pic;;id',
|
||||
}, 采集1: {
|
||||
title: '',
|
||||
host: '',
|
||||
homeTid: '13',
|
||||
homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
|
||||
detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
|
||||
searchUrl: '/api.php/provide/vod/?wd=**&pg=fypage',
|
||||
url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyclass',
|
||||
headers: {'User-Agent': 'MOBILE_UA'},
|
||||
timeout: 5000, // class_name: '电影&电视剧&综艺&动漫',
|
||||
// class_url: '1&2&3&4',
|
||||
// class_parse:'js:let html=request(input);input=JSON.parse(html).class;',
|
||||
class_parse: 'json:class;',
|
||||
limit: 20,
|
||||
multi: 1,
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 1,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
play_parse: true,
|
||||
parse_url: '',
|
||||
lazy: cj_lazy,
|
||||
推荐: '*',
|
||||
一级: 'json:list;vod_name;vod_pic;vod_remarks;vod_id;vod_play_from',
|
||||
二级: `js:
|
||||
let html=request(input);
|
||||
html=JSON.parse(html);
|
||||
let data=html.list;
|
||||
VOD=data[0];`,
|
||||
搜索: '*',
|
||||
},
|
||||
};
|
||||
return JSON.parse(JSON.stringify(mubanDict));
|
||||
}
|
||||
|
||||
var mubanDict = getMubans();
|
||||
var muban = getMubans();
|
||||
export default {muban, getMubans};
|
||||
452
欧歌/js/我的哔哩.js
452
欧歌/js/我的哔哩.js
@@ -0,0 +1,452 @@
|
||||
/**
|
||||
* 已知问题:
|
||||
* [推荐]页面:'雷电模拟器'播放部份影片会出错,'播放器'改成'ijk' & '解码方式'改成'软解',即可正常播放
|
||||
* 影视TV 超連結跳轉支持
|
||||
* 影视TV 弹幕支持
|
||||
* https://t.me/fongmi_offical/
|
||||
* https://github.com/FongMi/Release/tree/main/apk
|
||||
* 皮皮虾DMBox 弹幕支持
|
||||
* 设置 > 窗口预览 > 开启
|
||||
* https://t.me/pipixiawerun
|
||||
* vod_area:'bilidanmu'
|
||||
* Cookie设置
|
||||
* Cookie获取方法 https://ghproxy.net/https://raw.githubusercontent.com/UndCover/PyramidStore/main/list.md
|
||||
* Cookie设置方法1: DR-PY 后台管理界面
|
||||
* CMS后台管理 > 设置中心 > 环境变量 > {"bili_cookie":"XXXXXXX","vmid":"XXXXXX"} > 保存
|
||||
* Cookie设置方法2: 手动替换Cookie
|
||||
* 底下代码 headers的
|
||||
* "Cookie":"$bili_cookie"
|
||||
* 手动替换为
|
||||
* "Cookie":"将获取的Cookie黏贴在这"
|
||||
* 客户端长期Cookie设置教程:
|
||||
* 抓包哔哩手机端搜索access_key,取任意链接里的access_key和appkey在drpy环境变量中增加同名的环境变量即可
|
||||
* 此时哔哩.js这个解析可用于此源的解析线路用
|
||||
* 传参 ?render=1&type=url¶ms=../json/哔哩教育.json@哔哩教育[官]
|
||||
* 传参 ?render=1&type=url¶ms=../json/哔哩大全.json@哔哩大全[官]
|
||||
*/
|
||||
var rule = {
|
||||
title: '我的哔哩[官]',
|
||||
host: 'https://api.bilibili.com',
|
||||
homeUrl: '/x/web-interface/ranking/v2?rid=0&type=origin',
|
||||
// url:'/x/web-interface/search/type?search_type=video&keyword=fyclass&page=fypage',
|
||||
url: '/x/web-interface/search/type?search_type=video&fyfilter',
|
||||
filter_url: 'keyword=fyclass{{fl.tid}}&page=fypage&duration={{fl.duration}}&order={{fl.order}}',
|
||||
class_parse: $js.toString(() => {
|
||||
// let html = request('{{host}}/files/json/哔哩教育.json');
|
||||
log('rule.params:' + rule.params);
|
||||
let html = request(rule.params);
|
||||
let json = dealJson(html);
|
||||
input = json.classes;
|
||||
homeObj.filter = json.filter;
|
||||
// log(input);
|
||||
}),
|
||||
filterable: 1,
|
||||
detailUrl: '/x/web-interface/view/detail?aid=fyid',
|
||||
searchUrl: '/x/web-interface/search/type?search_type=video&keyword=**&page=fypage',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
params: 'http://127.0.0.1:9978/file/jars/哔哩大全.json',
|
||||
// params: '?render=1&type=url¶ms=../json/哔哩教育.json@哔哩教育[官]',
|
||||
// params: '?render=1&type=url¶ms=../json/哔哩大全.json@哔哩大全[官]',
|
||||
headers: {
|
||||
"User-Agent": "PC_UA",
|
||||
"Referer": "https://www.bilibili.com",
|
||||
"Cookie": "SESSDATA=01c79709%2C1711618905%2C244c3%2A91CjA9UUnRb_kJg03J5FqUbin76yMY90o1-ckJsM1ItQH21ns4hgcS6Le6oMR3SKtC18QSVmxSbGRhN3cyS3NReERsOHRfYVlhTWJKZjZyTF9wUWJXbjNfaF9qWklFMFpoeVg1ZUhFb0Q0MGFiN3FYd1N3UEFEY1oxX29IdmFSRVVLamcybGhhSkJnIIEC; bili_jct=e9d6e9df733afde2a03693d63a4e77dc; DedeUserID=186957646;"
|
||||
},
|
||||
timeout: 5000,
|
||||
limit: 8,
|
||||
play_parse: true,
|
||||
double: false,
|
||||
lazy: `js:
|
||||
let ids = input.split('_');
|
||||
let dan = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + ids[1];
|
||||
let result = {};
|
||||
let iurl = 'https://api.bilibili.com:443/x/player/playurl?avid=' + ids[0] + '&cid=' + ids[1] + '&qn=116';
|
||||
let html = request(iurl);
|
||||
let jRoot = JSON.parse(html);
|
||||
let jo = jRoot.data;
|
||||
let ja = jo.durl;
|
||||
let maxSize = -1;
|
||||
let position = -1;
|
||||
ja.forEach(function(tmpJo, i) {
|
||||
if (maxSize < Number(tmpJo.size)) {
|
||||
maxSize = Number(tmpJo.size);
|
||||
position = i
|
||||
}
|
||||
});
|
||||
let purl = '';
|
||||
if (ja.length > 0) {
|
||||
if (position === -1) {
|
||||
position = 0
|
||||
}
|
||||
purl = ja[position].url
|
||||
}
|
||||
result.parse = 0;
|
||||
result.playUrl = '';
|
||||
result.url = unescape(purl);
|
||||
result.header = {
|
||||
'Referer': 'https://live.bilibili.com',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
|
||||
};
|
||||
if (/\\.flv/.test(purl)) {
|
||||
result.contentType = 'video/x-flv';
|
||||
} else {
|
||||
result.contentType = '';
|
||||
}
|
||||
result.danmaku = dan;
|
||||
input = result
|
||||
`,
|
||||
推荐: `js:
|
||||
function stripHtmlTag(src) {
|
||||
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
|
||||
}
|
||||
function turnDHM(duration) {
|
||||
let min = '';
|
||||
let sec = '';
|
||||
try {
|
||||
min = duration.split(':')[0];
|
||||
sec = duration.split(':')[1];
|
||||
} catch (e) {
|
||||
min = Math.floor(duration / 60);
|
||||
sec = duration % 60;
|
||||
}
|
||||
if (isNaN(parseInt(duration))) {
|
||||
return '无效输入';
|
||||
}
|
||||
if (min == 0) {
|
||||
return sec + '秒'
|
||||
} else if (0 < min && min < 60) {
|
||||
return min + '分'
|
||||
} else if (60 <= min && min < 1440) {
|
||||
if (min % 60 == 0) {
|
||||
let h = min / 60;
|
||||
return h + '小时'
|
||||
} else {
|
||||
let h = min / 60;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
return h + '小时' + m + '分';
|
||||
}
|
||||
} else if (min >= 1440) {
|
||||
let d = min / 60 / 24;
|
||||
d = (d + '').split('.')[0];
|
||||
let h = min / 60 % 24;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
let dhm = '';
|
||||
if (d > 0) {
|
||||
dhm = d + '天'
|
||||
}
|
||||
if (h >= 1) {
|
||||
dhm = dhm + h + '小时'
|
||||
}
|
||||
if (m > 0) {
|
||||
dhm = dhm + m + '分'
|
||||
}
|
||||
return dhm
|
||||
}
|
||||
return null
|
||||
}
|
||||
function ConvertNum(num) {
|
||||
let _ws = Math.pow(10, 1);
|
||||
let _b = 1e4;
|
||||
if (num < _b) {
|
||||
return num.toString();
|
||||
}
|
||||
let _r = '';
|
||||
let _strArg = ['', '万', '亿', '万亿'];
|
||||
let _i = Math.floor(Math.log(num) / Math.log(_b));
|
||||
if (_i > 3) {
|
||||
_i = 3;
|
||||
}
|
||||
_r = Math.floor(num / Math.pow(_b, _i) * _ws) / _ws + _strArg[_i];
|
||||
return _r;
|
||||
}
|
||||
let html = request(input);
|
||||
let vodList = JSON.parse(html).data.list;
|
||||
let videos = [];
|
||||
vodList.forEach(function(vod) {
|
||||
let aid = vod.aid;
|
||||
let title = stripHtmlTag(vod.title);
|
||||
let img = vod.pic;
|
||||
if (img.startsWith('//')) {
|
||||
img = 'https:' + img;
|
||||
}
|
||||
let remark = turnDHM(vod.duration) + ' ▶' + ConvertNum(vod.stat.view) + ' 🆙' + vod.owner.name;
|
||||
videos.push({
|
||||
vod_id: aid,
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: remark
|
||||
})
|
||||
});
|
||||
VODS = videos
|
||||
`,
|
||||
一级: `js:
|
||||
if (cateObj.tid.endsWith('_clicklink')) {
|
||||
cateObj.tid = cateObj.tid.split('_')[0];
|
||||
input = HOST + '/x/web-interface/search/type?search_type=video&keyword=' + cateObj.tid + '&page=' + MY_PAGE;
|
||||
}
|
||||
function stripHtmlTag(src) {
|
||||
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
|
||||
}
|
||||
function turnDHM(duration) {
|
||||
let min = '';
|
||||
let sec = '';
|
||||
try {
|
||||
min = duration.split(':')[0];
|
||||
sec = duration.split(':')[1];
|
||||
} catch (e) {
|
||||
min = Math.floor(duration / 60);
|
||||
sec = duration % 60;
|
||||
}
|
||||
if (isNaN(parseInt(duration))) {
|
||||
return '无效输入';
|
||||
}
|
||||
if (min == 0) {
|
||||
return sec + '秒'
|
||||
} else if (0 < min && min < 60) {
|
||||
return min + '分'
|
||||
} else if (60 <= min && min < 1440) {
|
||||
if (min % 60 == 0) {
|
||||
let h = min / 60;
|
||||
return h + '小时'
|
||||
} else {
|
||||
let h = min / 60;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
return h + '小时' + m + '分';
|
||||
}
|
||||
} else if (min >= 1440) {
|
||||
let d = min / 60 / 24;
|
||||
d = (d + '').split('.')[0];
|
||||
let h = min / 60 % 24;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
let dhm = '';
|
||||
if (d > 0) {
|
||||
dhm = d + '天'
|
||||
}
|
||||
if (h >= 1) {
|
||||
dhm = dhm + h + '小时'
|
||||
}
|
||||
if (m > 0) {
|
||||
dhm = dhm + m + '分'
|
||||
}
|
||||
return dhm
|
||||
}
|
||||
return null
|
||||
}
|
||||
function ConvertNum(num) {
|
||||
let _ws = Math.pow(10, 1);
|
||||
let _b = 1e4;
|
||||
if (num < _b) {
|
||||
return num.toString();
|
||||
}
|
||||
let _r = '';
|
||||
let _strArg = ['', '万', '亿', '万亿'];
|
||||
let _i = Math.floor(Math.log(num) / Math.log(_b));
|
||||
if (_i > 3) {
|
||||
_i = 3;
|
||||
}
|
||||
_r = Math.floor(num / Math.pow(_b, _i) * _ws) / _ws + _strArg[_i];
|
||||
return _r;
|
||||
}
|
||||
let data = [];
|
||||
let vodList = [];
|
||||
if (MY_CATE === '推荐') {
|
||||
input = HOST + '/x/web-interface/index/top/rcmd?ps=14&fresh_idx=' + MY_PAGE + '&fresh_idx_1h=' + MY_PAGE;
|
||||
data = JSON.parse(request(input)).data;
|
||||
vodList = data.item;
|
||||
} else if (MY_CATE === '历史记录') {
|
||||
input = HOST + '/x/v2/history?pn=' + MY_PAGE;
|
||||
data = JSON.parse(request(input)).data;
|
||||
vodList = data;
|
||||
} else {
|
||||
data = JSON.parse(request(input)).data;
|
||||
vodList = data.result;
|
||||
}
|
||||
let videos = [];
|
||||
vodList.forEach(function(vod) {
|
||||
let aid = vod.aid?vod.aid:vod.id;
|
||||
let title = stripHtmlTag(vod.title);
|
||||
let img = vod.pic;
|
||||
if (img.startsWith('//')) {
|
||||
img = 'https:' + img;
|
||||
}
|
||||
let play = '';
|
||||
let danmaku = '';
|
||||
if (MY_CATE === '推荐') {
|
||||
play = ConvertNum(vod.stat.view);
|
||||
danmaku = vod.stat.danmaku;
|
||||
} else if (MY_CATE === '历史记录') {
|
||||
play = ConvertNum(vod.stat.view);
|
||||
danmaku = vod.stat.danmaku;
|
||||
} else {
|
||||
play = ConvertNum(vod.play);
|
||||
danmaku = vod.video_review;
|
||||
}
|
||||
let remark = turnDHM(vod.duration) + ' ▶' + play + ' 💬' + danmaku;
|
||||
videos.push({
|
||||
vod_id: aid,
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: remark
|
||||
})
|
||||
});
|
||||
VODS = videos
|
||||
`,
|
||||
二级: `js:
|
||||
function stripHtmlTag(src) {
|
||||
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
|
||||
}
|
||||
let html = request(input);
|
||||
let jo = JSON.parse(html).data.View;
|
||||
// 历史记录
|
||||
let cookies = rule_fetch_params.headers.Cookie.split(';');
|
||||
let bili_jct = '';
|
||||
cookies.forEach(cookie => {
|
||||
if (cookie.includes('bili_jct')) {
|
||||
bili_jct = cookie.split('=')[1];
|
||||
}
|
||||
});
|
||||
if (bili_jct !== '') {
|
||||
let historyReport = 'https://api.bilibili.com/x/v2/history/report';
|
||||
let dataPost = {
|
||||
aid: jo.aid,
|
||||
cid: jo.cid,
|
||||
csrf: bili_jct,
|
||||
};
|
||||
post(historyReport, dataPost, 'form');
|
||||
}
|
||||
|
||||
let stat = jo.stat;
|
||||
let up_info = JSON.parse(html).data.Card;
|
||||
let relation = up_info.following ? '已关注' : '未关注';
|
||||
let aid = jo.aid;
|
||||
let title = stripHtmlTag(jo.title);
|
||||
let pic = jo.pic;
|
||||
let desc = jo.desc;
|
||||
|
||||
let date = new Date(jo.pubdate * 1000);
|
||||
let yy = date.getFullYear().toString();
|
||||
let mm = date.getMonth()+1;
|
||||
mm = mm < 10 ? ('0' + mm) : mm;
|
||||
let dd = date.getDate();
|
||||
dd = dd < 10 ? ('0' + dd) : dd;
|
||||
|
||||
let up_name = jo.owner.name;
|
||||
let typeName = jo.tname;
|
||||
// let remark = jo.duration;
|
||||
let vod = {
|
||||
vod_id: aid,
|
||||
vod_name: title,
|
||||
vod_pic: pic,
|
||||
type_name: typeName,
|
||||
vod_year: yy+mm+dd,
|
||||
vod_area: 'bilidanmu',
|
||||
// vod_remarks: remark,
|
||||
vod_tags: 'mv',
|
||||
// vod_director: '🆙 ' + up_name + ' 👥 ' + up_info.follower + ' ' + relation,
|
||||
vod_director: '🆙 ' + '[a=cr:' + JSON.stringify({'id':up_name + '_clicklink','name':up_name}) + '/]' + up_name + '[/a]' + ' 👥 ' + up_info.follower + ' ' + relation,
|
||||
vod_actor: '▶' + stat.view + ' ' + '💬' + stat.danmaku + ' ' + '👍' + stat.like + ' ' + '💰' + stat.coin + ' ' + '⭐' + stat.favorite,
|
||||
vod_content: desc
|
||||
};
|
||||
let ja = jo.pages;
|
||||
let treeMap = {};
|
||||
let playurls = [];
|
||||
ja.forEach(function(tmpJo) {
|
||||
let cid = tmpJo.cid;
|
||||
let part = tmpJo.part.replaceAll('#', '﹟').replaceAll('$', '﹩');
|
||||
playurls.push(
|
||||
part + '$' + aid + '_' + cid
|
||||
)
|
||||
});
|
||||
treeMap['B站'] = playurls.join('#');
|
||||
let relatedData = JSON.parse(html).data.Related;
|
||||
playurls = [];
|
||||
relatedData.forEach(function(rd) {
|
||||
let ccid = rd.cid;
|
||||
let title = rd.title.replaceAll('#', '﹟').replaceAll('$', '﹩');
|
||||
let aaid = rd.aid;
|
||||
playurls.push(
|
||||
title + '$' + aaid + '_' + ccid
|
||||
)
|
||||
});
|
||||
treeMap['欧歌推荐'] = playurls.join('#');
|
||||
vod.vod_play_from = Object.keys(treeMap).join("$$$");
|
||||
vod.vod_play_url = Object.values(treeMap).join("$$$");
|
||||
VOD = vod;
|
||||
`,
|
||||
搜索: `js:
|
||||
let html = request(input);
|
||||
function stripHtmlTag(src) {
|
||||
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
|
||||
}
|
||||
function turnDHM(duration) {
|
||||
let min = '';
|
||||
let sec = '';
|
||||
try {
|
||||
min = duration.split(':')[0];
|
||||
sec = duration.split(':')[1];
|
||||
} catch (e) {
|
||||
min = Math.floor(duration / 60);
|
||||
sec = duration % 60;
|
||||
}
|
||||
if (isNaN(parseInt(duration))) {
|
||||
return '无效输入';
|
||||
}
|
||||
if (min == 0) {
|
||||
return sec + '秒'
|
||||
} else if (0 < min && min < 60) {
|
||||
return min + '分'
|
||||
} else if (60 <= min && min < 1440) {
|
||||
if (min % 60 == 0) {
|
||||
let h = min / 60;
|
||||
return h + '小时'
|
||||
} else {
|
||||
let h = min / 60;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
return h + '小时' + m + '分';
|
||||
}
|
||||
} else if (min >= 1440) {
|
||||
let d = min / 60 / 24;
|
||||
d = (d + '').split('.')[0];
|
||||
let h = min / 60 % 24;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
let dhm = '';
|
||||
if (d > 0) {
|
||||
dhm = d + '天'
|
||||
}
|
||||
if (h >= 1) {
|
||||
dhm = dhm + h + '小时'
|
||||
}
|
||||
if (m > 0) {
|
||||
dhm = dhm + m + '分'
|
||||
}
|
||||
return dhm
|
||||
}
|
||||
return null
|
||||
}
|
||||
let videos = [];
|
||||
let vodList = JSON.parse(html).data.result;
|
||||
vodList.forEach(function(vod) {
|
||||
let aid = vod.aid;
|
||||
let title = stripHtmlTag(vod.title);
|
||||
let img = vod.pic;
|
||||
if (img.startsWith('//')) {
|
||||
img = 'https:' + img;
|
||||
}
|
||||
let remark = turnDHM(vod.duration);
|
||||
videos.push({
|
||||
vod_id: aid,
|
||||
vod_name: title,
|
||||
vod_pic: img,
|
||||
vod_remarks: remark
|
||||
})
|
||||
});
|
||||
VODS = videos
|
||||
`,
|
||||
}
|
||||
|
||||
811
欧歌/json/合集.json
Normal file
811
欧歌/json/合集.json
Normal file
@@ -0,0 +1,811 @@
|
||||
{ "cookie": " buvid3=8B57D3BA-607A-1E85-018A-E8C430023CED42659infoc; b_lsid=BEB8EE7F_18742FF8C2E; bsource=search_baidu; _uuid=DE810E367-B52C-AF6E-A612-EDF4C31567F358591infoc; b_nut=100; buvid_fp=711a632b5c876fa8bbcf668c1efba551; SESSDATA=7624af93%2C1696008331%2C862c8%2A42; bili_jct=141a474ef3ce8cf2fedf384e68f6625d; DedeUserID=3493271303096985; DedeUserID__ckMd5=212a836c164605b7; sid=5h4ruv6o; buvid4=978E9208-13DA-F87A-3DC0-0B8EDF46E80434329-123040301-dWliG5BMrUb70r3g583u7w%3D%3D",
|
||||
"filter": {
|
||||
"dianshiju": [
|
||||
{
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "yanqing",
|
||||
"n": "言情"
|
||||
},
|
||||
{
|
||||
"v": "ouxiang",
|
||||
"n": "偶像"
|
||||
},
|
||||
{
|
||||
"v": "dushi",
|
||||
"n": "都市"
|
||||
},
|
||||
{
|
||||
"v": "zhanzheng",
|
||||
"n": "战争"
|
||||
},
|
||||
{
|
||||
"v": "xuanyi",
|
||||
"n": "悬疑"
|
||||
},
|
||||
{
|
||||
"v": "lunli",
|
||||
"n": "伦理"
|
||||
},
|
||||
{
|
||||
"v": "jingsong",
|
||||
"n": "惊悚"
|
||||
},
|
||||
{
|
||||
"v": "wangluoju",
|
||||
"n": "网络剧"
|
||||
},
|
||||
{
|
||||
"v": "jingfei",
|
||||
"n": "警匪"
|
||||
},
|
||||
{
|
||||
"v": "guzhuang",
|
||||
"n": "古装"
|
||||
},
|
||||
{
|
||||
"v": "wuxia",
|
||||
"n": "武侠"
|
||||
},
|
||||
{
|
||||
"v": "shenhua",
|
||||
"n": "神话"
|
||||
},
|
||||
{
|
||||
"v": "lishi",
|
||||
"n": "历史"
|
||||
},
|
||||
{
|
||||
"v": "dongzuo",
|
||||
"n": "动作"
|
||||
},
|
||||
{
|
||||
"v": "diezhan",
|
||||
"n": "谍战"
|
||||
},
|
||||
{
|
||||
"v": "xiju",
|
||||
"n": "喜剧"
|
||||
},
|
||||
{
|
||||
"v": "kangri",
|
||||
"n": "抗日"
|
||||
},
|
||||
{
|
||||
"v": "jiating",
|
||||
"n": "家庭"
|
||||
},
|
||||
{
|
||||
"v": "juqing",
|
||||
"n": "剧情"
|
||||
},
|
||||
{
|
||||
"v": "lizhi",
|
||||
"n": "励志"
|
||||
},
|
||||
{
|
||||
"v": "nongcun",
|
||||
"n": "农村"
|
||||
},
|
||||
{
|
||||
"v": "kehuan",
|
||||
"n": "科幻"
|
||||
},
|
||||
{
|
||||
"v": "junlv",
|
||||
"n": "军旅"
|
||||
},
|
||||
{
|
||||
"v": "qihuan",
|
||||
"n": "奇幻"
|
||||
},
|
||||
{
|
||||
"v": "qita",
|
||||
"n": "其它"
|
||||
}
|
||||
],
|
||||
"key": "type"
|
||||
},
|
||||
{
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "neidi",
|
||||
"n": "内地"
|
||||
},
|
||||
{
|
||||
"v": "taiwan",
|
||||
"n": "台湾"
|
||||
},
|
||||
{
|
||||
"v": "xianggang",
|
||||
"n": "香港"
|
||||
},
|
||||
{
|
||||
"v": "hanguo",
|
||||
"n": "韩国"
|
||||
},
|
||||
{
|
||||
"v": "meiguo",
|
||||
"n": "美国"
|
||||
},
|
||||
{
|
||||
"v": "taiguo",
|
||||
"n": "泰国"
|
||||
},
|
||||
{
|
||||
"v": "riben",
|
||||
"n": "日本"
|
||||
},
|
||||
{
|
||||
"v": "yingguo",
|
||||
"n": "英国"
|
||||
},
|
||||
{
|
||||
"v": "xinjiapo",
|
||||
"n": "新加坡"
|
||||
},
|
||||
{
|
||||
"v": "qita",
|
||||
"n": "其它"
|
||||
}
|
||||
],
|
||||
"key": "area"
|
||||
},
|
||||
{
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "2024",
|
||||
"n": "2024"
|
||||
},
|
||||
{
|
||||
"v": "2023",
|
||||
"n": "2023"
|
||||
},
|
||||
{
|
||||
"v": "2022",
|
||||
"n": "2022"
|
||||
},
|
||||
{
|
||||
"v": "2021",
|
||||
"n": "2021"
|
||||
},
|
||||
{
|
||||
"v": "2020",
|
||||
"n": "2020"
|
||||
},
|
||||
{
|
||||
"v": "2019",
|
||||
"n": "2019"
|
||||
},
|
||||
{
|
||||
"v": "2018",
|
||||
"n": "2018"
|
||||
},
|
||||
{
|
||||
"v": "2017",
|
||||
"n": "2017"
|
||||
},
|
||||
{
|
||||
"v": "2016",
|
||||
"n": "2016"
|
||||
},
|
||||
{
|
||||
"v": "2015",
|
||||
"n": "2015"
|
||||
},
|
||||
{
|
||||
"v": "2014",
|
||||
"n": "2014"
|
||||
},
|
||||
{
|
||||
"v": "2013",
|
||||
"n": "2013"
|
||||
},
|
||||
{
|
||||
"v": "2012",
|
||||
"n": "2012"
|
||||
},
|
||||
{
|
||||
"v": "2011",
|
||||
"n": "2011"
|
||||
},
|
||||
{
|
||||
"v": "20102000",
|
||||
"n": "2010-2000"
|
||||
},
|
||||
{
|
||||
"v": "19991990",
|
||||
"n": "90年代"
|
||||
},
|
||||
{
|
||||
"v": "19891800",
|
||||
"n": "更早"
|
||||
}
|
||||
],
|
||||
"key": "year"
|
||||
}
|
||||
],
|
||||
"zongyi": [
|
||||
{
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "lxxuanxiu/",
|
||||
"n": "选秀"
|
||||
},
|
||||
{
|
||||
"v": "lxqinggan/",
|
||||
"n": "情感"
|
||||
},
|
||||
{
|
||||
"v": "lxfangtan/",
|
||||
"n": "访谈"
|
||||
},
|
||||
{
|
||||
"v": "lxgaoxiao/",
|
||||
"n": "搞笑"
|
||||
},
|
||||
{
|
||||
"v": "lxyouxi/",
|
||||
"n": "游戏"
|
||||
},
|
||||
{
|
||||
"v": "lxzhichang/",
|
||||
"n": "职场"
|
||||
},
|
||||
{
|
||||
"v": "lxyule/",
|
||||
"n": "娱乐"
|
||||
},
|
||||
{
|
||||
"v": "lxzhenrenxiu/",
|
||||
"n": "真人秀"
|
||||
},
|
||||
{
|
||||
"v": "lxshenghuo/",
|
||||
"n": "生活"
|
||||
},
|
||||
{
|
||||
"v": "lxtiyu/",
|
||||
"n": "体育"
|
||||
},
|
||||
{
|
||||
"v": "lxshenghui/",
|
||||
"n": "盛会"
|
||||
},
|
||||
{
|
||||
"v": "lxcaijing/",
|
||||
"n": "财经"
|
||||
},
|
||||
{
|
||||
"v": "lxqinzi/",
|
||||
"n": "亲子"
|
||||
},
|
||||
{
|
||||
"v": "lxjishi/",
|
||||
"n": "纪实"
|
||||
},
|
||||
{
|
||||
"v": "lxtuokouxiu/",
|
||||
"n": "脱口秀"
|
||||
},
|
||||
{
|
||||
"v": "lxwangluojiemu/",
|
||||
"n": "网络节目"
|
||||
},
|
||||
{
|
||||
"v": "lxmeishi/",
|
||||
"n": "美食"
|
||||
}
|
||||
],
|
||||
"key": "type"
|
||||
},
|
||||
{
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "dqdalu/",
|
||||
"n": "大陆"
|
||||
},
|
||||
{
|
||||
"v": "dqgangtai/",
|
||||
"n": "港台"
|
||||
},
|
||||
{
|
||||
"v": "dqrihan/",
|
||||
"n": "日韩"
|
||||
},
|
||||
{
|
||||
"v": "dqoumei/",
|
||||
"n": "欧美"
|
||||
},
|
||||
{
|
||||
"v": "dqqita/",
|
||||
"n": "其他"
|
||||
}
|
||||
],
|
||||
"key": "area"
|
||||
}
|
||||
],
|
||||
"dongman": [
|
||||
{
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "lxrexue/",
|
||||
"n": "热血"
|
||||
},
|
||||
{
|
||||
"v": "lxaiqing/",
|
||||
"n": "爱情"
|
||||
},
|
||||
{
|
||||
"v": "lxgaoxiao/",
|
||||
"n": "搞笑"
|
||||
},
|
||||
{
|
||||
"v": "lxmeinv/",
|
||||
"n": "美女"
|
||||
},
|
||||
{
|
||||
"v": "lxshaoer/",
|
||||
"n": "少儿"
|
||||
},
|
||||
{
|
||||
"v": "lxqinzi/",
|
||||
"n": "亲子"
|
||||
},
|
||||
{
|
||||
"v": "lxmofa/",
|
||||
"n": "魔法"
|
||||
},
|
||||
{
|
||||
"v": "lxyundong/",
|
||||
"n": "运动"
|
||||
},
|
||||
{
|
||||
"v": "lxjizhan/",
|
||||
"n": "机战"
|
||||
},
|
||||
{
|
||||
"v": "lxkehuan/",
|
||||
"n": "科幻"
|
||||
},
|
||||
{
|
||||
"v": "lxxiaoyuan/",
|
||||
"n": "校园"
|
||||
},
|
||||
{
|
||||
"v": "lxdongwu/",
|
||||
"n": "动物"
|
||||
},
|
||||
{
|
||||
"v": "lxmaoxian/",
|
||||
"n": "冒险"
|
||||
},
|
||||
{
|
||||
"v": "lxshenhua/",
|
||||
"n": "神话"
|
||||
},
|
||||
{
|
||||
"v": "lxtuili/",
|
||||
"n": "推理"
|
||||
},
|
||||
{
|
||||
"v": "lxjuqing/",
|
||||
"n": "剧情"
|
||||
},
|
||||
{
|
||||
"v": "lxlishi/",
|
||||
"n": "历史"
|
||||
},
|
||||
{
|
||||
"v": "lxzhanzheng/",
|
||||
"n": "战争"
|
||||
},
|
||||
{
|
||||
"v": "lxjingdian/",
|
||||
"n": "经典"
|
||||
},
|
||||
{
|
||||
"v": "lxnanxingxiang/",
|
||||
"n": "男性向"
|
||||
},
|
||||
{
|
||||
"v": "lxnvxingxiang/",
|
||||
"n": "女性向"
|
||||
}
|
||||
],
|
||||
"key": "type"
|
||||
},
|
||||
{
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "dqdalu/",
|
||||
"n": "大陆"
|
||||
},
|
||||
{
|
||||
"v": "dqriben/",
|
||||
"n": "日本"
|
||||
},
|
||||
{
|
||||
"v": "dqmeiguo/",
|
||||
"n": "美国"
|
||||
},
|
||||
{
|
||||
"v": "dqhanguo/",
|
||||
"n": "韩国"
|
||||
},
|
||||
{
|
||||
"v": "dqqita/",
|
||||
"n": "其他"
|
||||
}
|
||||
],
|
||||
"key": "area"
|
||||
},
|
||||
{
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "nd2022/",
|
||||
"n": "2022"
|
||||
},
|
||||
{
|
||||
"v": "nd2021/",
|
||||
"n": "2021"
|
||||
},
|
||||
{
|
||||
"v": "nd2020/",
|
||||
"n": "2020"
|
||||
},
|
||||
{
|
||||
"v": "nd2019/",
|
||||
"n": "2019"
|
||||
},
|
||||
{
|
||||
"v": "nd2018/",
|
||||
"n": "2018"
|
||||
},
|
||||
{
|
||||
"v": "nd2017/",
|
||||
"n": "2017"
|
||||
},
|
||||
{
|
||||
"v": "nd2016/",
|
||||
"n": "2016"
|
||||
},
|
||||
{
|
||||
"v": "nd2015/",
|
||||
"n": "2015"
|
||||
},
|
||||
{
|
||||
"v": "nd2014/",
|
||||
"n": "2014"
|
||||
},
|
||||
{
|
||||
"v": "nd2013/",
|
||||
"n": "2013"
|
||||
},
|
||||
{
|
||||
"v": "nd2012/",
|
||||
"n": "2012"
|
||||
},
|
||||
{
|
||||
"v": "nd2011/",
|
||||
"n": "2011"
|
||||
},
|
||||
{
|
||||
"v": "nd20102000/",
|
||||
"n": "2010-2000"
|
||||
},
|
||||
{
|
||||
"v": "nd19991800/",
|
||||
"n": "更早"
|
||||
}
|
||||
],
|
||||
"key": "year"
|
||||
}
|
||||
],
|
||||
"dianying": [
|
||||
{
|
||||
"name": "类型",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "aiqing",
|
||||
"n": "爱情"
|
||||
},
|
||||
{
|
||||
"v": "dongzuo",
|
||||
"n": "动作"
|
||||
},
|
||||
{
|
||||
"v": "xiju",
|
||||
"n": "喜剧"
|
||||
},
|
||||
{
|
||||
"v": "zhanzheng",
|
||||
"n": "战争"
|
||||
},
|
||||
{
|
||||
"v": "kehuan",
|
||||
"n": "科幻"
|
||||
},
|
||||
{
|
||||
"v": "juqing",
|
||||
"n": "剧情"
|
||||
},
|
||||
{
|
||||
"v": "wuxia",
|
||||
"n": "武侠"
|
||||
},
|
||||
{
|
||||
"v": "maoxian",
|
||||
"n": "冒险"
|
||||
},
|
||||
{
|
||||
"v": "qiangzhan",
|
||||
"n": "枪战"
|
||||
},
|
||||
{
|
||||
"v": "kongbu",
|
||||
"n": "恐怖"
|
||||
},
|
||||
{
|
||||
"v": "xuanyi",
|
||||
"n": "悬疑"
|
||||
},
|
||||
{
|
||||
"v": "fanzui",
|
||||
"n": "犯罪"
|
||||
},
|
||||
{
|
||||
"v": "qihuan",
|
||||
"n": "奇幻"
|
||||
},
|
||||
{
|
||||
"v": "donghua",
|
||||
"n": "动画"
|
||||
},
|
||||
{
|
||||
"v": "jingsong",
|
||||
"n": "惊悚"
|
||||
},
|
||||
{
|
||||
"v": "jingdian",
|
||||
"n": "经典"
|
||||
},
|
||||
{
|
||||
"v": "qingchun",
|
||||
"n": "青春"
|
||||
},
|
||||
{
|
||||
"v": "wenyi",
|
||||
"n": "文艺"
|
||||
},
|
||||
{
|
||||
"v": "weidianying",
|
||||
"n": "微电影"
|
||||
},
|
||||
{
|
||||
"v": "guzhuang",
|
||||
"n": "古装"
|
||||
},
|
||||
{
|
||||
"v": "lishi",
|
||||
"n": "历史"
|
||||
},
|
||||
{
|
||||
"v": "yundong",
|
||||
"n": "运动"
|
||||
},
|
||||
{
|
||||
"v": "nongcun",
|
||||
"n": "农村"
|
||||
},
|
||||
{
|
||||
"v": "ertong",
|
||||
"n": "儿童"
|
||||
},
|
||||
{
|
||||
"v": "wangluodianying",
|
||||
"n": "网络电影"
|
||||
},
|
||||
{
|
||||
"v": "qita",
|
||||
"n": "其它"
|
||||
}
|
||||
],
|
||||
"key": "type"
|
||||
},
|
||||
{
|
||||
"name": "地区",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "neidi",
|
||||
"n": "内地"
|
||||
},
|
||||
{
|
||||
"v": "meiguo",
|
||||
"n": "美国"
|
||||
},
|
||||
{
|
||||
"v": "xianggang",
|
||||
"n": "香港"
|
||||
},
|
||||
{
|
||||
"v": "taiwan",
|
||||
"n": "台湾"
|
||||
},
|
||||
{
|
||||
"v": "riben",
|
||||
"n": "日本"
|
||||
},
|
||||
{
|
||||
"v": "taiguo",
|
||||
"n": "泰国"
|
||||
},
|
||||
{
|
||||
"v": "yindu",
|
||||
"n": "印度"
|
||||
},
|
||||
{
|
||||
"v": "dongnanyadiqu",
|
||||
"n": "东南亚地区"
|
||||
},
|
||||
{
|
||||
"v": "oumeidiqu",
|
||||
"n": "欧美地区"
|
||||
},
|
||||
{
|
||||
"v": "qita",
|
||||
"n": "其它"
|
||||
}
|
||||
],
|
||||
"key": "area"
|
||||
},
|
||||
{
|
||||
"name": "年份",
|
||||
"value": [
|
||||
{
|
||||
"v": "",
|
||||
"n": "全部"
|
||||
},
|
||||
{
|
||||
"v": "2022",
|
||||
"n": "2022"
|
||||
},
|
||||
{
|
||||
"v": "2021",
|
||||
"n": "2021"
|
||||
},
|
||||
{
|
||||
"v": "2020",
|
||||
"n": "2020"
|
||||
},
|
||||
{
|
||||
"v": "2019",
|
||||
"n": "2019"
|
||||
},
|
||||
{
|
||||
"v": "2018",
|
||||
"n": "2018"
|
||||
},
|
||||
{
|
||||
"v": "2017",
|
||||
"n": "2017"
|
||||
},
|
||||
{
|
||||
"v": "2016",
|
||||
"n": "2016"
|
||||
},
|
||||
{
|
||||
"v": "2015",
|
||||
"n": "2015"
|
||||
},
|
||||
{
|
||||
"v": "2014",
|
||||
"n": "2014"
|
||||
},
|
||||
{
|
||||
"v": "2013",
|
||||
"n": "2013"
|
||||
},
|
||||
{
|
||||
"v": "2012",
|
||||
"n": "2012"
|
||||
},
|
||||
{
|
||||
"v": "2011",
|
||||
"n": "2011"
|
||||
},
|
||||
{
|
||||
"v": "20102000",
|
||||
"n": "2010-2000"
|
||||
},
|
||||
{
|
||||
"v": "19691800",
|
||||
"n": "更早"
|
||||
}
|
||||
],
|
||||
"key": "year"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"classes": [
|
||||
{
|
||||
"type_name": "电影",
|
||||
"type_id": "dianying"
|
||||
},
|
||||
|
||||
{
|
||||
"type_name": "电视剧",
|
||||
"type_id": "dianshiju"
|
||||
},
|
||||
{
|
||||
"type_name": "综艺",
|
||||
"type_id": "zongyi"
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"type_name": "热播电影",
|
||||
"type_id": "jingdian"
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
"type_name": "动漫",
|
||||
"type_id": "dongman"
|
||||
}
|
||||
]
|
||||
}
|
||||
1626
欧歌/lives/公众号【光歌软件分享】测试完请删除,请勿演示贩卖.txt
Normal file
1626
欧歌/lives/公众号【光歌软件分享】测试完请删除,请勿演示贩卖.txt
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
24
王二小/api.json
24
王二小/api.json
@@ -73,6 +73,14 @@
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Wexmuougg",
|
||||
"name": "💓木偶┃4K💓",
|
||||
"type": 3,
|
||||
"api": "csp_WexmuouggGuard",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Wexnullname",
|
||||
"name": "💓无名┃4K💓",
|
||||
@@ -203,14 +211,6 @@
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "SubaibaiGuard",
|
||||
"name": "🎇白白┃秒播🎇",
|
||||
"type": 3,
|
||||
"api": "csp_SubaibaiGuard",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "WexquickvodGuard",
|
||||
"name": "🎇美剧┃秒播🎇",
|
||||
@@ -358,6 +358,14 @@
|
||||
"type": "list"
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Wexduanjuvip",
|
||||
"name": "🍉短剧┃免费🍉",
|
||||
"type": 3,
|
||||
"api": "csp_WexduanjuvipGuard",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Wexduanjuvop",
|
||||
"name": "🍉短剧┃秒播🍉",
|
||||
|
||||
BIN
王二小/spider.jar
BIN
王二小/spider.jar
Binary file not shown.
File diff suppressed because it is too large
Load Diff
3444
饭太硬/lives/平台直播.txt
3444
饭太硬/lives/平台直播.txt
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user