diff --git a/521/lib/合集.json b/521/lib/合集.json new file mode 100644 index 0000000..617c258 --- /dev/null +++ b/521/lib/合集.json @@ -0,0 +1,811 @@ +{ + "filters": { + "dianshiju": [ + { + "name": "类型", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "yanqing", + "n": "言情" + }, + { + "v": "ouxiang", + "n": "偶像" + }, + { + "v": "dushi", + "n": "都市" + }, + { + "v": "zhanzheng", + "n": "战争" + }, + { + "v": "xuanyi", + "n": "悬疑" + }, + { + "v": "lunli", + "n": "伦理" + }, + { + "v": "jingsong", + "n": "惊悚" + }, + { + "v": "wangluoju", + "n": "网络剧" + }, + { + "v": "jingfei", + "n": "警匪" + }, + { + "v": "guzhuang", + "n": "古装" + }, + { + "v": "wuxia", + "n": "武侠" + }, + { + "v": "shenhua", + "n": "神话" + }, + { + "v": "lishi", + "n": "历史" + }, + { + "v": "dongzuo", + "n": "动作" + }, + { + "v": "diezhan", + "n": "谍战" + }, + { + "v": "xiju", + "n": "喜剧" + }, + { + "v": "kangri", + "n": "抗日" + }, + { + "v": "jiating", + "n": "家庭" + }, + { + "v": "juqing", + "n": "剧情" + }, + { + "v": "lizhi", + "n": "励志" + }, + { + "v": "nongcun", + "n": "农村" + }, + { + "v": "kehuan", + "n": "科幻" + }, + { + "v": "junlv", + "n": "军旅" + }, + { + "v": "qihuan", + "n": "奇幻" + }, + { + "v": "qita", + "n": "其它" + } + ], + "key": "type" + }, + { + "name": "地区", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "neidi", + "n": "内地" + }, + { + "v": "taiwan", + "n": "台湾" + }, + { + "v": "xianggang", + "n": "香港" + }, + { + "v": "hanguo", + "n": "韩国" + }, + { + "v": "meiguo", + "n": "美国" + }, + { + "v": "taiguo", + "n": "泰国" + }, + { + "v": "riben", + "n": "日本" + }, + { + "v": "yingguo", + "n": "英国" + }, + { + "v": "xinjiapo", + "n": "新加坡" + }, + { + "v": "qita", + "n": "其它" + } + ], + "key": "area" + }, + { + "name": "年份", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "20102000", + "n": "2010-2000" + }, + { + "v": "19991990", + "n": "90年代" + }, + { + "v": "19891800", + "n": "更早" + } + ], + "key": "year" + } + ], + "zongyi": [ + { + "name": "类型", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "lxxuanxiu/", + "n": "选秀" + }, + { + "v": "lxqinggan/", + "n": "情感" + }, + { + "v": "lxfangtan/", + "n": "访谈" + }, + { + "v": "lxgaoxiao/", + "n": "搞笑" + }, + { + "v": "lxyouxi/", + "n": "游戏" + }, + { + "v": "lxzhichang/", + "n": "职场" + }, + { + "v": "lxyule/", + "n": "娱乐" + }, + { + "v": "lxzhenrenxiu/", + "n": "真人秀" + }, + { + "v": "lxshenghuo/", + "n": "生活" + }, + { + "v": "lxtiyu/", + "n": "体育" + }, + { + "v": "lxshenghui/", + "n": "盛会" + }, + { + "v": "lxcaijing/", + "n": "财经" + }, + { + "v": "lxqinzi/", + "n": "亲子" + }, + { + "v": "lxjishi/", + "n": "纪实" + }, + { + "v": "lxtuokouxiu/", + "n": "脱口秀" + }, + { + "v": "lxwangluojiemu/", + "n": "网络节目" + }, + { + "v": "lxmeishi/", + "n": "美食" + } + ], + "key": "type" + }, + { + "name": "地区", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "dqdalu/", + "n": "大陆" + }, + { + "v": "dqgangtai/", + "n": "港台" + }, + { + "v": "dqrihan/", + "n": "日韩" + }, + { + "v": "dqoumei/", + "n": "欧美" + }, + { + "v": "dqqita/", + "n": "其他" + } + ], + "key": "area" + } + ], + "dongman": [ + { + "name": "类型", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "lxrexue/", + "n": "热血" + }, + { + "v": "lxaiqing/", + "n": "爱情" + }, + { + "v": "lxgaoxiao/", + "n": "搞笑" + }, + { + "v": "lxmeinv/", + "n": "美女" + }, + { + "v": "lxshaoer/", + "n": "少儿" + }, + { + "v": "lxqinzi/", + "n": "亲子" + }, + { + "v": "lxmofa/", + "n": "魔法" + }, + { + "v": "lxyundong/", + "n": "运动" + }, + { + "v": "lxjizhan/", + "n": "机战" + }, + { + "v": "lxkehuan/", + "n": "科幻" + }, + { + "v": "lxxiaoyuan/", + "n": "校园" + }, + { + "v": "lxdongwu/", + "n": "动物" + }, + { + "v": "lxmaoxian/", + "n": "冒险" + }, + { + "v": "lxshenhua/", + "n": "神话" + }, + { + "v": "lxtuili/", + "n": "推理" + }, + { + "v": "lxjuqing/", + "n": "剧情" + }, + { + "v": "lxlishi/", + "n": "历史" + }, + { + "v": "lxzhanzheng/", + "n": "战争" + }, + { + "v": "lxjingdian/", + "n": "经典" + }, + { + "v": "lxnanxingxiang/", + "n": "男性向" + }, + { + "v": "lxnvxingxiang/", + "n": "女性向" + } + ], + "key": "type" + }, + { + "name": "地区", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "dqdalu/", + "n": "大陆" + }, + { + "v": "dqriben/", + "n": "日本" + }, + { + "v": "dqmeiguo/", + "n": "美国" + }, + { + "v": "dqhanguo/", + "n": "韩国" + }, + { + "v": "dqqita/", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "年份", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "nd2022/", + "n": "2022" + }, + { + "v": "nd2021/", + "n": "2021" + }, + { + "v": "nd2020/", + "n": "2020" + }, + { + "v": "nd2019/", + "n": "2019" + }, + { + "v": "nd2018/", + "n": "2018" + }, + { + "v": "nd2017/", + "n": "2017" + }, + { + "v": "nd2016/", + "n": "2016" + }, + { + "v": "nd2015/", + "n": "2015" + }, + { + "v": "nd2014/", + "n": "2014" + }, + { + "v": "nd2013/", + "n": "2013" + }, + { + "v": "nd2012/", + "n": "2012" + }, + { + "v": "nd2011/", + "n": "2011" + }, + { + "v": "nd20102000/", + "n": "2010-2000" + }, + { + "v": "nd19991800/", + "n": "更早" + } + ], + "key": "year" + } + ], + "dianying": [ + { + "name": "类型", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "aiqing", + "n": "爱情" + }, + { + "v": "dongzuo", + "n": "动作" + }, + { + "v": "xiju", + "n": "喜剧" + }, + { + "v": "zhanzheng", + "n": "战争" + }, + { + "v": "kehuan", + "n": "科幻" + }, + { + "v": "juqing", + "n": "剧情" + }, + { + "v": "wuxia", + "n": "武侠" + }, + { + "v": "maoxian", + "n": "冒险" + }, + { + "v": "qiangzhan", + "n": "枪战" + }, + { + "v": "kongbu", + "n": "恐怖" + }, + { + "v": "xuanyi", + "n": "悬疑" + }, + { + "v": "fanzui", + "n": "犯罪" + }, + { + "v": "qihuan", + "n": "奇幻" + }, + { + "v": "donghua", + "n": "动画" + }, + { + "v": "jingsong", + "n": "惊悚" + }, + { + "v": "jingdian", + "n": "经典" + }, + { + "v": "qingchun", + "n": "青春" + }, + { + "v": "wenyi", + "n": "文艺" + }, + { + "v": "weidianying", + "n": "微电影" + }, + { + "v": "guzhuang", + "n": "古装" + }, + { + "v": "lishi", + "n": "历史" + }, + { + "v": "yundong", + "n": "运动" + }, + { + "v": "nongcun", + "n": "农村" + }, + { + "v": "ertong", + "n": "儿童" + }, + { + "v": "wangluodianying", + "n": "网络电影" + }, + { + "v": "qita", + "n": "其它" + } + ], + "key": "type" + }, + { + "name": "地区", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "neidi", + "n": "内地" + }, + { + "v": "meiguo", + "n": "美国" + }, + { + "v": "xianggang", + "n": "香港" + }, + { + "v": "taiwan", + "n": "台湾" + }, + { + "v": "riben", + "n": "日本" + }, + { + "v": "taiguo", + "n": "泰国" + }, + { + "v": "yindu", + "n": "印度" + }, + { + "v": "dongnanyadiqu", + "n": "东南亚地区" + }, + { + "v": "oumeidiqu", + "n": "欧美地区" + }, + { + "v": "qita", + "n": "其它" + } + ], + "key": "area" + }, + { + "name": "年份", + "value": [ + { + "v": "", + "n": "全部" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "20102000", + "n": "2010-2000" + }, + { + "v": "19691800", + "n": "更早" + } + ], + "key": "year" + } + ] + }, + + "class": [ + { + "type_name": "电影", + "type_id": "dianying" + }, + + { + "type_name": "电视剧", + "type_id": "dianshiju" + }, + { + "type_name": "综艺", + "type_id": "zongyi" + }, + + + { + "type_name": "热播电影", + "type_id": "jingdian" + }, + + + + + + + + { + "type_name": "动漫", + "type_id": "dongman" + } + ] +} \ No newline at end of file diff --git a/521/lib/歌曲MV.json b/521/lib/歌曲MV.json new file mode 100644 index 0000000..d87c590 --- /dev/null +++ b/521/lib/歌曲MV.json @@ -0,0 +1,1857 @@ +{ + + "class": [ + + { + "type_name": "MV", + "type_id": "MV" + }, + + { + "type_name": "粤语", + "type_id": "粤语MV" + }, + { + "type_name": "2024年热榜", + "type_id": "2024年热们MV" + }, + { + "type_name": "KTV热门", + "type_id": "KTV热门MV" + }, + { + "type_name": "滚石经典", + "type_id": "滚石MV" + }, + { + "type_name": "经典老歌", + "type_id": "经典老歌" + }, + { + "type_name": "古风MV", + "type_id": "古风MV" + }, + { + "type_name": "闽南语MV", + "type_id": "闽南语MV" + }, + { + "type_name": "印度歌舞", + "type_id": "印度歌舞MV" + }, + + { + "type_name": "网红翻唱", + "type_id": "网红翻唱MV" + }, + { + "type_name": "韩国女团", + "type_id": "韩国女团MV" + }, + { + "type_name": "A阿黛尔", + "type_id": "阿黛尔MV" + }, + + { + "type_name": "Blackpink", + "type_id": "blackpinkMV" + }, + { + "type_name": "Beyond", + "type_id": "beyondMV" + }, + { + "type_name": "B坂井泉水", + "type_id": "坂井泉水MV" + }, + { + "type_name": "B宝丽金", + "type_id": "宝丽金MV" + }, + { + "type_name": "B布兰妮", + "type_id": "布兰妮MV" + }, + { + "type_name": "C崔健", + "type_id": "催件MV" + }, + { + "type_name": "C蔡依林", + "type_id": "蔡依林MV" + }, + { + "type_name": "C草蜢", + "type_id": "草蜢MV" + }, + { + "type_name": "Coldplay", + "type_id": "coldplayMV" + }, + { + "type_name": "C陈慧娴", + "type_id": "陈慧娴MV" + }, + { + "type_name": "C陈百强", + "type_id": "陈百强MV" + }, + { + "type_name": "C陈淑桦", + "type_id": "陈淑桦MV" + }, + { + "type_name": "C陈瑞", + "type_id": "陈瑞MV" + }, + + { + "type_name": "C陈慧琳", + "type_id": "陈慧琳MV" + }, + { + "type_name": "D邓丽君", + "type_id": "邓丽君MV" + }, + { + "type_name": "D邓紫棋", + "type_id": "邓紫棋MV" + }, + { + "type_name": "D刀郎", + "type_id": "刀郎MV" + }, + { + "type_name": "D达明一派", + "type_id": "刘以达MV" + }, + { + "type_name": "F费玉清", + "type_id": "费玉清MV" + }, + { + "type_name": "F飞图", + "type_id": "飞图MV" + }, + { + "type_name": "G谷村新司", + "type_id": "谷村新司MV" + }, + { + "type_name": "G郭富城", + "type_id": "郭富城MV" + }, + { + "type_name": "G关淑怡", + "type_id": "关淑怡MV" + }, + { + "type_name": "H黄凯芹", + "type_id": "黄凯芹MV" + }, + { + "type_name": "J降央卓玛", + "type_id": "降央卓玛MV" + }, + + { + "type_name": "J江慧", + "type_id": "江慧MV" + }, + { + "type_name": "J吉永小百合", + "type_id": "吉永小百合MV" + }, + { + "type_name": "J金庸", + "type_id": "金庸影视MV" + }, + { + "type_name": "K柯以敏", + "type_id": "柯以敏MV" + }, + { + "type_name": "K邝美云", + "type_id": "邝美云MV" + }, + { + "type_name": "L刘德华", + "type_id": "刘德华MV" + }, + { + "type_name": "Lady Gaga", + "type_id": "Lady GagaMV" + }, + { + "type_name": "L龙飘飘", + "type_id": "龙飘飘MV" + }, + { + "type_name": "L罗大佑", + "type_id": "罗大佑MV" + }, + { + "type_name": "L林志炫", + "type_id": "林志炫MV" + }, + { + "type_name": "L林忆莲", + "type_id": "林忆莲MV" + }, + { + "type_name": "L李知恩", + "type_id": "李知恩MV" + }, + { + "type_name": "L梁静茹", + "type_id": "梁静茹MV" + }, + { + "type_name": "L冷漠", + "type_id": "冷漠MV" + }, + { + "type_name": "L李克勤", + "type_id": "李克勤MV" + }, + { + "type_name": "L林子祥", + "type_id": "林子祥MV" + }, + { + "type_name": "L黎明", + "type_id": "黎明MV" + }, + { + "type_name": "L刘若英", + "type_id": "刘若英MV" + }, + { + "type_name": "M莫文蔚", + "type_id": "莫文蔚MV" + }, + { + "type_name": "M孟庭苇", + "type_id": "孟庭苇MV" + }, + { + "type_name": "M麦当娜", + "type_id": "麦当娜MV" + }, + + { + "type_name": "M迈克杰克逊", + "type_id": "迈克杰克逊MV" + }, + { + "type_name": "N雅尼紫禁城", + "type_id": "雅尼紫禁城MV" + }, + { + "type_name": "P潘越云", + "type_id": "潘越云MV" + }, + { + "type_name": "P潘美辰", + "type_id": "潘美辰MV" + }, + { + "type_name": "Q齐秦", + "type_id": "齐秦MV" + }, + + { + "type_name": "R任贤齐", + "type_id": "任贤齐MV" + }, + { + "type_name": "S苏慧伦", + "type_id": "苏慧伦MV" + }, + { + "type_name": "T童安格", + "type_id": "童安格MV" + }, + { + "type_name": "TFBOYS", + "type_id": "TFBOYSMV" + }, + { + "type_name": "T太极乐队", + "type_id": "太极乐队MV" + }, + { + "type_name": "T唐朝摇滚", + "type_id": "唐朝摇滚MV" + }, + + { + "type_name": "T谭咏麟", + "type_id": "谭咏麟MV" + }, + + { + "type_name": "W王琪", + "type_id": "王琪MV" + }, + { + "type_name": "W伍珂玥", + "type_id": "伍珂玥MV" + }, + { + "type_name": "W王杰", + "type_id": "王杰MV" + }, + { + "type_name": "W伍佰", + "type_id": "伍佰MV" + }, + { + "type_name": "W温兆伦", + "type_id": "温兆伦MV" + }, + { + "type_name": "W王菲", + "type_id": "王菲MV" + }, + { + "type_name": "X徐小凤", + "type_id": "徐小凤MV" + }, + { + "type_name": "X席琳迪翁", + "type_id": "席琳迪翁MV" + }, + { + "type_name": "X许嵩", + "type_id": "黄许嵩MV" + }, + { + "type_name": "X许美静", + "type_id": "许美静MV" + }, + { + "type_name": "X许冠杰", + "type_id": "许冠杰MV" + }, + { + "type_name": "X熊天平", + "type_id": "熊天平MV" + }, + { + "type_name": "X小虎队", + "type_id": "小虎队MV" + }, + { + "type_name": "X许巍", + "type_id": "许巍MV" + }, + { + "type_name": "Y叶启田", + "type_id": "叶启田MV" + }, + { + "type_name": "Y杨钰莹", + "type_id": "杨钰莹MV" + }, + { + "type_name": "Y叶玉卿", + "type_id": "叶玉卿MV" + }, + { + "type_name": "Y杨千嬅", + "type_id": "杨千嬅MV" + }, + { + "type_name": "Y怡正宵", + "type_id": "怡正宵MV" + }, + { + "type_name": "Z左麟右李", + "type_id": "左麟右李MV" + }, + { + "type_name": "Z张楚", + "type_id": "张楚MV" + }, + { + "type_name": "Z张真", + "type_id": "张真MV" + }, + { + "type_name": "Z张震岳", + "type_id": "张震岳MV" + }, + { + "type_name": "Z赵传", + "type_id": "赵传MV" + }, + { + "type_name": "Z周华健", + "type_id": "周华健MV" + }, + { + "type_name": "Z周启生", + "type_id": "周启生MV" + }, + { + "type_name": "Z张信哲", + "type_id": "张信哲MV" + }, + { + "type_name": "Z张也", + "type_id": "张也MV" + }, + + { + "type_name": "Z周慧敏", + "type_id": "周慧敏MV" + }, + + { + "type_name": "Z张碧晨", + "type_id": "张碧晨MV" + }, + { + "type_name": "Z中岛美雪", + "type_id": "中岛美雪MV" + }, + { + "type_name": "Z张学友", + "type_id": "张学友MV" + }, + { + "type_name": "Z猪哥亮", + "type_id": "猪哥亮MV" + }, + { + "type_name": "Z周杰伦", + "type_id": "周杰伦MV" + }, + { + "type_name": "Z周深", + "type_id": "周深MV" + }, + { + "type_name": "Z张蔷", + "type_id": "张蔷MV" + }, + { + "type_name": "Z张帝", + "type_id": "张帝MV" + }, + { + "type_name": "Z张国荣", + "type_id": "张国荣MV" + }, + { + "type_name": "Z周传雄", + "type_id": "周传雄MV" + }, + { + "type_name": "公众号“欧歌APP", + "type_id": "欧歌APP" + } + ], + "filters": { + "搞笑": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "TVBox": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "球星": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "球星" + }, + { + "n": "梅西", + "v": "梅西" + }, + { + "n": "C罗", + "v": "C罗" + }, + { + "n": "天下足球", + "v": "天下足球" + }, + { + "n": "罗纳尔多", + "v": "罗纳尔多" + }, + { + "n": "亨利", + "v": "亨利" + }, + { + "n": "小罗", + "v": "小罗" + }, + { + "n": "齐达内", + "v": "齐达内" + }, + { + "n": "贝克汉姆", + "v": "贝克汉姆" + }, + { + "n": "内马尔", + "v": "内马尔" + }, + { + "n": "德布劳内", + "v": "德布劳内" + }, + { + "n": "欧冠", + "v": "欧冠" + }, + { + "n": "世界杯", + "v": "世界杯" + }, + { + "n": "西甲", + "v": "西甲" + }, + { + "n": "英超", + "v": "英超" + }, + { + "n": "意甲", + "v": "意甲" + }, + { + "n": "德甲", + "v": "德甲" + }, + { + "n": "国米", + "v": "国米" + }, + { + "n": "皇马", + "v": "皇马" + }, + { + "n": "巴萨", + "v": "巴萨" + }, + { + "n": "巴黎圣日耳曼", + "v": "巴黎圣日耳曼" + }, + { + "n": "曼联", + "v": "曼联" + }, + { + "n": "曼城", + "v": "曼城" + }, + { + "n": "NBA", + "v": "NBA" + }, + { + "n": "詹姆斯", + "v": "詹姆斯" + }, + { + "n": "库里", + "v": "库里" + }, + { + "n": "杜兰特", + "v": "杜兰特" + }, + { + "n": "UFC", + "v": "UFC" + }, + { + "n": "斯诺克", + "v": "斯诺克" + }, + { + "n": "网球", + "v": "网球" + }, + { + "n": "F1", + "v": "F1" + }, + { + "n": "高尔夫", + "v": "高尔夫" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "相声小品": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "相声小品" + }, + { + "n": "单口相声", + "v": "单口相声" + }, + { + "n": "群口相声", + "v": "群口相声" + }, + { + "n": "德云社", + "v": "德云社" + }, + { + "n": "青曲社", + "v": "青曲社" + }, + { + "n": "郭德纲", + "v": "郭德纲" + }, + { + "n": "岳云鹏", + "v": "岳云鹏" + }, + { + "n": "曹云金", + "v": "曹云金" + }, + { + "n": "评书", + "v": "评书" + }, + { + "n": "小曲", + "v": "小曲" + }, + { + "n": "二人转", + "v": "二人转" + }, + { + "n": "春晚小品", + "v": "春晚小品" + }, + { + "n": "赵本山", + "v": "赵本山" + }, + { + "n": "陈佩斯", + "v": "陈佩斯" + }, + { + "n": "冯巩", + "v": "冯巩" + }, + { + "n": "宋小宝", + "v": "宋小宝" + }, + { + "n": "赵丽蓉", + "v": "赵丽蓉" + }, + { + "n": "郭达", + "v": "郭达" + }, + { + "n": "潘长江", + "v": "潘长江" + }, + { + "n": "郭冬临", + "v": "郭冬临" + }, + { + "n": "严顺开", + "v": "严顺开" + }, + { + "n": "文松", + "v": "文松" + }, + { + "n": "开心麻花", + "v": "开心麻花" + }, + { + "n": "屌丝男士", + "v": "屌丝男士" + }, + { + "n": "喜剧综艺", + "v": "喜剧综艺" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "儿童" + }, + { + "n": "教育", + "v": "儿童教育" + }, + { + "n": "MV", + "v": "儿童MV" + }, + { + "n": "舞蹈", + "v": "儿童舞蹈" + }, + { + "n": "成语故事", + "v": "儿童成语故事" + }, + { + "n": "音乐", + "v": "儿童音乐" + }, + { + "n": "儿童MV", + "v": "儿童MV" + }, + { + "n": "贝乐虎", + "v": "贝乐虎" + }, + { + "n": "宝宝巴士", + "v": "宝宝巴士" + }, + { + "n": "儿童好声音", + "v": "儿童好声音" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "动物世界": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "戏曲": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "戏曲" + }, + { + "n": "京剧", + "v": "京剧" + }, + { + "n": "越剧", + "v": "越剧" + }, + { + "n": "黄梅戏", + "v": "黄梅戏" + }, + { + "n": "评剧", + "v": "评剧" + }, + { + "n": "豫剧", + "v": "豫剧" + }, + { + "n": "昆曲", + "v": "昆曲" + }, + { + "n": "高腔", + "v": "高腔" + }, + { + "n": "梆子腔", + "v": "梆子腔" + }, + { + "n": "河北梆子", + "v": "河北梆子" + }, + { + "n": "晋剧", + "v": "晋剧" + }, + { + "n": "蒲剧", + "v": "蒲剧" + }, + { + "n": "雁剧", + "v": "雁剧" + }, + { + "n": "上党梆子", + "v": "上党梆子" + }, + { + "n": "秦腔", + "v": "秦腔" + }, + { + "n": "武安平调", + "v": "武安平调" + }, + { + "n": "二人台", + "v": "二人台" + }, + { + "n": "吉剧", + "v": "吉剧" + }, + { + "n": "龙江剧", + "v": "龙江剧" + }, + { + "n": "越调", + "v": "越调" + }, + { + "n": "河南曲剧", + "v": "河南曲剧" + }, + { + "n": "山东梆子", + "v": "山东梆子" + }, + { + "n": "淮剧", + "v": "淮剧" + }, + { + "n": "沪剧", + "v": "沪剧" + }, + { + "n": "滑稽戏", + "v": "滑稽戏" + }, + { + "n": "婺剧", + "v": "婺剧" + }, + { + "n": "绍剧", + "v": "绍剧" + }, + { + "n": "徽剧", + "v": "徽剧" + }, + { + "n": "闽剧", + "v": "闽剧" + }, + { + "n": "莆仙戏", + "v": "莆仙戏" + }, + { + "n": "梨园戏", + "v": "梨园戏" + }, + { + "n": "高甲戏", + "v": "高甲戏" + }, + { + "n": "赣剧", + "v": "赣剧" + }, + { + "n": "采茶戏", + "v": "采茶戏" + }, + { + "n": "汉剧", + "v": "汉剧" + }, + { + "n": "湘剧", + "v": "湘剧" + }, + { + "n": "祁剧", + "v": "祁剧" + }, + { + "n": "湖南花鼓戏", + "v": "湖南花鼓戏" + }, + { + "n": "粤剧", + "v": "粤剧" + }, + { + "n": "潮剧", + "v": "潮剧" + }, + { + "n": "桂剧", + "v": "桂剧" + }, + { + "n": "彩调", + "v": "彩调" + }, + { + "n": "壮剧", + "v": "壮剧" + }, + { + "n": "川剧", + "v": "川剧" + }, + { + "n": "黔剧", + "v": "黔剧" + }, + { + "n": "滇剧", + "v": "滇剧" + }, + { + "n": "傣剧", + "v": "傣剧" + }, + { + "n": "藏剧", + "v": "藏剧" + }, + { + "n": "皮影戏", + "v": "皮影戏" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "窗白噪音": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "MV": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "MV" + }, + { + "n": "周杰伦", + "v": "周杰伦" + }, + { + "n": "陈奕迅", + "v": "陈奕迅" + }, + { + "n": "Beyond", + "v": "Beyond" + }, + { + "n": "刘德华", + "v": "刘德华" + }, + { + "n": "郭富城", + "v": "郭富城" + }, + { + "n": "张学友", + "v": "张学友" + }, + { + "n": "黎明", + "v": "黎明" + }, + { + "n": "李宗盛", + "v": "李宗盛" + }, + { + "n": "邓丽君", + "v": "邓丽君" + }, + { + "n": "朴树", + "v": "朴树" + }, + { + "n": "林子祥", + "v": "林子祥" + }, + { + "n": "任贤齐", + "v": "任贤齐" + }, + { + "n": "张信哲", + "v": "张信哲" + }, + { + "n": "孙楠", + "v": "孙楠" + }, + { + "n": "张宇", + "v": "张宇" + }, + { + "n": "周华健", + "v": "周华健" + }, + { + "n": "蔡依林", + "v": "蔡依林" + }, + { + "n": "薛之谦", + "v": "薛之谦" + }, + { + "n": "洛天依", + "v": "洛天依" + }, + { + "n": "初音未来", + "v": "初音未来" + }, + { + "n": "许嵩", + "v": "许嵩" + }, + { + "n": "戴佩妮", + "v": "戴佩妮" + }, + { + "n": "邓紫棋", + "v": "邓紫棋" + }, + { + "n": "张韶涵", + "v": "张韶涵" + }, + { + "n": "蔡健雅", + "v": "蔡健雅" + }, + { + "n": "莫文蔚", + "v": "莫文蔚" + }, + { + "n": "刘若英", + "v": "刘若英" + }, + { + "n": "周深", + "v": "周深" + }, + { + "n": "毛不易", + "v": "毛不易" + }, + { + "n": "汪苏泷", + "v": "汪苏泷" + }, + { + "n": "李宇春", + "v": "李宇春" + }, + { + "n": "徐佳莹", + "v": "徐佳莹" + }, + { + "n": "杨宗纬", + "v": "杨宗纬" + }, + { + "n": "胡彦斌", + "v": "胡彦斌" + }, + { + "n": "杨千嬅", + "v": "杨千嬅" + }, + { + "n": "张靓颖", + "v": "张靓颖" + }, + { + "n": "李荣浩", + "v": "李荣浩" + }, + { + "n": "杨丞琳", + "v": "杨丞琳" + }, + { + "n": "林志炫", + "v": "林志炫" + }, + { + "n": "陶喆", + "v": "陶喆" + }, + { + "n": "胡夏", + "v": "胡夏" + }, + { + "n": "李玉刚", + "v": "李玉刚" + }, + { + "n": "弦子", + "v": "弦子" + }, + { + "n": "陈小春", + "v": "陈小春" + }, + { + "n": "萧亚轩", + "v": "萧亚轩" + }, + { + "n": "鹿晗", + "v": "鹿晗" + }, + { + "n": "纵贯线", + "v": "纵贯线" + }, + { + "n": "许巍", + "v": "许巍" + }, + { + "n": "林俊杰", + "v": "林俊杰" + }, + { + "n": "赵雷", + "v": "赵雷" + }, + { + "n": "谭咏麟", + "v": "谭咏麟" + }, + { + "n": "凤凰传奇", + "v": "凤凰传奇" + }, + { + "n": "容祖儿", + "v": "容祖儿" + }, + { + "n": "周传雄", + "v": "周传雄" + }, + { + "n": "SHE", + "v": "SHE" + }, + { + "n": "苏打绿", + "v": "苏打绿" + }, + { + "n": "五月天", + "v": "五月天" + }, + { + "n": "张国荣", + "v": "张国荣" + }, + { + "n": "梅艳芳", + "v": "梅艳芳" + }, + { + "n": "孙燕姿", + "v": "孙燕姿" + }, + { + "n": "李健", + "v": "李健" + }, + { + "n": "华晨宇", + "v": "华晨宇" + }, + { + "n": "袁娅维", + "v": "袁娅维" + }, + { + "n": "大张伟", + "v": "大张伟" + }, + { + "n": "TFBOYS", + "v": "TFBOYS" + }, + { + "n": "王俊凯", + "v": "王俊凯" + }, + { + "n": "易烊千玺", + "v": "易烊千玺" + }, + { + "n": "王源", + "v": "王源" + }, + { + "n": "田馥甄", + "v": "田馥甄" + }, + { + "n": "小虎队", + "v": "小虎队" + }, + { + "n": "张杰", + "v": "张杰" + }, + { + "n": "王菲", + "v": "王菲" + }, + { + "n": "伍佰", + "v": "伍佰" + }, + { + "n": "刀郎", + "v": "刀郎" + }, + { + "n": "草蜢", + "v": "草蜢" + }, + { + "n": "潘玮柏", + "v": "潘玮柏" + }, + { + "n": "梁静茹", + "v": "梁静茹" + }, + { + "n": "林宥嘉", + "v": "林宥嘉" + }, + { + "n": "蔡徐坤", + "v": "蔡徐坤" + }, + { + "n": "周慧敏", + "v": "周慧敏" + }, + { + "n": "李圣杰", + "v": "李圣杰" + }, + { + "n": "张惠妹", + "v": "张惠妹" + }, + { + "n": "萧敬腾", + "v": "萧敬腾" + }, + { + "n": "周笔畅", + "v": "周笔畅" + }, + { + "n": "焦迈奇", + "v": "焦迈奇" + }, + { + "n": "尤长靖", + "v": "尤长靖" + }, + { + "n": "郑中基", + "v": "郑中基" + }, + { + "n": "谭维维", + "v": "谭维维" + }, + { + "n": "陈慧娴", + "v": "陈慧娴" + }, + { + "n": "张艺兴", + "v": "张艺兴" + }, + { + "n": "王嘉尔", + "v": "王嘉尔" + }, + { + "n": "刘宪华", + "v": "刘宪华" + }, + { + "n": "张敬轩", + "v": "张敬轩" + }, + { + "n": "李克勤", + "v": "李克勤" + }, + { + "n": "阿杜", + "v": "阿杜" + }, + { + "n": "郭静", + "v": "郭静" + }, + { + "n": "崔健", + "v": "崔健" + }, + { + "n": "庾澄庆", + "v": "庾澄庆" + }, + { + "n": "汪峰", + "v": "汪峰" + }, + { + "n": "那英", + "v": "那英" + }, + { + "n": "杨坤", + "v": "杨坤" + }, + { + "n": "叶倩文", + "v": "叶倩文" + }, + { + "n": "王心凌", + "v": "王心凌" + }, + { + "n": "张震岳", + "v": "张震岳" + }, + { + "n": "韩红", + "v": "韩红" + }, + { + "n": "齐秦", + "v": "齐秦" + }, + { + "n": "张雨生", + "v": "张雨生" + }, + { + "n": "黄品源", + "v": "黄品源" + }, + { + "n": "林忆莲", + "v": "林忆莲" + }, + { + "n": "丁当", + "v": "丁当" + }, + { + "n": "郑智化", + "v": "郑智化" + }, + { + "n": "李玟", + "v": "李玟" + }, + { + "n": "谢霆锋", + "v": "谢霆锋" + }, + { + "n": "黄小琥", + "v": "黄小琥" + }, + { + "n": "徐小凤", + "v": "徐小凤" + }, + { + "n": "任嘉伦", + "v": "任嘉伦" + }, + { + "n": "卓依婷", + "v": "卓依婷" + }, + { + "n": "逃跑计划", + "v": "逃跑计划" + }, + { + "n": "青鸟飞鱼", + "v": "青鸟飞鱼" + }, + { + "n": "飞儿乐队", + "v": "飞儿乐队" + }, + { + "n": "花儿乐队", + "v": "花儿乐队" + }, + { + "n": "南拳妈妈", + "v": "南拳妈妈" + }, + { + "n": "水木年华", + "v": "水木年华" + }, + { + "n": "动力火车", + "v": "动力火车" + }, + { + "n": "筷子兄弟", + "v": "筷子兄弟" + }, + { + "n": "鹿先森乐队", + "v": "鹿先森乐队" + }, + { + "n": "信乐队", + "v": "信乐队" + }, + { + "n": "旅行团乐队", + "v": "旅行团乐队" + }, + { + "n": "By2", + "v": "By2" + }, + { + "n": "郁可唯", + "v": "郁可唯" + }, + { + "n": "宋亚森", + "v": "宋亚森" + }, + { + "n": "费玉清", + "v": "费玉清" + }, + { + "n": "费翔", + "v": "费翔" + }, + { + "n": "金志文", + "v": "金志文" + }, + { + "n": "黄家强", + "v": "黄家强" + }, + { + "n": "方大同", + "v": "方大同" + }, + { + "n": "吴克群", + "v": "吴克群" + }, + { + "n": "罗大佑", + "v": "罗大佑" + }, + { + "n": "光良", + "v": "光良" + }, + { + "n": "田震", + "v": "田震" + }, + { + "n": "凤飞飞", + "v": "凤飞飞" + }, + { + "n": "谭晶", + "v": "谭晶" + }, + { + "n": "王杰", + "v": "王杰" + }, + { + "n": "羽泉", + "v": "羽泉" + }, + { + "n": "金池", + "v": "金池" + }, + { + "n": "屠洪刚", + "v": "屠洪刚" + }, + { + "n": "戴荃", + "v": "戴荃" + }, + { + "n": "郭采洁", + "v": "郭采洁" + }, + { + "n": "罗志祥", + "v": "罗志祥" + }, + { + "n": "王力宏", + "v": "王力宏" + }, + { + "n": "林肯公园", + "v": "林肯公园" + }, + { + "n": "迈克尔杰克逊", + "v": "迈克尔杰克逊" + }, + { + "n": "泰勒·斯威夫特", + "v": "泰勒·斯威夫特" + }, + { + "n": "阿黛尔", + "v": "阿黛尔" + }, + { + "n": "BIGBANG", + "v": "BIGBANG" + }, + { + "n": "LadyGaga", + "v": "LadyGaga" + }, + { + "n": "贾斯丁比伯", + "v": "贾斯丁比伯" + }, + { + "n": "中岛美雪", + "v": "中岛美雪" + }, + { + "n": "仓木麻衣", + "v": "仓木麻衣" + }, + { + "n": "后街男孩", + "v": "后街男孩" + }, + { + "n": "布兰妮", + "v": "布兰妮" + }, + { + "n": "夜愿乐队", + "v": "夜愿乐队" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/521/lib/猎手影视.py b/521/lib/猎手影视.py new file mode 100644 index 0000000..1a6a4d7 --- /dev/null +++ b/521/lib/猎手影视.py @@ -0,0 +1,279 @@ +# coding=utf-8 +# !/usr/bin/python +# by嗷呜(finally) +import sys +import os +sys.path.append("..") +import re +import hashlib +import hmac +import random +import string +from Crypto.Util.Padding import unpad +from concurrent.futures import ThreadPoolExecutor +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5, AES +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + +class Spider(Spider): + + def getName(self): + return "电影猎手" + + def init(self, extend=""): + self.device = self.device_id() + self.host = self.gethost() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + t = str(int(time.time())) + + def homeContent(self, filter): + result = {} + filters = {} + classes = [] + bba = self.url() + data = self.fetch(f"{self.host}/api/v1/app/config?pack={bba[0]}&signature={bba[1]}", headers=self.header()).text + data1 = self.aes(data) + dy = {"class":"类型","area":"地区","lang":"语言","year":"年份","letter":"字母","by":"排序","sort":"排序"} + data1['data']['movie_screen']['sort'].pop(0) + for item in data1['data']['movie_screen']['sort']: + item['n'] = item.pop('name') + item['v'] = item.pop('value') + for item in data1['data']['movie_screen']['filter']: + has_non_empty_field = False + classes.append({"type_name": item["name"], "type_id": str(item["id"])}) + for key in dy: + if key in item and item[key]: + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["id"])] = [] + filters[str(item["id"])].append( + {"key": 'sort', "name": '排序', "value": data1['data']['movie_screen']['sort']}) + for dkey in item: + if dkey in dy and item[dkey]: + item[dkey].pop(0) + value_array = [ + {"n": value.strip(), "v": value.strip()} + for value in item[dkey] + if value.strip() != "" + ] + filters[str(item["id"])].append( + {"key": dkey, "name": dy[dkey], "value": value_array} + ) + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + bba = self.url() + url = f'{self.host}/api/v1/movie/index_recommend?pack={bba[0]}&signature={bba[1]}' + data = self.fetch(url, headers=self.header()).json() + videos = [] + for item in data['data']: + if len(item['list']) > 0: + for it in item['list']: + try: + videos.append(self.voides(it)) + except Exception as e: + continue + result = {"list": videos} + return result + + def categoryContent(self, tid, pg, filter, extend): + body = {"type_id": tid, "sort": extend.get("sort", "by_default"), "class": extend.get("class", "类型"), + "area": extend.get("area", "地区"), "year": extend.get("year", "年份"), "page": str(pg), + "pageSize": "21"} + result = {} + list = [] + bba = self.url(body) + url = f"{self.host}/api/v1/movie/screen/list?pack={bba[0]}&signature={bba[1]}" + data = self.fetch(url, headers=self.header()).json()['data']['list'] + for item in data: + list.append(self.voides(item)) + result["list"] = list + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = {"id": ids[0]} + bba = self.url(body) + url = f'{self.host}/api/v1/movie/detail?pack={bba[0]}&signature={bba[1]}' + data = self.fetch(url, headers=self.header()).json()['data'] + video = {'vod_name': data.get('name'),'type_name': data.get('type_name'),'vod_year': data.get('year'),'vod_area': data.get('area'),'vod_remarks': data.get('dynami'),'vod_content': data.get('content')} + play = [] + names = [] + tasks = [] + for itt in data["play_from"]: + name = itt["name"] + a = [] + if len(itt["list"]) > 0: + names.append(name) + play.append(self.playeach(itt['list'])) + else: + tasks.append({"movie_id": ids[0], "from_code": itt["code"]}) + names.append(name) + if tasks: + with ThreadPoolExecutor(max_workers=len(tasks)) as executor: + results = executor.map(self.playlist, tasks) + for result in results: + if result: + play.append(result) + else: + play.append("") + video["vod_play_from"] = "$$$".join(names) + video["vod_play_url"] = "$$$".join(play) + result = {"list": [video]} + return result + + def searchContent(self, key, quick, pg=1): + body = {"keyword": key, "sort": "", "type_id": "0", "page": str(pg), "pageSize": "10", + "res_type": "by_movie_name"} + bba = self.url(body) + url = f"{self.host}/api/v1/movie/search?pack={bba[0]}&signature={bba[1]}" + data = self.fetch(url, headers=self.header()).json()['data'].get('list') + videos = [] + for it in data: + try: + videos.append(self.voides(it)) + except Exception as e: + continue + result = {"list": videos, "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + url = id + if "m3u8" not in url and "mp4" not in url: + try: + add = id.split('|||') + data = {"from_code": add[0], "play_url": add[1], "episode_id": add[2], "type": "play"} + bba = self.url(data) + data2 = self.fetch(f"{self.host}/api/v1/movie_addr/parse_url?pack={bba[0]}&signature={bba[1]}", + headers=self.header()).json()['data'] + url = data2.get('play_url') or data2.get('download_url') + try: + url1 = self.fetch(url, headers=self.header(), allow_redirects=False).headers['Location'] + if url1 and "http" in url1: + url = url1 + except: + pass + except Exception as e: + pass + if '.jpg' in url or '.jpeg' in url or '.png' in url: + url = self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + result = {} + result["parse"] = 0 + result["url"] = url + result["header"] = {'user-agent': 'okhttp/4.9.2'} + return result + + def localProxy(self, param): + url = b64decode(param["url"]).decode('utf-8') + durl = url[:url.rfind('/')] + data = self.fetch(url, headers=self.header()).content.decode("utf-8") + lines = data.strip().split('\n') + for index, string in enumerate(lines): + # if 'URI="' in string and 'http' not in string: + # lines[index] = index + # 暂时预留,貌似用不到 + if '#EXT' not in string and 'http' not in string: + lines[index] = durl + ('' if string.startswith('/') else '/') + string + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + def device_id(self): + characters = string.ascii_lowercase + string.digits + random_string = ''.join(random.choices(characters, k=32)) + return random_string + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/4.9.2', + 'Connection': 'Keep-Alive', + } + response = self.fetch('https://app-site.ecoliving168.com/domain_v5.json', headers=headers).json() + url = response['api_service'].replace('/api/', '') + return url + + def header(self): + headers = { + 'User-Agent': 'Android', + 'Accept': 'application/prs.55App.v2+json', + 'timestamp': self.t, + 'x-client-setting': '{"pure-mode":1}', + 'x-client-uuid': '{"device_id":' + self.device + '}, "type":1,"brand":"Redmi", "model":"M2012K10C", "system_version":30, "sdk_version":"3.1.0.7"}', + 'x-client-version': '3096 ' + } + return headers + + def url(self, id=None): + if not id: + id = {} + id["timestamp"] = self.t + public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA02F/kPg5A2NX4qZ5JSns+bjhVMCC6JbTiTKpbgNgiXU+Kkorg6Dj76gS68gB8llhbUKCXjIdygnHPrxVHWfzmzisq9P9awmXBkCk74Skglx2LKHa/mNz9ivg6YzQ5pQFUEWS0DfomGBXVtqvBlOXMCRxp69oWaMsnfjnBV+0J7vHbXzUIkqBLdXSNfM9Ag5qdRDrJC3CqB65EJ3ARWVzZTTcXSdMW9i3qzEZPawPNPe5yPYbMZIoXLcrqvEZnRK1oak67/ihf7iwPJqdc+68ZYEmmdqwunOvRdjq89fQMVelmqcRD9RYe08v+xDxG9Co9z7hcXGTsUquMxkh29uNawIDAQAB' + encrypted_text = json.dumps(id) + public_key = RSA.import_key(b64decode(public_key)) + cipher = PKCS1_v1_5.new(public_key) + encrypted_message = cipher.encrypt(encrypted_text.encode('utf-8')) + encrypted_message_base64 = b64encode(encrypted_message).decode('utf-8') + result = encrypted_message_base64.replace('+', '-').replace('/', '_').replace('=', '') + key = '635a580fcb5dc6e60caa39c31a7bde48' + sign = hmac.new(key.encode(), result.encode(), hashlib.md5).hexdigest() + return result, sign + + def playlist(self, body): + try: + bba = self.url(body) + url = f'{self.host}/api/v1/movie_addr/list?pack={bba[0]}&signature={bba[1]}' + data = self.fetch(url, headers=self.header()).json()['data'] + return self.playeach(data) + except Exception: + return [] + + def playeach(self,data): + play_urls = [] + for it in data: + if re.search(r"mp4|m3u8", it["play_url"]): + play_urls.append(f"{it['episode_name']}${it['play_url']}") + else: + play_urls.append( + f"{it['episode_name']}${it['from_code']}|||{it['play_url']}|||{it['episode_id']}" + ) + return '#'.join(play_urls) + + def voides(self, item): + if item['name'] or item['title']: + voide = { + "vod_id": item.get('id') or item.get('click'), + 'vod_name': item.get('name') or item.get('title'), + 'vod_pic': item.get('cover') or item.get('image'), + 'vod_year': item.get('year') or item.get('label'), + 'vod_remarks': item.get('dynamic') or item.get('sub_title') + } + return voide + + def aes(self, text): + text = text.replace('-', '+').replace('_', '/') + '==' + key = b"e6d5de5fcc51f53d" + iv = b"2f13eef7dfc6c613" + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size).decode("utf-8") + return json.loads(pt) diff --git a/521/lib/金牌.py b/521/lib/金牌.py new file mode 100644 index 0000000..be3b628 --- /dev/null +++ b/521/lib/金牌.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import threading +import uuid +import requests +sys.path.append('..') +from base.spider import Spider +import time +from Crypto.Hash import MD5, SHA1 + +class Spider(Spider): + ''' + 配置示例: + { + "key": "xxxx", + "name": "xxxx", + "type": 3, + "api": ".所在路径/金牌.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": "https://www.jiabaide.cn,域名2,域名3" + } + }, + ''' + def init(self, extend=""): + if extend: + hosts=json.loads(extend)['site'] + self.host = self.host_late(hosts) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + cdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/get/filer/type", headers=self.getheaders()).json() + fdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/get/filer/list", headers=self.getheaders()).json() + result = {} + classes = [] + filters={} + for k in cdata['data']: + classes.append({ + 'type_name': k['typeName'], + 'type_id': str(k['typeId']), + }) + sort_values = [{"n": "最近更新", "v": "2"},{"n": "人气高低", "v": "3"}, {"n": "评分高低", "v": "4"}] + for tid, d in fdata['data'].items(): + current_sort_values = sort_values.copy() + if tid == '1': + del current_sort_values[0] + filters[tid] = [ + {"key": "type", "name": "类型", + "value": [{"n": i["itemText"], "v": i["itemValue"]} for i in d["typeList"]]}, + + *([] if not d["plotList"] else [{"key": "v_class", "name": "剧情", + "value": [{"n": i["itemText"], "v": i["itemText"]} + for i in d["plotList"]]}]), + + {"key": "area", "name": "地区", + "value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["districtList"]]}, + + {"key": "year", "name": "年份", + "value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["yearList"]]}, + + {"key": "lang", "name": "语言", + "value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["languageList"]]}, + + {"key": "sort", "name": "排序", "value": current_sort_values} + ] + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + data1 = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/home/all/list", headers=self.getheaders()).json() + data2=self.fetch(f"{self.host}/api/mw-movie/anonymous/home/hotSearch",headers=self.getheaders()).json() + data=[] + for i in data1['data'].values(): + data.extend(i['list']) + data.extend(data2['data']) + vods=self.getvod(data) + return {'list':vods} + + def categoryContent(self, tid, pg, filter, extend): + + params = { + "area": extend.get('area', ''), + "filterStatus": "1", + "lang": extend.get('lang', ''), + "pageNum": pg, + "pageSize": "30", + "sort": extend.get('sort', '1'), + "sortBy": "1", + "type": extend.get('type', ''), + "type1": tid, + "v_class": extend.get('v_class', ''), + "year": extend.get('year', '') + } + data = self.fetch(f"{self.host}/api/mw-movie/anonymous/video/list?{self.js(params)}", headers=self.getheaders(params)).json() + result = {} + result['list'] = self.getvod(data['data']['list']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/detail?id={ids[0]}",headers=self.getheaders({'id':ids[0]})).json() + vod=self.getvod([data['data']])[0] + vod['vod_play_from']='嗷呜有金牌' + vod['vod_play_url'] = '#'.join( + f"{i['name'] if len(vod['episodelist']) > 1 else vod['vod_name']}${ids[0]}@@{i['nid']}" for i in + vod['episodelist']) + vod.pop('episodelist', None) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + params = { + "keyword": key, + "pageNum": pg, + "pageSize": "8", + "sourceCode": "1" + } + data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/searchByWord?{self.js(params)}",headers=self.getheaders(params)).json() + vods=self.getvod(data['data']['result']['list']) + return {'list':vods,'page':pg} + + def playerContent(self, flag, id, vipFlags): + self.header = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36', + 'sec-ch-ua-platform': '"Windows"', + 'DNT': '1', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"', + 'sec-ch-ua-mobile': '?0', + 'Origin': self.host, + 'Referer': f'{self.host}/' + } + ids=id.split('@@') + pdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v2/video/episode/url?clientType=1&id={ids[0]}&nid={ids[1]}",headers=self.getheaders({'clientType':'1','id': ids[0], 'nid': ids[1]})).json() + vlist=[] + for i in pdata['data']['list']:vlist.extend([i['resolutionName'],i['url']]) + return {'parse':0,'url':vlist,'header':self.header} + + def localProxy(self, param): + pass + + def host_late(self, url_list): + if isinstance(url_list, str): + urls = [u.strip() for u in url_list.split(',')] + else: + urls = url_list + if len(urls) <= 1: + return urls[0] if urls else '' + + results = {} + threads = [] + + def test_host(url): + try: + start_time = time.time() + response = requests.head(url, timeout=1.0, allow_redirects=False) + delay = (time.time() - start_time) * 1000 + results[url] = delay + except Exception as e: + results[url] = float('inf') + for url in urls: + t = threading.Thread(target=test_host, args=(url,)) + threads.append(t) + t.start() + for t in threads: + t.join() + return min(results.items(), key=lambda x: x[1])[0] + + def md5(self, sign_key): + md5_hash = MD5.new() + md5_hash.update(sign_key.encode('utf-8')) + md5_result = md5_hash.hexdigest() + return md5_result + + def js(self, param): + return '&'.join(f"{k}={v}" for k, v in param.items()) + + def getheaders(self, param=None): + if param is None:param = {} + t=str(int(time.time()*1000)) + param['key']='cb808529bae6b6be45ecfab29a4889bc' + param['t']=t + sha1_hash = SHA1.new() + sha1_hash.update(self.md5(self.js(param)).encode('utf-8')) + sign = sha1_hash.hexdigest() + deviceid = str(uuid.uuid4()) + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36', + 'Accept': 'application/json, text/plain, */*', + 'sign': sign, + 't': t, + 'deviceid':deviceid + } + return headers + + def convert_field_name(self, field): + field = field.lower() + if field.startswith('vod') and len(field) > 3: + field = field.replace('vod', 'vod_') + if field.startswith('type') and len(field) > 4: + field = field.replace('type', 'type_') + return field + + def getvod(self, array): + return [{self.convert_field_name(k): v for k, v in item.items()} for item in array] + diff --git a/521/lib/韩剧看看.json b/521/lib/韩剧看看.json new file mode 100644 index 0000000..d1bc4dd --- /dev/null +++ b/521/lib/韩剧看看.json @@ -0,0 +1,47 @@ +{ + "作者": "摄氏零度", + "站名": "XBPQ影视", + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "嗅探词": ".mp4#.m3u8#.flv", + "过滤词": "", + "主页url": "https://www.hanjukankan.com/", + "首页": "120", + "起始页": "1", + "分类url": "https://www.hanjukankan.com/xvs{cateId}xat{area}xbt{by}xct{class}xdt{lang}xet{letter}xftxgtxht{catePg}atbtct{year}.html;;mrc", + "分类": "韩国剧集$1#韩国电影$2#韩国综艺$3", + "数组": "/xvd&&", + "标题": "title=\"&&\"", + "图片": "data-original=\"&&\"", + "副标题": "module-item-note\">&&", + "线路标题": ">&&", + "影片年代": ".html\">&&", + "影片地区": "*xbtxctxdtxetxftxgtxhtatbtct.html\">&&", + "影片类型": "*xdtxetxftxgtxhtatbtct.html\">&&", + "导演": "导演:&&", + "主演": "主演:&&", + "简介": "请勿相信影片中的广告👉+

&&

", + "倒序": "0", + "播放列表": "", + "播放标题": ">&&", + "搜索标题": "title=\"&&\"", + "搜索图片": "data-original=\"&&\"", + "搜索副标题": "module-item-note\">&&