diff --git a/base/rules.db b/base/rules.db index 145301fab714dc5b06ca84d8f42803ef5e2ce726..3a7cbd9c29206d748ffdba28c80671de3afcf7a2 100644 Binary files a/base/rules.db and b/base/rules.db differ diff --git a/js/gaze.js b/js/gaze.js new file mode 100644 index 0000000000000000000000000000000000000000..4bbf8dd9c509a21ac8a876d639ab9ccb225974a5 --- /dev/null +++ b/js/gaze.js @@ -0,0 +1,27 @@ +var rule = { + title:'gaze', + host:'https://gaze.run', + url:'/filter_movielist?fyfilter', + // searchUrl:'/search?query=**&page=fypage', + searchable:2, + quickSearch:0, + filterable:1, + filter:{'all': [{'key': 'mcountry', 'name': '地区', 'value': [{'n': '全部地区', 'v': 'all'}, {'n': '中国大陆', 'v': '1'}, {'n': '中国台湾', 'v': '2'}, {'n': '中国香港', 'v': '3'}, {'n': '韩国', 'v': '4'}, {'n': '俄罗斯', 'v': '5'}, {'n': '美国', 'v': '6'}, {'n': '日本', 'v': '7'}, {'n': '印度', 'v': '8'}, {'n': '英国', 'v': '9'}, {'n': '德国', 'v': '10'}, {'n': '法国', 'v': '11'}, {'n': '意大利', 'v': '12'}, {'n': '泰国', 'v': '13'}, {'n': '爱沙尼亚', 'v': '14'}, {'n': '哈萨克斯坦', 'v': '15'}, {'n': '西班牙', 'v': '16'}, {'n': '黎巴嫩', 'v': '17'}, {'n': '巴西', 'v': '18'}, {'n': '澳大利亚', 'v': '19'}, {'n': '丹麦', 'v': '20'}, {'n': '瑞典', 'v': '21'}, {'n': '以色列', 'v': '22'}, {'n': '荷兰', 'v': '23'}, {'n': '伊朗', 'v': '24'}, {'n': '墨西哥', 'v': '25'}]}, {'key': 'mtag', 'name': '类型', 'value': [{'n': '全部类型', 'v': 'all'}, {'n': '剧情', 'v': '1'}, {'n': '动作', 'v': '2'}, {'n': '喜剧', 'v': '3'}, {'n': '爱情', 'v': '4'}, {'n': '科幻', 'v': '5'}, {'n': '悬疑', 'v': '6'}, {'n': '惊悚', 'v': '7'}, {'n': '恐怖', 'v': '8'}, {'n': '犯罪', 'v': '9'}, {'n': '音乐', 'v': '10'}, {'n': '冒险', 'v': '11'}, {'n': '历史', 'v': '12'}, {'n': '战争', 'v': '13'}, {'n': '奇幻', 'v': '14'}, {'n': '黑帮', 'v': '15'}, {'n': '文艺', 'v': '16'}, {'n': '传记', 'v': '17'}, {'n': '运动', 'v': '18'}, {'n': '同性', 'v': '19'}, {'n': '情色', 'v': '20'}]}, {'key': 'sort', 'name': '默认排序', 'value': [{'n': '默认排序', 'v': 'default'}, {'n': '评分排序', 'v': 'grade'}, {'n': '名称排序', 'v': 'name'}, {'n': '添加时间排序', 'v': 'createtime'}, {'n': '修改时间排序', 'v': 'updatetime'}]}, {'key': 'album', 'name': '专辑', 'value': [{'n': '全部专辑', 'v': 'all'}, {'n': '来吧,看动画', 'v': '55,56,57,58,84,116,118,119,120,164,549'}, {'n': '国漫之光', 'v': '7,9,10,33,81,209,210,793,794,795,796,988,1121,1122,1123'}, {'n': '魁拔', 'v': '7,9,10,33,740'}, {'n': '星游记', 'v': '81,82,83'}, {'n': '致郁', 'v': '34,35,66,256,341,353,480,1007'}, {'n': '丧甜', 'v': '238,239,505'}, {'n': '烧脑神剧', 'v': '354,355,409,410,411,809'}, {'n': '周杰伦', 'v': '851,871,901,921,1054'}, {'n': '新东方特技厨师汉尼拔', 'v': '136,137,138'}, {'n': '个人推荐', 'v': '2,7,9,10,21,33,40,54,81,139,175,256,279,281,409,410,411,705,793,794,795,796,809,976,981,1126,1228'}, {'n': '速度与激情系列', 'v': '904,905,906,907,908,909,910,911,912,913'}, {'n': '韩国暴力美学三部曲', 'v': '37,45,54'}, {'n': '汤姆·哈迪 Tom Hardy', 'v': '31,42,67,205,243,277,478,684,731,733,734,1007,1037,1046,1047,1167'}, {'n': '韩国人生三部曲', 'v': '112,114,115'}, {'n': '蝙蝠侠黑暗骑士三部曲', 'v': '275,276,277'}, {'n': '变形金刚系列', 'v': '874,875,876,877,878'}, {'n': '生化危机系列', 'v': '887,888,889,890,891,892'}]}], '1': [{'key': 'mcountry', 'name': '地区', 'value': [{'n': '全部地区', 'v': 'all'}, {'n': '中国大陆', 'v': '1'}, {'n': '中国台湾', 'v': '2'}, {'n': '中国香港', 'v': '3'}, {'n': '韩国', 'v': '4'}, {'n': '俄罗斯', 'v': '5'}, {'n': '美国', 'v': '6'}, {'n': '日本', 'v': '7'}, {'n': '印度', 'v': '8'}, {'n': '英国', 'v': '9'}, {'n': '德国', 'v': '10'}, {'n': '法国', 'v': '11'}, {'n': '意大利', 'v': '12'}, {'n': '泰国', 'v': '13'}, {'n': '爱沙尼亚', 'v': '14'}, {'n': '哈萨克斯坦', 'v': '15'}, {'n': '西班牙', 'v': '16'}, {'n': '黎巴嫩', 'v': '17'}, {'n': '巴西', 'v': '18'}, {'n': '澳大利亚', 'v': '19'}, {'n': '丹麦', 'v': '20'}, {'n': '瑞典', 'v': '21'}, {'n': '以色列', 'v': '22'}, {'n': '荷兰', 'v': '23'}, {'n': '伊朗', 'v': '24'}, {'n': '墨西哥', 'v': '25'}]}, {'key': 'mtag', 'name': '类型', 'value': [{'n': '全部类型', 'v': 'all'}, {'n': '剧情', 'v': '1'}, {'n': '动作', 'v': '2'}, {'n': '喜剧', 'v': '3'}, {'n': '爱情', 'v': '4'}, {'n': '科幻', 'v': '5'}, {'n': '悬疑', 'v': '6'}, {'n': '惊悚', 'v': '7'}, {'n': '恐怖', 'v': '8'}, {'n': '犯罪', 'v': '9'}, {'n': '音乐', 'v': '10'}, {'n': '冒险', 'v': '11'}, {'n': '历史', 'v': '12'}, {'n': '战争', 'v': '13'}, {'n': '奇幻', 'v': '14'}, {'n': '黑帮', 'v': '15'}, {'n': '文艺', 'v': '16'}, {'n': '传记', 'v': '17'}, {'n': '运动', 'v': '18'}, {'n': '同性', 'v': '19'}, {'n': '情色', 'v': '20'}]}, {'key': 'sort', 'name': '默认排序', 'value': [{'n': '默认排序', 'v': 'default'}, {'n': '评分排序', 'v': 'grade'}, {'n': '名称排序', 'v': 'name'}, {'n': '添加时间排序', 'v': 'createtime'}, {'n': '修改时间排序', 'v': 'updatetime'}]}, {'key': 'album', 'name': '专辑', 'value': [{'n': '全部专辑', 'v': 'all'}, {'n': '来吧,看动画', 'v': '55,56,57,58,84,116,118,119,120,164,549'}, {'n': '国漫之光', 'v': '7,9,10,33,81,209,210,793,794,795,796,988,1121,1122,1123'}, {'n': '魁拔', 'v': '7,9,10,33,740'}, {'n': '星游记', 'v': '81,82,83'}, {'n': '致郁', 'v': '34,35,66,256,341,353,480,1007'}, {'n': '丧甜', 'v': '238,239,505'}, {'n': '烧脑神剧', 'v': '354,355,409,410,411,809'}, {'n': '周杰伦', 'v': '851,871,901,921,1054'}, {'n': '新东方特技厨师汉尼拔', 'v': '136,137,138'}, {'n': '个人推荐', 'v': '2,7,9,10,21,33,40,54,81,139,175,256,279,281,409,410,411,705,793,794,795,796,809,976,981,1126,1228'}, {'n': '速度与激情系列', 'v': '904,905,906,907,908,909,910,911,912,913'}, {'n': '韩国暴力美学三部曲', 'v': '37,45,54'}, {'n': '汤姆·哈迪 Tom Hardy', 'v': '31,42,67,205,243,277,478,684,731,733,734,1007,1037,1046,1047,1167'}, {'n': '韩国人生三部曲', 'v': '112,114,115'}, {'n': '蝙蝠侠黑暗骑士三部曲', 'v': '275,276,277'}, {'n': '变形金刚系列', 'v': '874,875,876,877,878'}, {'n': '生化危机系列', 'v': '887,888,889,890,891,892'}]}], '2': [{'key': 'mcountry', 'name': '地区', 'value': [{'n': '全部地区', 'v': 'all'}, {'n': '中国大陆', 'v': '1'}, {'n': '中国台湾', 'v': '2'}, {'n': '中国香港', 'v': '3'}, {'n': '韩国', 'v': '4'}, {'n': '俄罗斯', 'v': '5'}, {'n': '美国', 'v': '6'}, {'n': '日本', 'v': '7'}, {'n': '印度', 'v': '8'}, {'n': '英国', 'v': '9'}, {'n': '德国', 'v': '10'}, {'n': '法国', 'v': '11'}, {'n': '意大利', 'v': '12'}, {'n': '泰国', 'v': '13'}, {'n': '爱沙尼亚', 'v': '14'}, {'n': '哈萨克斯坦', 'v': '15'}, {'n': '西班牙', 'v': '16'}, {'n': '黎巴嫩', 'v': '17'}, {'n': '巴西', 'v': '18'}, {'n': '澳大利亚', 'v': '19'}, {'n': '丹麦', 'v': '20'}, {'n': '瑞典', 'v': '21'}, {'n': '以色列', 'v': '22'}, {'n': '荷兰', 'v': '23'}, {'n': '伊朗', 'v': '24'}, {'n': '墨西哥', 'v': '25'}]}, {'key': 'mtag', 'name': '类型', 'value': [{'n': '全部类型', 'v': 'all'}, {'n': '剧情', 'v': '1'}, {'n': '动作', 'v': '2'}, {'n': '喜剧', 'v': '3'}, {'n': '爱情', 'v': '4'}, {'n': '科幻', 'v': '5'}, {'n': '悬疑', 'v': '6'}, {'n': '惊悚', 'v': '7'}, {'n': '恐怖', 'v': '8'}, {'n': '犯罪', 'v': '9'}, {'n': '音乐', 'v': '10'}, {'n': '冒险', 'v': '11'}, {'n': '历史', 'v': '12'}, {'n': '战争', 'v': '13'}, {'n': '奇幻', 'v': '14'}, {'n': '黑帮', 'v': '15'}, {'n': '文艺', 'v': '16'}, {'n': '传记', 'v': '17'}, {'n': '运动', 'v': '18'}, {'n': '同性', 'v': '19'}, {'n': '情色', 'v': '20'}]}, {'key': 'sort', 'name': '默认排序', 'value': [{'n': '默认排序', 'v': 'default'}, {'n': '评分排序', 'v': 'grade'}, {'n': '名称排序', 'v': 'name'}, {'n': '添加时间排序', 'v': 'createtime'}, {'n': '修改时间排序', 'v': 'updatetime'}]}, {'key': 'album', 'name': '专辑', 'value': [{'n': '全部专辑', 'v': 'all'}, {'n': '来吧,看动画', 'v': '55,56,57,58,84,116,118,119,120,164,549'}, {'n': '国漫之光', 'v': '7,9,10,33,81,209,210,793,794,795,796,988,1121,1122,1123'}, {'n': '魁拔', 'v': '7,9,10,33,740'}, {'n': '星游记', 'v': '81,82,83'}, {'n': '致郁', 'v': '34,35,66,256,341,353,480,1007'}, {'n': '丧甜', 'v': '238,239,505'}, {'n': '烧脑神剧', 'v': '354,355,409,410,411,809'}, {'n': '周杰伦', 'v': '851,871,901,921,1054'}, {'n': '新东方特技厨师汉尼拔', 'v': '136,137,138'}, {'n': '个人推荐', 'v': '2,7,9,10,21,33,40,54,81,139,175,256,279,281,409,410,411,705,793,794,795,796,809,976,981,1126,1228'}, {'n': '速度与激情系列', 'v': '904,905,906,907,908,909,910,911,912,913'}, {'n': '韩国暴力美学三部曲', 'v': '37,45,54'}, {'n': '汤姆·哈迪 Tom Hardy', 'v': '31,42,67,205,243,277,478,684,731,733,734,1007,1037,1046,1047,1167'}, {'n': '韩国人生三部曲', 'v': '112,114,115'}, {'n': '蝙蝠侠黑暗骑士三部曲', 'v': '275,276,277'}, {'n': '变形金刚系列', 'v': '874,875,876,877,878'}, {'n': '生化危机系列', 'v': '887,888,889,890,891,892'}]}], 'bangumi': [{'key': 'mcountry', 'name': '地区', 'value': [{'n': '全部地区', 'v': 'all'}, {'n': '中国大陆', 'v': '1'}, {'n': '中国台湾', 'v': '2'}, {'n': '中国香港', 'v': '3'}, {'n': '韩国', 'v': '4'}, {'n': '俄罗斯', 'v': '5'}, {'n': '美国', 'v': '6'}, {'n': '日本', 'v': '7'}, {'n': '印度', 'v': '8'}, {'n': '英国', 'v': '9'}, {'n': '德国', 'v': '10'}, {'n': '法国', 'v': '11'}, {'n': '意大利', 'v': '12'}, {'n': '泰国', 'v': '13'}, {'n': '爱沙尼亚', 'v': '14'}, {'n': '哈萨克斯坦', 'v': '15'}, {'n': '西班牙', 'v': '16'}, {'n': '黎巴嫩', 'v': '17'}, {'n': '巴西', 'v': '18'}, {'n': '澳大利亚', 'v': '19'}, {'n': '丹麦', 'v': '20'}, {'n': '瑞典', 'v': '21'}, {'n': '以色列', 'v': '22'}, {'n': '荷兰', 'v': '23'}, {'n': '伊朗', 'v': '24'}, {'n': '墨西哥', 'v': '25'}]}, {'key': 'mtag', 'name': '类型', 'value': [{'n': '全部类型', 'v': 'all'}, {'n': '剧情', 'v': '1'}, {'n': '动作', 'v': '2'}, {'n': '喜剧', 'v': '3'}, {'n': '爱情', 'v': '4'}, {'n': '科幻', 'v': '5'}, {'n': '悬疑', 'v': '6'}, {'n': '惊悚', 'v': '7'}, {'n': '恐怖', 'v': '8'}, {'n': '犯罪', 'v': '9'}, {'n': '音乐', 'v': '10'}, {'n': '冒险', 'v': '11'}, {'n': '历史', 'v': '12'}, {'n': '战争', 'v': '13'}, {'n': '奇幻', 'v': '14'}, {'n': '黑帮', 'v': '15'}, {'n': '文艺', 'v': '16'}, {'n': '传记', 'v': '17'}, {'n': '运动', 'v': '18'}, {'n': '同性', 'v': '19'}, {'n': '情色', 'v': '20'}]}, {'key': 'sort', 'name': '默认排序', 'value': [{'n': '默认排序', 'v': 'default'}, {'n': '评分排序', 'v': 'grade'}, {'n': '名称排序', 'v': 'name'}, {'n': '添加时间排序', 'v': 'createtime'}, {'n': '修改时间排序', 'v': 'updatetime'}]}, {'key': 'album', 'name': '专辑', 'value': [{'n': '全部专辑', 'v': 'all'}, {'n': '来吧,看动画', 'v': '55,56,57,58,84,116,118,119,120,164,549'}, {'n': '国漫之光', 'v': '7,9,10,33,81,209,210,793,794,795,796,988,1121,1122,1123'}, {'n': '魁拔', 'v': '7,9,10,33,740'}, {'n': '星游记', 'v': '81,82,83'}, {'n': '致郁', 'v': '34,35,66,256,341,353,480,1007'}, {'n': '丧甜', 'v': '238,239,505'}, {'n': '烧脑神剧', 'v': '354,355,409,410,411,809'}, {'n': '周杰伦', 'v': '851,871,901,921,1054'}, {'n': '新东方特技厨师汉尼拔', 'v': '136,137,138'}, {'n': '个人推荐', 'v': '2,7,9,10,21,33,40,54,81,139,175,256,279,281,409,410,411,705,793,794,795,796,809,976,981,1126,1228'}, {'n': '速度与激情系列', 'v': '904,905,906,907,908,909,910,911,912,913'}, {'n': '韩国暴力美学三部曲', 'v': '37,45,54'}, {'n': '汤姆·哈迪 Tom Hardy', 'v': '31,42,67,205,243,277,478,684,731,733,734,1007,1037,1046,1047,1167'}, {'n': '韩国人生三部曲', 'v': '112,114,115'}, {'n': '蝙蝠侠黑暗骑士三部曲', 'v': '275,276,277'}, {'n': '变形金刚系列', 'v': '874,875,876,877,878'}, {'n': '生化危机系列', 'v': '887,888,889,890,891,892'}]}], 'chinese_cartoon': [{'key': 'mcountry', 'name': '地区', 'value': [{'n': '全部地区', 'v': 'all'}, {'n': '中国大陆', 'v': '1'}, {'n': '中国台湾', 'v': '2'}, {'n': '中国香港', 'v': '3'}, {'n': '韩国', 'v': '4'}, {'n': '俄罗斯', 'v': '5'}, {'n': '美国', 'v': '6'}, {'n': '日本', 'v': '7'}, {'n': '印度', 'v': '8'}, {'n': '英国', 'v': '9'}, {'n': '德国', 'v': '10'}, {'n': '法国', 'v': '11'}, {'n': '意大利', 'v': '12'}, {'n': '泰国', 'v': '13'}, {'n': '爱沙尼亚', 'v': '14'}, {'n': '哈萨克斯坦', 'v': '15'}, {'n': '西班牙', 'v': '16'}, {'n': '黎巴嫩', 'v': '17'}, {'n': '巴西', 'v': '18'}, {'n': '澳大利亚', 'v': '19'}, {'n': '丹麦', 'v': '20'}, {'n': '瑞典', 'v': '21'}, {'n': '以色列', 'v': '22'}, {'n': '荷兰', 'v': '23'}, {'n': '伊朗', 'v': '24'}, {'n': '墨西哥', 'v': '25'}]}, {'key': 'mtag', 'name': '类型', 'value': [{'n': '全部类型', 'v': 'all'}, {'n': '剧情', 'v': '1'}, {'n': '动作', 'v': '2'}, {'n': '喜剧', 'v': '3'}, {'n': '爱情', 'v': '4'}, {'n': '科幻', 'v': '5'}, {'n': '悬疑', 'v': '6'}, {'n': '惊悚', 'v': '7'}, {'n': '恐怖', 'v': '8'}, {'n': '犯罪', 'v': '9'}, {'n': '音乐', 'v': '10'}, {'n': '冒险', 'v': '11'}, {'n': '历史', 'v': '12'}, {'n': '战争', 'v': '13'}, {'n': '奇幻', 'v': '14'}, {'n': '黑帮', 'v': '15'}, {'n': '文艺', 'v': '16'}, {'n': '传记', 'v': '17'}, {'n': '运动', 'v': '18'}, {'n': '同性', 'v': '19'}, {'n': '情色', 'v': '20'}]}, {'key': 'sort', 'name': '默认排序', 'value': [{'n': '默认排序', 'v': 'default'}, {'n': '评分排序', 'v': 'grade'}, {'n': '名称排序', 'v': 'name'}, {'n': '添加时间排序', 'v': 'createtime'}, {'n': '修改时间排序', 'v': 'updatetime'}]}, {'key': 'album', 'name': '专辑', 'value': [{'n': '全部专辑', 'v': 'all'}, {'n': '来吧,看动画', 'v': '55,56,57,58,84,116,118,119,120,164,549'}, {'n': '国漫之光', 'v': '7,9,10,33,81,209,210,793,794,795,796,988,1121,1122,1123'}, {'n': '魁拔', 'v': '7,9,10,33,740'}, {'n': '星游记', 'v': '81,82,83'}, {'n': '致郁', 'v': '34,35,66,256,341,353,480,1007'}, {'n': '丧甜', 'v': '238,239,505'}, {'n': '烧脑神剧', 'v': '354,355,409,410,411,809'}, {'n': '周杰伦', 'v': '851,871,901,921,1054'}, {'n': '新东方特技厨师汉尼拔', 'v': '136,137,138'}, {'n': '个人推荐', 'v': '2,7,9,10,21,33,40,54,81,139,175,256,279,281,409,410,411,705,793,794,795,796,809,976,981,1126,1228'}, {'n': '速度与激情系列', 'v': '904,905,906,907,908,909,910,911,912,913'}, {'n': '韩国暴力美学三部曲', 'v': '37,45,54'}, {'n': '汤姆·哈迪 Tom Hardy', 'v': '31,42,67,205,243,277,478,684,731,733,734,1007,1037,1046,1047,1167'}, {'n': '韩国人生三部曲', 'v': '112,114,115'}, {'n': '蝙蝠侠黑暗骑士三部曲', 'v': '275,276,277'}, {'n': '变形金刚系列', 'v': '874,875,876,877,878'}, {'n': '生化危机系列', 'v': '887,888,889,890,891,892'}]}]}, + filter_url:'mcountry={{fl.mcountry or "all"}}&tag_arr%5B%5D={{fl.mtag or "all"}}&page=fypage&sort={{fl.sort or "updatetime"}}&album={{fl.album or "all"}}&title=', + headers:{ + 'User-Agent':'MOBILE_UA', + }, + timeout:5000, + class_name:'全部形式&电影&电视剧&番剧&国漫', + class_url:'all&1&2&bangumi&chinese_cartoon', + class_parse:'', + play_parse:true, + lazy:'', + limit:6, + double:false, + 推荐:'.swiper-slide;.card-title&&Text;img&&data-src;.badge-default&&Text;a&&href', + 一级:'', + 一级:'js:log(input);let d=[];let body={mform:MY_CATE,mcountry:MY_FL.mcountry||"all","tag_arr%5B%5D":MY_FL.mtag||"all",page:MY_PAGE,sort:MY_FL.sort||"updatetime",album:MY_FL.album||"all",title:""};fetch_params.body=body;fetch_params.headers["x-requested-with"]="XMLHttpRequest";let url=input.split("?")[0];let html=post(url,fetch_params);print(html);let data=JSON.parse(html);data.mlist.forEach(function(it){d.push({title:it.title,desc:it.definition+" "+it.grade,url:it.id,img:it.cover_img})});setResult(d);', + 二级:{"title":"h4&&Text","img":".poster&&src","desc":".detail_imform_kv:eq(0)&&Text;.detail_imform_kv:eq(1)&&Text;.detail_imform_kv:eq(4)&&Text;.detail_imform_kv:eq(5)&&Text;.detail_imform_kv:eq(6)&&Text;.detail_imform_kv:eq(7)&&Text;.detail_imform_kv:eq(8)&&Text","content":"p&&Text","tabs":"#menu0&&li","lists":".movurl:eq(#id) ul&&li"}, + // 搜索:'*', +} \ No newline at end of file diff --git a/js/version.txt b/js/version.txt index a8c5bcd4cec983a910d83b583404d26c286ea144..f3c3abab81a31f5c2d6a03e020d2cf4bfff38d3f 100644 --- a/js/version.txt +++ b/js/version.txt @@ -1 +1 @@ -3.9.12beta1 \ No newline at end of file +3.9.12beta2 \ No newline at end of file diff --git a/libs/drpy.js b/libs/drpy.js index aa915b1b49e5d86139dfaebe17310bbf9b6fc4f7..17cbc6d28ba5a4a983b787ac9d4d9ac39ff6ede0 100644 --- a/libs/drpy.js +++ b/libs/drpy.js @@ -899,13 +899,16 @@ function request(url,obj,ocr_flag){ obj.headers["Content-Type"] = 'text/html; charset='+rule.encoding; } } - if(typeof(obj.headers.body)!='undefined'&&obj.headers.body&&typeof (obj.headers.body)==='string'){ + if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){ let data = {}; - obj.headers.body.split('&').forEach(it=>{ + obj.body.split('&').forEach(it=>{ data[it.split('=')[0]] = it.split('=')[1] }); obj.data = data; - delete obj.headers.body + delete obj.body + }else if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='object'){ + obj.data = obj.body; + delete obj.body } if(!url){ return obj.withHeaders?'{}':'' @@ -929,6 +932,17 @@ function request(url,obj,ocr_flag){ } } +/** + * 快捷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||''; diff --git a/libs/drpy.min.js b/libs/drpy.min.js index 721ac0a2130a972793944030e4bea3d3ac583f2e..6aeb65f12870d646289cbb7a10879d3ea0d047c2 100644 --- a/libs/drpy.min.js +++ b/libs/drpy.min.js @@ -1 +1 @@ -import cheerio from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/cheerio.min.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-js.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/drT.js";function init_test(){console.log("init_test_start");console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}let rule={};const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|APP|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://cms.nokia.press:5706/parse/ocr";if(typeof MY_URL==="undefined"){var MY_URL}var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|data-original|data-src)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;ithis.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1]}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(!SELECT_REGEX_A.test(sp[i])&&iit.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.headers.body!="undefined"&&obj.headers.body&&typeof obj.headers.body==="string"){let data={};obj.headers.body.split("&").forEach(it=>{data[it.split("=")[0]]=it.split("=")[1]});obj.data=data;delete obj.headers.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}console.log(JSON.stringify(obj.headers));console.log("request:"+url);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}fetch=request;print=function(data){data=data||"";if(typeof data!=="string"){try{data=JSON.stringify(data)}catch(e){console.log("print:"+e.message)}}console.log(data)};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){obj.headers["Cookie"]=cookie}else if(!obj.headers){obj.headers={Cookie:cookie}}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;const HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);for(let item of items){let items2=_pdfa(item,p[1]);for(let item2 of items2){try{let p2=getPP(p,2,pp,1);let title=_pdfh(item2,p2);let img="";try{let p3=getPP(p,3,pp,2);img=_pd(item2,p3)}catch(e){}let desc="";try{let p4=getPP(p,4,pp,3);desc=_pdfh(item2,p4)}catch(e){}let p5=getPP(p,5,pp,4);let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){let p6=getPP(p,6,pp,5);content=_pdfh(item2,p6)}else{content=""}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:links.join("$")};d.push(vod)}catch(e){console.log("首页列表处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);for(let item of items){try{let p1=getPP(p,1,pp,1);let title=_pdfh(item,p1);let img="";try{let p2=getPP(p,2,pp,2);img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{let p3=getPP(p,3,pp,3);desc=_pdfh(item,p3)}catch(e){}let p4=getPP(p,4,pp,4);let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){let p5=getPP(p,5,pp,5);content=_pdfh(item,p5)}else{content=""}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:links.join("$")};d.push(vod)}catch(e){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;d.push({vod_id:vod_id,vod_name:_pdfh(it,p[1]).replace(/\n|\t/g,"").trim(),vod_pic:_pd(it,p[2],MY_URL),vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}return d.length<1?"{}":JSON.stringify({page:parseInt(cateObj.pg),pagecount:999,limit:20,total:999,list:d})}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd).replaceAll("fypage",searchObj.pg);MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);list.forEach(it=>{let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){let p5=getPP(p,5,pp,5);content=_pdfh(it,p5)}else{content=""}let ob={vod_id:link,vod_name:_pdfh(it,p1).replace(/\n|\t/g,"").trim(),vod_pic:_pd(it,p2,MY_URL),vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let vod={vod_id:detailObj.orId,vod_name:"片名",vod_pic:"",type_name:"剧情",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;console.log(MY_URL);if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){if(!html){html=getHtml(MY_URL)}let _impJQP=true;let _ps;if(p.is_json){_ps=parseTags.json;html=dealJson(html);_impJQP=false}else if(p.is_jsp){_ps=parseTags.jsp}else if(p.is_jq){_ps=parseTags.jq}else{_ps=parseTags.jq}if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""));if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&typeof html!=="string"){html=html.rr(html.ele).toString()}var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);if(html&&typeof html!=="string"){html=html.rr(html.ele).toString()}var input=MY_URL;eval(p.lists.replace("js:",""));vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);console.log(p1);let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);vodList.forEach(it=>{new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))});let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}return JSON.stringify({list:[vod]})}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function init(ext){console.log("init");try{if(typeof globalThis.mubanJs==="undefined"){let mubanJs=request("https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js",{"User-Agent":MOBILE_UA});mubanJs=mubanJs.replace("export default","(function() {return muban;}()) // export default");globalThis.mubanJs=mubanJs}let muban=eval(globalThis.mubanJs);if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}}else{eval(ext.replace("var rule","rule"))}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl;rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url;let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick){let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:1,quick:quick};return searchParse(searchObj)}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,DRPY:DRPY}; \ No newline at end of file +import cheerio from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/cheerio.min.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-js.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/drT.js";function init_test(){console.log("init_test_start");console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}let rule={};const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|APP|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://cms.nokia.press:5706/parse/ocr";if(typeof MY_URL==="undefined"){var MY_URL}var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|data-original|data-src)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;ithis.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1]}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(!SELECT_REGEX_A.test(sp[i])&&iit.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){let data={};obj.body.split("&").forEach(it=>{data[it.split("=")[0]]=it.split("=")[1]});obj.data=data;delete obj.body}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}console.log(JSON.stringify(obj.headers));console.log("request:"+url);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj.method="POST";return request(url,obj)}fetch=request;print=function(data){data=data||"";if(typeof data!=="string"){try{data=JSON.stringify(data)}catch(e){console.log("print:"+e.message)}}console.log(data)};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){obj.headers["Cookie"]=cookie}else if(!obj.headers){obj.headers={Cookie:cookie}}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;const HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);for(let item of items){let items2=_pdfa(item,p[1]);for(let item2 of items2){try{let p2=getPP(p,2,pp,1);let title=_pdfh(item2,p2);let img="";try{let p3=getPP(p,3,pp,2);img=_pd(item2,p3)}catch(e){}let desc="";try{let p4=getPP(p,4,pp,3);desc=_pdfh(item2,p4)}catch(e){}let p5=getPP(p,5,pp,4);let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){let p6=getPP(p,6,pp,5);content=_pdfh(item2,p6)}else{content=""}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:links.join("$")};d.push(vod)}catch(e){console.log("首页列表处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);for(let item of items){try{let p1=getPP(p,1,pp,1);let title=_pdfh(item,p1);let img="";try{let p2=getPP(p,2,pp,2);img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{let p3=getPP(p,3,pp,3);desc=_pdfh(item,p3)}catch(e){}let p4=getPP(p,4,pp,4);let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){let p5=getPP(p,5,pp,5);content=_pdfh(item,p5)}else{content=""}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:links.join("$")};d.push(vod)}catch(e){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;d.push({vod_id:vod_id,vod_name:_pdfh(it,p[1]).replace(/\n|\t/g,"").trim(),vod_pic:_pd(it,p[2],MY_URL),vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}return d.length<1?"{}":JSON.stringify({page:parseInt(cateObj.pg),pagecount:999,limit:20,total:999,list:d})}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd).replaceAll("fypage",searchObj.pg);MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);list.forEach(it=>{let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){let p5=getPP(p,5,pp,5);content=_pdfh(it,p5)}else{content=""}let ob={vod_id:link,vod_name:_pdfh(it,p1).replace(/\n|\t/g,"").trim(),vod_pic:_pd(it,p2,MY_URL),vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let vod={vod_id:detailObj.orId,vod_name:"片名",vod_pic:"",type_name:"剧情",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;console.log(MY_URL);if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){if(!html){html=getHtml(MY_URL)}let _impJQP=true;let _ps;if(p.is_json){_ps=parseTags.json;html=dealJson(html);_impJQP=false}else if(p.is_jsp){_ps=parseTags.jsp}else if(p.is_jq){_ps=parseTags.jq}else{_ps=parseTags.jq}if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""));if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&typeof html!=="string"){html=html.rr(html.ele).toString()}var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);if(html&&typeof html!=="string"){html=html.rr(html.ele).toString()}var input=MY_URL;eval(p.lists.replace("js:",""));vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);console.log(p1);let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);vodList.forEach(it=>{new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))});let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}return JSON.stringify({list:[vod]})}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function init(ext){console.log("init");try{if(typeof globalThis.mubanJs==="undefined"){let mubanJs=request("https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js",{"User-Agent":MOBILE_UA});mubanJs=mubanJs.replace("export default","(function() {return muban;}()) // export default");globalThis.mubanJs=mubanJs}let muban=eval(globalThis.mubanJs);if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}}else{eval(ext.replace("var rule","rule"))}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl;rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url;let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick){let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:1,quick:quick};return searchParse(searchObj)}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,DRPY:DRPY}; \ No newline at end of file diff --git "a/py/gaze\344\270\200\347\272\247.js" "b/py/gaze\344\270\200\347\272\247.js" new file mode 100644 index 0000000000000000000000000000000000000000..e52cd1a6cc390f6fa722866b3828dcc46dea8273 --- /dev/null +++ "b/py/gaze\344\270\200\347\272\247.js" @@ -0,0 +1,40 @@ +js: +log(input); +let d = []; +// log(MY_FL); +// log(MY_PAGE); +let body = { + "mform": MY_CATE, + "mcountry": MY_FL.mcountry||'all', + "tag_arr%5B%5D": MY_FL.mtag||'all', + // "tag_arr[]": MY_FL.mtag||'all', + "page": MY_PAGE, + "sort": MY_FL.sort||'updatetime', + "album": MY_FL.album||'all', + "title": '', +}; +// let forms=[]; +// Object.keys(body).forEach(function (it){ +// forms.push(it+'='+body[it]); +// }); +// let form = forms.join('&'); +// log(body); +// log(form); +// fetch_params.body = form; + +fetch_params.body = body; +fetch_params.headers['x-requested-with'] = 'XMLHttpRequest'; +// fetch_params.headers['cookie'] = 'PHPSESSID=e7ht5hvema4sg0o8l1o5k0bqt1; Hm_lvt_eebb854b7348edadfb6b433786f5d059=1666239708; Hm_lpvt_eebb854b7348edadfb6b433786f5d059=1666244071'; +let url = input.split('?')[0]; +let html = post(url,fetch_params); +print(html); +let data = JSON.parse(html); +data.mlist.forEach(function (it){ + d.push({ + title: it.title, + desc: it.definition+' '+it.grade, + url:it.id, + img:it.cover_img, + }); +}); +setResult(d); \ No newline at end of file diff --git "a/py/gaze\347\255\233\351\200\211.py" "b/py/gaze\347\255\233\351\200\211.py" new file mode 100644 index 0000000000000000000000000000000000000000..670638bcfe2e3ba32a92e95f9f0d012db60b1a29 --- /dev/null +++ "b/py/gaze\347\255\233\351\200\211.py" @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : gaze筛选.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/10/20 + +import re + +import requests +from utils.htmlParser import jsoup + +headers = {'user-agent':'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'} + +def getFilters(url): + # cate_id = str(re.search('.*/(\d+)', url).groups()[0]) + # print(cate_id) + jsp = jsoup(url) + pdfh = jsp.pdfh + pdfa = jsp.pdfa + print(jsp) + r = requests.get(url,headers=headers) + r.encoding = r.apparent_encoding + html = r.text + cls_list = pdfa(html,'.mform&&div') + print(len(cls_list)) + print(cls_list) + # ft_dict = {cate_id:[]} + ft_dict = {} + + def getCate(cls): + key = cls + name = pdfh(html, f'.{cls}&&div:eq(0)&&a&&Text').replace('全部', '') + values = pdfa(html, f'.{cls}&&div') + # vl = [{"n":pdfh(i,'a&&Text'),"v":pdfh(i,'a&&href')} for i in values] + # vl = [{"n":pdfh(i,'a&&Text'),"v":re.search('(.*?)-(.*)',pdfh(i,'a&&data-filter'),re.M|re.I|re.S).groups()[1].replace('.html','').replace('-','')} for i in values] + vl = [{"n": pdfh(i, 'a&&Text'), "v": pdfh(i, 'a&&data-filter')} for i in values] + + return { + 'key': key, + 'name': name, + 'value': vl + } + for cls in cls_list: + cate_id = pdfh(cls,'a&&data-filter') + # key = pdfh(html,'.mcountry&&div:eq(0)&&a&&data-filter') + # key = 'mcountry' + # name = pdfh(html,'.mcountry&&div:eq(0)&&a&&Text').replace('全部','') + # values = pdfa(html,'.mcountry&&div') + # vl = [{"n":pdfh(i,'a&&Text'),"v":pdfh(i,'a&&data-filter')} for i in values] + + ft_dict[cate_id] = [] + for c in ['mcountry','mtag','sort','album']: + d = getCate(c) + ft_dict[cate_id].append(d) + print(ft_dict) + # return ft_dict + +if __name__ == '__main__': + getFilters('https://gaze.run/filter') \ No newline at end of file diff --git "a/py/\346\265\213\350\257\225\346\263\250\350\247\206.py" "b/py/\346\265\213\350\257\225\346\263\250\350\247\206.py" new file mode 100644 index 0000000000000000000000000000000000000000..f0aedf618cbcede374d9f173dc577a0c558b9a91 --- /dev/null +++ "b/py/\346\265\213\350\257\225\346\263\250\350\247\206.py" @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : 测试注释.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/10/20 + + +import requests +import ujson + +data = {'album': 'all', 'mcountry': 'all', 'mform': 'all', 'page': '1', 'sort': 'all', 'tag_arr%5B%5D': 'all', 'title': ''} +headers = { + 'Referer': 'https://gaze.run', + 'User-Agent': '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', + # 'cookie': 'PHPSESSID=e7ht5hvema4sg0o8l1o5k0bqt1; Hm_lvt_eebb854b7348edadfb6b433786f5d059=1666239708; Hm_lpvt_eebb854b7348edadfb6b433786f5d059=1666244071', + 'x-requested-with': 'XMLHttpRequest' +} +# form = ujson.dumps(data) +# form = data +# print(form) +form = 'mform=1&mcountry=all&tag_arr%5B%5D=3&page=1&sort=updatetime&album=all&title=' +form = 'mform=1&mcountry=all&tag_arr%5B%5D=all&page=1&sort=default&album=all&title=' +print(form) +r = requests.post('https://gaze.run/filter_movielist',data=form,headers=headers) +print(r.text) \ No newline at end of file diff --git a/readme.md b/readme.md index d41851e13865e8556aa2119bbc687f7eb610030b..7f72cb5f1e19d3b09217ca7499bb19cd659a939f 100644 --- a/readme.md +++ b/readme.md @@ -51,6 +51,8 @@ - [X] 新增了几个源 - [X] 修复乐猪TV源并记录已知问题 - [X] 升级版本至:3.9.12 二级增加新特性 tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href' +- [X] drpy.js增加post方法,优化调用逻辑,修复奇优搜索 +- [X] 新增gaze源,只完成了推荐和一级 ###### 2022/10/19 - [X] 源增加 filter_def 属性用于指定不同分类下的默认筛选条件 - [X] 修改搭建文档给出armv7设备的drpy运行兼容方案 diff --git a/utils/encode.py b/utils/encode.py index 5eab29ccfaa844f3c5d014a3e4be64d26f7335d6..bb466b04361b15983d1e2e3b6cc47f1407c96d9e 100644 --- a/utils/encode.py +++ b/utils/encode.py @@ -226,6 +226,12 @@ def dealObj(obj=None): 'withHeaders':withHeaders } +def coverDict2form(data:dict): + forms = [] + for k,v in data.items(): + forms.append(f'{k}={v}') + return '&'.join(forms) + def base_request(url,obj): # verify=False 关闭证书验证 # print(obj) @@ -243,6 +249,10 @@ def base_request(url,obj): if method.lower() == 'get': r = requests.get(url, headers=obj['headers'], params=obj['body'], timeout=obj['timeout'],verify=False) else: + # if isinstance(obj['body'],dict): + # obj['body'] = coverDict2form(obj['body']) + # print(obj['body']) + # 亲测不需要转换data 格式的dict 为 form都正常 (gaze规则和奇优搜索) r = requests.post(url, headers=obj['headers'], data=obj['body'], timeout=obj['timeout'],verify=False) # r = requests.get(url, timeout=timeout) # r = requests.get(url)