diff --git a/JS/js/JustLive.js b/JS/js/JustLive.js index 8b242a0..b47a4d2 100644 --- a/JS/js/JustLive.js +++ b/JS/js/JustLive.js @@ -1,50 +1,158 @@ -// 道长 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',//网站的首页链接,用于分类获取和推荐获取 + // homeUrl: '/api/live/getRecommend?page=1&size=20',//网站的首页链接,用于分类获取和推荐获取 + homeUrl: '/api/live/getRecommendByPlatformArea?platform=bilibili&area=舞见&page=1&size=20',//网站的首页链接,用于分类获取和推荐获取 url: '/api/live/getRecommendByPlatformArea?platform=fyclass&area=fyfilter&page=fypage&size=20', //网站的分类页面链接 - class_name: '斗鱼&虎牙&哔哩&网易', - class_url: 'douyu&huya&bilibili&cc', + class_name: '斗鱼&虎牙&哔哩&网易&抖音', + class_url: 'douyu&huya&bilibili&cc&douyin', filterable: 1, - filter_url: '{{fl.area or "影音馆"}}', - filter_def:{ - douyu:{ - area:'一起看', - }, - huya:{ - area:'一起看', - }, - bilibili:{ - area:'影音馆', - }, - cc:{ - area:'星秀', - } + filter_url: '{{fl.area}}', + filter: { + "douyu":[{"key":"area","name":"分区","value":[{"n":"原创IP","v":"原创IP"},{"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":"企鹅直播","v":"企鹅直播"},{"n":"数码科技","v":"数码科技"},{"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":"CFHD","v":"CFHD"},{"n":"命运方舟","v":"命运方舟"},{"n":"DNF","v":"DNF"},{"n":"DOTA2","v":"DOTA2"},{"n":"使命召唤","v":"使命召唤"},{"n":"炉石传说","v":"炉石传说"},{"n":"CS2","v":"CS2"},{"n":"lol云顶之弈","v":"lol云顶之弈"},{"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":"FC ONLINE","v":"FC ONLINE"},{"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":"反恐精英Online","v":"反恐精英Online"},{"n":"暗黑破坏神","v":"暗黑破坏神"},{"n":"梦三国2","v":"梦三国2"},{"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":"高达文化区"},{"n":"忍者村大战2","v":"忍者村大战2"},{"n":"RPG网游专区","v":"RPG网游专区"},{"n":"诛仙3","v":"诛仙3"},{"n":"笑傲江湖OL","v":"笑傲江湖OL"},{"n":"冒险岛2","v":"冒险岛2"},{"n":"超击突破","v":"超击突破"},{"n":"无尽战区","v":"无尽战区"},{"n":"永恒之塔","v":"永恒之塔"},{"n":"竞速游戏","v":"竞速游戏"},{"n":"FPS综合网游","v":"FPS综合网游"},{"n":"劲舞团","v":"劲舞团"},{"n":"天下","v":"天下"},{"n":"火箭联盟","v":"火箭联盟"},{"n":"泡泡堂","v":"泡泡堂"},{"n":"音乐游戏","v":"音乐游戏"},{"n":"新倩女幽魂","v":"新倩女幽魂"},{"n":"天谕","v":"天谕"},{"n":"QQ炫舞","v":"QQ炫舞"},{"n":"大唐无双","v":"大唐无双"},{"n":"怪物猎人ol","v":"怪物猎人ol"},{"n":"手工星球","v":"手工星球"},{"n":"热血传奇:本源","v":"热血传奇:本源"},{"n":"彩虹岛","v":"彩虹岛"},{"n":"御龙在天","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":"热血江湖online","v":"热血江湖online"},{"n":"千年3","v":"千年3"},{"n":"逍遥情缘","v":"逍遥情缘"},{"n":"快乐西游","v":"快乐西游"},{"n":"诺亚传说","v":"诺亚传说"},{"n":"鹿鼎记","v":"鹿鼎记"},{"n":"武魂2电脑版","v":"武魂2电脑版"},{"n":"奇迹世界sun","v":"奇迹世界sun"},{"n":"剑侠世界2电脑版","v":"剑侠世界2电脑版"},{"n":"斩魂","v":"斩魂"},{"n":"大唐2","v":"大唐2"},{"n":"幻想神域电脑版","v":"幻想神域电脑版"},{"n":"蜀山:初章","v":"蜀山:初章"},{"n":"狼人对决网游","v":"狼人对决网游"},{"n":"武林群侠传","v":"武林群侠传"},{"n":"飘流幻境","v":"飘流幻境"},{"n":"破天一剑","v":"破天一剑"},{"n":"四国军棋","v":"四国军棋"},{"n":"新大话西游3","v":"新大话西游3"},{"n":"装甲战争","v":"装甲战争"},{"n":"暴雪游戏综合","v":"暴雪游戏综合"},{"n":"HypeSquad","v":"HypeSquad"},{"n":"长尾4部虚拟分区","v":"长尾4部虚拟分区"},{"n":"燕云十六声","v":"燕云十六声"},{"n":"THE FINALS","v":"THE FINALS"},{"n":"NBA2K Online","v":"NBA2K Online"},{"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":"格斗游戏","v":"格斗游戏"},{"n":"饥荒","v":"饥荒"},{"n":"全境封锁","v":"全境封锁"},{"n":"怀旧游戏","v":"怀旧游戏"},{"n":"NBA2K","v":"NBA2K"},{"n":"八方旅人","v":"八方旅人"},{"n":"人类一败涂地","v":"人类一败涂地"},{"n":"环世界","v":"环世界"},{"n":"古墓丽影","v":"古墓丽影"},{"n":"鬼泣","v":"鬼泣"},{"n":"往日不再","v":"往日不再"},{"n":"仙剑奇侠传","v":"仙剑奇侠传"},{"n":"神秘海域","v":"神秘海域"},{"n":"塞尔达系列","v":"塞尔达系列"},{"n":"僵尸世界大战","v":"僵尸世界大战"},{"n":"足球游戏","v":"足球游戏"},{"n":"橙光","v":"橙光"},{"n":"了不起的修仙模拟器","v":"了不起的修仙模拟器"},{"n":"超级马里奥","v":"超级马里奥"},{"n":"三国志系列","v":"三国志系列"},{"n":"星际公民","v":"星际公民"},{"n":"最终幻想","v":"最终幻想"},{"n":"中土世界:战争之影","v":"中土世界:战争之影"},{"n":"流放者柯南","v":"流放者柯南"},{"n":"三国群英传","v":"三国群英传"},{"n":"无主之地","v":"无主之地"},{"n":"辐射","v":"辐射"},{"n":"太吾绘卷","v":"太吾绘卷"},{"n":"SCUM","v":"SCUM"},{"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":"极品飞车","v":"极品飞车"},{"n":"胡闹厨房","v":"胡闹厨房"},{"n":"地铁:离去","v":"地铁:离去"},{"n":"生死狙击2","v":"生死狙击2"},{"n":"三国战纪","v":"三国战纪"},{"n":"怀旧FC","v":"怀旧FC"},{"n":"经典单机","v":"经典单机"},{"n":"英雄无敌","v":"英雄无敌"},{"n":"街机游戏","v":"街机游戏"},{"n":"合金装备","v":"合金装备"},{"n":"红色警戒","v":"红色警戒"},{"n":"镜之边缘","v":"镜之边缘"},{"n":"火焰纹章系列","v":"火焰纹章系列"},{"n":"星露谷物语","v":"星露谷物语"},{"n":"赛博朋克2077","v":"赛博朋克2077"},{"n":"中国式家长","v":"中国式家长"},{"n":"尼尔:机械纪元","v":"尼尔:机械纪元"},{"n":"无人深空","v":"无人深空"},{"n":"EVOTINCTION","v":"EVOTINCTION"},{"n":"GT赛车7","v":"GT赛车7"},{"n":"超级机器人大战","v":"超级机器人大战"},{"n":"信长之野望","v":"信长之野望"},{"n":"这是我的战争","v":"这是我的战争"},{"n":"杀戮尖塔","v":"杀戮尖塔"},{"n":"冰汽时代","v":"冰汽时代"},{"n":"帝国时代","v":"帝国时代"},{"n":"死亡空间","v":"死亡空间"},{"n":"凯瑟琳Full Body","v":"凯瑟琳Full Body"},{"n":"足球经理","v":"足球经理"},{"n":"雨中冒险","v":"雨中冒险"},{"n":"亿万僵尸","v":"亿万僵尸"},{"n":"武装突袭","v":"武装突袭"},{"n":"石油大亨","v":"石油大亨"},{"n":"荣耀战魂","v":"荣耀战魂"},{"n":"欧洲卡车模拟器","v":"欧洲卡车模拟器"},{"n":"美国逃亡者","v":"美国逃亡者"},{"n":"漫漫长夜","v":"漫漫长夜"},{"n":"永恒轮回","v":"永恒轮回"},{"n":"孤岛惊魂","v":"孤岛惊魂"},{"n":"都市:天际线","v":"都市:天际线"},{"n":"盗贼之海","v":"盗贼之海"},{"n":"Dayz","v":"Dayz"},{"n":"60秒","v":"60秒"},{"n":"俄罗斯钓鱼","v":"俄罗斯钓鱼"},{"n":"猎人:荒野的召唤","v":"猎人:荒野的召唤"},{"n":"恐怖黎明","v":"恐怖黎明"},{"n":"看门狗","v":"看门狗"},{"n":"真三国无双","v":"真三国无双"},{"n":"泰拉瑞亚","v":"泰拉瑞亚"},{"n":"UFC","v":"UFC"},{"n":"底特律:变人","v":"底特律:变人"},{"n":"恶魔城","v":"恶魔城"},{"n":"毁灭战士","v":"毁灭战士"},{"n":"火影忍者:究极忍者风暴","v":"火影忍者:究极忍者风暴"},{"n":"无尽地牢","v":"无尽地牢"},{"n":"坎巴拉太空计划","v":"坎巴拉太空计划"},{"n":"龙珠:超宇宙","v":"龙珠:超宇宙"},{"n":"马里奥赛车","v":"马里奥赛车"},{"n":"模拟山羊","v":"模拟山羊"},{"n":"欧陆风云","v":"欧陆风云"},{"n":"乞丐模拟器","v":"乞丐模拟器"},{"n":"小偷模拟器","v":"小偷模拟器"},{"n":"逆转裁判","v":"逆转裁判"},{"n":"超越光速","v":"超越光速"},{"n":"植物大战僵尸","v":"植物大战僵尸"},{"n":"游戏开发者","v":"游戏开发者"},{"n":"最后的绿洲","v":"最后的绿洲"},{"n":"大富翁","v":"大富翁"},{"n":"英雄连","v":"英雄连"},{"n":"永劫无间","v":"永劫无间"},{"n":"部落与弯刀","v":"部落与弯刀"},{"n":"森林","v":"森林"},{"n":"只只大冒险","v":"只只大冒险"},{"n":"一起开火车!","v":"一起开火车!"},{"n":"主机其他游戏","v":"主机其他游戏"},{"n":"北境之地","v":"北境之地"},{"n":"temtem","v":"temtem"},{"n":"弹丸论破","v":"弹丸论破"},{"n":"基佬大乱斗","v":"基佬大乱斗"},{"n":"僵尸毁灭工程","v":"僵尸毁灭工程"},{"n":"神力科莎","v":"神力科莎"},{"n":"超级兔子人","v":"超级兔子人"},{"n":"岛屿生存者","v":"岛屿生存者"},{"n":"盟军敢死队","v":"盟军敢死队"},{"n":"冬日计划","v":"冬日计划"},{"n":"泰坦陨落","v":"泰坦陨落"},{"n":"四海兄弟","v":"四海兄弟"},{"n":"创世理想乡","v":"创世理想乡"},{"n":"柯娜:精神之桥","v":"柯娜:精神之桥"},{"n":"幽灵线:东京","v":"幽灵线:东京"},{"n":"Solar Ash","v":"Solar Ash"},{"n":"BUGSNAX","v":"BUGSNAX"},{"n":"生化危机4重制版","v":"生化危机4重制版"},{"n":"Grounded","v":"Grounded"},{"n":"Superliminal","v":"Superliminal"},{"n":"Omno","v":"Omno"},{"n":"Röki","v":"Röki"},{"n":"Undungeon","v":"Undungeon"},{"n":"糖豆人","v":"糖豆人"},{"n":"渡神纪","v":"渡神纪"},{"n":"Aeolis Tournament","v":"Aeolis Tournament"},{"n":"猛兽派对","v":"猛兽派对"},{"n":"Olija","v":"Olija"},{"n":"Creaks","v":"Creaks"},{"n":"暗影火炬城","v":"暗影火炬城"},{"n":"阿尔比恩","v":"阿尔比恩"},{"n":"Uragun","v":"Uragun"},{"n":"鬼谷八荒","v":"鬼谷八荒"},{"n":"Muse Dash","v":"Muse Dash"},{"n":"恐惧之间","v":"恐惧之间"},{"n":"孤岛惊魂6","v":"孤岛惊魂6"},{"n":"怪物猎人","v":"怪物猎人"},{"n":"黑神话:悟空","v":"黑神话:悟空"},{"n":"仁王2","v":"仁王2"},{"n":"三国志14","v":"三国志14"},{"n":"杀手3","v":"杀手3"},{"n":"双人成行","v":"双人成行"},{"n":"Scrapnaut","v":"Scrapnaut"},{"n":"租房达人","v":"租房达人"},{"n":"狙击手:幽灵战士契约2","v":"狙击手:幽灵战士契约2"},{"n":"全面战争","v":"全面战争"},{"n":"复体","v":"复体"},{"n":"战争机器:战术小队","v":"战争机器:战术小队"},{"n":"侠之道","v":"侠之道"},{"n":"海绵宝宝:比奇堡的冒险","v":"海绵宝宝:比奇堡的冒险"},{"n":"奇妙探险队2","v":"奇妙探险队2"},{"n":"刺客信条:奥德赛","v":"刺客信条:奥德赛"},{"n":"星球大战:前线","v":"星球大战:前线"},{"n":"Moonray","v":"Moonray"},{"n":"灵魂旅人","v":"灵魂旅人"},{"n":"面容","v":"面容"},{"n":"破门而入2:北方特遣队","v":"破门而入2:北方特遣队"},{"n":"俄罗斯方块效应:连接","v":"俄罗斯方块效应:连接"},{"n":"SD高达G世纪:起源","v":"SD高达G世纪:起源"},{"n":"东方计划:不可思议的幻想乡","v":"东方计划:不可思议的幻想乡"},{"n":"Fate/EXTELLA","v":"Fate/EXTELLA"},{"n":"临终:重生试炼","v":"临终:重生试炼"},{"n":"虚拟现实乐园","v":"虚拟现实乐园"},{"n":"妖精剑士F","v":"妖精剑士F"},{"n":"苍翼默示录:神观之梦","v":"苍翼默示录:神观之梦"},{"n":"晚班","v":"晚班"},{"n":"子弹风暴","v":"子弹风暴"},{"n":"巡警","v":"巡警"},{"n":"耻辱之日","v":"耻辱之日"},{"n":"狙击精英4","v":"狙击精英4"},{"n":"三国志13:威力加强版","v":"三国志13:威力加强版"},{"n":"热血物语:地下世界","v":"热血物语:地下世界"},{"n":"史诗战争模拟器","v":"史诗战争模拟器"},{"n":"银河护卫队","v":"银河护卫队"},{"n":"闪乱神乐:少女们的选择","v":"闪乱神乐:少女们的选择"},{"n":"幽灵行动:荒野","v":"幽灵行动:荒野"},{"n":"白色情人节","v":"白色情人节"},{"n":"美国职业摔角联盟2K17","v":"美国职业摔角联盟2K17"},{"n":"誓死坚守","v":"誓死坚守"},{"n":"喷射侠","v":"喷射侠"},{"n":"双截龙4","v":"双截龙4"},{"n":"地下蚁国","v":"地下蚁国"},{"n":"九张羊皮纸","v":"九张羊皮纸"},{"n":"咒语力量3","v":"咒语力量3"},{"n":"小兵大战","v":"小兵大战"},{"n":"维京人 人中之狼","v":"维京人 人中之狼"},{"n":"你好邻居","v":"你好邻居"},{"n":"寻找天堂","v":"寻找天堂"},{"n":"画中世界","v":"画中世界"},{"n":"桥梁工程师传送门","v":"桥梁工程师传送门"},{"n":"现代战争","v":"现代战争"},{"n":"SCP:秘密实验室","v":"SCP:秘密实验室"},{"n":"绯红结系","v":"绯红结系"},{"n":"罪恶装备:STRIVE","v":"罪恶装备:STRIVE"},{"n":"骑士精神2","v":"骑士精神2"},{"n":"Rune Knights","v":"Rune Knights"},{"n":"最后的咒语","v":"最后的咒语"},{"n":"红至日2:幸存者","v":"红至日2:幸存者"},{"n":"真女神转生3","v":"真女神转生3"},{"n":"速降王者","v":"速降王者"},{"n":"工业崛起","v":"工业崛起"},{"n":"征服的荣耀:围城","v":"征服的荣耀:围城"},{"n":"前往中世纪","v":"前往中世纪"},{"n":"Arid","v":"Arid"},{"n":"伊始之地","v":"伊始之地"},{"n":"进击的巨人2","v":"进击的巨人2"},{"n":"航海日记2","v":"航海日记2"},{"n":"隐龙传:影踪","v":"隐龙传:影踪"},{"n":"魔域之书","v":"魔域之书"},{"n":"诸神灰烬:救赎","v":"诸神灰烬:救赎"},{"n":"自由人:游击战争","v":"自由人:游击战争"},{"n":"战国无双5","v":"战国无双5"},{"n":"死亡教堂","v":"死亡教堂"},{"n":"灵魂能力6","v":"灵魂能力6"},{"n":"不要喂食猴子","v":"不要喂食猴子"},{"n":"古剑奇谭3","v":"古剑奇谭3"},{"n":"迷城重生","v":"迷城重生"},{"n":"剑士","v":"剑士"},{"n":"GRIS","v":"GRIS"},{"n":"古剑奇谭:永夜","v":"古剑奇谭:永夜"},{"n":"核爆RPG","v":"核爆RPG"},{"n":"Below","v":"Below"},{"n":"嗜血印","v":"嗜血印"},{"n":"伊苏9","v":"伊苏9"},{"n":"兽人必须死3","v":"兽人必须死3"},{"n":"狙击精英VR","v":"狙击精英VR"},{"n":"遗忘之城","v":"遗忘之城"},{"n":"Last Stop","v":"Last Stop"},{"n":"从军","v":"从军"},{"n":"石炉","v":"石炉"},{"n":"狂热运输2","v":"狂热运输2"},{"n":"机甲战士5","v":"机甲战士5"},{"n":"分手装修","v":"分手装修"},{"n":"PICO PARK","v":"PICO PARK"},{"n":"光明记忆:无限","v":"光明记忆:无限"},{"n":"秘馆疑踪","v":"秘馆疑踪"},{"n":"英雄传说:创之轨迹","v":"英雄传说:创之轨迹"},{"n":"战地系列","v":"战地系列"},{"n":"塞尔达传说:天空之剑HD","v":"塞尔达传说:天空之剑HD"},{"n":"国王的恩赐2","v":"国王的恩赐2"},{"n":"脑航员2","v":"脑航员2"},{"n":"九十六号公路","v":"九十六号公路"},{"n":"FORECLOSED","v":"FORECLOSED"},{"n":"RiMS Racing","v":"RiMS Racing"},{"n":"漫威银河护卫队","v":"漫威银河护卫队"},{"n":"剑侠图","v":"剑侠图"},{"n":"审判之逝","v":"审判之逝"},{"n":"艾尔登法环","v":"艾尔登法环"},{"n":"互动派对","v":"互动派对"},{"n":"极限竞速:地平线5","v":"极限竞速:地平线5"},{"n":"使命召唤系列","v":"使命召唤系列"},{"n":"网吧模拟器","v":"网吧模拟器"},{"n":"The Anacrusis","v":"The Anacrusis"},{"n":"文字游戏","v":"文字游戏"},{"n":"消逝的光芒2","v":"消逝的光芒2"},{"n":"战神:诸神黄昏","v":"战神:诸神黄昏"},{"n":"师父","v":"师父"},{"n":"海上狼人杀","v":"海上狼人杀"},{"n":"最终幻想:起源","v":"最终幻想:起源"},{"n":"HordeCore","v":"HordeCore"},{"n":"Indies’ Lies","v":"Indies’ Lies"},{"n":"霍格沃茨之遗","v":"霍格沃茨之遗"},{"n":"太荒初境","v":"太荒初境"},{"n":"Deck of Ashes","v":"Deck of Ashes"},{"n":"星空","v":"星空"},{"n":"隐秘的角落","v":"隐秘的角落"},{"n":"江湖客栈","v":"江湖客栈"},{"n":"Ilysia","v":"Ilysia"},{"n":"Project Q","v":"Project Q"},{"n":"Pummel Party","v":"Pummel Party"},{"n":"Holomento","v":"Holomento"},{"n":"Overprime","v":"Overprime"},{"n":"森林之子","v":"森林之子"},{"n":"弈仙牌","v":"弈仙牌"},{"n":"夜族崛起","v":"夜族崛起"},{"n":"漫威SNAP","v":"漫威SNAP"},{"n":"魔力宝贝","v":"魔力宝贝"},{"n":"木卫四协议","v":"木卫四协议"},{"n":"罗马复兴","v":"罗马复兴"},{"n":"风暴之门","v":"风暴之门"},{"n":"暗邪西部","v":"暗邪西部"},{"n":"堕落之主","v":"堕落之主"},{"n":"High on Life","v":"High on Life"},{"n":"匹诺曹的谎言","v":"匹诺曹的谎言"},{"n":"逃生:试炼","v":"逃生:试炼"},{"n":"战锤40K:暗潮","v":"战锤40K:暗潮"},{"n":"Isonzo","v":"Isonzo"},{"n":"索尼克 未知边境","v":"索尼克 未知边境"},{"n":"漂泊牧歌","v":"漂泊牧歌"},{"n":"塞尔达传说:王国之泪","v":"塞尔达传说:王国之泪"},{"n":"破碎线","v":"破碎线"},{"n":"卧龙:苍天陨落","v":"卧龙:苍天陨落"},{"n":"卡库远古封印","v":"卡库远古封印"},{"n":"原子之心","v":"原子之心"},{"n":"霓虹入侵者","v":"霓虹入侵者"},{"n":"Warhaven","v":"Warhaven"},{"n":"宝可梦:朱/紫","v":"宝可梦:朱/紫"},{"n":"第一后裔","v":"第一后裔"},{"n":"铳墓G.O.R.E.","v":"铳墓G.O.R.E."},{"n":"Kingshunt","v":"Kingshunt"},{"n":"漫威暗夜之子","v":"漫威暗夜之子"},{"n":"奇怪的RPG","v":"奇怪的RPG"},{"n":"Evercore Heroes","v":"Evercore Heroes"},{"n":"东方:平野孤鸿","v":"东方:平野孤鸿"},{"n":"神之天平","v":"神之天平"},{"n":"伊克西翁","v":"伊克西翁"},{"n":"主机一起看","v":"主机一起看"},{"n":"社交互动游戏","v":"社交互动游戏"},{"n":"Divine Knockout","v":"Divine Knockout"},{"n":"巫师系列","v":"巫师系列"},{"n":"至暗时刻","v":"至暗时刻"},{"n":"江湖十一","v":"江湖十一"},{"n":"XDefiant","v":"XDefiant"},{"n":"刺客信条:幻景","v":"刺客信条:幻景"},{"n":"Warlander","v":"Warlander"},{"n":"狂野之心","v":"狂野之心"},{"n":"Scars Above","v":"Scars Above"},{"n":"Pacific Drive","v":"Pacific Drive"},{"n":"收获日3","v":"收获日3"},{"n":"浮生箓2:九九行歌","v":"浮生箓2:九九行歌"},{"n":"The Front","v":"The Front"},{"n":"最终幻想16","v":"最终幻想16"},{"n":"街头霸王","v":"街头霸王"},{"n":"Tchia","v":"Tchia"},{"n":"魔戒:咕噜","v":"魔戒:咕噜"},{"n":"Prison Life 2","v":"Prison Life 2"},{"n":"Innchanted","v":"Innchanted"},{"n":"Life by You","v":"Life by You"},{"n":"Eresys","v":"Eresys"},{"n":"Pax Dei","v":"Pax Dei"},{"n":"Teravit","v":"Teravit"},{"n":"Caliber","v":"Caliber"},{"n":"沙盒与副本:英勇之地","v":"沙盒与副本:英勇之地"},{"n":"Coridden","v":"Coridden"},{"n":"Unrecord","v":"Unrecord"},{"n":"Deducto 2","v":"Deducto 2"},{"n":"装甲核心6:境界天火","v":"装甲核心6:境界天火"},{"n":"Wayfinder","v":"Wayfinder"},{"n":"迷瘴纪事","v":"迷瘴纪事"},{"n":"Minigame Madness","v":"Minigame Madness"},{"n":"Only Up","v":"Only Up"},{"n":"天文世界","v":"天文世界"},{"n":"学园构想家","v":"学园构想家"},{"n":"Jusant","v":"Jusant"},{"n":"潜水员戴夫","v":"潜水员戴夫"},{"n":"GYLT","v":"GYLT"},{"n":"遗迹2","v":"遗迹2"},{"n":"索利斯堡","v":"索利斯堡"},{"n":"Towerborne","v":"Towerborne"},{"n":"33 Immortals","v":"33 Immortals"},{"n":"Wildmender","v":"Wildmender"},{"n":"How 2 Escape","v":"How 2 Escape"},{"n":"漫威蜘蛛侠2","v":"漫威蜘蛛侠2"},{"n":"博德之门3","v":"博德之门3"},{"n":"Eternights","v":"Eternights"},{"n":"Project F","v":"Project F"},{"n":"BaldMan Climbs Up","v":"BaldMan Climbs Up"},{"n":"FC24","v":"FC24"},{"n":"NBA 2K24","v":"NBA 2K24"},{"n":"超级马里奥兄弟:惊奇","v":"超级马里奥兄弟:惊奇"},{"n":"蛮荒志异","v":"蛮荒志异"},{"n":"王者荣耀","v":"王者荣耀"},{"n":"LOL手游","v":"LOL手游"},{"n":"崩坏:星穹铁道","v":"崩坏:星穹铁道"},{"n":"逆水寒手游","v":"逆水寒手游"},{"n":"和平精英","v":"和平精英"},{"n":"暗区突围","v":"暗区突围"},{"n":"蛋仔派对","v":"蛋仔派对"},{"n":"高能英雄","v":"高能英雄"},{"n":"幻塔","v":"幻塔"},{"n":"火影忍者","v":"火影忍者"},{"n":"COD手游","v":"COD手游"},{"n":"lol电竞经理","v":"lol电竞经理"},{"n":"DNF手游","v":"DNF手游"},{"n":"金铲铲之战","v":"金铲铲之战"},{"n":"天刀手游","v":"天刀手游"},{"n":"原神","v":"原神"},{"n":"航海王热血航线","v":"航海王热血航线"},{"n":"元梦之星","v":"元梦之星"},{"n":"鸿图之下","v":"鸿图之下"},{"n":"欢乐麻将","v":"欢乐麻将"},{"n":"王者模拟战","v":"王者模拟战"},{"n":"中国象棋","v":"中国象棋"},{"n":"天谕手游","v":"天谕手游"},{"n":"巅峰坦克","v":"巅峰坦克"},{"n":"新游中心","v":"新游中心"},{"n":"热门手游","v":"热门手游"},{"n":"梦幻手游","v":"梦幻手游"},{"n":"QQ飞车","v":"QQ飞车"},{"n":"第五人格","v":"第五人格"},{"n":"欢乐斗地主","v":"欢乐斗地主"},{"n":"荒野乱斗","v":"荒野乱斗"},{"n":"阴阳师","v":"阴阳师"},{"n":"狼人杀","v":"狼人杀"},{"n":"JJ斗地主","v":"JJ斗地主"},{"n":"梦幻新诛仙","v":"梦幻新诛仙"},{"n":"多多自走棋","v":"多多自走棋"},{"n":"崩坏3","v":"崩坏3"},{"n":"风云岛行动","v":"风云岛行动"},{"n":"云游戏","v":"云游戏"},{"n":"跑跑手游","v":"跑跑手游"},{"n":"率土之滨","v":"率土之滨"},{"n":"灌篮高手","v":"灌篮高手"},{"n":"皇室战争","v":"皇室战争"},{"n":"忍者必须死3","v":"忍者必须死3"},{"n":"神武4手游","v":"神武4手游"},{"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":"圣斗士星矢","v":"圣斗士星矢"},{"n":"魔力宝贝手游","v":"魔力宝贝手游"},{"n":"哈利波特:魔法觉醒","v":"哈利波特:魔法觉醒"},{"n":"手游推广","v":"手游推广"},{"n":"魔灵召唤","v":"魔灵召唤"},{"n":"香肠派对","v":"香肠派对"},{"n":"迷你世界","v":"迷你世界"},{"n":"FC足球世界","v":"FC足球世界"},{"n":"街篮","v":"街篮"},{"n":"明日方舟","v":"明日方舟"},{"n":"一梦江湖","v":"一梦江湖"},{"n":"完美世界手游","v":"完美世界手游"},{"n":"拳皇98OL","v":"拳皇98OL"},{"n":"赛尔号","v":"赛尔号"},{"n":"仙境传说","v":"仙境传说"},{"n":"流星群侠传","v":"流星群侠传"},{"n":"逃跑吧少年","v":"逃跑吧少年"},{"n":"石器时代","v":"石器时代"},{"n":"RPG手游","v":"RPG手游"},{"n":"英魂之刃口袋版","v":"英魂之刃口袋版"},{"n":"倩女幽魂手游","v":"倩女幽魂手游"},{"n":"决斗之城2","v":"决斗之城2"},{"n":"传奇手游","v":"传奇手游"},{"n":"雀魂","v":"雀魂"},{"n":"二次元手游","v":"二次元手游"},{"n":"征途2手游","v":"征途2手游"},{"n":"万王之王3D","v":"万王之王3D"},{"n":"武林外传","v":"武林外传"},{"n":"潮人篮球","v":"潮人篮球"},{"n":"元气骑士","v":"元气骑士"},{"n":"红警OL手游","v":"红警OL手游"},{"n":"植物大战僵尸手游","v":"植物大战僵尸手游"},{"n":"创造与魔法","v":"创造与魔法"},{"n":"奇迹觉醒","v":"奇迹觉醒"},{"n":"光遇","v":"光遇"},{"n":"游戏王:决斗链接","v":"游戏王:决斗链接"},{"n":"巅峰战舰","v":"巅峰战舰"},{"n":"寻仙","v":"寻仙"},{"n":"天天象棋","v":"天天象棋"},{"n":"王国纪元","v":"王国纪元"},{"n":"龙族幻想","v":"龙族幻想"},{"n":"三国杀移动版","v":"三国杀移动版"},{"n":"罗布乐思","v":"罗布乐思"},{"n":"足球手游","v":"足球手游"},{"n":"月圆之夜","v":"月圆之夜"},{"n":"秦时明月世界","v":"秦时明月世界"},{"n":"麻将来了","v":"麻将来了"},{"n":"风之大陆","v":"风之大陆"},{"n":"金属对决","v":"金属对决"},{"n":"轩辕剑龙舞云山","v":"轩辕剑龙舞云山"},{"n":"微乐棋牌","v":"微乐棋牌"},{"n":"辐射:避难所Online","v":"辐射:避难所Online"},{"n":"街篮2","v":"街篮2"},{"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":"Disorder","v":"Disorder"},{"n":"云上城之歌","v":"云上城之歌"},{"n":"五子棋","v":"五子棋"},{"n":"围棋","v":"围棋"},{"n":"全球行动","v":"全球行动"},{"n":"诛仙手游","v":"诛仙手游"},{"n":"妄想山海","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":"横扫千军","v":"横扫千军"},{"n":"节奏大爆炸","v":"节奏大爆炸"},{"n":"喵斯快跑","v":"喵斯快跑"},{"n":"双子","v":"双子"},{"n":"小美斗地主","v":"小美斗地主"},{"n":"精灵之境","v":"精灵之境"},{"n":"斗罗大陆:武魂觉醒","v":"斗罗大陆:武魂觉醒"},{"n":"斗罗大陆2绝世唐门","v":"斗罗大陆2绝世唐门"},{"n":"战神觉醒","v":"战神觉醒"},{"n":"九州仙剑传H5","v":"九州仙剑传H5"},{"n":"荣耀大天使","v":"荣耀大天使"},{"n":"蓝月传奇","v":"蓝月传奇"},{"n":"凡人修仙传挂机版H5","v":"凡人修仙传挂机版H5"},{"n":"攻城掠地","v":"攻城掠地"},{"n":"盗墓笔记","v":"盗墓笔记"},{"n":"拳魂觉醒","v":"拳魂觉醒"},{"n":"大天使之剑","v":"大天使之剑"},{"n":"绝世仙王","v":"绝世仙王"},{"n":"一刀传世","v":"一刀传世"},{"n":"斗罗大陆","v":"斗罗大陆"},{"n":"破雪刃","v":"破雪刃"},{"n":"JJ象棋","v":"JJ象棋"},{"n":"天姬变","v":"天姬变"},{"n":"剑玲珑","v":"剑玲珑"},{"n":"火线精英","v":"火线精英"},{"n":"造梦西游OL","v":"造梦西游OL"},{"n":"奥奇传说手游","v":"奥奇传说手游"},{"n":"战斗吧龙魂","v":"战斗吧龙魂"},{"n":"剑开仙门","v":"剑开仙门"},{"n":"狼人对决","v":"狼人对决"},{"n":"最终幻想:勇气启示录 幻影战争","v":"最终幻想:勇气启示录 幻影战争"},{"n":"葫芦娃兄弟","v":"葫芦娃兄弟"},{"n":"造梦西游4","v":"造梦西游4"},{"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":"300大作战","v":"300大作战"},{"n":"2047","v":"2047"},{"n":"第七史诗","v":"第七史诗"},{"n":"汉末霸业","v":"汉末霸业"},{"n":"EVE星战前夜:无烬星河","v":"EVE星战前夜:无烬星河"},{"n":"少女前线2:追放","v":"少女前线2:追放"},{"n":"弹力果冻","v":"弹力果冻"},{"n":"火力苏打(T3)","v":"火力苏打(T3)"},{"n":"植物大战僵尸2","v":"植物大战僵尸2"},{"n":"球球英雄","v":"球球英雄"},{"n":"悠长假期","v":"悠长假期"},{"n":"无悔华夏","v":"无悔华夏"},{"n":"猫之城","v":"猫之城"},{"n":"未定事件簿","v":"未定事件簿"},{"n":"白夜极光","v":"白夜极光"},{"n":"ProjectGAIA","v":"ProjectGAIA"},{"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":"剑侠世界3","v":"剑侠世界3"},{"n":"召唤与合成2","v":"召唤与合成2"},{"n":"像素时代","v":"像素时代"},{"n":"仙侠第一放置","v":"仙侠第一放置"},{"n":"无尽的拉格朗日","v":"无尽的拉格朗日"},{"n":"弓箭手大作战","v":"弓箭手大作战"},{"n":"挨饿荒野","v":"挨饿荒野"},{"n":"诺亚之心","v":"诺亚之心"},{"n":"闪耀暖暖","v":"闪耀暖暖"},{"n":"物种起源","v":"物种起源"},{"n":"模拟城市:我是市长","v":"模拟城市:我是市长"},{"n":"重返帝国","v":"重返帝国"},{"n":"太古仙尊","v":"太古仙尊"},{"n":"长安幻想","v":"长安幻想"},{"n":"火炬之光:无限","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":"欧陆战争5:帝国","v":"欧陆战争5:帝国"},{"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":"奥特曼系列OL","v":"奥特曼系列OL"},{"n":"欢喜斗地主","v":"欢喜斗地主"},{"n":"洪荒文明","v":"洪荒文明"},{"n":"街头足球","v":"街头足球"},{"n":"同人圣三国蜀汉传","v":"同人圣三国蜀汉传"},{"n":"塔防之光","v":"塔防之光"},{"n":"我做夫人那些年","v":"我做夫人那些年"},{"n":"小小五千年","v":"小小五千年"},{"n":"乖离性百万亚瑟王:环","v":"乖离性百万亚瑟王:环"},{"n":"时空猎人","v":"时空猎人"},{"n":"星际逆战","v":"星际逆战"},{"n":"羽毛球高高手","v":"羽毛球高高手"},{"n":"LoveLive! 学园偶像祭","v":"LoveLive! 学园偶像祭"},{"n":"黑色沙漠手游","v":"黑色沙漠手游"},{"n":"魔力宝贝:旅人","v":"魔力宝贝:旅人"},{"n":"大家饿餐厅","v":"大家饿餐厅"},{"n":"魔力宝贝归来","v":"魔力宝贝归来"},{"n":"巅峰极速","v":"巅峰极速"},{"n":"新盗墓笔记","v":"新盗墓笔记"},{"n":"轩辕传奇手游","v":"轩辕传奇手游"},{"n":"萤火突击国际服","v":"萤火突击国际服"},{"n":"武林闲侠","v":"武林闲侠"},{"n":"淘米游戏","v":"淘米游戏"},{"n":"无期迷途","v":"无期迷途"},{"n":"逆光潜入","v":"逆光潜入"},{"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":"重返CODM","v":"重返CODM"},{"n":"综合手游","v":"综合手游"},{"n":"IP游戏","v":"IP游戏"},{"n":"鸣潮","v":"鸣潮"},{"n":"棋牌游戏","v":"棋牌游戏"},{"n":"奥比岛:梦想国度","v":"奥比岛:梦想国度"},{"n":"晶核","v":"晶核"},{"n":"星之破晓","v":"星之破晓"},{"n":"赛尔计划","v":"赛尔计划"},{"n":"SLG综合","v":"SLG综合"},{"n":"代号:伙伴","v":"代号:伙伴"},{"n":"天使之战","v":"天使之战"},{"n":"全明星街球派对","v":"全明星街球派对"},{"n":"合金弹头:觉醒","v":"合金弹头:觉醒"},{"n":"劲乐幻想","v":"劲乐幻想"},{"n":"白荆回廊","v":"白荆回廊"},{"n":"战地无疆","v":"战地无疆"},{"n":"三国志战棋版","v":"三国志战棋版"},{"n":"一拳超人:世界","v":"一拳超人:世界"},{"n":"鹅鸭杀手游","v":"鹅鸭杀手游"},{"n":"太空杀","v":"太空杀"},{"n":"大话西游:归来","v":"大话西游:归来"},{"n":"战火勋章","v":"战火勋章"},{"n":"西行纪 燃魂","v":"西行纪 燃魂"},{"n":"决胜巅峰","v":"决胜巅峰"},{"n":"冒险岛:枫之传说","v":"冒险岛:枫之传说"},{"n":"七人传奇:光与暗之交战","v":"七人传奇:光与暗之交战"},{"n":"综合桌游","v":"综合桌游"},{"n":"闪耀!优俊少女","v":"闪耀!优俊少女"},{"n":"三角洲行动","v":"三角洲行动"},{"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":"CS2","v":"CS2"},{"n":"穿越火线","v":"穿越火线"},{"n":"lol云顶之弈","v":"lol云顶之弈"},{"n":"无畏契约","v":"无畏契约"},{"n":"CFHD","v":"CFHD"},{"n":"逆战","v":"逆战"},{"n":"炉石传说","v":"炉石传说"},{"n":"DOTA2","v":"DOTA2"},{"n":"地下城与勇士","v":"地下城与勇士"},{"n":"魔兽世界","v":"魔兽世界"},{"n":"坦克世界","v":"坦克世界"},{"n":"DOTA1","v":"DOTA1"},{"n":"梦三国","v":"梦三国"},{"n":"魔兽争霸3","v":"魔兽争霸3"},{"n":"问道","v":"问道"},{"n":"命运方舟","v":"命运方舟"},{"n":"QQ飞车","v":"QQ飞车"},{"n":"星际争霸","v":"星际争霸"},{"n":"网游竞技","v":"网游竞技"},{"n":"射击综合游戏","v":"射击综合游戏"},{"n":"暴雪专区","v":"暴雪专区"},{"n":"彩虹岛Online","v":"彩虹岛Online"},{"n":"剑灵","v":"剑灵"},{"n":"军事游戏","v":"军事游戏"},{"n":"冒险岛","v":"冒险岛"},{"n":"暗黑破坏神","v":"暗黑破坏神"},{"n":"诛仙3","v":"诛仙3"},{"n":"热血江湖","v":"热血江湖"},{"n":"英魂之刃","v":"英魂之刃"},{"n":"武林外传一世琴缘","v":"武林外传一世琴缘"},{"n":"起凡:群雄逐鹿","v":"起凡:群雄逐鹿"},{"n":"神武4电脑版","v":"神武4电脑版"},{"n":"龙之谷","v":"龙之谷"},{"n":"炉石战棋","v":"炉石战棋"},{"n":"御龙在天","v":"御龙在天"},{"n":"逆水寒","v":"逆水寒"},{"n":"千年3","v":"千年3"},{"n":"永恒之塔","v":"永恒之塔"},{"n":"体育游戏","v":"体育游戏"},{"n":"寻仙","v":"寻仙"},{"n":"战舰世界","v":"战舰世界"},{"n":"QQ三国","v":"QQ三国"},{"n":"流放之路","v":"流放之路"},{"n":"反恐精英Online","v":"反恐精英Online"},{"n":"反恐行动online","v":"反恐行动online"},{"n":"征途","v":"征途"},{"n":"战争雷霆","v":"战争雷霆"},{"n":"丝路传说2","v":"丝路传说2"},{"n":"星际战甲","v":"星际战甲"},{"n":"NBA2KOL系列","v":"NBA2KOL系列"},{"n":"九阴真经","v":"九阴真经"},{"n":"跑跑卡丁车","v":"跑跑卡丁车"},{"n":"诛仙世界","v":"诛仙世界"},{"n":"QQ华夏","v":"QQ华夏"},{"n":"天涯明月刀","v":"天涯明月刀"},{"n":"大话西游:归来","v":"大话西游:归来"},{"n":"荒野行动PC版","v":"荒野行动PC版"},{"n":"新剑侠情缘","v":"新剑侠情缘"},{"n":"剑网3","v":"剑网3"},{"n":"生死狙击2","v":"生死狙击2"},{"n":"全球使命","v":"全球使命"},{"n":"梦想世界3","v":"梦想世界3"},{"n":"枪神纪","v":"枪神纪"},{"n":"新天龙八部","v":"新天龙八部"},{"n":"铁甲雄兵","v":"铁甲雄兵"},{"n":"神泣","v":"神泣"},{"n":"斗战神","v":"斗战神"},{"n":"造梦西游OL","v":"造梦西游OL"},{"n":"天堂","v":"天堂"},{"n":"大话西游2","v":"大话西游2"},{"n":"使命召唤:战区","v":"使命召唤:战区"},{"n":"希望OL","v":"希望OL"},{"n":"极光世界 弑神传","v":"极光世界 弑神传"},{"n":"守望先锋归来","v":"守望先锋归来"},{"n":"QQ自由幻想","v":"QQ自由幻想"},{"n":"命运2","v":"命运2"},{"n":"奇迹世界2","v":"奇迹世界2"},{"n":"坦克大战","v":"坦克大战"},{"n":"生死狙击","v":"生死狙击"},{"n":"天翼决","v":"天翼决"},{"n":"QQ幻想","v":"QQ幻想"},{"n":"新飞飞(FlyFF)","v":"新飞飞(FlyFF)"},{"n":"刀剑英雄","v":"刀剑英雄"},{"n":"FIFA Online系列","v":"FIFA Online系列"},{"n":"全球使命3","v":"全球使命3"},{"n":"完美端游系列","v":"完美端游系列"},{"n":"战意","v":"战意"},{"n":"泡泡堂","v":"泡泡堂"},{"n":"赛尔号","v":"赛尔号"},{"n":"大唐无双零","v":"大唐无双零"},{"n":"QQ炫舞","v":"QQ炫舞"},{"n":"007:传奇","v":"007:传奇"},{"n":"天下","v":"天下"},{"n":"天谕","v":"天谕"},{"n":"新倩女幽魂","v":"新倩女幽魂"},{"n":"传世无双","v":"传世无双"},{"n":"剑侠世界","v":"剑侠世界"},{"n":"Warhaven","v":"Warhaven"},{"n":"诺亚传说","v":"诺亚传说"},{"n":"新挑战","v":"新挑战"},{"n":"超激斗梦境","v":"超激斗梦境"},{"n":"QQ音速","v":"QQ音速"},{"n":"征途2","v":"征途2"},{"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":"远征Online梦想版","v":"远征Online梦想版"},{"n":"奇迹:传奇","v":"奇迹:传奇"},{"n":"封印者","v":"封印者"},{"n":"上古世纪","v":"上古世纪"},{"n":"梦幻诛仙2","v":"梦幻诛仙2"},{"n":"TERA Online","v":"TERA Online"},{"n":"倚天Ⅱ","v":"倚天Ⅱ"},{"n":"街头篮球","v":"街头篮球"},{"n":"永恒轮回:无限","v":"永恒轮回:无限"},{"n":"火线精英","v":"火线精英"},{"n":"忍者村大战2","v":"忍者村大战2"},{"n":"领地人生","v":"领地人生"},{"n":"仙侠世界","v":"仙侠世界"},{"n":"洛奇英雄传","v":"洛奇英雄传"},{"n":"KARDS","v":"KARDS"},{"n":"无限法则","v":"无限法则"},{"n":"全面战争:竞技场","v":"全面战争:竞技场"},{"n":"自由篮球","v":"自由篮球"},{"n":"FC Online4","v":"FC Online4"},{"n":"战地之王","v":"战地之王"},{"n":"古剑奇谭OL","v":"古剑奇谭OL"},{"n":"QQ仙侠传","v":"QQ仙侠传"},{"n":"300英雄","v":"300英雄"},{"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":"Dark and Darker","v":"Dark and Darker"},{"n":"The Front","v":"The Front"},{"n":"Apex英雄","v":"Apex英雄"},{"n":"生化危机4重制版","v":"生化危机4重制版"},{"n":"DayZ独立版","v":"DayZ独立版"},{"n":"星空","v":"星空"},{"n":"互动剧游","v":"互动剧游"},{"n":"艾尔登法环","v":"艾尔登法环"},{"n":"恐惧之间","v":"恐惧之间"},{"n":"SCUM","v":"SCUM"},{"n":"Dread Hunger","v":"Dread Hunger"},{"n":"塞尔达传说:王国之泪","v":"塞尔达传说:王国之泪"},{"n":"欧洲卡车模拟","v":"欧洲卡车模拟"},{"n":"洛克王国","v":"洛克王国"},{"n":"卧龙:苍天陨落","v":"卧龙:苍天陨落"},{"n":"无人深空","v":"无人深空"},{"n":"帝国神话","v":"帝国神话"},{"n":"饥荒","v":"饥荒"},{"n":"森林之子","v":"森林之子"},{"n":"星球大战系列","v":"星球大战系列"},{"n":"极限竞速:地平线","v":"极限竞速:地平线"},{"n":"最终幻想16","v":"最终幻想16"},{"n":"Among Us","v":"Among Us"},{"n":"怪物猎人:崛起","v":"怪物猎人:崛起"},{"n":"怪物猎人物语","v":"怪物猎人物语"},{"n":"骑马与砍杀系列","v":"骑马与砍杀系列"},{"n":"荒野大镖客2","v":"荒野大镖客2"},{"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":"消逝的光芒2","v":"消逝的光芒2"},{"n":"渡神记","v":"渡神记"},{"n":"归家异途","v":"归家异途"},{"n":"博德之门3","v":"博德之门3"},{"n":"看门狗:军团","v":"看门狗:军团"},{"n":"使命召唤系列","v":"使命召唤系列"},{"n":"育碧游戏","v":"育碧游戏"},{"n":"帝国时代4","v":"帝国时代4"},{"n":"英灵神殿","v":"英灵神殿"},{"n":"蛮荒志异:起源","v":"蛮荒志异:起源"},{"n":"岛","v":"岛"},{"n":"沙盒与副本","v":"沙盒与副本"},{"n":"扫雷","v":"扫雷"},{"n":"街机游戏","v":"街机游戏"},{"n":"幽灵线:东京","v":"幽灵线:东京"},{"n":"怪物猎人世界","v":"怪物猎人世界"},{"n":"盗贼之海","v":"盗贼之海"},{"n":"纸人","v":"纸人"},{"n":"黑色像素人","v":"黑色像素人"},{"n":"对马岛之魂","v":"对马岛之魂"},{"n":"瑞奇与叮当","v":"瑞奇与叮当"},{"n":"港诡实录","v":"港诡实录"},{"n":"剑士","v":"剑士"},{"n":"魔法门之英雄无敌系列","v":"魔法门之英雄无敌系列"},{"n":"星露谷物语","v":"星露谷物语"},{"n":"仙剑奇侠传四","v":"仙剑奇侠传四"},{"n":"伤害世界","v":"伤害世界"},{"n":"禁闭求生","v":"禁闭求生"},{"n":"真三国无双","v":"真三国无双"},{"n":"恐怖黎明","v":"恐怖黎明"},{"n":"其他单机","v":"其他单机"},{"n":"幽灵行动:荒野","v":"幽灵行动:荒野"},{"n":"边缘","v":"边缘"},{"n":"阿凡达","v":"阿凡达"},{"n":"全面战争:三国","v":"全面战争:三国"},{"n":"黎明之星","v":"黎明之星"},{"n":"翼星求生","v":"翼星求生"},{"n":"黎明传说","v":"黎明传说"},{"n":"恶魔之魂","v":"恶魔之魂"},{"n":"艾兰岛","v":"艾兰岛"},{"n":"龙与地下城:秘影历代记HD","v":"龙与地下城:秘影历代记HD"},{"n":"龙与地下城:匕首谷","v":"龙与地下城:匕首谷"},{"n":"沙石镇时光","v":"沙石镇时光"},{"n":"三国志曹操传","v":"三国志曹操传"},{"n":"FIFA足球","v":"FIFA足球"},{"n":"最终幻想7:重制版","v":"最终幻想7:重制版"},{"n":"四海兄弟","v":"四海兄弟"},{"n":"最终幻想:起源","v":"最终幻想:起源"},{"n":"摔跤城大乱斗","v":"摔跤城大乱斗"},{"n":"音乐游戏","v":"音乐游戏"},{"n":"精灵与萤火意志","v":"精灵与萤火意志"},{"n":"桥梁建造师","v":"桥梁建造师"},{"n":"哈迪斯","v":"哈迪斯"},{"n":"小缇娜的奇幻之地","v":"小缇娜的奇幻之地"},{"n":"宝可梦:剑盾","v":"宝可梦:剑盾"},{"n":"边境","v":"边境"},{"n":"人类一败涂地","v":"人类一败涂地"},{"n":"糖豆人:终极淘汰赛","v":"糖豆人:终极淘汰赛"},{"n":"精灵宝可梦Let's Go","v":"精灵宝可梦Let's Go"},{"n":"战锤40K:暗潮","v":"战锤40K:暗潮"},{"n":"石油骚动","v":"石油骚动"},{"n":"紫塞秋风","v":"紫塞秋风"},{"n":"阿尔比恩","v":"阿尔比恩"},{"n":"猎人:荒野的召唤","v":"猎人:荒野的召唤"},{"n":"FIFA 23","v":"FIFA 23"},{"n":"都市:天际线","v":"都市:天际线"},{"n":"乐高大电影:游戏版","v":"乐高大电影:游戏版"},{"n":"全面战争:阿提拉","v":"全面战争:阿提拉"},{"n":"斩妖行","v":"斩妖行"},{"n":"马里奥赛车8","v":"马里奥赛车8"},{"n":"复仇者联盟","v":"复仇者联盟"},{"n":"霓虹深渊","v":"霓虹深渊"},{"n":"王者荣耀","v":"王者荣耀"},{"n":"和平精英","v":"和平精英"},{"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":"暗区突围","v":"暗区突围"},{"n":"QQ飞车手游","v":"QQ飞车手游"},{"n":"球球大作战","v":"球球大作战"},{"n":"明日之后","v":"明日之后"},{"n":"皇室战争","v":"皇室战争"},{"n":"COD手游","v":"COD手游"},{"n":"手游休闲","v":"手游休闲"},{"n":"二次元手游","v":"二次元手游"},{"n":"摸了个鱼","v":"摸了个鱼"},{"n":"MMORPG","v":"MMORPG"},{"n":"动作游戏","v":"动作游戏"},{"n":"战争冲突","v":"战争冲突"},{"n":"王者模拟战","v":"王者模拟战"},{"n":"逆水寒手游","v":"逆水寒手游"},{"n":"幻塔","v":"幻塔"},{"n":"欢乐斗地主","v":"欢乐斗地主"},{"n":"神武4手游","v":"神武4手游"},{"n":"阴阳师","v":"阴阳师"},{"n":"DNF手游","v":"DNF手游"},{"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":"忍者必须死3","v":"忍者必须死3"},{"n":"SKY光遇","v":"SKY光遇"},{"n":"虎牙领主争霸","v":"虎牙领主争霸"},{"n":"云上城之歌","v":"云上城之歌"},{"n":"晶核","v":"晶核"},{"n":"仙境传说RO","v":"仙境传说RO"},{"n":"天天狼人","v":"天天狼人"},{"n":"JJ棋牌","v":"JJ棋牌"},{"n":"奇迹MU:觉醒","v":"奇迹MU:觉醒"},{"n":"指尖四川麻将","v":"指尖四川麻将"},{"n":"部落冲突","v":"部落冲突"},{"n":"新剑侠情缘手游","v":"新剑侠情缘手游"},{"n":"萌宠远征","v":"萌宠远征"},{"n":"暗黑破坏神:不朽","v":"暗黑破坏神:不朽"},{"n":"英雄杀","v":"英雄杀"},{"n":"热血江湖手游","v":"热血江湖手游"},{"n":"蛋仔派对","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":"巅峰极速","v":"巅峰极速"},{"n":"圣境之塔","v":"圣境之塔"},{"n":"魔力宝贝","v":"魔力宝贝"},{"n":"香肠派对","v":"香肠派对"},{"n":"创造与魔法","v":"创造与魔法"},{"n":"JJ斗地主","v":"JJ斗地主"},{"n":"永恒纪元:戒","v":"永恒纪元:戒"},{"n":"天涯明月刀手游","v":"天涯明月刀手游"},{"n":"狼人杀官方","v":"狼人杀官方"},{"n":"混沌起源","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":"流星群侠传","v":"流星群侠传"},{"n":"寻仙手游","v":"寻仙手游"},{"n":"一梦江湖","v":"一梦江湖"},{"n":"Lost Light(萤火突击国际服)","v":"Lost Light(萤火突击国际服)"},{"n":"弹幕云游戏","v":"弹幕云游戏"},{"n":"猎魂觉醒","v":"猎魂觉醒"},{"n":"冒险岛:枫之传说","v":"冒险岛:枫之传说"},{"n":"征途手游","v":"征途手游"},{"n":"海岛奇兵","v":"海岛奇兵"},{"n":"倩女幽魂手游","v":"倩女幽魂手游"},{"n":"超凡先锋","v":"超凡先锋"},{"n":"龙之谷2手游","v":"龙之谷2手游"},{"n":"崩坏3","v":"崩坏3"},{"n":"猫和老鼠","v":"猫和老鼠"},{"n":"七人传奇:光与暗之交战","v":"七人传奇:光与暗之交战"},{"n":"JJ麻将","v":"JJ麻将"},{"n":"拉轰西游","v":"拉轰西游"},{"n":"三国战纪","v":"三国战纪"},{"n":"自由幻想手游","v":"自由幻想手游"},{"n":"秦时明月世界","v":"秦时明月世界"},{"n":"新斗罗大陆","v":"新斗罗大陆"},{"n":"新神魔大陆","v":"新神魔大陆"},{"n":"逃跑吧!少年","v":"逃跑吧!少年"},{"n":"太古神王2","v":"太古神王2"},{"n":"剑侠世界3","v":"剑侠世界3"},{"n":"天天吃鸡手机版","v":"天天吃鸡手机版"},{"n":"时空猎人3","v":"时空猎人3"},{"n":"合金弹头:觉醒","v":"合金弹头:觉醒"},{"n":"明日方舟","v":"明日方舟"},{"n":"原始征途","v":"原始征途"},{"n":"奇迹:最强者","v":"奇迹:最强者"},{"n":"天天酷跑","v":"天天酷跑"},{"n":"FC 足球世界","v":"FC 足球世界"},{"n":"万国觉醒","v":"万国觉醒"},{"n":"机动都市阿尔法","v":"机动都市阿尔法"},{"n":"航海王热血航线","v":"航海王热血航线"},{"n":"幻世九歌","v":"幻世九歌"},{"n":"植物大战僵尸","v":"植物大战僵尸"},{"n":"无悔华夏","v":"无悔华夏"},{"n":"时空猎人","v":"时空猎人"},{"n":"荒野乱斗","v":"荒野乱斗"},{"n":"拳皇98终极之战OL","v":"拳皇98终极之战OL"},{"n":"蛇蛇争霸","v":"蛇蛇争霸"},{"n":"王牌竞速","v":"王牌竞速"},{"n":"重返帝国","v":"重返帝国"},{"n":"吞噬星空:黎明","v":"吞噬星空:黎明"},{"n":"口袋妖怪","v":"口袋妖怪"},{"n":"QQ炫舞手游","v":"QQ炫舞手游"},{"n":"一拳超人:最强之男","v":"一拳超人:最强之男"},{"n":"荣耀新三国","v":"荣耀新三国"},{"n":"少年三国志2","v":"少年三国志2"},{"n":"我的起源","v":"我的起源"},{"n":"决战平安京","v":"决战平安京"},{"n":"剑灵2","v":"剑灵2"},{"n":"开心消消乐","v":"开心消消乐"},{"n":"小小蚁国","v":"小小蚁国"},{"n":"最强NBA","v":"最强NBA"},{"n":"剑侠情缘手游","v":"剑侠情缘手游"},{"n":"长安幻想","v":"长安幻想"},{"n":"我叫MT4","v":"我叫MT4"},{"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":"尘白禁区","v":"尘白禁区"},{"n":"元梦之星","v":"元梦之星"},{"n":"不良人3","v":"不良人3"},{"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":"战舰世界闪击战","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":"神雕侠侣2","v":"神雕侠侣2"},{"n":"仙魔决","v":"仙魔决"},{"n":"王者荣耀星之破晓","v":"王者荣耀星之破晓"},{"n":"我在江湖之神魔道","v":"我在江湖之神魔道"},{"n":"梦幻模拟战","v":"梦幻模拟战"},{"n":"单机手游","v":"单机手游"},{"n":"斗罗大陆-斗神再临","v":"斗罗大陆-斗神再临"},{"n":"未来之役","v":"未来之役"},{"n":"风云岛行动","v":"风云岛行动"},{"n":"新游推荐","v":"新游推荐"},{"n":"火影忍者OL","v":"火影忍者OL"},{"n":"九灵神域","v":"九灵神域"},{"n":"武动乾坤","v":"武动乾坤"},{"n":"秦时明月2","v":"秦时明月2"},{"n":"文明与征服","v":"文明与征服"},{"n":"战双:帕弥什","v":"战双:帕弥什"},{"n":"大航海时代:海上霸主","v":"大航海时代:海上霸主"},{"n":"剑网1:归来","v":"剑网1:归来"},{"n":"绝区零","v":"绝区零"},{"n":"黑色沙漠手游","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":"石器时代:觉醒","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":"视频唱见","v":"视频唱见"},{"n":"萌宅领域","v":"萌宅领域"},{"n":"视频聊天","v":"视频聊天"},{"n":"舞见","v":"舞见"},{"n":"唱见电台","v":"唱见电台"},{"n":"聊天电台","v":"聊天电台"},{"n":"甜宠电台","v":"甜宠电台"},{"n":"TopStar","v":"TopStar"},{"n":"虚拟Singer","v":"虚拟Singer"},{"n":"虚拟Gamer","v":"虚拟Gamer"},{"n":"虚拟声优","v":"虚拟声优"},{"n":"虚拟日常","v":"虚拟日常"},{"n":"虚拟APEX","v":"虚拟APEX"},{"n":"虚拟PK","v":"虚拟PK"},{"n":"交友","v":"交友"},{"n":"点唱","v":"点唱"},{"n":"兴趣","v":"兴趣"},{"n":"社科法律心理","v":"社科法律心理"},{"n":"人文历史","v":"人文历史"},{"n":"校园学习","v":"校园学习"},{"n":"职场·技能","v":"职场·技能"},{"n":"科技","v":"科技"},{"n":"科学科普","v":"科学科普"},{"n":"游戏赛事","v":"游戏赛事"},{"n":"体育赛事","v":"体育赛事"},{"n":"赛事综合","v":"赛事综合"},{"n":"热门帮玩","v":"热门帮玩"},{"n":"手游帮玩","v":"手游帮玩"},{"n":"网游帮玩","v":"网游帮玩"},{"n":"单机帮玩","v":"单机帮玩"},{"n":"兵临城下","v":"兵临城下"},{"n":"功夫狂飙","v":"功夫狂飙"},{"n":"竞技玩法","v":"竞技玩法"},{"n":"休闲玩法","v":"休闲玩法"},{"n":"英雄联盟","v":"英雄联盟"},{"n":"无畏契约","v":"无畏契约"},{"n":"CS:GO","v":"CS:GO"},{"n":"APEX英雄","v":"APEX英雄"},{"n":"永劫无间","v":"永劫无间"},{"n":"穿越火线","v":"穿越火线"},{"n":"命运方舟","v":"命运方舟"},{"n":"DOTA2","v":"DOTA2"},{"n":"吃鸡行动","v":"吃鸡行动"},{"n":"逃离塔科夫","v":"逃离塔科夫"},{"n":"传奇","v":"传奇"},{"n":"DNF","v":"DNF"},{"n":"卡拉彼丘","v":"卡拉彼丘"},{"n":"幕后高手","v":"幕后高手"},{"n":"生死狙击2","v":"生死狙击2"},{"n":"洛奇英雄传","v":"洛奇英雄传"},{"n":"最终幻想14","v":"最终幻想14"},{"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":"大话西游","v":"大话西游"},{"n":"奇迹MU","v":"奇迹MU"},{"n":"永恒之塔","v":"永恒之塔"},{"n":"QQ三国","v":"QQ三国"},{"n":"人间地狱","v":"人间地狱"},{"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":"猎杀对决","v":"猎杀对决"},{"n":"CFHD","v":"CFHD"},{"n":"骑士精神2","v":"骑士精神2"},{"n":"超击突破","v":"超击突破"},{"n":"武装突袭","v":"武装突袭"},{"n":"Wayfinder寻路者","v":"Wayfinder寻路者"},{"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":"FIFAONLINE4","v":"FIFAONLINE4"},{"n":"NBA2KOL2","v":"NBA2KOL2"},{"n":"使命召唤:战区","v":"使命召唤:战区"},{"n":"VRChat","v":"VRChat"},{"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":"古剑奇谭OL","v":"古剑奇谭OL"},{"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":"和平精英","v":"和平精英"},{"n":"原神","v":"原神"},{"n":"崩坏:星穹铁道","v":"崩坏:星穹铁道"},{"n":"第五人格","v":"第五人格"},{"n":"LOL手游","v":"LOL手游"},{"n":"明日方舟","v":"明日方舟"},{"n":"黎明觉醒:生机","v":"黎明觉醒:生机"},{"n":"蛋仔派对","v":"蛋仔派对"},{"n":"冒险岛手游","v":"冒险岛手游"},{"n":"元梦之星","v":"元梦之星"},{"n":"闪耀!优俊少女","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":"光遇","v":"光遇"},{"n":"桃源深处有人家","v":"桃源深处有人家"},{"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":"游戏王:决斗链接","v":"游戏王:决斗链接"},{"n":"游戏王","v":"游戏王"},{"n":"JJ斗地主","v":"JJ斗地主"},{"n":"阴阳师","v":"阴阳师"},{"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":"重返未来:1999","v":"重返未来:1999"},{"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":"BanGDream","v":"BanGDream"},{"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":"坎公骑冠剑","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":"怀旧游戏","v":"怀旧游戏"},{"n":"猛兽派对","v":"猛兽派对"},{"n":"赛博朋克2077","v":"赛博朋克2077"},{"n":"星空","v":"星空"},{"n":"塞尔达传说","v":"塞尔达传说"},{"n":"苍翼:混沌效应","v":"苍翼:混沌效应"},{"n":"命运2","v":"命运2"},{"n":"收获日3","v":"收获日3"},{"n":"FC24","v":"FC24"},{"n":"机战佣兵VI境界天火","v":"机战佣兵VI境界天火"},{"n":"暗黑破坏神Ⅳ","v":"暗黑破坏神Ⅳ"},{"n":"匹诺曹的谎言","v":"匹诺曹的谎言"},{"n":"博德之门3","v":"博德之门3"},{"n":"绝世好武功","v":"绝世好武功"},{"n":"恐怖游戏","v":"恐怖游戏"},{"n":"DarkandDarker","v":"DarkandDarker"},{"n":"Warlander","v":"Warlander"},{"n":"FORZA极限竞速","v":"FORZA极限竞速"},{"n":"边境","v":"边境"},{"n":"生化危机","v":"生化危机"},{"n":"最终幻想","v":"最终幻想"},{"n":"暗黑破坏神","v":"暗黑破坏神"},{"n":"森林之子","v":"森林之子"},{"n":"卧龙:苍天陨落","v":"卧龙:苍天陨落"},{"n":"红色警戒2","v":"红色警戒2"},{"n":"策略游戏","v":"策略游戏"},{"n":"禁闭求生","v":"禁闭求生"},{"n":"战神","v":"战神"},{"n":"斯普拉遁3","v":"斯普拉遁3"},{"n":"使命召唤19","v":"使命召唤19"},{"n":"艾尔登法环","v":"艾尔登法环"},{"n":"聚会游戏","v":"聚会游戏"},{"n":"DreadHunger","v":"DreadHunger"},{"n":"战地风云","v":"战地风云"},{"n":"糖豆人","v":"糖豆人"},{"n":"消逝的光芒2","v":"消逝的光芒2"},{"n":"只狼","v":"只狼"},{"n":"怪物猎人","v":"怪物猎人"},{"n":"宝可梦集换式卡牌游戏","v":"宝可梦集换式卡牌游戏"},{"n":"饥荒","v":"饥荒"},{"n":"精灵宝可梦","v":"精灵宝可梦"},{"n":"FIFA23","v":"FIFA23"},{"n":"全面战争:战锤3","v":"全面战争:战锤3"},{"n":"NBA2K","v":"NBA2K"},{"n":"帝国时代4","v":"帝国时代4"},{"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":"全境封锁2","v":"全境封锁2"},{"n":"骑马与砍杀","v":"骑马与砍杀"},{"n":"人类一败涂地","v":"人类一败涂地"},{"n":"无主之地3","v":"无主之地3"},{"n":"辐射76","v":"辐射76"},{"n":"全面战争","v":"全面战争"},{"n":"文字游戏","v":"文字游戏"},{"n":"恋爱模拟游戏","v":"恋爱模拟游戏"},{"n":"泰拉瑞亚","v":"泰拉瑞亚"},{"n":"游戏速通","v":"游戏速通"},{"n":"Roblox","v":"Roblox"},{"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":"乱斗西游2","v":"乱斗西游2"},{"n":"《天下》手游","v":"《天下》手游"},{"n":"劲舞团","v":"劲舞团"},{"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":"战争怒吼","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":"宝可梦大探险","v":"宝可梦大探险"},{"n":"重装上阵","v":"重装上阵"},{"n":"猎手之王","v":"猎手之王"},{"n":"第九所","v":"第九所"},{"n":"风云岛行动","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":"大富翁9","v":"大富翁9"},{"n":"永恒文明","v":"永恒文明"},{"n":"新游中心","v":"新游中心"},{"n":"我的世界中国版","v":"我的世界中国版"},{"n":"梦幻西游电脑版","v":"梦幻西游电脑版"},{"n":"永劫无间","v":"永劫无间"},{"n":"大话西游2经典版","v":"大话西游2经典版"},{"n":"新倩女幽魂","v":"新倩女幽魂"},{"n":"大话西游2免费版","v":"大话西游2免费版"},{"n":"天下3","v":"天下3"},{"n":"一梦江湖","v":"一梦江湖"},{"n":"其他游戏","v":"其他游戏"},{"n":"逆水寒","v":"逆水寒"},{"n":"荒野行动PC模拟器","v":"荒野行动PC模拟器"},{"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":"魔兽世界怀旧服"},{"n":"无主之地3","v":"无主之地3"},{"n":"超激斗梦境","v":"超激斗梦境"},{"n":"EVE Online","v":"EVE Online"},{"n":"全面战争:竞技场","v":"全面战争:竞技场"},{"n":"暴雪游戏","v":"暴雪游戏"},{"n":"FPS综合游戏","v":"FPS综合游戏"},{"n":"魔兽争霸","v":"魔兽争霸"},{"n":"绿茵信仰","v":"绿茵信仰"},{"n":"大话女儿国","v":"大话女儿国"},{"n":"燕云十六声","v":"燕云十六声"},{"n":"射雕","v":"射雕"}]}], + "douyin":[{"key":"area","name":"分区","value":[{"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":"军棋","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":"识字大师","v":"识字大师"},{"n":"美食DIY","v":"美食DIY"},{"n":"球球大作战","v":"球球大作战"},{"n":"荒野乱斗","v":"荒野乱斗"},{"n":"元气骑士","v":"元气骑士"},{"n":"最强的大脑","v":"最强的大脑"},{"n":"5v5推塔手游","v":"5v5推塔手游"},{"n":"DOTA2","v":"DOTA2"},{"n":"格斗手游","v":"格斗手游"},{"n":"赛车游戏","v":"赛车游戏"},{"n":"跑跑卡丁车手游","v":"跑跑卡丁车手游"},{"n":"DOTA","v":"DOTA"},{"n":"第五人格","v":"第五人格"},{"n":"梦三国","v":"梦三国"},{"n":"坦克世界","v":"坦克世界"},{"n":"怀旧FC","v":"怀旧FC"},{"n":"帝国时代","v":"帝国时代"},{"n":"战舰世界","v":"战舰世界"},{"n":"怀旧掌机","v":"怀旧掌机"},{"n":"西游释厄传","v":"西游释厄传"},{"n":"合金弹头","v":"合金弹头"},{"n":"恐龙快打","v":"恐龙快打"},{"n":"无畏契约","v":"无畏契约"},{"n":"射击游戏","v":"射击游戏"},{"n":"CS:GO","v":"CS:GO"},{"n":"吃鸡手游","v":"吃鸡手游"},{"n":"香肠派对","v":"香肠派对"},{"n":"暗区突围","v":"暗区突围"},{"n":"Apex英雄","v":"Apex英雄"},{"n":"高能英雄","v":"高能英雄"},{"n":"阴阳师","v":"阴阳师"},{"n":"明日方舟","v":"明日方舟"},{"n":"崩坏:星穹铁道","v":"崩坏:星穹铁道"},{"n":"炉石传说","v":"炉石传说"},{"n":"少年三国志2","v":"少年三国志2"},{"n":"山海经异兽录","v":"山海经异兽录"},{"n":"铁杆三国","v":"铁杆三国"},{"n":"新不良人","v":"新不良人"},{"n":"JJ象棋","v":"JJ象棋"},{"n":"经典天龙八部","v":"经典天龙八部"},{"n":"光遇","v":"光遇"},{"n":"开心消消乐","v":"开心消消乐"},{"n":"魂斗罗","v":"魂斗罗"},{"n":"红狼(口袋狼人杀)","v":"红狼(口袋狼人杀)"},{"n":"怀旧天龙八部","v":"怀旧天龙八部"},{"n":"汤姆猫跑酷","v":"汤姆猫跑酷"},{"n":"决战平安京","v":"决战平安京"},{"n":"CS 1.6","v":"CS 1.6"},{"n":"找不同","v":"找不同"},{"n":"一战称王","v":"一战称王"},{"n":"超级台球大师","v":"超级台球大师"},{"n":"运动","v":"运动"},{"n":"音乐","v":"音乐"},{"n":"语音互动","v":"语音互动"},{"n":"情感","v":"情感"},{"n":"舞蹈","v":"舞蹈"},{"n":"户外","v":"户外"},{"n":"时尚","v":"时尚"},{"n":"美食","v":"美食"},{"n":"旅行","v":"旅行"},{"n":"教育","v":"教育"},{"n":"人文艺术","v":"人文艺术"}]}] }, - 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格式用) + filter_def:{ + douyu:{area:'原创IP'}, + huya:{area:'一起看'}, + bilibili:{area:'电子榨菜'}, + cc:{area:'星秀'}, + douyin:{area:'全部'} + }, + // detailUrl: '/index/liveRoom?platform=fyclass&roomId=fyid', + // detailUrl: '/api/live/getRoomInfo?uid=&platform=fyclass&roomId=fyid', + detailUrl: 'fyid', searchUrl: '/api/live/search?platform=all&keyWords=**&isLive=0', - searchable: 2, + // searchable: 2, + searchable: 0, quickSearch: 0, headers: { - 'User-Agent': 'PC_UA' + 'User-Agent': 'MOBILE_UA' }, timeout: 5000, play_parse: true, - lazy: '', - double: false, + lazy:`js: + let purl = input.split("|")[0]; + let pfrom = input.split("|")[1]; + let cid = input.split("|")[2]; + print("purl:" + purl); + print("pfrom:" + pfrom); + print("cid:" + cid); + let dan = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + cid; + if (/bilibili/.test(pfrom)){ + let result = {}; + 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' + }; + result['danmaku'] = dan; + if (/h5/.test(purl)) { + result['contentType'] = ''; + input = result + } else { + result['contentType'] = 'video/x-flv'; + input = result + } + } else { + input = purl + } + `, limit: 6, - 推荐: '*', - 一级: 'json:data;roomName;roomPic;ownerName;roomId', - 二级: '*', - 搜索: '*', -} + 推荐: `js: + var d = []; + var html = JSON.parse(request(input)).data; + html.forEach(it => { + d.push({ + title: it.roomName, + desc: it.ownerName, + pic_url: it.roomPic, + url: it.platForm + '|' + it.roomId + }); + }) + setResult(d); + `, + 一级: `js: + var d = []; + if (MY_CATE === 'douyin') { + let area = MY_FL.area || '全部'; + if (area === '全部') { + input = HOST + '/api/live/getRecommendByPlatform?platform=douyin&page='+MY_PAGE+'&size=20'; + } + } + var html = JSON.parse(request(input)).data; + html.forEach(it => { + d.push({ + title: it.roomName, + desc: it.ownerName, + pic_url: it.roomPic, + url: it.platForm + '|' + it.roomId + }); + }) + setResult(d); + `, + 二级: `js: + var d = []; + if (typeof play_url === "undefined") { + var play_url = "" + } + let platform = input.split("|")[0].replace(HOST+'/',''); + let roomId = input.split("|")[1]; + let link = HOST + '/api/live/getRoomInfo?uid=&platform=' + platform + '&roomId=' + roomId; + var jo = JSON.parse(request(link)).data; + VOD = { + vod_id: jo.roomId, + vod_name: jo.roomName, + vod_pic: jo.roomPic, + type_name: jo.platForm.replace("huya", "虎牙").replace("douyu", "斗鱼").replace("cc", "网易CC").replace("bilibili", "哔哩哔哩").replace("douyin", "抖音") + "." + jo.categoryName, + vod_content: "🏷分区:" + jo.platForm.replace("huya", "虎牙").replace("douyu", "斗鱼").replace("cc", "网易CC").replace("bilibili", "哔哩哔哩").replace("douyin", "抖音") + "·" + jo.categoryName + " 🏷UP主:" + jo.ownerName + " 🏷人气:" + jo.online + (jo.isLive === 1 ? " 🏷状态:正在直播" : "状态:未开播") + }; + var playurl = JSON.parse(request("http://live.yj1211.work/api/live/getRealUrl?platform=" + jo.platForm + "&roomId=" + jo.roomId)).data; + var name = { + "OD": "原画", + "FD": "流畅", + "LD": "标清", + "SD": "高清", + "HD": "超清", + "2K": "2K", + "4K": "4K", + "FHD": "全高清", + "XLD": "极速", + "SQ": "普通音质", + "HQ": "高音质" + }; + Object.keys(playurl).forEach(function(key) { + if (!/ayyuid|to/.test(key)) { + d.push({ + title: name[key], + url: playurl[key] + }) + } + }); + VOD.vod_play_from = "选择画质"; + VOD.vod_play_url = d.map(function(it) { + // return it.title + "$" + it.url + return it.title + "$" + play_url + urlencode(it.url + "|" + jo.platForm + "|" + jo.roomId) + }).join("#"); + setResult(d) + `, + 搜索: `js: + var d = []; + var html = JSON.parse(request(input)).data; + html.forEach(it => { + d.push({ + title: it.roomName, + desc: it.ownerName, + pic_url: it.roomPic, + url: it.platForm + '|' + it.roomId + }); + }) + setResult(d); + `, +} \ No newline at end of file diff --git a/JS/js/哔哩影视.js b/JS/js/哔哩影视.js index d979d70..75c8724 100644 --- a/JS/js/哔哩影视.js +++ b/JS/js/哔哩影视.js @@ -1,3 +1,21 @@ +/** + * 影视TV 弹幕支持 + * https://t.me/fongmi_offical/ + * https://github.com/FongMi/Release/tree/main/apk + * 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这个解析可用于此源的解析线路用 + */ + var rule = { title:'哔哩影视', host:'https://api.bilibili.com', @@ -5,7 +23,7 @@ var rule = { detailUrl:'/pgc/view/web/season?season_id=fyid', filter_url:'fl={{fl}}', vmid获取教程:'登录后访问https://api.bilibili.com/x/web-interface/nav,搜索mid就是,cookie需要 bili_jct,DedeUserID,SESSDATA参数', - searchUrl:'/x/web-interface/search/type?keyword=**&search_type=', + searchUrl:'/x/web-interface/search/type?keyword=**&page=fypage&search_type=', searchable:1, filterable:1, quickSearch:0, @@ -41,7 +59,57 @@ var rule = { 二级:'', 二级:'js:function zh(num){let p="";if(Number(num)>1e8){p=(num/1e8).toFixed(2)+"亿"}else if(Number(num)>1e4){p=(num/1e4).toFixed(2)+"万"}else{p=num}return p}let html=request(input);let jo=JSON.parse(html).result;let id=jo["season_id"];let title=jo["title"];let pic=jo["cover"];let areas=jo["areas"][0]["name"];let typeName=jo["share_sub_title"];let date=jo["publish"]["pub_time"].substr(0,4);let dec=jo["evaluate"];let remark=jo["new_ep"]["desc"];let stat=jo["stat"];let status="弹幕: "+zh(stat["danmakus"])+" 点赞: "+zh(stat["likes"])+" 投币: "+zh(stat["coins"])+" 追番追剧: "+zh(stat["favorites"]);let score=jo.hasOwnProperty("rating")?"评分: "+jo["rating"]["score"]+" "+jo["subtitle"]:"暂无评分"+" "+jo["subtitle"];let vod={vod_id:id,vod_name:title,vod_pic:pic,type_name:typeName,vod_year:date,vod_area:areas,vod_remarks:remark,vod_actor:status,vod_director:score,vod_content:dec};let ja=jo["episodes"];let playurls1=[];let playurls2=[];ja.forEach(function(tmpJo){let eid=tmpJo["id"];let cid=tmpJo["cid"];let link=tmpJo["link"];let part=tmpJo["title"].replace("#","-")+" "+tmpJo["long_title"];playurls1.push(part+"$"+eid+"_"+cid);playurls2.push(part+"$"+link)});let playUrl=playurls1.join("#")+"$$$"+playurls2.join("#");vod["vod_play_from"]="B站$$$bilibili";vod["vod_play_url"]=playUrl;VOD=vod;', 搜索:'', - 搜索:'js:let url1=input+"media_bangumi";let url2=input+"media_ft";let html=request(url1);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let jo1=JSON.parse(html).data;html=request(url2);let jo2=JSON.parse(html).data;let videos=[];let vodList=[];if(jo1["numResults"]===0){vodList=jo2["result"]}else if(jo2["numResults"]===0){vodList=jo1["result"]}else{vodList=jo1["result"].concat(jo2["result"])}vodList.forEach(function(vod){let aid=(vod["season_id"]+"").trim();let title=KEY+"➢"+vod["title"].trim().replace(\'\',"").replace("","");let img=vod["cover"].trim();let remark=vod["index_show"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}', + 搜索:'js:let url1=input+"media_bangumi";let url2=input+"media_ft";let html=request(url1);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let jo1=JSON.parse(html).data;html=request(url2);let jo2=JSON.parse(html).data;let videos=[];let vodList=[];if(jo1["numResults"]===0){vodList=jo2["result"]}else if(jo2["numResults"]===0){vodList=jo1["result"]}else{vodList=jo1["result"].concat(jo2["result"])}vodList.forEach(function(vod){let aid=(vod["season_id"]+"").trim();let title=KEY+"➢"+vod["title"].trim().replace(\'\',"").replace("","");let img=vod["cover"].trim();let remark=vod["index_show"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}', lazy:'', - lazy:'js:if(/^http/.test(input)){input={jx:1,url:input,parse:0,header:JSON.stringify({"user-agent":"Mozilla/5.0"})}}else{let ids=input.split("_");let result={};let url="https://api.bilibili.com/pgc/player/web/playurl?qn=116&ep_id="+ids[0]+"&cid="+ids[1];let html=request(url);let jRoot=JSON.parse(html);if(jRoot["message"]!=="success"){print("需要大会员权限才能观看");input=""}else{let jo=jRoot["result"];let ja=jo["durl"];let maxSize=-1;let position=-1;ja.forEach(function(tmpJo,i){if(maxSize0){if(position===-1){position=0}url=ja[position]["url"]}result["parse"]=0;result["playUrl"]="";result["url"]=url;result["header"]={Referer:"https://www.bilibili.com","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"};result["contentType"]="video/x-flv";input=result}}', + lazy:`js: + if (/^http/.test(input)) { + input = { + jx: 1, + url: input, + parse: 0, + header: JSON.stringify({ + "user-agent": "Mozilla/5.0" + }) + } + } else { + let ids = input.split("_"); + let dan = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + ids[1]; + let result = {}; + let url = "https://api.bilibili.com/pgc/player/web/playurl?qn=116&ep_id=" + ids[0] + "&cid=" + ids[1]; + let html = request(url); + let jRoot = JSON.parse(html); + if (jRoot["message"] !== "success") { + print("需要大会员权限才能观看"); + input = "" + } else { + let jo = jRoot["result"]; + 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 url = ""; + if (ja.length > 0) { + if (position === -1) { + position = 0 + } + url = ja[position]["url"] + } + result["parse"] = 0; + result["playUrl"] = ""; + result["url"] = url; + result["header"] = { + Referer: "https://www.bilibili.com", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + }; + result["contentType"] = "video/x-flv"; + result["danmaku"] = dan; + input = result + } + } + `, } \ No newline at end of file diff --git a/JS/js/哔哩直播.js b/JS/js/哔哩直播.js index a801d7b..d29c70b 100644 --- a/JS/js/哔哩直播.js +++ b/JS/js/哔哩直播.js @@ -1,65 +1,70 @@ -/* 直播弹幕 -> vod_area:'bililivedanmu' -目前只有皮皮虾大佬的DMBox, 支持弹幕 -DMBox下载:https://t.me/pipixiawerun -设置 > 窗口预览 > 开启 -*/ - -/* Cookie设置 -Cookie获取方法 https://github.com/UndCover/PyramidStore/blob/main/list.md#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9 - -Cookie设置方法1: DR-PY 后台管理界面 -CMS后台管理 > 设置中心 > 环境变量 > {"bili_cookie":"XXXXXXX","vmid":"XXXXXX"} > 保存 - -Cookie设置方法2: 手动替换Cookie -底下代码 headers的 -"Cookie":"$bili_cookie" -手动替换为 -"Cookie":"将获取的Cookie黏贴在这" -*/ +/** + * 影视TV 弹幕支持 + * https://t.me/fongmi_offical/ + * https://github.com/FongMi/Release/tree/main/apk + * 皮皮虾DMBox 弹幕支持 + * 设置 > 窗口预览 > 开启 + * https://t.me/pipixiawerun + * vod_area:'bililivedanmu' + * 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黏贴在这" + */ var rule = { title:'哔哩直播', host:'https://api.live.bilibili.com', homeUrl:'/xlive/web-interface/v1/second/getUserRecommend?page=1&page_size=30&platform=web',//用于"分类获取"和"推荐获取" url:'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=fyclass&area_id=fyfilter&sort_type=online&page=fypage', - class_name:'娱乐&网游&手游&单机游戏&电台&虚拟主播&生活&知识&赛事&购物', - class_url:'10&2&3&6&1&5&9&11&13&300', + class_name:'生活&网游&手游&单机游戏&娱乐&电台&虚拟主播&聊天室&知识&赛事&帮我玩&互动玩法', + class_url:'10&2&3&6&1&5&9&14&11&13&301&15', filterable: 1, filter_url: '{{fl.area}}', filter_def:{ - 10:{area:'33'}, + 10:{area:'624'}, 2:{area:'86'}, 3:{area:'35'}, 6:{area:'236'}, 1:{area:'21'}, 5:{area:'190'}, - 9:{area:'371'}, + 9:{area:'744'}, + 14:{area:'818'}, 11:{area:'376'}, - 13:{area:'561'}, - 300:{area:'30000'} + 13:{area:'562'}, + 301:{area:'301000'}, + 15:{area:'814'} }, filter: { - "2":[{"key":"area","name":"分区","value":[{"n":"英雄联盟","v":"86"},{"n":"DOTA2","v":"92"},{"n":"CS:GO","v":"89"},{"n":"APEX英雄","v":"240"},{"n":"永劫无间","v":"666"},{"n":"穿越火线","v":"88"},{"n":"守望先锋","v":"87"},{"n":"吃鸡行动","v":"80"},{"n":"逃离塔科夫","v":"252"},{"n":"传奇","v":"695"},{"n":"DNF","v":"78"},{"n":"生死狙击2","v":"575"},{"n":"洛奇英雄传","v":"599"},{"n":"最终幻想14","v":"102"},{"n":"星际战甲","v":"249"},{"n":"梦三国","v":"710"},{"n":"英魂之刃","v":"690"},{"n":"剑网3","v":"82"},{"n":"铁甲雄兵","v":"691"},{"n":"封印者","v":"300"},{"n":"新天龙八部","v":"653"},{"n":"赛尔号","v":"667"},{"n":"造梦西游","v":"668"},{"n":"洛克王国","v":"669"},{"n":"问道","v":"670"},{"n":"诛仙世界","v":"654"},{"n":"大话西游","v":"652"},{"n":"奇迹MU","v":"683"},{"n":"永恒之塔","v":"684"},{"n":"QQ三国","v":"685"},{"n":"人间地狱","v":"677"},{"n":"VALORANT","v":"329"},{"n":"彩虹岛","v":"686"},{"n":"洛奇","v":"663"},{"n":"跑跑卡丁车","v":"664"},{"n":"星际公民","v":"658"},{"n":"Squad战术小队","v":"659"},{"n":"反恐精英Online","v":"629"},{"n":"风暴奇侠","v":"648"},{"n":"装甲战争","v":"642"},{"n":"失落的方舟","v":"590"},{"n":"阿尔比恩","v":"639"},{"n":"猎杀对决","v":"600"},{"n":"CFHD ","v":"472"},{"n":"骑士精神2","v":"650"},{"n":"超击突破","v":"680"},{"n":"武装突袭","v":"634"},{"n":"300英雄","v":"84"},{"n":"炉石传说","v":"91"},{"n":"剑网3缘起","v":"499"},{"n":"街头篮球","v":"649"},{"n":"综合射击","v":"601"},{"n":"剑灵","v":"505"},{"n":"艾尔之光","v":"651"},{"n":"黑色沙漠","v":"632"},{"n":"天涯明月刀","v":"596"},{"n":"超激斗梦境","v":"519"},{"n":"冒险岛","v":"574"},{"n":"逆战","v":"487"},{"n":"魔兽争霸3","v":"181"},{"n":"QQ飞车","v":"610"},{"n":"魔兽世界","v":"83"},{"n":"FIFA ONLINE 4","v":"388"},{"n":"NBA2KOL2","v":"581"},{"n":"使命召唤:战区","v":"318"},{"n":"VRChat","v":"656"},{"n":"坦克世界","v":"115"},{"n":"战舰世界","v":"248"},{"n":"战争雷霆","v":"316"},{"n":"战意","v":"383"},{"n":"风暴英雄","v":"114"},{"n":"星际争霸2","v":"93"},{"n":"刀塔自走棋","v":"239"},{"n":"堡垒之夜","v":"164"},{"n":"枪神纪","v":"251"},{"n":"三国杀","v":"81"},{"n":"龙之谷","v":"112"},{"n":"古剑奇谭OL","v":"173"},{"n":"幻想全明星","v":"176"},{"n":"怀旧网游","v":"288"},{"n":"新游前瞻","v":"298"},{"n":"星战前夜:晨曦","v":"331"},{"n":"梦幻西游端游","v":"350"},{"n":"流放之路","v":"551"},{"n":"FPS沙盒","v":"633"},{"n":"永恒轮回","v":"459"},{"n":"激战2","v":"607"},{"n":"其他网游","v":"107"}] }], - "3":[{"key":"area","name":"分区","value":[{"n":"王者荣耀","v":"35"},{"n":"和平精英","v":"256"},{"n":"LOL手游","v":"395"},{"n":"原神","v":"321"},{"n":"第五人格","v":"163"},{"n":"明日方舟","v":"255"},{"n":"哈利波特:魔法觉醒 ","v":"474"},{"n":"幻塔","v":"550"},{"n":"金铲铲之战","v":"514"},{"n":"APEX手游","v":"506"},{"n":"深空之眼","v":"598"},{"n":"无期迷途","v":"675"},{"n":"光遇","v":"687"},{"n":"跃迁旅人","v":"717"},{"n":"香肠派对","v":"689"},{"n":"猫之城","v":"645"},{"n":"玛娜希斯回响","v":"644"},{"n":"使命召唤手游","v":"386"},{"n":"黑色沙漠手游","v":"615"},{"n":"崩坏3","v":"40"},{"n":"游戏王:决斗链接","v":"407"},{"n":"游戏王","v":"303"},{"n":"蛋仔派对","v":"571"},{"n":"阴阳师","v":"36"},{"n":"空之要塞:启航","v":"718"},{"n":"火影忍者手游","v":"292"},{"n":"Fate/GO","v":"37"},{"n":"综合棋牌","v":"354"},{"n":"QQ飞车手游","v":"154"},{"n":"决战!平安京","v":"140"},{"n":"狼人杀","v":"41"},{"n":"三国杀移动版","v":"352"},{"n":"碧蓝航线","v":"113"},{"n":"影之诗","v":"156"},{"n":"明日之后","v":"189"},{"n":"部落冲突:皇室战争","v":"50"},{"n":"奥比岛手游","v":"661"},{"n":"盾之勇者成名录:浪潮","v":"704"},{"n":"雀姬","v":"214"},{"n":"公主连结Re:Dive","v":"330"},{"n":"DNF手游","v":"343"},{"n":"FIFA足球世界","v":"641"},{"n":"BanG Dream","v":"258"},{"n":"荒野乱斗","v":"469"},{"n":"CF手游","v":"333"},{"n":"战双帕弥什","v":"293"},{"n":"天涯明月刀手游","v":"389"},{"n":"解密游戏","v":"42"},{"n":"恋爱养成游戏","v":"576"},{"n":"暗黑破坏神:不朽","v":"492"},{"n":"暗区突围","v":"502"},{"n":"跑跑卡丁车手游","v":"265"},{"n":"非人学园","v":"212"},{"n":"百闻牌","v":"286"},{"n":"猫和老鼠手游","v":"269"},{"n":"坎公骑冠剑","v":"442"},{"n":"忍者必须死3","v":"203"},{"n":"梦幻西游手游","v":"342"},{"n":"航海王热血航线","v":"504"},{"n":"少女前线","v":"39"},{"n":"300大作战","v":"688"},{"n":"少女前线:云图计划","v":"525"},{"n":"漫威超级战争","v":"478"},{"n":"摩尔庄园手游","v":"464"},{"n":"宝可梦大集结","v":"493"},{"n":"小动物之星","v":"473"},{"n":"天地劫:幽城再临","v":"448"},{"n":"漫威对决","v":"511"},{"n":" 东方归言录","v":"538"},{"n":"梦幻模拟战","v":"178"},{"n":"时空猎人3","v":"643"},{"n":"重返帝国","v":"613"},{"n":"休闲小游戏","v":"679"},{"n":"其他手游","v":"98"},{"n":"新游评测","v":"274"}] }], - "6":[{"key":"area","name":"分区","value":[{"n":"主机游戏","v":"236"},{"n":"我的世界","v":"216"},{"n":"独立游戏","v":"283"},{"n":"怀旧游戏","v":"237"},{"n":"弹幕互动玩法","v":"460"},{"n":"恐怖游戏","v":"276"},{"n":"禁闭求生","v":"707"},{"n":"斯普拉遁3","v":"694"},{"n":"卧龙:苍天陨落","v":"700"},{"n":"使命召唤19","v":"282"},{"n":"异度神剑","v":"665"},{"n":"艾尔登法环","v":"555"},{"n":"聚会游戏","v":"636"},{"n":"哥谭骑士","v":"716"},{"n":"命运2","v":"277"},{"n":"沙石镇时光","v":"630"},{"n":"Dread Hunger","v":"591"},{"n":"红色警戒2","v":"693"},{"n":"失落迷城:群星的诅咒","v":"714"},{"n":"策略游戏","v":"570"},{"n":"战地风云","v":"597"},{"n":"幽灵线:东京","v":"612"},{"n":"糖豆人","v":"357"},{"n":"消逝的光芒2","v":"586"},{"n":"只狼","v":"245"},{"n":"怪物猎人","v":"578"},{"n":"饥荒","v":"218"},{"n":"精灵宝可梦","v":"228"},{"n":"FIFA23","v":"708"},{"n":"暖雪","v":"582"},{"n":"全面战争:战锤3","v":"594"},{"n":"彩虹六号:异种","v":"580"},{"n":"战神","v":"579"},{"n":"FORZA 极限竞速","v":"302"},{"n":"NBA2K","v":"362"},{"n":"帝国时代4","v":"548"},{"n":"光环:无限","v":"559"},{"n":"孤岛惊魂6","v":"537"},{"n":"植物大战僵尸","v":"309"},{"n":"仙剑奇侠传七","v":"540"},{"n":"灵魂筹码","v":"223"},{"n":"格斗游戏","v":"433"},{"n":"荒野大镖客2","v":"226"},{"n":"重生细胞","v":"426"},{"n":"刺客信条","v":"227"},{"n":"恐鬼症","v":"387"},{"n":"以撒","v":"219"},{"n":"双人成行","v":"446"},{"n":"方舟","v":"295"},{"n":"仁王2","v":"313"},{"n":"鬼泣5","v":"244"},{"n":"枪火重生","v":"364"},{"n":"盗贼之海","v":"341"},{"n":"胡闹厨房","v":"507"},{"n":"体育游戏","v":"500"},{"n":"恐惧之间","v":"439"},{"n":"塞尔达","v":"308"},{"n":"马力欧制造2","v":"261"},{"n":"全境封锁2","v":"243"},{"n":"骑马与砍杀","v":"326"},{"n":"人类一败涂地","v":"270"},{"n":"鬼谷八荒","v":"424"},{"n":"无主之地3","v":"273"},{"n":"辐射76","v":"220"},{"n":"全面战争","v":"257"},{"n":"亿万僵尸","v":"463"},{"n":"暗黑破坏神2","v":"535"},{"n":"文字游戏","v":"583"},{"n":"恋爱模拟游戏","v":"592"},{"n":"泰拉瑞亚","v":"593"},{"n":"雨中冒险2","v":"441"},{"n":"游戏速通","v":"678"},{"n":"摔角城大乱斗","v":"681"},{"n":"勇敢的哈克","v":"692"},{"n":" 审判系列","v":"698"},{"n":"其他单机","v":"235"}] }], - "1":[{"key":"area","name":"分区","value":[{"n":"视频唱见","v":"21"},{"n":"萌宅领域","v":"530"},{"n":"视频聊天","v":"145"},{"n":"舞见","v":"207"},{"n":"情感","v":"706"},{"n":"户外","v":"123"},{"n":"日常","v":"399"}] }], - "5":[{"key":"area","name":"分区","value":[{"n":"唱见电台","v":"190"},{"n":"聊天电台","v":"192"},{"n":"配音","v":"193"}] }], - "9":[{"key":"area","name":"分区","value":[{"n":"虚拟主播","v":"371"},{"n":"3D虚拟主播","v":"697"}] }], - "10":[{"key":"area","name":"分区","value":[{"n":"生活分享","v":"646"},{"n":"运动","v":"628"},{"n":"搞笑","v":"624"},{"n":"手工绘画","v":"627"},{"n":"萌宠","v":"369"},{"n":"美食","v":"367"},{"n":"时尚","v":"378"},{"n":"影音馆","v":"33"}] }], - "11":[{"key":"area","name":"分区","value":[{"n":"社科法律心理","v":"376"},{"n":"人文历史","v":"702"},{"n":"校园学习","v":"372"},{"n":"职场·技能","v":"377"},{"n":" 科技","v":"375"},{"n":"科学科普","v":"701"},{"n":"时政","v":"715"}] }], - "13":[{"key":"area","name":"分区","value":[{"n":"游戏赛事","v":"561"},{"n":"体育赛事","v":"562"},{"n":"赛事综合","v":"563"}] }], - "300":[{"key":"area","name":"分区","value":[{"n":"购物","v":"300000"}] }] + "10":[{"key":"area","name":"分区","value":[{"n":"生活分享","v":"646"},{"n":"聊天交友","v":"825"},{"n":"手工绘画","v":"627"},{"n":"情感","v":"623"},{"n":"户外","v":"368"},{"n":"萌宠","v":"369"},{"n":"运动","v":"628"},{"n":"美食","v":"367"},{"n":"时尚","v":"378"},{"n":"电子榨菜","v":"624"},{"n":"沉浸体验","v":"827"}]}], + "2":[{"key":"area","name":"分区","value":[{"n":"英雄联盟","v":"86"},{"n":"无畏契约","v":"329"},{"n":"CS:GO","v":"89"},{"n":"APEX英雄","v":"240"},{"n":"永劫无间","v":"666"},{"n":"穿越火线","v":"88"},{"n":"命运方舟","v":"590"},{"n":"DOTA2","v":"92"},{"n":"吃鸡行动","v":"80"},{"n":"逃离塔科夫","v":"252"},{"n":"传奇","v":"695"},{"n":"DNF","v":"78"},{"n":"卡拉彼丘","v":"782"},{"n":"幕后高手","v":"774"},{"n":"生死狙击2","v":"575"},{"n":"洛奇英雄传","v":"599"},{"n":"最终幻想14","v":"102"},{"n":"重生边缘","v":"809"},{"n":"星际战甲","v":"249"},{"n":"梦三国","v":"710"},{"n":"英魂之刃","v":"690"},{"n":"剑网3","v":"82"},{"n":"从军","v":"829"},{"n":"铁甲雄兵","v":"691"},{"n":"封印者","v":"300"},{"n":"新天龙八部","v":"653"},{"n":"赛尔号","v":"667"},{"n":"造梦西游","v":"668"},{"n":"洛克王国","v":"669"},{"n":"问道","v":"670"},{"n":"诛仙世界","v":"654"},{"n":"大话西游","v":"652"},{"n":"奇迹MU","v":"683"},{"n":"永恒之塔","v":"684"},{"n":"QQ三国","v":"685"},{"n":"人间地狱","v":"677"},{"n":"彩虹岛","v":"686"},{"n":"洛奇","v":"663"},{"n":"跑跑卡丁车","v":"664"},{"n":"星际公民","v":"658"},{"n":"Squad战术小队","v":"659"},{"n":"反恐精英Online","v":"629"},{"n":"风暴奇侠","v":"648"},{"n":"创世战车","v":"705"},{"n":"装甲战争","v":"642"},{"n":"守望先锋","v":"87"},{"n":"阿尔比恩","v":"639"},{"n":"猎杀对决","v":"600"},{"n":"CFHD","v":"472"},{"n":"骑士精神2","v":"650"},{"n":"超击突破","v":"680"},{"n":"武装突袭","v":"634"},{"n":"Wayfinder寻路者","v":"773"},{"n":"300英雄","v":"84"},{"n":"炉石传说","v":"91"},{"n":"剑网3缘起","v":"499"},{"n":"街头篮球","v":"649"},{"n":"综合射击","v":"601"},{"n":"剑灵","v":"505"},{"n":"艾尔之光","v":"651"},{"n":"黑色沙漠","v":"632"},{"n":"天涯明月刀","v":"596"},{"n":"超激斗梦境","v":"519"},{"n":"冒险岛","v":"574"},{"n":"逆战","v":"487"},{"n":"魔兽争霸3","v":"181"},{"n":"QQ飞车","v":"610"},{"n":"魔兽世界","v":"83"},{"n":"FIFAONLINE4","v":"388"},{"n":"NBA2KOL2","v":"581"},{"n":"使命召唤:战区","v":"318"},{"n":"VRChat","v":"656"},{"n":"坦克世界","v":"115"},{"n":"战舰世界","v":"248"},{"n":"战争与抉择","v":"729"},{"n":"战争雷霆","v":"316"},{"n":"战意","v":"383"},{"n":"风暴英雄","v":"114"},{"n":"星际争霸2","v":"93"},{"n":"刀塔自走棋","v":"239"},{"n":"堡垒之夜","v":"164"},{"n":"枪神纪","v":"251"},{"n":"三国杀","v":"81"},{"n":"龙之谷","v":"112"},{"n":"古剑奇谭OL","v":"173"},{"n":"幻想全明星","v":"176"},{"n":"怀旧网游","v":"288"},{"n":"新游前瞻","v":"298"},{"n":"星战前夜:晨曦","v":"331"},{"n":"流放之路","v":"551"},{"n":"FPS沙盒","v":"633"},{"n":"永恒轮回","v":"459"},{"n":"激战2","v":"607"},{"n":"其他网游","v":"107"},{"n":"蓝色协议","v":"760"}]}], + "3":[{"key":"area","name":"分区","value":[{"n":"王者荣耀","v":"35"},{"n":"和平精英","v":"256"},{"n":"原神","v":"321"},{"n":"崩坏:星穹铁道","v":"549"},{"n":"第五人格","v":"163"},{"n":"LOL手游","v":"395"},{"n":"明日方舟","v":"255"},{"n":"黎明觉醒:生机","v":"479"},{"n":"蛋仔派对","v":"571"},{"n":"冒险岛手游","v":"796"},{"n":"元梦之星","v":"822"},{"n":"闪耀!优俊少女","v":"805"},{"n":"斯露德","v":"797"},{"n":"千年之旅","v":"806"},{"n":"白夜极光","v":"781"},{"n":"逆水寒手游","v":"771"},{"n":"率土之滨","v":"807"},{"n":"月圆之夜","v":"215"},{"n":"哈利波特:魔法觉醒","v":"474"},{"n":"七人传奇","v":"823"},{"n":"幻塔","v":"550"},{"n":"星之破晓","v":"799"},{"n":"金铲铲之战","v":"514"},{"n":"少女前线2:追放","v":"832"},{"n":"深空之眼","v":"598"},{"n":"无期迷途","v":"675"},{"n":"晶核","v":"777"},{"n":"星球重启","v":"828"},{"n":"宿命回响:弦上的叹息","v":"826"},{"n":"光遇","v":"687"},{"n":"桃源深处有人家","v":"792"},{"n":"三国志战棋版","v":"756"},{"n":"战火勋章","v":"765"},{"n":"以闪亮之名","v":"755"},{"n":"尘白禁区","v":"778"},{"n":"古魂","v":"759"},{"n":"鬼泣-巅峰之战","v":"470"},{"n":"奇点时代","v":"762"},{"n":"香肠派对","v":"689"},{"n":"猫之城","v":"645"},{"n":"高能英雄","v":"783"},{"n":"使命召唤手游","v":"386"},{"n":"崩坏3","v":"40"},{"n":"银河境界线","v":"793"},{"n":"蔚蓝档案","v":"787"},{"n":"第七史诗","v":"784"},{"n":"游戏王:决斗链接","v":"407"},{"n":"游戏王","v":"303"},{"n":"JJ斗地主","v":"724"},{"n":"阴阳师","v":"36"},{"n":"欢乐斗地主","v":"719"},{"n":"太空行动","v":"791"},{"n":"空之要塞:启航","v":"718"},{"n":"长安幻想","v":"738"},{"n":"火影忍者手游","v":"292"},{"n":"Fate/GO","v":"37"},{"n":"综合棋牌","v":"354"},{"n":"QQ飞车手游","v":"154"},{"n":"决战!平安京","v":"140"},{"n":"狼人杀","v":"41"},{"n":"三国杀移动版","v":"352"},{"n":"碧蓝航线","v":"113"},{"n":"影之诗","v":"156"},{"n":"明日之后","v":"189"},{"n":"重返未来:1999","v":"761"},{"n":"环行旅舍","v":"786"},{"n":"幻世与冒险","v":"813"},{"n":"部落冲突:皇室战争","v":"50"},{"n":"奥比岛手游","v":"661"},{"n":"弹弹堂","v":"734"},{"n":"雀姬","v":"214"},{"n":"公主连结Re:Dive","v":"330"},{"n":"DNF手游","v":"343"},{"n":"FIFA足球世界","v":"641"},{"n":"BanGDream","v":"258"},{"n":"荒野乱斗","v":"469"},{"n":"CF手游","v":"333"},{"n":"战双帕弥什","v":"293"},{"n":"天涯明月刀手游","v":"389"},{"n":"一拳超人:世界","v":"779"},{"n":"解密游戏","v":"42"},{"n":"恋爱养成游戏","v":"576"},{"n":"暗黑破坏神:不朽","v":"492"},{"n":"暗区突围","v":"502"},{"n":"跑跑卡丁车手游","v":"265"},{"n":"非人学园","v":"212"},{"n":"百闻牌","v":"286"},{"n":"猫和老鼠手游","v":"269"},{"n":"坎公骑冠剑","v":"442"},{"n":"忍者必须死3","v":"203"},{"n":"梦幻西游手游","v":"342"},{"n":"航海王热血航线","v":"504"},{"n":"少女前线","v":"39"},{"n":"300大作战","v":"688"},{"n":"少女前线:云图计划","v":"525"},{"n":"漫威超级战争","v":"478"},{"n":"摩尔庄园手游","v":"464"},{"n":"宝可梦大集结","v":"493"},{"n":"小动物之星","v":"473"},{"n":"天地劫:幽城再临","v":"448"},{"n":"漫威对决","v":"511"},{"n":"东方归言录","v":"538"},{"n":"梦幻模拟战","v":"178"},{"n":"时空猎人3","v":"643"},{"n":"重返帝国","v":"613"},{"n":"休闲小游戏","v":"679"},{"n":"其他手游","v":"98"},{"n":"新游评测","v":"274"},{"n":"山海镜花","v":"821"},{"n":"小冰冰传奇","v":"824"}]}], + "6":[{"key":"area","name":"分区","value":[{"n":"主机游戏","v":"236"},{"n":"我的世界","v":"216"},{"n":"独立游戏","v":"283"},{"n":"怀旧游戏","v":"237"},{"n":"猛兽派对","v":"384"},{"n":"赛博朋克2077","v":"402"},{"n":"星空","v":"808"},{"n":"塞尔达传说","v":"308"},{"n":"苍翼:混沌效应","v":"798"},{"n":"命运2","v":"277"},{"n":"收获日3","v":"811"},{"n":"FC24","v":"830"},{"n":"机战佣兵VI境界天火","v":"800"},{"n":"暗黑破坏神Ⅳ","v":"780"},{"n":"匹诺曹的谎言","v":"812"},{"n":"博德之门3","v":"385"},{"n":"绝世好武功","v":"801"},{"n":"恐怖游戏","v":"276"},{"n":"DarkandDarker","v":"795"},{"n":"Warlander","v":"785"},{"n":"FORZA极限竞速","v":"302"},{"n":"边境","v":"763"},{"n":"生化危机","v":"721"},{"n":"最终幻想","v":"328"},{"n":"暗黑破坏神","v":"535"},{"n":"森林之子","v":"751"},{"n":"卧龙:苍天陨落","v":"700"},{"n":"红色警戒2","v":"693"},{"n":"策略游戏","v":"570"},{"n":"禁闭求生","v":"707"},{"n":"战神","v":"579"},{"n":"斯普拉遁3","v":"694"},{"n":"使命召唤19","v":"282"},{"n":"艾尔登法环","v":"555"},{"n":"聚会游戏","v":"636"},{"n":"DreadHunger","v":"591"},{"n":"战地风云","v":"597"},{"n":"糖豆人","v":"357"},{"n":"消逝的光芒2","v":"586"},{"n":"只狼","v":"245"},{"n":"怪物猎人","v":"578"},{"n":"宝可梦集换式卡牌游戏","v":"720"},{"n":"饥荒","v":"218"},{"n":"精灵宝可梦","v":"228"},{"n":"FIFA23","v":"708"},{"n":"全面战争:战锤3","v":"594"},{"n":"NBA2K","v":"362"},{"n":"帝国时代4","v":"548"},{"n":"植物大战僵尸","v":"309"},{"n":"格斗游戏","v":"433"},{"n":"荒野大镖客2","v":"226"},{"n":"重生细胞","v":"426"},{"n":"刺客信条","v":"227"},{"n":"恐鬼症","v":"387"},{"n":"以撒","v":"219"},{"n":"双人成行","v":"446"},{"n":"方舟","v":"295"},{"n":"仁王2","v":"313"},{"n":"鬼泣5","v":"244"},{"n":"枪火重生","v":"364"},{"n":"盗贼之海","v":"341"},{"n":"胡闹厨房","v":"507"},{"n":"体育游戏","v":"500"},{"n":"全境封锁2","v":"243"},{"n":"骑马与砍杀","v":"326"},{"n":"人类一败涂地","v":"270"},{"n":"无主之地3","v":"273"},{"n":"辐射76","v":"220"},{"n":"全面战争","v":"257"},{"n":"文字游戏","v":"583"},{"n":"恋爱模拟游戏","v":"592"},{"n":"泰拉瑞亚","v":"593"},{"n":"游戏速通","v":"678"},{"n":"Roblox","v":"753"},{"n":"雀魂麻将","v":"803"},{"n":"德州电锯","v":"834"},{"n":"其他单机","v":"235"}]}], + "1":[{"key":"area","name":"分区","value":[{"n":"聊天室","v":"740"},{"n":"视频唱见","v":"21"},{"n":"萌宅领域","v":"530"},{"n":"视频聊天","v":"145"},{"n":"舞见","v":"207"}]}], + "5":[{"key":"area","name":"分区","value":[{"n":"唱见电台","v":"190"},{"n":"聊天电台","v":"192"},{"n":"甜宠电台","v":"817"}]}], + "9":[{"key":"area","name":"分区","value":[{"n":"TopStar","v":"743"},{"n":"虚拟Singer","v":"744"},{"n":"虚拟Gamer","v":"745"},{"n":"虚拟声优","v":"746"},{"n":"虚拟日常","v":"371"},{"n":"虚拟APEX","v":"789"},{"n":"虚拟PK","v":"775"}]}], + "14":[{"key":"area","name":"分区","value":[{"n":"交友","v":"818"},{"n":"点唱","v":"819"},{"n":"兴趣","v":"820"}]}], + "11":[{"key":"area","name":"分区","value":[{"n":"社科法律心理","v":"376"},{"n":"人文历史","v":"702"},{"n":"校园学习","v":"372"},{"n":"职场·技能","v":"377"},{"n":"科技","v":"375"},{"n":"科学科普","v":"701"}]}], + "13":[{"key":"area","name":"分区","value":[{"n":"游戏赛事","v":"561"},{"n":"体育赛事","v":"562"},{"n":"赛事综合","v":"563"}]}], + "301":[{"key":"area","name":"分区","value":[{"n":"热门帮玩","v":"301000"},{"n":"手游帮玩","v":"301002"},{"n":"网游帮玩","v":"301003"},{"n":"单机帮玩","v":"301004"}]}], + "15":[{"key":"area","name":"分区","value":[{"n":"兵临城下","v":"814"},{"n":"功夫狂飙","v":"833"},{"n":"竞技玩法","v":"815"},{"n":"休闲玩法","v":"816"}]}] }, detailUrl:'https://live.bilibili.com/fyid',//二级详情拼接链接(json格式用) // detailUrl:'https://api.live.bilibili.com/xlive/web-room/v1/playUrl/playUrl?cid=fyid&platform=h5&otype=json&quality=0',//二级详情拼接链接(json格式用) // searchUrl:'/x/web-interface/search/type?__refresh__=true&page=fypage&page_size=42&order=online&platform=pc&highlight=1&single_column=0&keyword=**&search_type=live&dynamic_offset=0&preload=true', - searchUrl:'https://api.bilibili.com/x/web-interface/search/type?search_type=live&keyword=**&page=1', + searchUrl:'https://api.bilibili.com/x/web-interface/search/type?search_type=live&keyword=**&page=fypage', searchable:2, quickSearch:0, headers:{ "User-Agent":"PC_UA", "Referer": "https://www.bilibili.com", - "Cookie":"$bili_cookie" + // "Cookie":"$bili_cookie" + "Cookie":"https://ghproxy.net/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/txt/cookie.txt" }, timeout:5000, limit:8, @@ -67,12 +72,41 @@ var rule = { // play_json:[{re:'*', json:{jx:0, parse:1,header:JSON.stringify({"user-agent":"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"})}}], // play_json:[{re:'*', json:{jx:0, parse:1,header:JSON.stringify({"user-agent":"uc_ua"})}}], // play_json:0, - lazy:"js:let ids=input.split('_');let result={};let iurl='https://api.live.bilibili.com/room/v1/Room/playUrl?cid='+ids[1]+'&'+ids[0];let html=request(iurl);let jRoot=JSON.parse(html);let jo=jRoot['data'];let ja=jo['durl'];let purl='';if(ja.length>0){purl=ja[0]['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(/h5/.test(ids[0])){result['contentType']='';input=result}else{result['contentType']='video/x-flv';input=result}", + 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.live.bilibili.com/room/v1/Room/playUrl?cid=' + ids[1] + '&' + ids[0]; + let html = request(iurl); + let jRoot = JSON.parse(html); + let jo = jRoot['data']; + let ja = jo['durl']; + let purl = ''; + if (ja.length > 0) { + purl = ja[0]['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' + }; + result['danmaku'] = dan; + if (/h5/.test(ids[0])) { + result['contentType'] = ''; + input = result + } else { + result['contentType'] = 'video/x-flv'; + input = result + } + `, double:false, 推荐:'*', 一级:'json:data.list;title;system_cover;uname;roomid', // 二级:'*', 二级:"js:let aid=input.match(/\\/(\\d+)/)[1];log(aid);let html=request('https://api.live.bilibili.com/room/v1/Room/get_info?room_id='+aid);let jo=JSON.parse(html).data;let title=jo['title'];let pic=jo['keyframe'];let desc=jo['description'];let dire=jo['uid'];let typeName=jo['area_name'];let remark='在线人数:'+jo['online'];let vod={vod_id:aid,vod_name:title,vod_pic:pic,type_name:typeName,vod_area:'bililivedanmu',vod_remarks:remark,vod_actor:'直播间id-'+aid,vod_director:dire,vod_content:desc};vod['vod_play_from']='B站';vod['vod_play_url']='flv线路原画$platform=web&quality=4_'+aid+'#flv线路高清$platform=web&quality=3_'+aid+'#h5线路原画$platform=h5&quality=4_'+aid+'#h5线路高清$platform=h5&quality=3_'+aid;VOD=vod;", // 搜索:'json:data.result.live_room;title;cover;uname;roomid', - 搜索:'js:let html=request(input);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let videos=[];let vodList=JSON.parse(html).data.result.live_room;vodList.forEach(function(vod){let aid=vod["roomid"];let title="直播间:"+vod["title"].replace(\'\',"").replace("","");let img="https:"+vod["user_cover"];let remark=vod["watched_show"]["text_small"]+" "+vod["uname"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}', + 搜索:'js:let html=request(input);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let videos=[];let vodList=JSON.parse(html).data.result.live_room;vodList.forEach(function(vod){let aid=vod["roomid"];let title="直播间:"+vod["title"].replace(\'\',"").replace("","");let img="https:"+vod["user_cover"];let remark=vod["watched_show"]["text_small"]+" "+vod["uname"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}', + // 预处理:'if(rule_fetch_params.headers.Cookie.startsWith("http")){rule_fetch_params.headers.Cookie=fetch(rule_fetch_params.headers.Cookie);setItem(RULE_CK,cookie)};log(rule_fetch_params.headers.Cookie)', } \ No newline at end of file diff --git a/JS/lib/drpy2.js b/JS/lib/drpy2.js index 29bb001..d1a99d6 100644 --- a/JS/lib/drpy2.js +++ b/JS/lib/drpy2.js @@ -1 +1,2542 @@ -import cheerio from"./cheerio.min.js";import"./crypto-js.js";import 模板 from"./模板.js";import{gbkTool}from"./gbk.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log("预处理执行失败:"+e.message)}}}let rule={};let vercode=typeof pdfl==="function"?"drpy2.1":"drpy2";const VERSION=vercode+" 3.9.48beta16 20231011";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="猜你|喜欢|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://drpy.nokia.press:8028/ocr/drpy/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;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|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;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=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd:pd};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();let result=defaultParser.pdfh(html,parse);return result},pdfa(html,parse){if(!html||!parse||!parse.trim()){return[]}parse=parse.trim();let result=defaultParser.pdfa(html,parse);print(`pdfa解析${parse}=>${result.length}`);return result},pd(html,parse,base_url){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();base_url=base_url||MY_URL;return defaultParser.pd(html,parse,base_url)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html=request(OCR_API,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true);code=html||""}catch(e){log(`OCR识别验证码发生错误:${e.message}`)}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cntit.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)}if(!fetch_params){fetch_params={}}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.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}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+`|method:${obj.method||"GET"}|body:${obj.body||""}`);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=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{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;print("宝塔验证访问链接:"+url);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")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}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){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}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;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);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}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]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表双层定位处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);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 p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}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]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表单层定位处理发生错误:"+e.message)}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}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(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]}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});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)}}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;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}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);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.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:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{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)}let list=_pdfa(html,p0);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 p5=getPP(p,5,pp,5);list.forEach(it=>{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]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,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"{}"}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic: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;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}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"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_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(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);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";let new_map={};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}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}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);try{var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print("格式化LISTS发生错误:"+e.message)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print("js执行lists: 发生错误:"+e.message)}}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);let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let new_vod_list=[];let tt1=(new Date).getTime();if(typeof pdfl==="function"){new_vod_list=pdfl(html,p1,list_text,list_url,MY_URL)}else{let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}for(let i=0;i0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)}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(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);vod=vodDeal(vod);return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return 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}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length===3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log("执行嗅探规则发生错误:"+e.message);return false}}}function init(ext){console.log("init");try{let muban=模板.getMubans();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("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:`+e.message)}}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;rule.二级访问前=rule.二级访问前||"";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}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{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";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};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)}}else if(k.toLowerCase()==="cookie"){let v=rule.headers[k];if(v&&v.startsWith("http")){console.log(v);try{v=fetch(v);console.log(v);rule.headers[k]=v}catch(e){console.log(`从${v}获取cookie发生错误:`+e.message)}}}}}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);pre();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="";log("orId:"+orId);if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];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.二级,"二级访问前":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,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,DRPY:DRPY}; \ No newline at end of file +import cheerio from 'assets://js/lib/cheerio.min.js'; +import 'assets://js/lib/crypto-js.js'; +import 模板 from"../js/模板.js" +import {gbkTool} from './gbk.js' +// import './rsa.js' + +// import cheerio from "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/cheerio.min.js"; +// import "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-js.js"; +// import 模板 from"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js"; +// import {gbkTool} from 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/gbk.js' + +function init_test(){ + // console.log(typeof(CryptoJS)); + console.log("init_test_start"); + // print(模板); + // print(typeof(模板.getMubans)); + console.log("当前版本号:"+VERSION); + console.log(RKEY); + console.log(JSON.stringify(rule)); + console.log("init_test_end"); + + // console.log(typeof (CryptoJS)); + // console.log(typeof (JSEncrypt)); + // var publicKey = "-----BEGIN PUBLIC KEY-----\n" + + // "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTTt5d1LYtIxiW9ekKFBVonFOT\n" + + // "XJHv4PY4xCDLPYbHWRKa/mRO7J11OJX+cR7bqzNq6uxH1W339wV\n" + + // "lLP/x3Rl1RBh4prj0eYOEIsDVTvLTJONKazRtQrZ7yzSZ69o/3CQv\n" + + // "ex6kb4js+9zho4U9fwIDAQAB\n" + + // "-----END PUBLIC KEY-----"; + // var text = '你好'; + // const encryptor = new JSEncrypt(); + // console.log(typeof (encryptor.setPublicKey)); + // console.log(typeof (encryptor.encrypt)); + // encryptor.setPublicKey(publicKey) // 设置公钥 + // var str = encryptor.encrypt(text) // 对数据进行加密 + // console.log("加密数据:" + str); + // log('rsax:'+typeof(rsax)); + // log('rsaX:'+typeof(rsaX)); + // let data = base64Encode('你好'); + // let publicKey = 'dzyyds'; + // console.log(typeof (RSA.encode)); + // let encryptBase64Data = RSA.encode(data,publicKey); + // log('encryptBase64Data:'+encryptBase64Data); + // let str = RSA.decode(data,publicKey); + // log('str:'+str); +} + +/** + * 执行预处理代码 + */ +function pre(){ + if(typeof(rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()){ + let code = rule.预处理.trim(); + console.log("执行预处理代码:"+code); + if(code.startsWith('js:')){ + code = code.replace('js:',''); + } + try { + // code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie + // 直接操作 rule_fetch_params 这个变量 .headers.Cookie + eval(code); + }catch (e) { + console.log('预处理执行失败:'+e.message); + } + } +} + +let rule = {}; +let vercode = typeof(pdfl) ==='function'?'drpy2.1':'drpy2'; +const VERSION = vercode+' 3.9.48beta16 20231011'; +/** 已知问题记录 + * 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了] + * Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下) + * 2.import es6py.js但是里面的函数没有被装载进来.比如drpy规则报错setResult2 is undefiend(合并文件了可以不管了) + * 3.无法重复导入cheerio(怎么解决drpy和parseTag里都需要导入cheerio的问题) 无法在副文件导入cheerio (现在是全部放在drpy一个文件里了,凑合解决?) + * 4.有个错误不知道哪儿来的 executeScript: com.quickjs.JSObject$Undefined cannot be cast to java.lang.String 在 点击选集播放打印init_test_end后面打印(貌似不影响使用) + * 5.需要实现 stringify 函数,比起JSON.strifngify函数,它会原封不动保留中文不会编码unicode + * 6.base64Encode,base64Decode,md5函数还没有实现 (抄影魔代码实现了) + * 7.eval(getCryptoJS());还没有实现 (可以空实现了,以后遇到能忽略) + * done: jsp:{pdfa,pdfh,pd},json:{pdfa,pdfh,pd},jq:{pdfa,pdfh,pd} + * 8.req函数不支持传递字符串的data参数 {'content-type':'text/plain'} 类型数据,因此无法直接调用alist的ocr接口 + * * 电脑看日志调试 + adb tcpip 5555 + adb connect 192.168.10.192 + adb devices -l + adb logcat -c + adb logcat | grep -i QuickJS + adb logcat -c -b events + adb logcat -c -b main -b events -b radio -b system + adb logcat > 2.log DRPY:E | grep -i QuickJS + * **/ + + +/*** 以下是内置变量和解析方法 **/ +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'; // 源cookie的key值 +// const KEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host); // 源的唯一标识 +const CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态'; +const TAB_EXCLUDE = '猜你|喜欢|下载|剧情|热播'; +const OCR_RETRY = 3;//ocr验证重试次数 +// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口 +// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口 +// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口 +// const OCR_API = 'http://cms.nokia.press:5707/parse/ocr';//ocr在线识别接口 +const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口 +if(typeof(MY_URL)==='undefined'){ + var MY_URL; // 全局注入变量,pd函数需要 +} +var HOST; +var RKEY; // 源的唯一标识 +var fetch; +var print; +var log; +var rule_fetch_params; +var fetch_params; // 每个位置单独的 +var oheaders; +// var play_url; // 二级详情页注入变量,为了适配js模式0 (不在这里定义了,直接二级里定义了个空字符串) +var _pdfh; +var _pdfa; +var _pd; +// const DOM_CHECK_ATTR = ['url', 'src', 'href', 'data-original', 'data-src']; +const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/; +// 过滤特殊链接,不走urlJoin +const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/; +const NOADD_INDEX = /:eq|:lt|:gt|:first|:last|^body$|^#/; // 不自动加eq下标索引 +const URLJOIN_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/; // 需要自动urljoin的属性 +const SELECT_REGEX = /:eq|:lt|:gt|#/g; +const SELECT_REGEX_A = /:eq|:lt|:gt/g; + +/** + es6py扩展 + */ +if (typeof Object.assign != 'function') { + Object.assign = function () { + var target = arguments[0]; + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; +} +if (!String.prototype.includes) { + String.prototype.includes = function (search, start) { + if (typeof start !== 'number') { + start = 0; + } + + if (start + search.length > this.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) {//this是空或者未定义,抛出错误 + throw new TypeError('"this" is null or not defined'); + } + + var o = Object(this);//将this转变成对象 + var len = o.length >>> 0;//无符号右移0位,获取对象length属性,如果未定义就会变成0 + + if (len === 0) {//length为0直接返回false未找到目标值 + return false; + } + + var n = fromIndex | 0;//查找起始索引 + var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引,因为有可能是负值 + + while (k < len) {//从起始索引处开始循环 + if (o[k] === searchElement) {//如果某一位置与寻找目标相等,返回true,找到了 + return true; + } + k++; + } + return false;//未找到,返回false + } + }); +} +if (typeof String.prototype.startsWith != 'function') { + String.prototype.startsWith = function (prefix){ + return this.slice(0, prefix.length) === prefix; + }; +} +if (typeof String.prototype.endsWith != 'function') { + String.prototype.endsWith = function(suffix) { + return this.indexOf(suffix, this.length - suffix.length) !== -1; + }; +} +Object.prototype.myValues=function(obj){ + if(obj ==null) { + throw new TypeError("Cannot convert undefined or null to object"); + } + var res=[] + for(var k in obj){ + if(obj.hasOwnProperty(k)){//需判断是否是本身的属性 + res.push(obj[k]); + } + } + return res; +} +if (typeof Object.prototype.values != 'function') { + Object.prototype.values=function(obj){ + if(obj ==null) { + throw new TypeError("Cannot convert undefined or null to object"); + } + var res=[] + for(var k in obj){ + if(obj.hasOwnProperty(k)){//需判断是否是本身的属性 + res.push(obj[k]); + } + } + return res; + } +} +if (typeof Array.prototype.join != 'function') { + Array.prototype.join = function (emoji) { + // emoji = emoji||','; + emoji = emoji||''; + let self = this; + let str = ""; + let i = 0; + if (!Array.isArray(self)) {throw String(self)+'is not Array'} + if(self.length===0){return ''} + if (self.length === 1){return String(self[0])} + i = 1; + str = this[0]; + for (; i < self.length; i++) { + str += String(emoji)+String(self[i]); + } + return str; + }; +} + +String.prototype.rstrip = function (chars) { + let regex = new RegExp(chars + "$"); + return this.replace(regex, ""); +}; + +Array.prototype.append = Array.prototype.push; +String.prototype.strip = String.prototype.trim; +function 是否正版(vipUrl){ + let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv'); + return flag.test(vipUrl); +} +function urlDeal(vipUrl){ + if(!vipUrl){ + return '' + } + if(!是否正版(vipUrl)){ + return vipUrl + } + if(!/miguvideo/.test(vipUrl)){ + vipUrl=vipUrl.split('#')[0].split('?')[0]; + } + return vipUrl +} +function setResult(d){ + if(!Array.isArray(d)){ + return [] + } + VODS = []; + // print(d); + d.forEach(function (it){ + let obj = { + vod_id:it.url||'', + vod_name: it.title||'', + vod_remarks: it.desc||'', + vod_content: it.content||'', + vod_pic: it.pic_url||it.img||'', + }; + let keys = Object.keys(it); + if(keys.includes('tname')){ + obj.type_name = it.tname||''; + } + if(keys.includes('tid')){ + obj.type_id = it.tid||''; + } + if(keys.includes('year')){ + obj.vod_year = it.year||''; + } + if(keys.includes('actor')){ + obj.vod_actor = it.actor||''; + } + if(keys.includes('director')){ + obj.vod_director = it.director||''; + } + if(keys.includes('area')){ + obj.vod_area = it.area||''; + } + VODS.push(obj); + }); + return VODS +} +function setResult2(res){ + VODS = res.list||[]; + return VODS +} +function setHomeResult(res){ + if(!res||typeof(res)!=='object'){ + return [] + } + return setResult(res.list); +} +// 猫了个咪 +function rc(js) { + if (js === 'maomi_aes.js') { + var a = CryptoJS.enc.Utf8.parse("625222f9149e961d"); + var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330"); + return { + De: function (word) { + word = CryptoJS.enc.Hex.parse(word) + return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, { + iv: t, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8) + }, + En: function (word) { + // print(a); + // print(word); + var Encrypted = CryptoJS.AES.encrypt(word, a, { + iv: t, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return Encrypted.ciphertext.toString(); + } + }; + } + return {}; +} + +// 千万不要用for in 推荐 forEach (for in 会打乱顺序) +//猫函数 +function maoss(jxurl, ref, key) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + eval(getCryptoJS()); + try { + var getVideoInfo = function (text) { + return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); + }; + var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key; + if (ref) { + var html = request(jxurl, { + headers: { + 'Referer': ref + } + }); + } else { + var html = request(jxurl); + } + // print(html); + if (html.indexOf('&btwaf=') != -1) { + html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], { + headers: { + 'Referer': ref + } + }) + } + var token_iv = html.split('_token = "')[1].split('"')[0]; + var key = CryptoJS.enc.Utf8.parse(token_key); + var iv = CryptoJS.enc.Utf8.parse(token_iv); + // log("iv:"+iv); + // log(html); + // print(key); + // print(iv); + eval(html.match(/var config = {[\s\S]*?}/)[0] + ''); + // config.url = config.url.replace(/,/g,''); + // print(config.url); + if (!config.url.startsWith('http')) { + //config.url = decodeURIComponent(AES(config.url, key, iv)); + config.url = CryptoJS.AES.decrypt(config.url, key, { + iv: iv, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8) + } + return config.url; + } catch (e) { + return ''; + } +} + +function urlencode (str) { + str = (str + '').toString(); + return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28'). + replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+'); +} + +function base64Encode(text){ + return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)); + // return text +} + +function base64Decode(text){ + return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text)); + // return text +} + +function md5(text) { + return CryptoJS.MD5(text).toString(); +} + +/** + * 字符串按指定编码 + * @param input + * @param encoding + * @returns {*} + */ +function encodeStr(input,encoding){ + encoding = encoding||'gbk'; + if(encoding.startsWith('gb')){ + const strTool = gbkTool(); + input = strTool.encode(input); + } + return input +} + +/** + * 字符串指定解码 + * @param input + * @param encoding + * @returns {*} + */ +function decodeStr(input,encoding){ + encoding = encoding||'gbk'; + if(encoding.startsWith('gb')){ + const strTool = gbkTool(); + input = strTool.decode(input); + } + return input +} + +function getCryptoJS(){ + // return request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/libs/crypto-hiker.js'); + return 'console.log("CryptoJS已装载");' +} + +// 封装的RSA加解密类 +const RSA = { + encode:function (data,key,option){ + // log('encode'); + if(typeof(rsaEncrypt)==='function'){ + if(!option||typeof(option)!=='object'){ + return rsaEncrypt(data,key); + }else{ + return rsaEncrypt(data,key,option); + } + }else{ + return false + } + }, + decode:function (data,key,option){ + // log('decode'); + if(typeof(rsaDecrypt)==='function'){ + if(!option||typeof(option)!=='object'){ + return rsaDecrypt(data,key); + }else{ + return rsaDecrypt(data,key,option); + } + }else{ + return false + } + } +}; + +/** + * 获取壳子返回的代理地址 + * @returns {string|*} + */ +function getProxyUrl(){ + if(typeof(getProxy)==='function'){//判断壳子里有getProxy函数就执行取返回结果。否则取默认的本地 + return getProxy(true) + }else{ + return 'http://127.0.0.1:9978/proxy?do=js' + } +} + +/** + * 强制正序算法 + * @param lists 待正序列表 + * @param key 正序键 + * @param option 单个元素处理函数 + * @returns {*} + */ +function forceOrder(lists,key,option){ + let start = Math.floor(lists.length/2); + let end = Math.min(lists.length-1,start+1); + if(start >= end){ + return lists; + } + let first = lists[start]; + let second = lists[end]; + if(key){ + try { + first = first[key]; + second = second[key]; + }catch (e) {} + } + if(option && typeof(option)==='function'){ + try { + first = option(first); + second = option(second); + }catch (e) {} + } + first+=''; + second+=''; + // console.log(first,second); + if(first.match(/(\d+)/)&&second.match(/(\d+)/)){ + let num1 = Number(first.match(/(\d+)/)[1]); + let num2 = Number(second.match(/(\d+)/)[1]); + if (num1 > num2){ + lists.reverse(); + } + } + return lists +} + +let VODS = [];// 一级或者搜索需要的数据列表 +let VOD = {};// 二级的单个数据 +let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2'] +let LISTS = [];// 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']] +globalThis.encodeUrl = urlencode; +globalThis.urlencode = urlencode; + + + +/** + * url拼接 + * @param fromPath 初始当前页面url + * @param nowPath 相对当前页面url + * @returns {*} + */ +function urljoin(fromPath, nowPath) { + fromPath = fromPath||''; + nowPath = nowPath||''; + return joinUrl(fromPath, nowPath); + // try { + // // import Uri from './uri.min.js'; + // // var Uri = require('./uri.min.js'); + // // eval(request('https://cdn.bootcdn.net/ajax/libs/URI.js/1.19.11/URI.min.js')); + // // let new_uri = URI(nowPath, fromPath); + + // let new_uri = Uri(nowPath, fromPath); + // new_uri = new_uri.toString(); + // // console.log(new_uri); + // // return fromPath + nowPath + // return new_uri + // } + // catch (e) { + // console.log('urljoin发生错误:'+e.message); + // if(nowPath.startsWith('http')){ + // return nowPath + // }if(nowPath.startsWith('/')){ + // return getHome(fromPath)+nowPath + // } + // return fromPath+nowPath + // } +} +var urljoin2 = urljoin; + +// 内置 pdfh,pdfa,pd +const defaultParser = { + pdfh:pdfh, + pdfa:pdfa, + pd:pd, +}; + + +/** + * pdfh原版优化,能取style属性里的图片链接 + * @param html 源码 + * @param parse 解析表达式 + * @returns {string|*} + */ +function pdfh2(html,parse){ + let html2 = html; + try { + if(typeof(html)!=='string'){ + html2 = html.rr(html.ele).toString(); + } + }catch (e) { + print('html对象转文本发生了错误:'+e.message); + } + let result = defaultParser.pdfh(html2,parse); + let option = parse.includes('&&')?parse.split('&&').slice(-1)[0]:parse.split(' ').slice(-1)[0]; + if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){ + try { + result = result.match(/url\((.*?)\)/)[1]; + // 2023/07/28新增 style取内部链接自动去除首尾单双引号 + result = result.replace(/^['|"](.*)['|"]$/, "$1"); + }catch (e) {} + } + return result +} + +/** + * pdfa原版优化,可以转换jq的html对象 + * @param html + * @param parse + * @returns {*} + */ +function pdfa2(html,parse){ + let html2 = html; + try { + if(typeof(html)!=='string'){ + html2 = html.rr(html.ele).toString(); + } + }catch (e) { + print('html对象转文本发生了错误:'+e.message); + } + return defaultParser.pdfa(html2,parse); +} + +/** + * pd原版方法重写-增加自动urljoin + * @param html + * @param parse + * @param uri + * @returns {*} + */ +function pd2(html,parse,uri){ + let ret = pdfh2(html,parse); + if(typeof(uri)==='undefined'||!uri){ + uri = ''; + } + if(DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)){ + if(/http/.test(ret)){ + ret = ret.substr(ret.indexOf('http')); + }else{ + ret = urljoin(MY_URL,ret) + } + } + // MY_URL = getItem('MY_URL',MY_URL); + // console.log(`规则${RKEY}打印MY_URL:${MY_URL},uri:${uri}`); + return ret +} + +const parseTags = { + jsp:{ + pdfh:pdfh2, + pdfa:pdfa2, + pd:pd2, + }, + json:{ + pdfh(html, parse) { + if (!parse || !parse.trim()){ + return ''; + } + if (typeof(html) === 'string'){ + // print('jsonpath:pdfh字符串转dict'); + html = JSON.parse(html); + } + parse = parse.trim(); + if (!parse.startsWith('$.')){ + parse = '$.' + parse; + } + parse = parse.split('||'); + for (let ps of parse) { + let ret = cheerio.jp(ps, html); + if (Array.isArray(ret)){ + ret = ret[0] || ''; + } else{ + ret = ret || '' + } + if (ret && typeof (ret) !== 'string'){ + ret = ret.toString(); + } + if(ret){ + return ret + } + } + return ''; + }, + pdfa(html, parse) { + if (!parse || !parse.trim()){ + return ''; + } + if (typeof(html) === 'string'){ + // print('jsonpath:pdfa字符串转dict'); + html = JSON.parse(html); + } + parse = parse.trim() + if (!parse.startsWith('$.')){ + parse = '$.' + parse; + } + let ret = cheerio.jp(parse, html); + if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1){ + return ret[0] || [] + } + return ret || [] + }, + pd(html,parse){ + let ret = parseTags.json.pdfh(html,parse); + if(ret){ + return urljoin(MY_URL,ret); + } + return ret + }, + }, + jq:{ + pdfh(html, parse) { + if (!html||!parse || !parse.trim()) { + return '' + } + parse = parse.trim(); + let result = defaultParser.pdfh(html,parse); + // print(`pdfh解析${parse}=>${result}`); + return result; + }, + pdfa(html, parse) { + if (!html||!parse || !parse.trim()) { + return []; + } + parse = parse.trim(); + let result = defaultParser.pdfa(html,parse); + // print(result); + print(`pdfa解析${parse}=>${result.length}`); + return result; + }, + pd(html,parse,base_url){ + if (!html||!parse || !parse.trim()) { + return '' + } + parse = parse.trim(); + base_url = base_url||MY_URL; + return defaultParser.pd(html, parse, base_url); + }, + }, + getParse(p0){//非js开头的情况自动获取解析标签 + if(p0.startsWith('jsp:')){ + return this.jsp + }else if(p0.startsWith('json:')){ + return this.json + }else if(p0.startsWith('jq:')){ + return this.jq + }else { + return this.jq + } + } +}; + +const stringify = JSON.stringify; +const jsp = parseTags.jsp; +const jq = parseTags.jq; + +/*** 后台需要实现的java方法并注入到js中 ***/ + +/** + * 读取本地文件->应用程序目录 + * @param filePath + * @returns {string} + */ +function readFile(filePath){ + filePath = filePath||'./uri.min.js'; + var fd = os.open(filePath); + var buffer = new ArrayBuffer(1024); + var len = os.read(fd, buffer, 0, 1024); + console.log(len); + let text = String.fromCharCode.apply(null, new Uint8Array(buffer)); + console.log(text); + return text +} + +/** + * 处理返回的json数据 + * @param html + * @returns {*} + */ +function dealJson(html) { + try { + // html = html.match(/[\w|\W|\s|\S]*?(\{[\w|\W|\s|\S]*\})/).group[1]; + html = html.trim(); + if(!((html.startsWith('{') && html.endsWith('}'))||(html.startsWith('[') && html.endsWith(']')))){ + html = '{'+html.match(/.*?\{(.*)\}/m)[1]+'}'; + } + } catch (e) { + } + try { + html = JSON.parse(html); + }catch (e) {} + // console.log(typeof(html)); + return html; +} + +/** + * 验证码识别逻辑,需要java实现(js没有bytes类型,无法调用后端的传递图片二进制获取验证码文本的接口) + * @type {{api: string, classification: (function(*=): string)}} + */ +var OcrApi={ + api:OCR_API, + classification:function (img){ // img是byte类型,这里不方便搞啊 + let code = ''; + try { + // let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true); + // html = JSON.parse(html); + // code = html.url||''; + log('通过drpy_ocr验证码接口过验证...'); + let html = request(OCR_API,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true); + code = html||''; + }catch (e) { + log(`OCR识别验证码发生错误:${e.message}`) + } + return code + } +}; +/** + * 验证码识别,暂未实现 + * @param url 验证码图片链接 + * @returns {string} 验证成功后的cookie + */ +function verifyCode(url){ + let cnt = 0; + let host = getHome(url); + let cookie = ''; + while (cnt < OCR_RETRY){ + try{ + // let obj = {headers:headers,timeout:timeout}; + let yzm_url = `${host}/index.php/verify/index.html`; + console.log(`验证码链接:${yzm_url}`); + let hhtml = request(yzm_url,{withHeaders:true,toBase64:true},true); + let json = JSON.parse(hhtml); + if(!cookie){ + // print(json); + let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie'); + // cookie = json['set-cookie']?json['set-cookie'].split(';')[0]:''; + cookie = setCk?json[setCk].split(';')[0]:''; + } + // console.log(hhtml); + console.log('cookie:'+cookie); + let img = json.body; + // console.log(img); + 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'}); + // console.log(html); + html = JSON.parse(html); + if(html.msg === 'ok'){ + console.log(`第${cnt+1}次验证码提交成功`); + return cookie // 需要返回cookie + }else if(html.msg!=='ok'&&cnt+1>=OCR_RETRY){ + cookie = ''; // 需要清空返回cookie + } + }catch (e) { + console.log(`第${cnt+1}次验证码提交失败:${e.message}`); + if(cnt+1>=OCR_RETRY){ + cookie = ''; + } + } + cnt+=1 + } + return cookie +} + +/** + * 存在数据库配置表里, key字段对应值value,没有就新增,有就更新,调用此方法会清除key对应的内存缓存 + * @param k 键 + * @param v 值 + */ +function setItem(k,v){ + local.set(RKEY,k,v); + console.log(`规则${RKEY}设置${k} => ${v}`) +} + +/** + * 获取数据库配置表对应的key字段的value,没有这个key就返回value默认传参.需要有缓存,第一次获取后会存在内存里 + * @param k 键 + * @param v 值 + * @returns {*} + */ +function getItem(k,v){ + return local.get(RKEY,k) || v; +} + +/** + * 删除数据库key对应的一条数据,并清除此key对应的内存缓存 + * @param k + */ +function clearItem(k){ + local.delete(RKEY,k); +} + +/*** js自封装的方法 ***/ + +/** + * 获取链接的host(带http协议的完整链接) + * @param url 任意一个正常完整的Url,自动提取根 + * @returns {string} + */ +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 +} + +/** + * get参数编译链接,类似python params字典自动拼接 + * @param url 访问链接 + * @param obj 参数字典 + * @returns {*} + */ +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 +} + +/** + * 远程依赖执行函数 + * @param url 远程js地址 + */ +function require(url){ + eval(request(url)); +} +/** + * 海阔网页请求函数完整封装 + * @param url 请求链接 + * @param obj 请求对象 {headers:{},method:'',timeout:5000,body:'',withHeaders:false} + * @param ocr_flag 标识此flag是用于请求ocr识别的,自动过滤content-type指定编码 + * @returns {string|string|DocumentFragment|*} + */ +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); + } + if(!fetch_params){ + fetch_params = {}; + } + 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.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 + + // 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form + if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管 + obj.headers["Content-Type"] = 'application/x-www-form-urlencoded; charset='+rule.encoding; + } + }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){ // 返回base64,用于请求图片 + obj.buffer = 2; + delete obj.toBase64 + } + console.log(JSON.stringify(obj.headers)); + // console.log('request:'+url+' obj:'+JSON.stringify(obj)); + console.log('request:'+url+`|method:${obj.method||'GET'}|body:${obj.body||''}`); + let res = req(url, obj); + let html = res.content||''; + // console.log(html); + if(obj.withHeaders){ + let htmlWithHeaders = res.headers; + htmlWithHeaders.body = html; + return JSON.stringify(htmlWithHeaders); + }else{ + return html + } +} + +/** + * 快捷post请求 + * @param url 地址 + * @param obj 对象 + * @returns {string|DocumentFragment|*} + */ +function post(url,obj){ + obj.method = 'POST'; + return request(url,obj); +} + +fetch = request; +print = function (data){ + data = data||''; + if(typeof(data)=='object'&&Object.keys(data).length>0){ + try { + data = JSON.stringify(data); + console.log(data); + }catch (e) { + // console.log('print:'+e.message); + console.log(typeof(data)+':'+data.length); + return + } + }else if(typeof(data)=='object'&&Object.keys(data).length<1){ + console.log('null object'); + }else{ + console.log(data); + } +} +log = print; +/** + * 检查宝塔验证并自动跳过获取正确源码 + * @param html 之前获取的html + * @param url 之前的来源url + * @param obj 来源obj + * @returns {string|DocumentFragment|*} + */ +function checkHtml(html,url,obj){ + if(/\?btwaf=/.test(html)){ + let btwaf = html.match(/btwaf(.*?)"/)[1]; + url = url.split('#')[0]+'?btwaf'+btwaf; + print('宝塔验证访问链接:'+url); + html = request(url,obj); + } + return html +} + +/** + * 带一次宝塔验证的源码获取 + * @param url 请求链接 + * @param obj 请求参数 + * @returns {string|DocumentFragment} + */ +function getCode(url,obj){ + let html = request(url,obj); + html = checkHtml(html,url,obj); + return html +} + +/** + * 源rule专用的请求方法,自动注入cookie + * @param url 请求链接 + * @returns {string|DocumentFragment} + */ +function getHtml(url){ + let obj = {}; + if(rule.headers){ + obj.headers = rule.headers; + } + let cookie = getItem(RULE_CK,''); + if(cookie){ + // log('有cookie:'+cookie); + if(obj.headers && ! Object.keys(obj.headers).map(it=>it.toLowerCase()).includes('cookie')){ + log('历史无cookie,新增过验证后的cookie'); + obj.headers['Cookie'] = cookie; + }else if(obj.headers && obj.headers.cookie && obj.headers.cookie!==cookie){ + obj.headers['Cookie'] = cookie; + log('历史有小写过期的cookie,更新过验证后的cookie'); + }else if(obj.headers && obj.headers.Cookie && obj.headers.Cookie!==cookie){ + obj.headers['Cookie'] = cookie; + log('历史有大写过期的cookie,更新过验证后的cookie'); + }else if(!obj.headers){ + obj.headers = {Cookie:cookie}; + log('历史无headers,更新过验证后的含cookie的headers'); + } + } + let html = getCode(url,obj); + return html +} + +/** + * 首页分类解析,筛选暂未实现 + * @param homeObj 首页传参对象 + * @returns {string} + */ +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 < cnt; i++) { + classes.push({ + 'type_id': urls[i], + 'type_name': names[i] + }); + } + } + + if (homeObj.class_parse) { + let p = homeObj.class_parse.split(';'); + let _ps = parseTags.getParse(p[0]); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + MY_URL = rule.url; + if (p.length >= 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 = pdfh(it, p[2]); + 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); + +} + +/** + * 推荐和搜索单字段继承一级 + * @param p 推荐或搜索的解析分割;列表 + * @param pn 自身列表序号 + * @param pp 一级解析分割;列表 + * @param ppn 继承一级序号 + * @returns {*} + */ +function getPP(p, pn, pp, ppn){ + try { + let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn] + return ps + }catch (e) { + return '' + } +} + +/** + * 首页推荐列表解析 + * @param homeVodObj + * @returns {string} + */ +function homeVodParse(homeVodObj){ + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let d = []; + MY_URL = homeVodObj.homeUrl; + // setItem('MY_URL',MY_URL); + 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; + 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:)/,''); + // print(p[0]); + let html = homeHtmlCache || getHtml(MY_URL); + homeHtmlCache = undefined; + if(is_json){ + // print('是json,开始处理'); + html = dealJson(html); + } + try { + console.log('double:' + homeVodObj.double); + if (homeVodObj.double) { + let items = _pdfa(html, p0); + // console.log(items.length); + let p1 = getPP(p,1,pp,0); + let p2 = getPP(p,2,pp,1); + let p3 = getPP(p,3,pp,2); + let p4 = getPP(p,4,pp,3); + let p5 = getPP(p,5,pp,4); + let p6 = getPP(p,6,pp,5); + for (let item of items) { + // console.log(p[1]); + let items2 = _pdfa(item, p1); + // console.log(items2.length); + for (let item2 of items2) { + try { + let title = _pdfh(item2, p2); + let img = ''; + try { + img = _pd(item2, p3); + } catch (e) {} + let desc = ''; + try { + desc = _pdfh(item2, p4); + }catch (e) {} + 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]){ + content = _pdfh(item2, p6); + } else{ + content = ''; + } + let vid = links.join('$'); + if(rule.二级==='*'){ + vid = vid+'@@'+title+'@@'+img; + } + let vod = { + vod_name: title, + vod_pic: img, + vod_remarks: desc, + vod_content: content, + vod_id: vid + }; + // print(vod); + d.push(vod); + } catch (e) { + console.log('首页列表双层定位处理发生错误:'+e.message); + } + + } + + + } + + + } else { + let items = _pdfa(html, p0); + 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 p5 = getPP(p,5,pp,5); + + for (let item of items) { + try { + let title = _pdfh(item, p1); + let img = ''; + try { + img = _pd(item, p2, MY_URL); + } catch (e) {} + let desc = ''; + try { + desc = _pdfh(item, p3); + }catch (e) {} + 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]){ + content = _pdfh(item, p5); + }else{ + content = '' + } + let vid = links.join('$'); + if(rule.二级==='*'){ + vid = vid+'@@'+title+'@@'+img; + } + let vod = { + vod_name: title, + vod_pic: img, + vod_remarks: desc, + vod_content: content, + vod_id: vid + }; + d.push(vod); + + } catch (e) { + console.log('首页列表单层定位处理发生错误:'+e.message); + } + + } + + } + + } catch (e) { + + } + } + let t2 = (new Date()).getTime(); + console.log('加载首页推荐耗时:'+(t2-t1)+'毫秒'); + // console.log(JSON.stringify(d)); + if(rule.图片来源){ + d.forEach(it=>{ + if(it.vod_pic&&it.vod_pic.startsWith('http')){ + it.vod_pic = it.vod_pic + rule.图片来源; + } + }); + } + if(d.length>0){ + print(d.slice(0,2)); + } + return JSON.stringify({ + list:d + }) +} + +/** + * 一级分类页数据解析 + * @param cateObj + * @returns {string} + */ +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).replaceAll('fypage', cateObj.pg); + let url = cateObj.url.replaceAll('fyclass', cateObj.tid); + 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]; + } + 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); + } + // console.log('filter:'+cateObj.filter); + 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'){ + // 引用传递转值传递,避免污染self变量 + 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}); + // console.log('jinjia2执行后的new_url类型为:'+typeof(new_url)); + url = new_url; + } + if(/fypage/.test(url)){ + if(url.includes('(')&&url.includes(')')){ + let url_rep = url.match(/.*?\((.*)\)/)[1]; + // console.log(url_rep); + let cnt_page = url_rep.replaceAll('fypage', cateObj.pg); + // console.log(cnt_page); + let cnt_pg = eval(cnt_page); + // console.log(cnt_pg); + url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')',''); + }else{ + url = url.replaceAll('fypage',cateObj.pg); + } + } + + MY_URL = url; + // setItem('MY_URL',MY_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; + + let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g,'').trim(); + let vod_pic = _pd(it, p[2],MY_URL); + + if(rule.二级==='*'){ + vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic; + } + d.push({ + 'vod_id': vod_id, + 'vod_name': vod_name, + 'vod_pic': vod_pic, + 'vod_remarks': _pdfh(it, p[3]).replace(/\n|\t/g,'').trim(), + }); + }); + } + } catch (e) { + console.log(e.message); + } + } + if(rule.图片来源){ + d.forEach(it=>{ + if(it.vod_pic&&it.vod_pic.startsWith('http')){ + it.vod_pic = it.vod_pic + rule.图片来源; + } + }); + } + // print(d); + if(d.length>0){ + print(d.slice(0,2)); + } + let pagecount = 0; + if(rule.pagecount && typeof(rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)){ + print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`); + pagecount = parseInt(rule.pagecount[MY_CATE]); + } + let nodata = { + list:[{vod_name:'无数据,防无限请求',vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}], + total:1,pagecount:1,page:1,limit:1 + }; + let vod = d.length<1?JSON.stringify(nodata):JSON.stringify({ + 'page': parseInt(cateObj.pg), + 'pagecount': pagecount||999, + 'limit': 20, + 'total': 999, + 'list': d, + }); + // print(vod); + return vod +} + +/** + * 搜索列表数据解析 + * @param searchObj + * @returns {string} + */ +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); + if(searchObj.pg === 1 && url.includes('[')&&url.includes(']')){ + url = url.split('[')[1].split(']')[0]; + }else if(searchObj.pg > 1 && url.includes('[')&&url.includes(']')){ + url = url.split('[')[0]; + } + + if(/fypage/.test(url)){ + if(url.includes('(')&&url.includes(')')){ + let url_rep = url.match(/.*?\((.*)\)/)[1]; + // console.log(url_rep); + let cnt_page = url_rep.replaceAll('fypage', searchObj.pg); + // console.log(cnt_page); + let cnt_pg = eval(cnt_page); + // console.log(cnt_pg); + url = url.replaceAll(url_rep,cnt_pg).replaceAll('(','').replaceAll(')',''); + }else{ + url = url.replaceAll('fypage',searchObj.pg); + } + } + + MY_URL = url; + console.log(MY_URL); + // log(searchObj.搜索); + // setItem('MY_URL',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 req_method = MY_URL.split(';').length>1?MY_URL.split(';')[1].toLowerCase():'get'; + let html; + if(req_method==='post'){ + let rurls = MY_URL.split(';')[0].split('#') + let rurl = rurls[0] + let params = rurls.length > 1 ?rurls[1]:''; + print(`post=》rurl:${rurl},params:${params}`); + // let new_dict = {}; + // let new_tmp = params.split('&'); + // new_tmp.forEach(i=>{ + // new_dict[i.split('=')[0]] = i.split('=')[1]; + // }); + // html = post(rurl,{body:new_dict}); + let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let postData = {body:params}; + Object.assign(_fetch_params,postData); + html = post(rurl,_fetch_params); + }else if(req_method==='postjson'){ + let rurls = MY_URL.split(';')[0].split('#') + let rurl = rurls[0] + let params = rurls.length > 1 ?rurls[1]:''; + print(`postjson-》rurl:${rurl},params:${params}`); + try{ + params = JSON.parse(params); + }catch (e) { + params = '{}' + } + let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let postData = {body:params}; + Object.assign(_fetch_params,postData); + html = post(rurl,_fetch_params); + }else{ + 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}`); + } + // obj.headers['Cookie'] = cookie; + html = getHtml(MY_URL); + } + if(!html.includes(searchObj.wd)){ + console.log('搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码'); + console.log(html); + } + if(is_json){ + // console.log(html); + html = dealJson(html); + // console.log(JSON.stringify(html)); + } + // console.log(html); + let list = _pdfa(html, p0); + // print(list.length); + // print(list); + 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 p5 = getPP(p,5,pp,5); + list.forEach(it => { + 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]){ + content = _pdfh(it, p5); + }else{ + content = ''; + } + let vod_id = link; + let vod_name = _pdfh(it, p1).replace(/\n|\t/g,'').trim(); + let vod_pic = _pd(it, p2,MY_URL); + if(rule.二级==='*'){ + vod_id = vod_id+'@@'+vod_name+'@@'+vod_pic; + } + let ob = { + 'vod_id': vod_id, + 'vod_name': vod_name, + 'vod_pic': vod_pic, + '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 '{}' + } + } + if(rule.图片来源){ + d.forEach(it=>{ + if(it.vod_pic&&it.vod_pic.startsWith('http')){ + it.vod_pic = it.vod_pic + rule.图片来源; + } + }); + } + // print(d); + return JSON.stringify({ + 'page': parseInt(searchObj.pg), + 'pagecount': 10, + 'limit': 20, + 'total': 100, + 'list': d, + }); +} + +/** + * 二级详情页数据解析 + * @param detailObj + * @returns {string} + */ +function detailParse(detailObj){ + let t1 = (new Date()).getTime(); + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let orId = detailObj.orId; + let vod_name = '片名'; + let vod_pic = ''; + let vod_id = orId; + if(rule.二级==='*'){ + // vod_id = orId.split('@@')[0]; // 千万不能分割 + let extra = orId.split('@@'); + vod_name = extra.length>1?extra[1]:vod_name; + vod_pic = extra.length>2?extra[2]:vod_pic; + } + // print(vod_pic); + let vod = { + vod_id: vod_id, //"id", + vod_name: vod_name, + vod_pic: 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; + if(detailObj.二级访问前){ + try { + print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`); + eval(detailObj.二级访问前.trim().replace('js:','')); + }catch (e) { + print(`二级访问前执行代码出现错误:${e.message}`) + } + } + // console.log(MY_URL); + // setItem('MY_URL',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.split('@@')[0]; + }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'){ + let tt1 = (new Date()).getTime(); + if(!html){ + html = getHtml(MY_URL); + } + print(`二级${MY_URL}仅获取源码耗时:${(new Date()).getTime()-tt1}毫秒`); + let _ps; + if(p.is_json){ + print('二级是json'); + _ps = parseTags.json; + html = dealJson(html); + }else if(p.is_jsp){ + print('二级是jsp'); + _ps = parseTags.jsp; + }else if(p.is_jq){ + print('二级是jq'); + _ps = parseTags.jq; + }else{ + print('二级默认jq'); + _ps = parseTags.jq; + // print('二级默认jsp'); + // _ps = parseTags.jsp; + } + let tt2 = (new Date()).getTime(); + print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`); + _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]).replaceAll('\n', ' ').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:','')); + } + +// console.log(2); + if(p.tabs){ + if(p.tabs.startsWith('js:')){ + print('开始执行tabs代码:'+p.tabs); + var input = MY_URL; + eval(p.tabs.replace('js:','')); + playFrom = TABS; + }else{ + let p_tab = p.tabs.split(';')[0]; + // console.log(p_tab); + let vHeader = _pdfa(html, p_tab); + console.log(vHeader.length); + let tab_text = p.tab_text||'body&&Text'; + // print('tab_text:'+tab_text); + let new_map = {}; + 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; + } + if(!new_map.hasOwnProperty(v_title)){ + new_map[v_title] = 1; + }else{ + new_map[v_title] += 1; + } + if(new_map[v_title]>1){ + v_title+=Number(new_map[v_title]-1); + } + playFrom.push(v_title); + } + } + console.log(JSON.stringify(playFrom)); + }else{ + playFrom = ['道长在线'] + } + vod.vod_play_from = playFrom.join(vod_play_from); + +// console.log(3); + let vod_play_url = '$$$'; + let vod_tab_list = []; + if(p.lists){ + if(p.lists.startsWith('js:')){ + print('开始执行lists代码:'+p.lists); + try { + var input = MY_URL; + var play_url = ''; + eval(p.lists.replace('js:','')); + for(let i in LISTS){ + if(LISTS.hasOwnProperty(i)){ + // print(i); + try { + LISTS[i] = LISTS[i].map(it=>it.split('$').slice(0,2).join('$')); + }catch (e) { + print('格式化LISTS发生错误:'+e.message); + } + } + } + vod_play_url = LISTS.map(it=>it.join('#')).join(vod_play_url); + }catch (e) { + print('js执行lists: 发生错误:'+e.message); + } + + }else{ + let list_text = p.list_text||'body&&Text'; + let list_url = p.list_url||'a&&href'; + // print('list_text:'+list_text); + // print('list_url:'+list_url); + // print('list_parse:'+p.lists); + let is_tab_js = p.tabs.trim().startsWith('js:'); + for(let i=0;i 1 && !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); + let tabName = tab_ext?_pdfh(html, tab_ext):tab_name; + console.log(tabName); + // print('tab_ext:'+tab_ext); + let new_vod_list = []; + let tt1 = (new Date()).getTime(); + // print('pdfl:'+typeof (pdfl)); + if(typeof (pdfl) ==='function'){ + new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL); + }else { + let vodList = []; + try { + vodList = _pdfa(html, p1); + console.log('len(vodList):'+vodList.length); + }catch (e) { + // console.log(e.message); + } + for (let i = 0; i < vodList.length; i++) { + let it = vodList[i]; + new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL)); + } + } + if(new_vod_list.length>0){ + new_vod_list = forceOrder(new_vod_list,'',x=>x.split('$')[0]); + console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date()).getTime()-tt1}毫秒`); + } + // print(new_vod_list); + 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(rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){ + vod.vod_pic = vod.vod_pic + rule.图片来源; + } + if(!vod.vod_id||(vod_id.includes('$')&&vod.vod_id!==vod_id)){ + vod.vod_id = vod_id; + } + let t2 = (new Date()).getTime(); + console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`); + // print(vod); + vod = vodDeal(vod); + // print(vod); + return JSON.stringify({ + list: [vod] + }) +} + +/** + * 获取二级待返回的播放线路没处理时的索引关系 + * @param vod + * @returns {{}} + */ +function get_tab_index(vod){ + let obj = {}; + vod.vod_play_from.split('$$$').forEach((it,index)=>{ + obj[it] = index; + }); + return obj +} + +/** + * 处理待返回的vod数据|线路去除,排序,重命名 + * @param vod + * @returns {*} + */ +function vodDeal(vod){ + let vod_play_from = vod.vod_play_from.split('$$$'); + let vod_play_url = vod.vod_play_url.split('$$$'); + + // 移除指定线路后的列表 + let tab_removed_list = vod_play_from; + // 排序后的线路列表 + let tab_ordered_list = vod_play_from; + // 线路重命名后的列表 + let tab_renamed_list = vod_play_from; + // 定义实际要返回线路 + let tab_list = vod_play_from; + // 选集列表根据线路排序 + let play_ordered_list = vod_play_url; + + // 判断有移除线路或者线路排序 + if((rule.tab_remove&&rule.tab_remove.length>0)||(rule.tab_order&&rule.tab_order.length>0)){ + // 获取原来线路的索引下标 + let tab_index_dict = get_tab_index(vod); + + if(rule.tab_remove&&rule.tab_remove.length>0){ + tab_removed_list = vod_play_from.filter(it=>!rule.tab_remove.includes(it)); + tab_list = tab_removed_list; + } + + if(rule.tab_order&&rule.tab_order.length>0){ + let tab_order = rule.tab_order; + tab_ordered_list = tab_removed_list.sort((a, b) => { + return (tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a)) - (tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b)) + }); + tab_list = tab_ordered_list; + } + play_ordered_list = tab_list.map(it=>vod_play_url[tab_index_dict[it]]); + } + + if(rule.tab_rename&&typeof(rule.tab_rename)==='object'&Object.keys(rule.tab_rename).length>0){ + tab_renamed_list = tab_list.map(it=>rule.tab_rename[it]||it); + tab_list = tab_renamed_list; + } + vod.vod_play_from = tab_list.join('$$$'); + vod.vod_play_url = play_ordered_list.join('$$$'); + return vod +} + +/** + * 判断是否需要解析 + * @param url + * @returns {number|number} + */ +function tellIsJx(url){ + try { + let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split('?')[0]) && 是否正版(url); + return is_vip?1:0 + }catch (e) { + return 1 + } +} +/** + * 选集播放点击事件解析 + * @param playObj + * @returns {string} + */ +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;//注入给免嗅js + let common_play = { + parse:1, + url:input, + // url:urlencode(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; + } + // print('play_json:'+typeof(rule.play_json)); + // console.log(Array.isArray(rule.play_json)); + if(Array.isArray(rule.play_json) && rule.play_json.length >0){ // 数组情况判断长度大于0 + let web_url = lazy_play.url; + for(let pjson of rule.play_json){ + if(pjson.re && (pjson.re==='*'||web_url.match(new RegExp(pjson.re)))){ + if(pjson.json && typeof(pjson.json)==='object'){ + let base_json = pjson.json; + // print('开始合并:'); + // print(base_json); + lazy_play = Object.assign(lazy_play,base_json); + break; + } + } + } + }else if(rule.play_json && !Array.isArray(rule.play_json)){ // 其他情况 非[] 判断true/false + let base_json = { + jx:1, + parse:1, + }; + lazy_play = Object.assign(lazy_play,base_json); + }else if(!rule.play_json){ // 不解析传0 + let base_json = { + jx:0, + parse:1, + }; + lazy_play = Object.assign(lazy_play,base_json); + } + console.log(JSON.stringify(lazy_play)); + return JSON.stringify(lazy_play); +} + +/** + * 本地代理解析规则 + * @param params + */ +function proxyParse(proxyObj){ + var input = proxyObj.params; + if(proxyObj.proxy_rule){ + log('准备执行本地代理规则:\n'+proxyObj.proxy_rule); + try { + eval(proxyObj.proxy_rule); + if(input && input!== proxyObj.params && Array.isArray(input) &&input.length===3){ + return input + }else{ + return [404,'text/plain','Not Found'] + } + }catch (e) { + return [500,'text/plain','代理规则错误:'+e.message] + } + + }else{ + return [404,'text/plain','Not Found'] + } +} + +/** + * 辅助嗅探解析规则 + * @param isVideoObj + * @returns {boolean} + */ +function isVideoParse(isVideoObj){ + var input = isVideoObj.url; + if(!isVideoObj.t){ // t为假代表默认传的正则字符串 + let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行 + return re_matcher.test(input); + }else{ + // 执行js + try { + eval(isVideoObj.isVideo); + if(typeof(input)==='boolean'){ + return input + }else{ + return false + } + }catch (e) { + log('执行嗅探规则发生错误:'+e.message); + return false + } + } +} + +/** + * js源预处理特定返回对象中的函数 + * @param ext + */ +function init(ext) { + console.log('init'); + try { + // make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改 + // if (typeof (globalThis.mubanJs) === 'undefined') { + // let mubanJs = request('https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/模板.js', { 'User-Agent': MOBILE_UA }); + // mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default'); + // // console.log(mubanJs); + // globalThis.mubanJs = mubanJs; + // } + // let muban = eval(globalThis.mubanJs); + + let muban = 模板.getMubans(); + // print(typeof (muban)); + // print(muban); + 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); + } + /** 处理一下 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('/'); + HOST = rule.host; + if(rule.hostJs){ + console.log(`检测到hostJs,准备执行...`); + try { + eval(rule.hostJs); + rule.host = HOST.rstrip('/'); + }catch (e) { + console.log(`执行${rule.hostJs}获取host发生错误:`+e.message); + } + } + 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; + rule.二级访问前 = rule.二级访问前||''; + 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; + } + if(rule.searchUrl.includes('[')&&rule.searchUrl.includes(']')){ + let u1 = rule.searchUrl.split('[')[0] + let u2 = rule.searchUrl.split('[')[1].split(']')[0] + rule.searchUrl = rule.host && rule.searchUrl?urljoin(rule.host,u1)+'['+urljoin(rule.host,u2)+']':rule.searchUrl; + }else{ + rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host,rule.searchUrl) : rule.searchUrl; + } + + rule.timeout = rule.timeout||5000; + rule.encoding = rule.编码||rule.encoding||'utf-8'; + rule.search_encoding = rule.搜索编码||rule.search_encoding||''; + rule.图片来源 = rule.图片来源||''; + rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[]; + rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{}; + rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:''; + rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:''; + rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false'); + + rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:''; + + rule.tab_remove = rule.hasOwnProperty('tab_remove')?rule.tab_remove:[]; + rule.tab_order = rule.hasOwnProperty('tab_order')?rule.tab_order:[]; + rule.tab_rename = rule.hasOwnProperty('tab_rename')?rule.tab_rename:{}; + + 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); + } + }else if(k.toLowerCase() === 'cookie'){ + let v = rule.headers[k]; + if(v && v.startsWith('http')){ + console.log(v); + try { + v = fetch(v); + console.log(v); + rule.headers[k] = v; + }catch (e) { + console.log(`从${v}获取cookie发生错误:`+e.message); + } + } + } + } + }catch (e) { + console.log('处理headers发生错误:'+e.message); + } + } + // print(rule.headers); + 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); + pre(); // 预处理 + init_test(); + }catch (e) { + console.log('init_test发生错误:'+e.message); + } +} + +let homeHtmlCache = undefined; + +/** + * js源获取首页分类和筛选特定返回对象中的函数 + * @param filter 筛选条件字典对象 + * @returns {string} + */ +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); +} + +/** + * js源获取首页推荐数据列表特定返回对象中的函数 + * @param params + * @returns {string} + */ +function homeVod(params) { + console.log("homeVod"); + let homeVodObj = { + 推荐:rule.推荐, + double:rule.double, + homeUrl:rule.homeUrl, + detailUrl:rule.detailUrl + }; + return homeVodParse(homeVodObj) + // return "{}"; +} + +/** + * js源获取分类页一级数据列表特定返回对象中的函数 + * @param tid 分类id + * @param pg 页数 + * @param filter 当前选中的筛选条件 + * @param extend 扩展 + * @returns {string} + */ +function category(tid, pg, filter, extend) { + let cateObj = { + url: rule.url, + 一级: rule.一级, + tid: tid, + pg: parseInt(pg), + filter: filter, + extend: extend + }; + // console.log(JSON.stringify(extend)); + return categoryParse(cateObj) +} + +/** + * js源获取二级详情页数据特定返回对象中的函数 + * @param vod_url 一级列表中的vod_id或者是带分类的自拼接 vod_id 如 fyclass$vod_id + * @returns {string} + */ +function detail(vod_url) { + let orId = vod_url; + let fyclass = ''; + log('orId:'+orId); + if(vod_url.indexOf('$')>-1){ + let tmp = vod_url.split('$'); + fyclass = tmp[0]; + vod_url = tmp[1]; + } + let detailUrl = vod_url.split('@@')[0]; + 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.二级, + 二级访问前:rule.二级访问前, + detailUrl:detailUrl, + fyclass:fyclass, + tab_exclude:rule.tab_exclude, + } + return detailParse(detailObj) +} + +/** + * js源选集按钮播放点击事件特定返回对象中的函数 + * @param flag 线路名 + * @param id 播放按钮的链接 + * @param flags 全局配置的flags是否需要解析的标识列表 + * @returns {string} + */ +function play(flag, id, flags) { + let playObj = { + url:id, + flag:flag, + flags:flags + } + return playParse(playObj); +} + +/** + * js源搜索返回的数据列表特定返回对象中的函数 + * @param wd 搜索关键字 + * @param quick 是否来自快速搜索 + * @returns {string} + */ +function search(wd, quick, pg) { + if(rule.search_encoding){ + if(rule.search_encoding.toLowerCase()!=='utf-8'){ + // 按搜索编码进行编码 + wd = encodeStr(wd,rule.search_encoding); + } + }else if(rule.encoding && rule.encoding.toLowerCase()!=='utf-8'){ + // 按全局编码进行编码 + wd = encodeStr(wd,rule.encoding); + } + let searchObj = { + searchUrl: rule.searchUrl, + 搜索: rule.搜索, + wd: wd, + //pg: pg, + pg: pg||1, + quick: quick, + }; + // console.log(JSON.stringify(searchObj)); + return searchParse(searchObj) +} + +/** + * js源本地代理返回的数据列表特定返回对象中的函数 + * @param params 代理链接参数比如 /proxy?do=js&url=https://wwww.baidu.com => params就是 {do:'js','url':'https://wwww.baidu.com'} + * @returns {*} + */ +function proxy(params){ + if(rule.proxy_rule&&rule.proxy_rule.trim()){ + rule.proxy_rule = rule.proxy_rule.trim(); + } + if(rule.proxy_rule.startsWith('js:')){ + rule.proxy_rule = rule.proxy_rule.replace('js:',''); + } + let proxyObj = { + params:params, + proxy_rule:rule.proxy_rule + }; + return proxyParse(proxyObj) +} + + +/** + * 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false + * @returns {*|boolean|boolean} + */ +function sniffer(){ + let enable_sniffer = rule.sniffer || false; + if(enable_sniffer){ + // log('准备执行辅助嗅探代理规则:\n'+rule.isVideo); + log('开始执行辅助嗅探代理规则...'); + } + return enable_sniffer +} + +/** + * 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false + * @param url + */ +function isVideo(url){ + let t = 0; + let is_video; + if(rule.isVideo &&rule.isVideo.trim()){ + is_video = rule.isVideo.trim(); + } + if(is_video.startsWith('js:')){ + is_video = is_video.replace('js:',''); + t = 1; + } + let isVideoObj = { + url:url, + isVideo:is_video, + t:t, + }; + let result = isVideoParse(isVideoObj); + if(result){ + log('成功执行辅助嗅探规则并检测到视频地址:\n'+rule.isVideo); + } + return result +} + +function DRPY(){//导出函数 + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + proxy:proxy, + sniffer:sniffer, + isVideo:isVideo + } +} + +/** + * 导出函数无法简写成下面的形式: + + export default { + ...DRPY, + DRPY + } + + */ + +// 导出函数对象 +export default { + init, + home, + homeVod, + category, + detail, + play, + search, + proxy, + sniffer, + isVideo, + DRPY, +} \ No newline at end of file diff --git a/JS/lib/drpy2.min.js b/JS/lib/drpy2.min.js new file mode 100644 index 0000000..1f3beca --- /dev/null +++ b/JS/lib/drpy2.min.js @@ -0,0 +1 @@ +import cheerio from"assets://js/lib/cheerio.min.js";import"assets://js/lib/crypto-js.js";import 模板 from"../js/模板.js";import{gbkTool}from"./gbk.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log("预处理执行失败:"+e.message)}}}let rule={};let vercode=typeof pdfl==="function"?"drpy2.1":"drpy2";const VERSION=vercode+" 3.9.48beta16 20231011";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="猜你|喜欢|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://drpy.nokia.press:8028/ocr/drpy/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;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|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;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=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd:pd};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();let result=defaultParser.pdfh(html,parse);return result},pdfa(html,parse){if(!html||!parse||!parse.trim()){return[]}parse=parse.trim();let result=defaultParser.pdfa(html,parse);print(`pdfa解析${parse}=>${result.length}`);return result},pd(html,parse,base_url){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();base_url=base_url||MY_URL;return defaultParser.pd(html,parse,base_url)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html=request(OCR_API,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true);code=html||""}catch(e){log(`OCR识别验证码发生错误:${e.message}`)}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cntit.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)}if(!fetch_params){fetch_params={}}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.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}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+`|method:${obj.method||"GET"}|body:${obj.body||""}`);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=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{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;print("宝塔验证访问链接:"+url);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")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}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){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}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;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);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}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]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表双层定位处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);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 p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}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]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表单层定位处理发生错误:"+e.message)}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}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(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]}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});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)}}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;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}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);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.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:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{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)}let list=_pdfa(html,p0);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 p5=getPP(p,5,pp,5);list.forEach(it=>{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]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,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"{}"}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic: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;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}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"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_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(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);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";let new_map={};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}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}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);try{var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print("格式化LISTS发生错误:"+e.message)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print("js执行lists: 发生错误:"+e.message)}}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);let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let new_vod_list=[];let tt1=(new Date).getTime();if(typeof pdfl==="function"){new_vod_list=pdfl(html,p1,list_text,list_url,MY_URL)}else{let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}for(let i=0;i0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)}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(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);vod=vodDeal(vod);return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return 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}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length===3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log("执行嗅探规则发生错误:"+e.message);return false}}}function init(ext){console.log("init");try{let muban=模板.getMubans();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("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:`+e.message)}}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;rule.二级访问前=rule.二级访问前||"";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}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{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";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};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)}}else if(k.toLowerCase()==="cookie"){let v=rule.headers[k];if(v&&v.startsWith("http")){console.log(v);try{v=fetch(v);console.log(v);rule.headers[k]=v}catch(e){console.log(`从${v}获取cookie发生错误:`+e.message)}}}}}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);pre();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="";log("orId:"+orId);if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];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.二级,"二级访问前":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,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,DRPY:DRPY}; \ No newline at end of file diff --git a/tvbox2.json b/tvbox2.json index f45f78d..f618ad2 100644 --- a/tvbox2.json +++ b/tvbox2.json @@ -1,21 +1,18 @@ { -"spider":"https://files.zohopublic.com.cn/public/workdrive-public/download/uyv0t678c488189af47bb91dc108484d17431", +"spider":"https://files.zohopublic.com.cn/public/workdrive-public/download/uyv0t678c488189af47bb91dc108484d17431;md5;488cfa45fed992feb2a2344586970d90", "lives":[ -{"name":"综合一","type":0,"url":"./TV/tv.txt","epg":"http://epg.112114.xyz/?ch={name}&date={date}", "logo": "https://epg.112114.xyz/logo/{name}.png"}, -//{"name":"综合二","type":0,"url":"./TV/live2.txt","epg":"http://epg.112114.xyz/?ch={name}&date={date}"}, -//{"name":"综合三","type":0,"url":"http://home.jundie.top:81/ray/tvlive.txt","epg":"http://epg.51zmt.top:8000/api/diyp/?ch={name}&date={date}"}, -//{"name":"综合四","type":0,"url":"./TV/live4.txt","epg":"http://epg.51zmt.top:8000/api/diyp/?ch={name}&date={date}"} +{"name":"综合一","type":0,"url":"https://fanmingming.com/txt?url=https://live.fanmingming.com/tv/m3u/ipv6.m3u","epg":"http://epg.112114.xyz/?ch={name}&date={date}", "logo": "https://epg.112114.xyz/logo/{name}.png"}, ], "sites":[ -{"key":"drpy_js_豆瓣","name":" 豆瓣┃JS","type":3,"api":"./JS/lib/drpy.min.js","ext":"./JS/js/drpy.js"}, +{"key":"drpy_js_豆瓣","name":" 豆瓣┃JS","type":3,"api":"./JS/lib/drpy2.min.js","ext":"./JS/js/drpy.js"}, //{"key": "豆瓣","name": "豆瓣┃SP","type": 3,"api": "csp_DouDou","searchable": 0,"quickSearch": 0,"filterable": 0}, -{"key": "磁力","name": "荐片┃备用","type": 3,"playerType": "1","api": "https://ghproxy.net/https://raw.githubusercontent.com/Dong-learn9/TVBox-zyjk/main/JS/lib/drpy2.js","ext": "https://ghproxy.net/https://raw.githubusercontent.com/Dong-learn9/TVBox-zyjk/main/JS/js/荐片.js"}, +{"key": "磁力","name": "荐片┃备用","type": 3,"playerType": "1","api": "https://ghproxy.net/https://raw.githubusercontent.com/Dong-learn9/TVBox-zyjk/main/JS/lib/drpy2.min.js","ext": "https://ghproxy.net/https://raw.githubusercontent.com/Dong-learn9/TVBox-zyjk/main/JS/js/荐片.js"}, {"key": "js_荐片","name": "荐片┃JS","type": 3,"api": "https://xhdwc.tk/lib/drpy2.min.js","ext": "https://ghproxy.net/https://raw.githubusercontent.com/Dong-learn9/TVBox-zyjk/main/JS/js/荐片.js","playerType": 1,"searchable": 1,"quickSearch": 1,"filterable": 1}, @@ -36,17 +33,7 @@ {"key": "Xinsj","name": "视觉┃直连","type": 3, "api": "csp_Xinsj","searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "https://www.6080yy3.com/"}, {"key": "csp_Czsapp", "name": "厂长┃直连","type": 3,"api": "csp_Czsapp","playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "https://www.czzy88.com/","filterable": 1}, - { - "key": "达人", - "name": "达人┃聚合", - "type": 3, - "api": "csp_AppYsV2", - "searchable": 1, - "quickSearch": 1, - "filterable": 1, - "jar": "http://xhww.fun:63/小米/暴脾气.jar;md5;bb155c3f0133bbce4756ad52003f5968", - "ext": "http://4k.953365.cn:8090/xgapp.php/v2/" - }, +{"key": "达人", "name": "达人┃聚合", "type": 3, "api": "csp_AppYsV2", "searchable": 1, "quickSearch": 1, "filterable": 1, "jar": "http://xhww.fun:63/小米/暴脾气.jar;md5;bb155c3f0133bbce4756ad52003f5968", "ext": "http://4k.953365.cn:8090/xgapp.php/v2/"}, {"key": "drpy_js_短剧网","name": "短剧┃JS","type": 3,"api": "https://xhdwc.tk/lib/drpy2.min.js", "searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "./JS/js/短剧网.js"}, @@ -329,43 +316,23 @@ {"key":"南瓜","name":"南瓜┃App","type":3,"api":"csp_NanGua","playerType":2,"searchable":1,"quickSearch":1,"changeable":1}, - { - "key": "琪琪资源", - "name": "官源┃切片", - "type": 1, - "api": "https://playersll.gaoxin155.com.cn/api.php/provide/vod/", - "playerType": 2, - "searchable": 1, - "changeable": 1, - "quickSearch": 1, - "categories": [ - "连续剧", - "电影", - "综艺", - "动漫" - ] - }, +{"key":"drpy_js_360影视","name":"360┃弹幕[js]","type":3,"api":"./JS/lib/drpy2.min.js","ext":"./JS/js/360影视.js"}, - { - "key": "csp_SP33", - "name": "三三┃解析", - "type": 3, - "api": "csp_SP33", - "searchable": 1, - "quickSearch": 1, - "filterable": 1, - "changeable": 0 - }, +{"key":"drpy_js_百忙无果","name":"芒果┃弹幕[js]","type":3,"api":"./JS/lib/drpy2.min.js","ext":"./JS/js/百忙无果.js"}, - { - "key": "77", - "name": "七七┃App", - "type": 3, - "api": "csp_Kunyu77", - "searchable": 1, - "quickSearch": 1, - "changeable": 1 - }, +{"key":"drpy_js_腾云驾雾","name":"腾讯┃弹幕[js]","type":3,"api":"./JS/lib/drpy2.min.js","ext":"./JS/js/腾云驾雾.js"}, + +{"key":"drpy_js_奇珍异兽","name":"爱奇┃弹幕[js]","type":3,"api":"./JS/lib/drpy2.min.js","ext":"./JS/js/奇珍异兽.js"}, + +{"key":"drpy_js_哔哩直播","name":"弹幕 | 哔哩直播[js]","type":3,"api":"./JS/lib/drpy2.min.js","style":{"type":"rect","ratio":1.597},"changeable":0,"ext":"./JS/js/哔哩直播.js"}, + +{"key":"drpy_js_哔哩影视","name":"弹幕 | 哔哩影视[js]","type":3,"api":"./JS/lib/drpy2.min.js","style":{"type":"rect","ratio":1.597},"changeable":0,"ext":"./JS/js/哔哩影视.js"}, + +{"key":"drpy_js_JustLive","name":"弹幕 | JustLive[js]","type":3,"api":"./JS/lib/drpy2.min.js","style":{"type":"rect","ratio":1.597},"changeable":0,"ext":"./JS/js/JustLive.js"}, + +{ "key": "csp_SP33", "name": "三三┃解析", "type": 3, "api": "csp_SP33", "searchable": 1, "quickSearch": 1, "filterable": 1, "changeable": 0}, + +{ "key": "77", "name": "七七┃App", "type": 3, "api": "csp_Kunyu77", "searchable": 1, "quickSearch": 1, "changeable": 1}, {"key":"csp_Dm84","name":"动漫┃巴士","type":3,"api":"csp_Dm84","searchable":1,"quickSearch":1,"changeable":1}, @@ -377,10 +344,8 @@ {"key":"Aid","name":"急救┃教学","type":3,"api":"csp_FirstAid","searchable":0,"quickSearch":0,"changeable":0,"style": { "type": "rect", "ratio":3.8}}, - //{"key":"Dy555","name":"555┃TS","type":"3","api":"csp_Dora","searchable":"1","quickSearch":"1","filterable":"1","ext":"f41992bd740145ed58cb212dc0876582","jar":"./JAR/cs.jar"}, - //{"key": "演唱会","name": "演唱会 (XB)","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": "./XB/演唱会.json"}, //{"key": "戏曲","name": "戏 曲(XB)","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": "./XB/戏曲.json"}, //{"key": "MV","name": "歌 曲MV(XB)","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": "./XB/歌曲MV.json"},