diff --git a/js/310直播.js b/js/310直播.js new file mode 100644 index 0000000..0f73404 --- /dev/null +++ b/js/310直播.js @@ -0,0 +1,22 @@ +var rule = { + title:'310直播', + host:'http://www.310.tv', + url:'/?s=0&t=1&a=fyclass&g=fypage', + searchUrl:'', + searchable:0, + quickSearch:0, + class_name:'热门&足球&篮球', + class_url:'0&1&2', + headers:{ + 'User-Agent':'MOBILE_UA' + }, + timeout:5000, + play_parse:false, + lazy:'', + limit:6, + double:false, + 推荐:'*', + 一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href', + 二级:'*', + 搜索:'', +} \ No newline at end of file diff --git a/js/JustLive.js b/js/JustLive.js new file mode 100644 index 0000000..8b242a0 --- /dev/null +++ b/js/JustLive.js @@ -0,0 +1,50 @@ +// 道长 drpy仓库 https://gitcode.net/qq_32394351/dr_py +// drpy安卓本地搭建说明 https://gitcode.net/qq_32394351/dr_py/-/blob/master/%E5%AE%89%E5%8D%93%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E8%AF%B4%E6%98%8E.md +// Pluto Player官方TG https://t.me/PlutoPlayer +// Pluto Player官方TG https://t.me/PlutoPlayerChannel + +var rule = { + title: 'JustLive', + host: 'http://live.yj1211.work', + homeUrl: '/api/live/getRecommend?page=1&size=20',//网站的首页链接,用于分类获取和推荐获取 + url: '/api/live/getRecommendByPlatformArea?platform=fyclass&area=fyfilter&page=fypage&size=20', //网站的分类页面链接 + class_name: '斗鱼&虎牙&哔哩&网易', + class_url: 'douyu&huya&bilibili&cc', + filterable: 1, + filter_url: '{{fl.area or "影音馆"}}', + filter_def:{ + douyu:{ + area:'一起看', + }, + huya:{ + area:'一起看', + }, + bilibili:{ + area:'影音馆', + }, + cc:{ + area:'星秀', + } + }, + filter: { + 'douyu': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '一起看', 'v': '一起看' }, { 'n': '二次元', 'v': '二次元' }, { 'n': '颜值', 'v': '颜值' }, { 'n': '颜值(横屏)', 'v': '颜值(横屏)' }, { 'n': '音乐', 'v': '音乐' }, { 'n': '户外', 'v': '户外' }, { 'n': '美食', 'v': '美食' }, { 'n': '原创IP', 'v': '原创IP' }, { 'n': '互动交友', 'v': '互动交友' }, { 'n': '音遇恋人', 'v': '音遇恋人' }, { 'n': '舞蹈', 'v': '舞蹈' }, { 'n': '趣生活', 'v': '趣生活' }, { 'n': '心动FM', 'v': '心动FM' }, { 'n': '娱乐推荐', 'v': '娱乐推荐' }, { 'n': '校园', 'v': '校园' }, { 'n': '文化', 'v': '文化' }, { 'n': '企鹅直播', 'v': '企鹅直播' }, { 'n': '数码科技', 'v': '数码科技' }, { 'n': '社会人文', 'v': '社会人文' }, { 'n': '汽车', 'v': '汽车' }, { 'n': '科普', 'v': '科普' }, { 'n': '纪录片', 'v': '纪录片' }, { 'n': '斗鱼购物', 'v': '斗鱼购物' }, { 'n': '成年教育', 'v': '成年教育' }, { 'n': '交友', 'v': '交友' }, { 'n': '心动FM.', 'v': '心动FM.' }, { 'n': '一起玩', 'v': '一起玩' }, { 'n': '开黑车队', 'v': '开黑车队' }, { 'n': '点唱', 'v': '点唱' }, { 'n': 'CP聊天', 'v': 'CP聊天' }, { 'n': '语音交友', 'v': '语音交友' }, { 'n': '音乐之声', 'v': '音乐之声' }, { 'n': '连麦互动', 'v': '连麦互动' }, { 'n': '娱乐开黑', 'v': '娱乐开黑' }, { 'n': '星星点灯', 'v': '星星点灯' }, { 'n': '正能量', 'v': '正能量' }, { 'n': '赛车竞技', 'v': '赛车竞技' }, { 'n': '京斗云', 'v': '京斗云' }, { 'n': '英雄联盟', 'v': '英雄联盟' }, { 'n': '热门游戏', 'v': '热门游戏' }, { 'n': '穿越火线', 'v': '穿越火线' }, { 'n': 'CFHD', 'v': 'CFHD' }, { 'n': '使命召唤', 'v': '使命召唤' }, { 'n': 'DNF', 'v': 'DNF' }, { 'n': 'DOTA2', 'v': 'DOTA2' }, { 'n': '炉石传说', 'v': '炉石传说' }, { 'n': 'CS:GO', 'v': 'CS:GO' }, { 'n': 'VALORANT', 'v': 'VALORANT' }, { 'n': 'lol云顶之弈', 'v': 'lol云顶之弈' }, { 'n': '魔兽争霸', 'v': '魔兽争霸' }, { 'n': '魔兽怀旧服', 'v': '魔兽怀旧服' }, { 'n': '自走棋', 'v': '自走棋' }, { 'n': '传奇', 'v': '传奇' }, { 'n': '跑跑卡丁车', 'v': '跑跑卡丁车' }, { 'n': '网易游戏', 'v': '网易游戏' }, { 'n': '星际争霸', 'v': '星际争霸' }, { 'n': '格斗游戏', 'v': '格斗游戏' }, { 'n': '守望先锋归来', 'v': '守望先锋归来' }, { 'n': 'DOTA', 'v': 'DOTA' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': '剑网3', 'v': '剑网3' }, { 'n': '我的世界', 'v': '我的世界' }, { 'n': '超激斗梦境', 'v': '超激斗梦境' }, { 'n': '冒险岛', 'v': '冒险岛' }, { 'n': '三国杀', 'v': '三国杀' }, { 'n': '梦幻西游', 'v': '梦幻西游' }, { 'n': '天涯明月刀', 'v': '天涯明月刀' }, { 'n': '街头篮球', 'v': '街头篮球' }, { 'n': 'NBA2KOL2', 'v': 'NBA2KOL2' }, { 'n': 'QQ飞车端游', 'v': 'QQ飞车端游' }, { 'n': '战地之王', 'v': '战地之王' }, { 'n': '军事游戏', 'v': '军事游戏' }, { 'n': '棋牌娱乐', 'v': '棋牌娱乐' }, { 'n': 'FIFA ONLINE 4', 'v': 'FIFA ONLINE 4' }, { 'n': '热门网游', 'v': '热门网游' }, { 'n': '诛仙世界', 'v': '诛仙世界' }, { 'n': '千古风流', 'v': '千古风流' }, { 'n': 'APEX', 'v': 'APEX' }, { 'n': '流放之路POE', 'v': '流放之路POE' }, { 'n': '剑网3缘起', 'v': '剑网3缘起' }, { 'n': '逆水寒', 'v': '逆水寒' }, { 'n': '风暴英雄', 'v': '风暴英雄' }, { 'n': '逆战', 'v': '逆战' }, { 'n': '坦克世界', 'v': '坦克世界' }, { 'n': '战舰世界', 'v': '战舰世界' }, { 'n': '巫师之昆特牌', 'v': '巫师之昆特牌' }, { 'n': '反恐精英Online', 'v': '反恐精英Online' }, { 'n': '暗黑破坏神3', 'v': '暗黑破坏神3' }, { 'n': '梦三国2', 'v': '梦三国2' }, { 'n': '传奇世界', 'v': '传奇世界' }, { 'n': '方舟:生存进化', 'v': '方舟:生存进化' }, { 'n': '刀塔霸业', 'v': '刀塔霸业' }, { 'n': '神武4电脑版', 'v': '神武4电脑版' }, { 'n': '群雄逐鹿', 'v': '群雄逐鹿' }, { 'n': '堡垒之夜', 'v': '堡垒之夜' }, { 'n': '无限法则', 'v': '无限法则' }, { 'n': '问道电脑版', 'v': '问道电脑版' }, { 'n': '西山居游戏', 'v': '西山居游戏' }, { 'n': '最终幻想14', 'v': '最终幻想14' }, { 'n': '战意', 'v': '战意' }, { 'n': '剑灵', 'v': '剑灵' }, { 'n': '星际战甲', 'v': '星际战甲' }, { 'n': '龙之谷', 'v': '龙之谷' }, { 'n': '铁甲雄兵', 'v': '铁甲雄兵' }, { 'n': '古剑奇谭网络版', 'v': '古剑奇谭网络版' }, { 'n': '轩辕传奇', 'v': '轩辕传奇' }, { 'n': '神途', 'v': '神途' }, { 'n': '激战2', 'v': '激战2' }, { 'n': '高达文化区', 'v': '高达文化区' }] }], + 'huya': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '一起看', 'v': '一起看' }, { 'n': '放映厅', 'v': '放映厅' }, { 'n': '星秀', 'v': '星秀' }, { 'n': '户外', 'v': '户外' }, { 'n': '二次元', 'v': '二次元' }, { 'n': '美食', 'v': '美食' }, { 'n': '颜值', 'v': '颜值' }, { 'n': '交友', 'v': '交友' }, { 'n': '体育', 'v': '体育' }, { 'n': '娱乐天地', 'v': '娱乐天地' }, { 'n': '吃喝玩乐', 'v': '吃喝玩乐' }, { 'n': '组队', 'v': '组队' }, { 'n': '原创', 'v': '原创' }, { 'n': '虎牙地方', 'v': '虎牙地方' }, { 'n': '虚拟偶像', 'v': '虚拟偶像' }, { 'n': '虎牙文化', 'v': '虎牙文化' }, { 'n': '趣分享', 'v': '趣分享' }, { 'n': '音乐', 'v': '音乐' }, { 'n': '派对', 'v': '派对' }, { 'n': '科技', 'v': '科技' }, { 'n': '直播购', 'v': '直播购' }, { 'n': '旅游', 'v': '旅游' }, { 'n': '英雄联盟', 'v': '英雄联盟' }, { 'n': '超击突破', 'v': '超击突破' }, { 'n': '守望先锋归来', 'v': '守望先锋归来' }, { 'n': 'lol云顶之弈', 'v': 'lol云顶之弈' }, { 'n': '穿越火线', 'v': '穿越火线' }, { 'n': '暴雪专区', 'v': '暴雪专区' }, { 'n': '地下城与勇士', 'v': '地下城与勇士' }, { 'n': '炉石传说', 'v': '炉石传说' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': 'DOTA2', 'v': 'DOTA2' }, { 'n': 'CS:GO', 'v': 'CS:GO' }, { 'n': 'DOTA1', 'v': 'DOTA1' }, { 'n': 'QQ飞车', 'v': 'QQ飞车' }, { 'n': '问道', 'v': '问道' }, { 'n': '魔兽争霸3', 'v': '魔兽争霸3' }, { 'n': '逆战', 'v': '逆战' }, { 'n': '梦三国', 'v': '梦三国' }, { 'n': '网游竞技', 'v': '网游竞技' }, { 'n': '射击综合游戏', 'v': '射击综合游戏' }, { 'n': '军事游戏', 'v': '军事游戏' }, { 'n': '坦克世界', 'v': '坦克世界' }, { 'n': '永恒之塔', 'v': '永恒之塔' }, { 'n': '剑灵', 'v': '剑灵' }, { 'n': '御龙在天', 'v': '御龙在天' }, { 'n': '传奇', 'v': '传奇' }, { 'n': '神武4电脑版', 'v': '神武4电脑版' }, { 'n': '起凡:群雄逐鹿', 'v': '起凡:群雄逐鹿' }, { 'n': '体育游戏', 'v': '体育游戏' }, { 'n': '传奇类游戏', 'v': '传奇类游戏' }, { 'n': '彩虹岛Online', 'v': '彩虹岛Online' }, { 'n': '诛仙3', 'v': '诛仙3' }, { 'n': '逆水寒', 'v': '逆水寒' }, { 'n': '炉石战棋', 'v': '炉石战棋' }, { 'n': 'CFHD', 'v': 'CFHD' }, { 'n': '冒险岛', 'v': '冒险岛' }, { 'n': '生死狙击2', 'v': '生死狙击2' }, { 'n': 'QQ三国', 'v': 'QQ三国' }, { 'n': '反恐精英Online', 'v': '反恐精英Online' }, { 'n': '龙之谷', 'v': '龙之谷' }, { 'n': '战舰世界', 'v': '战舰世界' }, { 'n': '枪神纪', 'v': '枪神纪' }, { 'n': '热血江湖', 'v': '热血江湖' }, { 'n': '九阴真经', 'v': '九阴真经' }, { 'n': '星际战甲', 'v': '星际战甲' }, { 'n': 'NBA2KOL系列', 'v': 'NBA2KOL系列' }, { 'n': '寻仙', 'v': '寻仙' }, { 'n': '铁甲雄兵', 'v': '铁甲雄兵' }, { 'n': '刀剑英雄', 'v': '刀剑英雄' }, { 'n': '荒野行动PC版', 'v': '荒野行动PC版' }, { 'n': 'FIFA Online系列', 'v': 'FIFA Online系列' }, { 'n': '暗黑破坏神', 'v': '暗黑破坏神' }, { 'n': '征途', 'v': '征途' }, { 'n': '斗战神', 'v': '斗战神' }, { 'n': '星际争霸', 'v': '星际争霸' }, { 'n': 'VALORANT', 'v': 'VALORANT' }, { 'n': '跑跑卡丁车', 'v': '跑跑卡丁车' }, { 'n': '天涯明月刀', 'v': '天涯明月刀' }, { 'n': 'QQ华夏', 'v': 'QQ华夏' }, { 'n': '剑网3', 'v': '剑网3' }, { 'n': '武林外传一世琴缘', 'v': '武林外传一世琴缘' }, { 'n': '反恐行动online', 'v': '反恐行动online' }, { 'n': '完美端游系列', 'v': '完美端游系列' }] }], + 'bilibili': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '影音馆', 'v': '影音馆' }, { 'n': '视频唱见', 'v': '视频唱见' }, { 'n': '萌宅领域', 'v': '萌宅领域' }, { 'n': '视频聊天', 'v': '视频聊天' }, { 'n': '舞见', 'v': '舞见' }, { 'n': '情感', 'v': '情感' }, { 'n': '户外', 'v': '户外' }, { 'n': '日常', 'v': '日常' }, { 'n': '唱见电台', 'v': '唱见电台' }, { 'n': '聊天电台', 'v': '聊天电台' }, { 'n': '配音', 'v': '配音' }, { 'n': '虚拟主播', 'v': '虚拟主播' }, { 'n': '3D虚拟主播', 'v': '3D虚拟主播' }, { 'n': '生活分享', 'v': '生活分享' }, { 'n': '运动', 'v': '运动' }, { 'n': '搞笑', 'v': '搞笑' }, { 'n': '手工绘画', 'v': '手工绘画' }, { 'n': '萌宠', 'v': '萌宠' }, { 'n': '美食', 'v': '美食' }, { 'n': '时尚', 'v': '时尚' }, { 'n': '社科法律心理', 'v': '社科法律心理' }, { 'n': '人文历史', 'v': '人文历史' }, { 'n': '校园学习', 'v': '校园学习' }, { 'n': '职场·技能', 'v': '职场·技能' }, { 'n': ' 科技', 'v': ' 科技' }, { 'n': '科学科普', 'v': '科学科普' }, { 'n': '时政', 'v': '时政' }, { 'n': '购物', 'v': '购物' }, { 'n': '游戏赛事', 'v': '游戏赛事' }, { 'n': '体育赛事', 'v': '体育赛事' }, { 'n': '赛事综合', 'v': '赛事综合' }, { 'n': '英雄联盟', 'v': '英雄联盟' }, { 'n': 'DOTA2', 'v': 'DOTA2' }, { 'n': 'CS:GO', 'v': 'CS:GO' }, { 'n': 'APEX英雄', 'v': 'APEX英雄' }, { 'n': '永劫无间', 'v': '永劫无间' }, { 'n': '穿越火线', 'v': '穿越火线' }, { 'n': '守望先锋', 'v': '守望先锋' }, { 'n': '吃鸡行动', 'v': '吃鸡行动' }, { 'n': '逃离塔科夫', 'v': '逃离塔科夫' }, { 'n': '传奇', 'v': '传奇' }, { 'n': 'DNF', 'v': 'DNF' }, { 'n': '生死狙击2', 'v': '生死狙击2' }, { 'n': '洛奇英雄传', 'v': '洛奇英雄传' }, { 'n': '最终幻想14', 'v': '最终幻想14' }, { 'n': '星际战甲', 'v': '星际战甲' }, { 'n': '梦三国', 'v': '梦三国' }, { 'n': '英魂之刃', 'v': '英魂之刃' }, { 'n': '剑网3', 'v': '剑网3' }, { 'n': '铁甲雄兵', 'v': '铁甲雄兵' }, { 'n': '封印者', 'v': '封印者' }, { 'n': '新天龙八部', 'v': '新天龙八部' }, { 'n': '赛尔号', 'v': '赛尔号' }, { 'n': '造梦西游', 'v': '造梦西游' }, { 'n': '洛克王国', 'v': '洛克王国' }, { 'n': '问道', 'v': '问道' }, { 'n': '诛仙世界', 'v': '诛仙世界' }, { 'n': '大话西游', 'v': '大话西游' }, { 'n': '奇迹MU', 'v': '奇迹MU' }, { 'n': '永恒之塔', 'v': '永恒之塔' }, { 'n': 'QQ三国', 'v': 'QQ三国' }, { 'n': '人间地狱', 'v': '人间地狱' }, { 'n': 'VALORANT', 'v': 'VALORANT' }, { 'n': '彩虹岛', 'v': '彩虹岛' }, { 'n': '洛奇', 'v': '洛奇' }, { 'n': '跑跑卡丁车', 'v': '跑跑卡丁车' }, { 'n': '星际公民', 'v': '星际公民' }, { 'n': 'Squad战术小队', 'v': 'Squad战术小队' }, { 'n': '反恐精英Online', 'v': '反恐精英Online' }, { 'n': '风暴奇侠', 'v': '风暴奇侠' }, { 'n': '装甲战争', 'v': '装甲战争' }, { 'n': '失落的方舟', 'v': '失落的方舟' }, { 'n': '阿尔比恩', 'v': '阿尔比恩' }, { 'n': '猎杀对决', 'v': '猎杀对决' }, { 'n': 'CFHD', 'v': 'CFHD' }, { 'n': '骑士精神2', 'v': '骑士精神2' }, { 'n': '超击突破', 'v': '超击突破' }, { 'n': '武装突袭', 'v': '武装突袭' }, { 'n': '300英雄', 'v': '300英雄' }, { 'n': '炉石传说', 'v': '炉石传说' }, { 'n': '剑网3缘起', 'v': '剑网3缘起' }, { 'n': '街头篮球', 'v': '街头篮球' }, { 'n': '综合射击', 'v': '综合射击' }, { 'n': '剑灵', 'v': '剑灵' }, { 'n': '艾尔之光', 'v': '艾尔之光' }, { 'n': '黑色沙漠', 'v': '黑色沙漠' }, { 'n': '天涯明月刀', 'v': '天涯明月刀' }, { 'n': '超激斗梦境', 'v': '超激斗梦境' }, { 'n': '冒险岛', 'v': '冒险岛' }, { 'n': '逆战', 'v': '逆战' }, { 'n': '魔兽争霸3', 'v': '魔兽争霸3' }, { 'n': 'QQ飞车', 'v': 'QQ飞车' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': 'FIFA ONLINE 4', 'v': 'FIFA ONLINE 4' }, { 'n': 'NBA2KOL2', 'v': 'NBA2KOL2' }, { 'n': '使命召唤:战区', 'v': '使命召唤:战区' }, { 'n': 'VRChat', 'v': 'VRChat' }, { 'n': '坦克世界', 'v': '坦克世界' }, { 'n': '战舰世界', 'v': '战舰世界' }, { 'n': '战争雷霆', 'v': '战争雷霆' }, { 'n': '战意', 'v': '战意' }, { 'n': '风暴英雄', 'v': '风暴英雄' }, { 'n': '星际争霸2', 'v': '星际争霸2' }, { 'n': '刀塔自走棋', 'v': '刀塔自走棋' }, { 'n': '堡垒之夜', 'v': '堡垒之夜' }, { 'n': '枪神纪', 'v': '枪神纪' }, { 'n': '三国杀', 'v': '三国杀' }, { 'n': '龙之谷', 'v': '龙之谷' }, { 'n': '古剑奇谭OL', 'v': '古剑奇谭OL' }, { 'n': '幻想全明星', 'v': '幻想全明星' }, { 'n': '怀旧网游', 'v': '怀旧网游' }, { 'n': '新游前瞻', 'v': '新游前瞻' }, { 'n': '星战前夜:晨曦', 'v': '星战前夜:晨曦' }, { 'n': '梦幻西游端游', 'v': '梦幻西游端游' }, { 'n': '流放之路', 'v': '流放之路' }, { 'n': 'FPS沙盒', 'v': 'FPS沙盒' }, { 'n': '永恒轮回', 'v': '永恒轮回' }, { 'n': '激战2', 'v': '激战2' }, { 'n': '其他网游', 'v': '其他网游' }, { 'n': '王者荣耀', 'v': '王者荣耀' }, { 'n': '和平精英', 'v': '和平精英' }, { 'n': 'LOL手游', 'v': 'LOL手游' }, { 'n': '原神', 'v': '原神' }, { 'n': '第五人格', 'v': '第五人格' }, { 'n': '明日方舟', 'v': '明日方舟' }, { 'n': '哈利波特:魔法觉醒', 'v': '哈利波特:魔法觉醒' }, { 'n': '幻塔', 'v': '幻塔' }, { 'n': '金铲铲之战', 'v': '金铲铲之战' }, { 'n': 'APEX手游', 'v': 'APEX手游' }, { 'n': '深空之眼', 'v': '深空之眼' }, { 'n': '无期迷途', 'v': '无期迷途' }, { 'n': '光遇', 'v': '光遇' }, { 'n': '香肠派对', 'v': '香肠派对' }, { 'n': '猫之城', 'v': '猫之城' }, { 'n': '玛娜希斯回响', 'v': '玛娜希斯回响' }, { 'n': '使命召唤手游', 'v': '使命召唤手游' }, { 'n': '黑色沙漠手游', 'v': '黑色沙漠手游' }, { 'n': '崩坏3', 'v': '崩坏3' }, { 'n': '游戏王:决斗链接', 'v': '游戏王:决斗链接' }, { 'n': '游戏王', 'v': '游戏王' }, { 'n': '蛋仔派对', 'v': '蛋仔派对' }, { 'n': '阴阳师', 'v': '阴阳师' }, { 'n': '火影忍者手游', 'v': '火影忍者手游' }, { 'n': 'Fate/GO', 'v': 'Fate/GO' }, { 'n': '综合棋牌', 'v': '综合棋牌' }, { 'n': 'QQ飞车手游', 'v': 'QQ飞车手游' }, { 'n': '决战!平安京', 'v': '决战!平安京' }, { 'n': '狼人杀', 'v': '狼人杀' }, { 'n': '三国杀移动版', 'v': '三国杀移动版' }, { 'n': '碧蓝航线', 'v': '碧蓝航线' }, { 'n': '影之诗', 'v': '影之诗' }, { 'n': '明日之后', 'v': '明日之后' }, { 'n': '部落冲突:皇室战争', 'v': '部落冲突:皇室战争' }, { 'n': '奥比岛手游', 'v': '奥比岛手游' }, { 'n': '盾之勇者成名录:浪潮', 'v': '盾之勇者成名录:浪潮' }, { 'n': '雀姬', 'v': '雀姬' }, { 'n': '公主连结Re:Dive', 'v': '公主连结Re:Dive' }, { 'n': 'DNF手游', 'v': 'DNF手游' }, { 'n': 'FIFA足球世界', 'v': 'FIFA足球世界' }, { 'n': 'BanG Dream', 'v': 'BanG Dream' }, { 'n': '荒野乱斗', 'v': '荒野乱斗' }, { 'n': 'CF手游', 'v': 'CF手游' }, { 'n': '战双帕弥什', 'v': '战双帕弥什' }, { 'n': '天涯明月刀手游', 'v': '天涯明月刀手游' }, { 'n': '解密游戏', 'v': '解密游戏' }, { 'n': '恋爱养成游戏', 'v': '恋爱养成游戏' }, { 'n': '暗黑破坏神:不朽', 'v': '暗黑破坏神:不朽' }, { 'n': '暗区突围', 'v': '暗区突围' }, { 'n': '跑跑卡丁车手游', 'v': '跑跑卡丁车手游' }, { 'n': '非人学园', 'v': '非人学园' }, { 'n': '百闻牌', 'v': '百闻牌' }, { 'n': '猫和老鼠手游', 'v': '猫和老鼠手游' }, { 'n': '坎公骑冠剑', 'v': '坎公骑冠剑' }, { 'n': '忍者必须死3', 'v': '忍者必须死3' }, { 'n': '梦幻西游手游', 'v': '梦幻西游手游' }, { 'n': '航海王热血航线', 'v': '航海王热血航线' }, { 'n': '少女前线', 'v': '少女前线' }, { 'n': '300大作战', 'v': '300大作战' }, { 'n': '少女前线:云图计划', 'v': '少女前线:云图计划' }, { 'n': '漫威超级战争', 'v': '漫威超级战争' }, { 'n': '摩尔庄园手游', 'v': '摩尔庄园手游' }, { 'n': '宝可梦大集结', 'v': '宝可梦大集结' }, { 'n': '小动物之星', 'v': '小动物之星' }, { 'n': '天地劫:幽城再临', 'v': '天地劫:幽城再临' }, { 'n': '漫威对决', 'v': '漫威对决' }, { 'n': '东方归言录', 'v': '东方归言录' }, { 'n': '梦幻模拟战', 'v': '梦幻模拟战' }, { 'n': '时空猎人3', 'v': '时空猎人3' }, { 'n': '重返帝国', 'v': '重返帝国' }, { 'n': '其他手游', 'v': '其他手游' }, { 'n': '新游评测', 'v': '新游评测' }, { 'n': '主机游戏', 'v': '主机游戏' }, { 'n': '我的世界', 'v': '我的世界' }, { 'n': '独立游戏', 'v': '独立游戏' }, { 'n': '怀旧游戏', 'v': '怀旧游戏' }, { 'n': '弹幕互动玩法', 'v': '弹幕互动玩法' }, { 'n': '禁闭求生', 'v': '禁闭求生' }, { 'n': '斯普拉遁3', 'v': '斯普拉遁3' }, { 'n': '卧龙:苍天陨落', 'v': '卧龙:苍天陨落' }, { 'n': '恐怖游戏', 'v': '恐怖游戏' }, { 'n': '使命召唤19', 'v': '使命召唤19' }, { 'n': '异度神剑', 'v': '异度神剑' }, { 'n': '艾尔登法环', 'v': '艾尔登法环' }, { 'n': '聚会游戏', 'v': '聚会游戏' }, { 'n': '命运2', 'v': '命运2' }, { 'n': '沙石镇时光', 'v': '沙石镇时光' }, { 'n': 'Dread Hunger', 'v': 'Dread Hunger' }, { 'n': '红色警戒2', 'v': '红色警戒2' }, { 'n': '失落迷城:群星的诅咒', 'v': '失落迷城:群星的诅咒' }, { 'n': '策略游戏', 'v': '策略游戏' }, { 'n': '战地风云', 'v': '战地风云' }, { 'n': '幽灵线:东京', 'v': '幽灵线:东京' }, { 'n': '糖豆人', 'v': '糖豆人' }, { 'n': '消逝的光芒2', 'v': '消逝的光芒2' }, { 'n': '只狼', 'v': '只狼' }, { 'n': '怪物猎人', 'v': '怪物猎人' }, { 'n': '饥荒', 'v': '饥荒' }, { 'n': '精灵宝可梦', 'v': '精灵宝可梦' }, { 'n': 'FIFA23', 'v': 'FIFA23' }, { 'n': '暖雪', 'v': '暖雪' }, { 'n': '全面战争:战锤3', 'v': '全面战争:战锤3' }, { 'n': '彩虹六号:异种', 'v': '彩虹六号:异种' }, { 'n': '战神', 'v': '战神' }, { 'n': 'FORZA 极限竞速', 'v': 'FORZA 极限竞速' }, { 'n': 'NBA2K', 'v': 'NBA2K' }, { 'n': '帝国时代4', 'v': '帝国时代4' }, { 'n': '光环:无限', 'v': '光环:无限' }, { 'n': '孤岛惊魂6', 'v': '孤岛惊魂6' }, { 'n': '植物大战僵尸', 'v': '植物大战僵尸' }, { 'n': '仙剑奇侠传七', 'v': '仙剑奇侠传七' }, { 'n': '灵魂筹码', 'v': '灵魂筹码' }, { 'n': '格斗游戏', 'v': '格斗游戏' }, { 'n': '荒野大镖客2', 'v': '荒野大镖客2' }, { 'n': '重生细胞', 'v': '重生细胞' }, { 'n': '刺客信条', 'v': '刺客信条' }, { 'n': '恐鬼症', 'v': '恐鬼症' }, { 'n': '以撒', 'v': '以撒' }, { 'n': '双人成行', 'v': '双人成行' }, { 'n': '方舟', 'v': '方舟' }, { 'n': '仁王2', 'v': '仁王2' }, { 'n': '鬼泣5', 'v': '鬼泣5' }, { 'n': '枪火重生', 'v': '枪火重生' }, { 'n': '盗贼之海', 'v': '盗贼之海' }, { 'n': '胡闹厨房', 'v': '胡闹厨房' }, { 'n': '体育游戏', 'v': '体育游戏' }, { 'n': '恐惧之间', 'v': '恐惧之间' }, { 'n': '塞尔达', 'v': '塞尔达' }, { 'n': '马力欧制造2', 'v': '马力欧制造2' }, { 'n': '全境封锁2', 'v': '全境封锁2' }, { 'n': '骑马与砍杀', 'v': '骑马与砍杀' }, { 'n': '人类一败涂地', 'v': '人类一败涂地' }, { 'n': '鬼谷八荒', 'v': '鬼谷八荒' }, { 'n': '无主之地3', 'v': '无主之地3' }, { 'n': '辐射76', 'v': '辐射76' }, { 'n': '全面战争', 'v': '全面战争' }, { 'n': '亿万僵尸', 'v': '亿万僵尸' }, { 'n': '暗黑破坏神2', 'v': '暗黑破坏神2' }, { 'n': '文字游戏', 'v': '文字游戏' }, { 'n': '恋爱模拟游戏', 'v': '恋爱模拟游戏' }, { 'n': '泰拉瑞亚', 'v': '泰拉瑞亚' }, { 'n': '雨中冒险2', 'v': '雨中冒险2' }, { 'n': '游戏速通', 'v': '游戏速通' }, { 'n': '摔角城大乱斗', 'v': '摔角城大乱斗' }, { 'n': '勇敢的哈克', 'v': '勇敢的哈克' }, { 'n': ' 审判系列', 'v': ' 审判系列' }, { 'n': '太吾绘卷', 'v': '太吾绘卷' }, { 'n': '其他单机', 'v': '其他单机' }] }], + 'cc': [{ 'key': 'area', 'name': '分区', 'value': [{ 'n': '星秀', 'v': '星秀' }, { 'n': '二次元', 'v': '二次元' }, { 'n': '风华正茂', 'v': '风华正茂' }, { 'n': '正能量', 'v': '正能量' }, { 'n': '古风国色', 'v': '古风国色' }, { 'n': '巨好看', 'v': '巨好看' }, { 'n': '语音', 'v': '语音' }, { 'n': '梦幻西游手游', 'v': '梦幻西游手游' }, { 'n': '倩女幽魂手游', 'v': '倩女幽魂手游' }, { 'n': '第五人格', 'v': '第五人格' }, { 'n': '荒野行动', 'v': '荒野行动' }, { 'n': '大话西游手游', 'v': '大话西游手游' }, { 'n': '明日之后', 'v': '明日之后' }, { 'n': '阴阳师', 'v': '阴阳师' }, { 'n': '率土之滨', 'v': '率土之滨' }, { 'n': '决战!平安京', 'v': '决战!平安京' }, { 'n': '猫和老鼠', 'v': '猫和老鼠' }, { 'n': '暗黑破坏神:不朽', 'v': '暗黑破坏神:不朽' }, { 'n': '光·遇', 'v': '光·遇' }, { 'n': '天谕手游', 'v': '天谕手游' }, { 'n': '镇魔曲手游', 'v': '镇魔曲手游' }, { 'n': '宝可梦大探险', 'v': '宝可梦大探险' }, { 'n': '梦幻西游三维版', 'v': '梦幻西游三维版' }, { 'n': '综合手游', 'v': '综合手游' }, { 'n': '哈利波特:魔法觉醒', 'v': '哈利波特:魔法觉醒' }, { 'n': '神都夜行录', 'v': '神都夜行录' }, { 'n': '王牌竞速', 'v': '王牌竞速' }, { 'n': '星战前夜:无烬星河', 'v': '星战前夜:无烬星河' }, { 'n': '忘川风华录', 'v': '忘川风华录' }, { 'n': '漫威超级战争', 'v': '漫威超级战争' }, { 'n': '无尽的拉格朗日', 'v': '无尽的拉格朗日' }, { 'n': '大唐无双手游', 'v': '大唐无双手游' }, { 'n': '量子特攻', 'v': '量子特攻' }, { 'n': '机动都市阿尔法', 'v': '机动都市阿尔法' }, { 'n': '逆水寒手游', 'v': '逆水寒手游' }, { 'n': '非人学园', 'v': '非人学园' }, { 'n': '光明大陆', 'v': '光明大陆' }, { 'n': '梦幻西游网页版', 'v': '梦幻西游网页版' }, { 'n': '乱斗西游2', 'v': '乱斗西游2' }, { 'n': '《天下》手游', 'v': '《天下》手游' }, { 'n': '劲舞团', 'v': '劲舞团' }, { 'n': '三少爷的剑', 'v': '三少爷的剑' }, { 'n': '迷雾世界', 'v': '迷雾世界' }, { 'n': '终结战场', 'v': '终结战场' }, { 'n': '永远的7日之都', 'v': '永远的7日之都' }, { 'n': '狼人杀', 'v': '狼人杀' }, { 'n': '魂之轨迹', 'v': '魂之轨迹' }, { 'n': '三国如龙传', 'v': '三国如龙传' }, { 'n': '堡垒前线:破坏与创造', 'v': '堡垒前线:破坏与创造' }, { 'n': '战争怒吼', 'v': '战争怒吼' }, { 'n': '猎魂觉醒', 'v': '猎魂觉醒' }, { 'n': '终结战场PC版', 'v': '终结战场PC版' }, { 'n': '轩辕剑龙舞云山', 'v': '轩辕剑龙舞云山' }, { 'n': '实况:王者集结', 'v': '实况:王者集结' }, { 'n': '权力与纷争', 'v': '权力与纷争' }, { 'n': '花与剑', 'v': '花与剑' }, { 'n': '流星群侠传', 'v': '流星群侠传' }, { 'n': '游戏王:决斗链接', 'v': '游戏王:决斗链接' }, { 'n': '遇见逆水寒', 'v': '遇见逆水寒' }, { 'n': '阴阳师:百闻牌', 'v': '阴阳师:百闻牌' }, { 'n': '青璃', 'v': '青璃' }, { 'n': '阴阳师:妖怪屋', 'v': '阴阳师:妖怪屋' }, { 'n': '重装上阵', 'v': '重装上阵' }, { 'n': '猎手之王', 'v': '猎手之王' }, { 'n': '第九所', 'v': '第九所' }, { 'n': 'Badlanders', 'v': 'Badlanders' }, { 'n': '风云岛行动', 'v': '风云岛行动' }, { 'n': '一起优诺', 'v': '一起优诺' }, { 'n': '隐世录', 'v': '隐世录' }, { 'n': '洪荒文明', 'v': '洪荒文明' }, { 'n': '密特拉之星', 'v': '密特拉之星' }, { 'n': '阴阳师: 妖怪小班', 'v': '阴阳师: 妖怪小班' }, { 'n': '漫威对决', 'v': '漫威对决' }, { 'n': '月神的迷宫', 'v': '月神的迷宫' }, { 'n': '有杀气童话2', 'v': '有杀气童话2' }, { 'n': '零号任务', 'v': '零号任务' }, { 'n': '蛋仔派对', 'v': '蛋仔派对' }, { 'n': '绝对演绎', 'v': '绝对演绎' }, { 'n': '大航海之路', 'v': '大航海之路' }, { 'n': '大富翁9', 'v': '大富翁9' }, { 'n': '永恒文明', 'v': '永恒文明' }, { 'n': '新游中心', 'v': '新游中心' }, { 'n': '我的世界中国版', 'v': '我的世界中国版' }, { 'n': '梦幻西游电脑版', 'v': '梦幻西游电脑版' }, { 'n': '大话西游2经典版', 'v': '大话西游2经典版' }, { 'n': '永劫无间', 'v': '永劫无间' }, { 'n': '新倩女幽魂', 'v': '新倩女幽魂' }, { 'n': '荒野行动PC模拟器', 'v': '荒野行动PC模拟器' }, { 'n': '天下3', 'v': '天下3' }, { 'n': '一梦江湖', 'v': '一梦江湖' }, { 'n': '大话西游2免费版', 'v': '大话西游2免费版' }, { 'n': '逆水寒', 'v': '逆水寒' }, { 'n': '其他游戏', 'v': '其他游戏' }, { 'n': '超激斗梦境', 'v': '超激斗梦境' }, { 'n': '魔兽世界怀旧服', 'v': '魔兽世界怀旧服' }, { 'n': '镇魔曲', 'v': '镇魔曲' }, { 'n': 'FPS综合游戏', 'v': 'FPS综合游戏' }, { 'n': '绿茵信仰', 'v': '绿茵信仰' }, { 'n': '天谕', 'v': '天谕' }, { 'n': '魔兽世界', 'v': '魔兽世界' }, { 'n': '大唐无双零', 'v': '大唐无双零' }, { 'n': '武魂2', 'v': '武魂2' }, { 'n': '命运2', 'v': '命运2' }, { 'n': '暗黑破坏神', 'v': '暗黑破坏神' }, { 'n': '泰亚史诗', 'v': '泰亚史诗' }, { 'n': '泰亚史诗', 'v': '泰亚史诗' }, { 'n': '战意', 'v': '战意' }, { 'n': '易次元', 'v': '易次元' }, { 'n': '无主之地3', 'v': '无主之地3' }, { 'n': 'EVE Online', 'v': 'EVE Online' }, { 'n': '全面战争:竞技场', 'v': '全面战争:竞技场' }, { 'n': '暴雪游戏', 'v': '暴雪游戏' }, { 'n': '魔兽争霸', 'v': '魔兽争霸' }, { 'n': '大话女儿国', 'v': '大话女儿国' }] }] }, + detailUrl: '/index/liveRoom?platform=fyclass&roomId=fyid',//二级详情拼接链接(json格式用) + searchUrl: '/api/live/search?platform=all&keyWords=**&isLive=0', + searchable: 2, + quickSearch: 0, + headers: { + 'User-Agent': 'PC_UA' + }, + timeout: 5000, + play_parse: true, + lazy: '', + double: false, + limit: 6, + 推荐: '*', + 一级: 'json:data;roomName;roomPic;ownerName;roomId', + 二级: '*', + 搜索: '*', +} diff --git a/js/drpy.min.js b/js/drpy.min.js new file mode 100644 index 0000000..30fdfce --- /dev/null +++ b/js/drpy.min.js @@ -0,0 +1 @@ +import cheerio from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/cheerio.min.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-js.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/drT.js";function init_test(){console.log("init_test_start");console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}let rule={};const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|APP|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://cms.nokia.press:5706/parse/ocr";if(typeof MY_URL==="undefined"){var MY_URL}var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|data-original|data-src)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;ithis.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1]}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(!SELECT_REGEX_A.test(sp[i])&&iit.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){let data={};obj.body.split("&").forEach(it=>{data[it.split("=")[0]]=it.split("=")[1]});obj.data=data;delete obj.body}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}console.log(JSON.stringify(obj.headers));console.log("request:"+url);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj.method="POST";return request(url,obj)}fetch=request;print=function(data){data=data||"";if(typeof data!=="string"){try{data=JSON.stringify(data)}catch(e){console.log("print:"+e.message)}}console.log(data)};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){obj.headers["Cookie"]=cookie}else if(!obj.headers){obj.headers={Cookie:cookie}}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;const HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);for(let item of items){let items2=_pdfa(item,p[1]);for(let item2 of items2){try{let p2=getPP(p,2,pp,1);let title=_pdfh(item2,p2);let img="";try{let p3=getPP(p,3,pp,2);img=_pd(item2,p3)}catch(e){}let desc="";try{let p4=getPP(p,4,pp,3);desc=_pdfh(item2,p4)}catch(e){}let p5=getPP(p,5,pp,4);let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){let p6=getPP(p,6,pp,5);content=_pdfh(item2,p6)}else{content=""}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:links.join("$")};d.push(vod)}catch(e){console.log("首页列表处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);for(let item of items){try{let p1=getPP(p,1,pp,1);let title=_pdfh(item,p1);let img="";try{let p2=getPP(p,2,pp,2);img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{let p3=getPP(p,3,pp,3);desc=_pdfh(item,p3)}catch(e){}let p4=getPP(p,4,pp,4);let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){let p5=getPP(p,5,pp,5);content=_pdfh(item,p5)}else{content=""}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:links.join("$")};d.push(vod)}catch(e){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;d.push({vod_id:vod_id,vod_name:_pdfh(it,p[1]).replace(/\n|\t/g,"").trim(),vod_pic:_pd(it,p[2],MY_URL),vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}return d.length<1?"{}":JSON.stringify({page:parseInt(cateObj.pg),pagecount:999,limit:20,total:999,list:d})}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd).replaceAll("fypage",searchObj.pg);MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");print("1381 p0:"+p0);try{let html=getHtml(MY_URL);if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}console.log(JSON.stringify(html));console.log(html);let list=_pdfa(html,p0);print(list.length);print(list);list.forEach(it=>{let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){let p5=getPP(p,5,pp,5);content=_pdfh(it,p5)}else{content=""}let ob={vod_id:link,vod_name:_pdfh(it,p1).replace(/\n|\t/g,"").trim(),vod_pic:_pd(it,p2,MY_URL),vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let vod={vod_id:detailObj.orId,vod_name:"片名",vod_pic:"",type_name:"剧情",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;console.log(MY_URL);if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){if(!html){html=getHtml(MY_URL)}let _impJQP=true;let _ps;if(p.is_json){_ps=parseTags.json;html=dealJson(html);_impJQP=false}else if(p.is_jsp){_ps=parseTags.jsp}else if(p.is_jq){_ps=parseTags.jq}else{_ps=parseTags.jq}if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""));if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&typeof html!=="string"){html=html.rr(html.ele).toString()}var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);if(html&&typeof html!=="string"){html=html.rr(html.ele).toString()}var input=MY_URL;eval(p.lists.replace("js:",""));vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);console.log(p1);let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);vodList.forEach(it=>{new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))});let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(!vod.vod_id){vod.vod_id=detailObj.orId}return JSON.stringify({list:[vod]})}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function init(ext){console.log("init");try{if(typeof globalThis.mubanJs==="undefined"){let mubanJs=request("https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js",{"User-Agent":MOBILE_UA});mubanJs=mubanJs.replace("export default","(function() {return muban;}()) // export default");globalThis.mubanJs=mubanJs}let muban=eval(globalThis.mubanJs);if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}}else{eval(ext.replace("var rule","rule"))}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl;rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url;let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick){let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:1,quick:quick};return searchParse(searchObj)}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,DRPY:DRPY}; \ No newline at end of file