Sync all projects

This commit is contained in:
github-actions[bot]
2026-06-29 03:41:14 +00:00
parent 529cd7c625
commit 8b025e0766
11717 changed files with 6370622 additions and 0 deletions
+794
View File
@@ -0,0 +1,794 @@
{
"hot_gaia": [
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "热度",
"v": "recommend"
},
{
"n": "最新",
"v": "time"
},
{
"n": "评分",
"v": "rank"
}
]
},
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "全部"
},
{
"n": "华语",
"v": "华语"
},
{
"n": "欧美",
"v": "欧美"
},
{
"n": "韩国",
"v": "韩国"
},
{
"n": "日本",
"v": "日本"
}
]
}
],
"tv_hot": [
{
"key": "type",
"name": "分类",
"value": [
{
"n": "综合",
"v": "tv_hot"
},
{
"n": "国产剧",
"v": "tv_domestic"
},
{
"n": "欧美剧",
"v": "tv_american"
},
{
"n": "日剧",
"v": "tv_japanese"
},
{
"n": "韩剧",
"v": "tv_korean"
},
{
"n": "动画",
"v": "tv_animation"
}
]
}
],
"show_hot": [
{
"key": "type",
"name": "分类",
"value": [
{
"n": "综合",
"v": "show_hot"
},
{
"n": "国内",
"v": "show_domestic"
},
{
"n": "国外",
"v": "show_foreign"
}
]
}
],
"movie": [
{
"key": "类型",
"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": "短片"
}
]
},
{
"key": "地区",
"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": "丹麦"
}
]
},
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "近期热度",
"v": "T"
},
{
"n": "首映时间",
"v": "R"
},
{
"n": "高分优先",
"v": "S"
}
]
},
{
"key": "年代",
"name": "年代",
"value": [
{
"n": "全部年代",
"v": ""
},
{
"n": "2023",
"v": "2023"
},
{
"n": "2022",
"v": "2022"
},
{
"n": "2021",
"v": "2021"
},
{
"n": "2020",
"v": "2020"
},
{
"n": "2019",
"v": "2019"
},
{
"n": "2010年代",
"v": "2010年代"
},
{
"n": "2000年代",
"v": "2000年代"
},
{
"n": "90年代",
"v": "90年代"
},
{
"n": "80年代",
"v": "80年代"
},
{
"n": "70年代",
"v": "70年代"
},
{
"n": "60年代",
"v": "60年代"
},
{
"n": "更早",
"v": "更早"
}
]
}
],
"tv": [
{
"key": "类型",
"name": "类型",
"value": [
{
"n": "不限",
"v": ""
},
{
"n": "电视剧",
"v": "电视剧"
},
{
"n": "综艺",
"v": "综艺"
}
]
},
{
"key": "电视剧形式",
"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": "音乐"
}
]
},
{
"key": "综艺形式",
"name": "综艺形式",
"value": [
{
"n": "不限",
"v": ""
},
{
"n": "真人秀",
"v": "真人秀"
},
{
"n": "脱口秀",
"v": "脱口秀"
},
{
"n": "音乐",
"v": "音乐"
},
{
"n": "歌舞",
"v": "歌舞"
}
]
},
{
"key": "地区",
"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": "澳大利亚"
}
]
},
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "近期热度",
"v": "T"
},
{
"n": "首播时间",
"v": "R"
},
{
"n": "高分优先",
"v": "S"
}
]
},
{
"key": "年代",
"name": "年代",
"value": [
{
"n": "全部",
"v": ""
},
{
"n": "2023",
"v": "2023"
},
{
"n": "2022",
"v": "2022"
},
{
"n": "2021",
"v": "2021"
},
{
"n": "2020",
"v": "2020"
},
{
"n": "2019",
"v": "2019"
},
{
"n": "2010年代",
"v": "2010年代"
},
{
"n": "2000年代",
"v": "2000年代"
},
{
"n": "90年代",
"v": "90年代"
},
{
"n": "80年代",
"v": "80年代"
},
{
"n": "70年代",
"v": "70年代"
},
{
"n": "60年代",
"v": "60年代"
},
{
"n": "更早",
"v": "更早"
}
]
},
{
"key": "平台",
"name": "平台",
"value": [
{
"n": "全部",
"v": ""
},
{
"n": "腾讯视频",
"v": "腾讯视频"
},
{
"n": "爱奇艺",
"v": "爱奇艺"
},
{
"n": "优酷",
"v": "优酷"
},
{
"n": "湖南卫视",
"v": "湖南卫视"
},
{
"n": "Netflix",
"v": "Netflix"
},
{
"n": "HBO",
"v": "HBO"
},
{
"n": "BBC",
"v": "BBC"
},
{
"n": "NHK",
"v": "NHK"
},
{
"n": "CBS",
"v": "CBS"
},
{
"n": "NBC",
"v": "NBC"
},
{
"n": "tvN",
"v": "tvN"
}
]
}
],
"rank_list_movie": [
{
"key": "榜单",
"name": "榜单",
"value": [
{
"n": "实时热门电影",
"v": "movie_real_time_hotest"
},
{
"n": "一周口碑电影榜",
"v": "movie_weekly_best"
},
{
"n": "豆瓣电影Top250",
"v": "movie_top250"
}
]
}
],
"rank_list_tv": [
{
"key": "榜单",
"name": "榜单",
"value": [
{
"n": "实时热门电视",
"v": "tv_real_time_hotest"
},
{
"n": "华语口碑剧集榜",
"v": "tv_chinese_best_weekly"
},
{
"n": "全球口碑剧集榜",
"v": "tv_global_best_weekly"
},
{
"n": "国内口碑综艺榜",
"v": "show_chinese_best_weekly"
},
{
"n": "国外口碑综艺榜",
"v": "show_global_best_weekly"
}
]
}
]
}
+46
View File
@@ -0,0 +1,46 @@
var rule = {
title:'爱看机器人3',
host:'https://v.aikanbot.com',
url:'/hot/index-fyclass-fyfilter-p-fypage.html[/hot/index-fyclass-fyfilter.html]',
searchUrl:'/search?q=**&p=fypage[/search?q=**]',
searchable:2,
quickSearch:0,
filterable:1,
filter_url:'{{fl.tag}}',
图片来源:'@Referer=https://www.aikanbot.com/@User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
filter:{
"movie":[{"key":"tag","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":"豆瓣top250","v":"豆瓣top250"}]}],
"tv":[{"key":"tag","name":"标签","value":[{"n":"热门","v":"热门"},{"n":"美剧","v":"美剧"},{"n":"英剧","v":"英剧"},{"n":"韩剧","v":"韩剧"},{"n":"日剧","v":"日剧"},{"n":"国产剧","v":"国产剧"},{"n":"港剧","v":"港剧"},{"n":"日本动画","v":"日本动画"},{"n":"综艺","v":"综艺"},{"n":"纪录片","v":"纪录片"}]}]
},
filter_def:{
movie:{tag:'热门'},
tv:{tag:'热门'},
},
filter获取方法:`
let value = [];
$('ul').eq(2).find('li').each(function() {
// console.log($(this).text());
let n = $(this).text().trim();
value.push({
'n': n, 'v': n
});
});
// 电影执行:
let data = {'movie': [{'key': 'tag', 'name': '标签', 'value': value}]};
console.log(JSON.stringify(data));
//剧集执行:
let data = {'tv': [{'key': 'tag', 'name': '标签', 'value': value}]};
console.log(JSON.stringify(data));
`,
headers:{'User-Agent':'PC_UA',},
class_name:'电影&剧集',
class_url:'movie&tv',
play_parse:true,
double:true,
推荐:'.v-list;div.item;*;*;*;*', //这里可以为空,这样点播不会有内容
一级:'.v-list&&div.item;p&&Text;img&&data-src;;a&&href', //一级的内容是推荐或者点播时候的一级匹配
// 二级:二级,
二级:'js:eval(unescape(base64Decode("anM6CiAgICAgICAgcGRmaCA9IGpzcC5wZGZoOwogICAgICAgIGZ1bmN0aW9uIGdldFRva2VuKGh0bWwxKSB7CiAgICAgICAgICAgIGxldCBjdXJyZW50SWQgPSBwZGZoKGh0bWwxLCAnI2N1cnJlbnRfaWQmJnZhbHVlJyk7CiAgICAgICAgICAgIGxldCBlVG9rZW4gPSBwZGZoKGh0bWwxLCAnI2VfdG9rZW4mJnZhbHVlJyk7CiAgICAgICAgICAgIGlmICghY3VycmVudElkIHx8ICFlVG9rZW4pIHJldHVybiAnJzsKICAgICAgICAgICAgbGV0IGlkTGVuZ3RoID0gY3VycmVudElkLmxlbmd0aDsKICAgICAgICAgICAgbGV0IHN1YklkID0gY3VycmVudElkLnN1YnN0cmluZyhpZExlbmd0aCAtIDQsIGlkTGVuZ3RoKTsKICAgICAgICAgICAgbGV0IGtleXMgPSBbXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJJZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbGV0IGN1ckludCA9IHBhcnNlSW50KHN1YklkW2ldKTsKICAgICAgICAgICAgICAgIGxldCBzcGxpdFBvcyA9IGN1ckludCAlIDMgKyAxOwogICAgICAgICAgICAgICAga2V5c1tpXSA9IGVUb2tlbi5zdWJzdHJpbmcoc3BsaXRQb3MsIHNwbGl0UG9zICsgOCk7CiAgICAgICAgICAgICAgICBlVG9rZW4gPSBlVG9rZW4uc3Vic3RyaW5nKHNwbGl0UG9zICsgOCwgZVRva2VuLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGtleXMuam9pbignJyk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFZPRD17fTsKICAgICAgICAgICAgbGV0IGh0bWwxID0gcmVxdWVzdChpbnB1dCk7CiAgICAgICAgICAgIFZPRC52b2RfaWQgPSBwZGZoKGh0bWwxLCAnI2N1cnJlbnRfaWQmJnZhbHVlJyk7CiAgICAgICAgICAgIFZPRC52b2RfbmFtZSA9IHBkZmgoaHRtbDEsICdoMiYmVGV4dCcpOwogICAgICAgICAgICBWT0Qudm9kX3BpYyA9IHBkZmgoaHRtbDEsICcuaXRlbS1yb290JiZpbWcmJmRhdGEtc3JjJyk7CiAgICAgICAgICAgIFZPRC52b2RfYWN0b3IgPSBwZGZoKGh0bWwxLCAnLm1ldGE6ZXEoNCkmJlRleHQnKTsKICAgICAgICAgICAgVk9ELnZvZF9hcmVhID0gcGRmaChodG1sMSwgJy5tZXRhOmVxKDMpJiZUZXh0Jyk7CiAgICAgICAgICAgIFZPRC52b2RfeWVhciA9IHBkZmgoaHRtbDEsICcubWV0YTplcSgyKSYmVGV4dCcpOwogICAgICAgICAgICBWT0Qudm9kX3JlbWFya3MgPSAnJzsKICAgICAgICAgICAgVk9ELnZvZF9kaXJlY3RvciA9ICcnOwogICAgICAgICAgICBWT0Qudm9kX2NvbnRlbnQgPSBwZGZoKGh0bWwxLCAnI2xpbmUtdGlwcyYmVGV4dCcpOwogICAgICAgICAgICAvLyBsb2coVk9EKTsKICAgICAgICAgICAgdmFyIHZfdGtzID0gZ2V0VG9rZW4oaHRtbDEpOwogICAgICAgICAgICBsb2coJ3ZfdGtzID09PT4gJyArIHZfdGtzKTsKICAgICAgICAgICAgaW5wdXQgPSBIT1NUICsgJy9hcGkvZ2V0UmVzTj92aWRlb0lkPScgKyBpbnB1dC5zcGxpdCgnLycpLnBvcCgpICsgJyZtdHlwZT0yJnRva2VuPScrdl90a3M7CiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzonTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxM18yXzMgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzEzLjAuMyBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMScsCiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBNWV9VUkwsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBwcmludChodG1sKTsKICAgICAgICAgICAgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICAgICAgICAgIGxldCBlcGlzb2RlcyA9IGh0bWwuZGF0YS5saXN0OwogICAgICAgICAgICBsZXQgcGxheU1hcCA9IHt9OwogICAgICAgICAgICBpZiAodHlwZW9mIHBsYXlfdXJsID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgdmFyIHBsYXlfdXJsID0gJycKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgbWFwID0ge30KICAgICAgICAgICAgbGV0IGFyciA9IFtdCiAgICAgICAgICAgIGxldCBuYW1lID0gewogICAgICAgICAgICAgICAgJ2JmenltM3U4JzogJ+aatOmjjicsCiAgICAgICAgICAgICAgICAnMTA4MHp5ayc6ICfkvJjotKgnLAogICAgICAgICAgICAgICAgJ2t1YWlrYW4nOiAn5b+r55yLJywKICAgICAgICAgICAgICAgICdsem0zdTgnOiAn6YeP5a2QJywKICAgICAgICAgICAgICAgICdmZm0zdTgnOiAn6Z2e5YehJywKICAgICAgICAgICAgICAgICdoYWl3YWlrYW4nOiAn5rW35aSW55yLJywKICAgICAgICAgICAgICAgICdnc20zdTgnOiAn5YWJ6YCfJywKICAgICAgICAgICAgICAgICd6dWlkYW0zdTgnOiAn5pyA5aSnJywKICAgICAgICAgICAgICAgICdiam0zdTgnOiAn5YWr5oiSJywKICAgICAgICAgICAgICAgICdzbm0zdTgnOiAn57Si5bC8JywKICAgICAgICAgICAgICAgICd3b2xvbmcnOiAn5Y2n6b6ZJywKICAgICAgICAgICAgICAgICd4bG0zdTgnOiAn5paw5rWqJywKICAgICAgICAgICAgICAgICd5aG0zdTgnOiAn5qix6IqxJywKICAgICAgICAgICAgICAgICd0a20zdTgnOiAn5aSp56m6JywKICAgICAgICAgICAgICAgICdqc20zdTgnOiAn5p6B6YCfJywKICAgICAgICAgICAgICAgICd3am0zdTgnOiAn5peg5bC9JywKICAgICAgICAgICAgICAgICdzZG0zdTgnOiAn6Zeq55S1JywKICAgICAgICAgICAgICAgICdrY20zdTgnOiAn5b+r6L2mJywKICAgICAgICAgICAgICAgICdqaW55aW5nbTN1OCc6ICfph5HpubAnLAogICAgICAgICAgICAgICAgJ2ZzbTN1OCc6ICfpo57pgJ8nLAogICAgICAgICAgICAgICAgJ3RwbTN1OCc6ICfmt5jniYcnLAogICAgICAgICAgICAgICAgJ2xlbTN1OCc6ICfpsbzkuZAnLAogICAgICAgICAgICAgICAgJ2RibTN1OCc6ICfnmb7luqYnLAogICAgICAgICAgICAgICAgJ3RvbW0zdTgnOiAn55Wq6IyEJywKICAgICAgICAgICAgICAgICd1a20zdTgnOiAnVemFtycsCiAgICAgICAgICAgICAgICAnaWttM3U4JzogJ+eIseWdpCcsCiAgICAgICAgICAgICAgICAnaG56eW0zdTgnOiAn57qi54mb6LWE5rqQJywKICAgICAgICAgICAgICAgICdobm0zdTgnOiAn57qi54mbJywKICAgICAgICAgICAgICAgICc2OHp5X20zdTgnOiAnNjgnLAogICAgICAgICAgICAgICAgJ2tkbTN1OCc6ICfphbfngrknLAogICAgICAgICAgICAgICAgJ2JkeG0zdTgnOiAn5YyX5paX5pifJywKICAgICAgICAgICAgICAgICdxaG0zdTgnOiAn5aWH6JmOJywKICAgICAgICAgICAgICAgICdoaG0zdTgnOiAn6LGq5Y2OJwogICAgICAgICAgICB9OwogICAgICAgICAgICBlcGlzb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGVwKSB7CiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZXBbJ3Jlc0RhdGEnXSk7CiAgICAgICAgICAgICAgICBkYXRhLm1hcCh2YWwgPT4gewogICAgICAgICAgICAgICAgICAgIGlmKCFtYXBbdmFsLmZsYWddKXsKICAgICAgICAgICAgICAgICAgICAgICAgbWFwW3ZhbC5mbGFnXSA9IFt2YWwudXJsLnJlcGxhY2VBbGwoJyMjJywnIycpXQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcFt2YWwuZmxhZ10ucHVzaCh2YWwudXJsLnJlcGxhY2VBbGwoJyMjJywnIycpKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWFwKSB7CiAgICAgICAgICAgICAgICBpZiAoJ2JmenltM3U4JyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogMQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCcxMDgwenlrJyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogMgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdrdWFpa2FuJyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogMwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdsem0zdTgnID09IGtleSkgewogICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZzogbmFtZVtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiA0CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2ZmbTN1OCcgPT0ga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBmbGFnOiBuYW1lW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWFwW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IDUKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnc25tM3U4JyA9PSBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc6IG5hbWVba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogNgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdxaG0zdTgnID09IGtleSkgewogICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZzogbmFtZVtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiA3CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBmbGFnOiAobmFtZVtrZXldKSA/IG5hbWVba2V5XSA6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogOAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXJyLnNvcnQoKGEsIGIpID0+IGEuc29ydCAtIGIuc29ydCk7CiAgICAgICAgICAgIGxldCBwbGF5RnJvbSA9IFtdOwogICAgICAgICAgICBsZXQgcGxheUxpc3QgPSBbXTsKICAgICAgICAgICAgYXJyLm1hcCh2YWwgPT4gewogICAgICAgICAgICAgICAgaWYgKCEvdW5kZWZpbmVkLy50ZXN0KHZhbC5mbGFnKSkgewogICAgICAgICAgICAgICAgICAgIHBsYXlGcm9tLnB1c2godmFsLmZsYWcpOwogICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0LnB1c2godmFsLnVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIGxldCB2b2RfcGxheV9mcm9tID0gcGxheUZyb20uam9pbignJCQkJyk7CiAgICAgICAgICAgIGxldCB2b2RfcGxheV91cmwgPSBwbGF5TGlzdC5qb2luKCckJCQnKTsKICAgICAgICAgICAgVk9EWyd2b2RfcGxheV9mcm9tJ10gPSB2b2RfcGxheV9mcm9tOwogICAgICAgICAgICBWT0RbJ3ZvZF9wbGF5X3VybCddID0gdm9kX3BsYXlfdXJsOwogICAgICAgICAgICAvLyBsb2coVk9EKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZygn6I635Y+W5LqM57qn6K+m5oOF6aG15Y+R55Sf6ZSZ6K+vOicgKyBlLm1lc3NhZ2UpCiAgICAgICAgfQ==")))',
搜索:'.col-md-8&&.media;h5&&a&&Text;a&&img&&data-src;.label&&Text;a&&href',//第三个是描述,一般显示更新或者完结
}
+522
View File
@@ -0,0 +1,522 @@
{
"0": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"1": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"2": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"3": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"4": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
]
}
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+189
View File
@@ -0,0 +1,189 @@
#coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import json
import time
import base64
class Spider(Spider): # 元类 默认的元类 type
def getName(self):
return "央视"
def init(self,extend=""):
print("============{0}============".format(extend))
pass
def isVideoFormat(self,url):
pass
def manualVideoCheck(self):
pass
def homeContent(self,filter):
result = {}
cateManual = {
"等着我": "TOPC1451378757637200",
"我爱发明": "TOPC1569314345479107",
"动物世界": "TOPC1451378967257534",
"我爱发明2021": "TOPC1451557970755294",
"自然传奇": "TOPC1451558150787467",
"探索发现": "TOPC1451557893544236",
"地理中国": "TOPC1451557421544786",
"人与自然": "TOPC1451525103989666",
"远方的家": "TOPC1451541349400938",
"动画大放映": "TOPC1451559025546574",
"新闻联播": "TOPC1451528971114112",
"焦点访谈": "TOPC1451558976694518",
"海峡两岸": "TOPC1451540328102649",
"今日关注": "TOPC1451540389082713",
"今日亚洲": "TOPC1451540448405749",
"防务新观察": "TOPC1451526164984187",
"共同关注": "TOPC1451558858788377",
"深度国际": "TOPC1451540709098112",
"环宇视野": "TOPC1451469241240836",
"环球视线": "TOPC1451558926200436",
"世界周刊": "TOPC1451558687534149",
"东方时空": "TOPC1451558532019883",
"新闻调查": "TOPC1451558819463311",
"环球科技视野": "TOPC1451463780801881",
"讲武堂": "TOPC1451526241359341",
"国宝发现": "TOPC1571034869935436",
"国宝档案": "TOPC1451540268188575",
"天下财经": "TOPC1451531385787654",
"走进科学": "TOPC1451558190239536",
"解码科技史": "TOPC1570876640457386",
"法律讲堂": "TOPC1451542824484472",
"百家讲坛": "TOPC1451557052519584",
"名家书场": "TOPC1579401761622774",
"星光大道": "TOPC1451467630488780",
"非常6+1": "TOPC1451467940101208",
"中国节拍": "TOPC1570025984977611",
"一鸣惊人": "TOPC1451558692971175",
"金牌喜剧班": "TOPC1611826337610628",
"九州大戏台": "TOPC1451558399948678",
"乡村大舞台": "TOPC1563179546003162",
"家庭幽默大赛": "TOPC1451375222891702",
"综艺盛典": "TOPC1451985071887935",
"环球综艺": "TOPC1571300682556971",
"中国好歌曲": "TOPC1451984949453678",
"广场舞金曲": "TOPC1528685010104859",
"曲苑杂谈": "TOPC1451984417763860",
"锦绣梨园": "TOPC1451558363250650",
"梨园周刊": "TOPC1574909786070351",
"外国人在中国": "TOPC1451541113743615",
"华人世界": "TOPC1451539822927345",
"武林大会": "TOPC1451551891055866",
"棋牌乐": "TOPC1451550531682936",
"动物传奇": "TOPC1451984181884527",
"美食中国": "TOPC1571034804976375",
"田间示范秀": "TOPC1563178908227191",
"三农群英会": "TOPC1600745974233265",
"乡村振兴面对面": "TOPC1568966531726705",
"超级新农人": "TOPC1597627647957699",
"印象乡村": "TOPC1563178734372977" }
classes = []
for k in cateManual:
classes.append({
'type_name':k,
'type_id':cateManual[k]
})
result['class'] = classes
if(filter):
result['filters'] = self.config['filter']
return result
def homeVideoContent(self):
result = {
'list':[]
}
return result
def categoryContent(self,tid,pg,filter,extend):
result = {}
extend['id'] = tid
extend['p'] = pg
filterParams = ["id", "p", "d"]
params = ["", "", ""]
for idx in range(len(filterParams)):
fp = filterParams[idx]
if fp in extend.keys():
params[idx] = '{0}={1}'.format(filterParams[idx],extend[fp])
suffix = '&'.join(params)
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
if not tid.startswith('TOPC'):
url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
vodList = jo['data']['list']
videos = []
for vod in vodList:
guid = vod['guid']
title = vod['title']
img = vod['image']
brief = vod['brief']
videos.append({
"vod_id":guid+"###"+img,
"vod_name":title,
"vod_pic":img,
"vod_remarks":''
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self,array):
aid = array[0].split('###')
tid = aid[0]
url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid)
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
title = jo['title'].strip()
link = jo['hls_url'].strip()
vod = {
"vod_id":tid,
"vod_name":title,
"vod_pic":aid[1],
"type_name":'',
"vod_year":"",
"vod_area":"",
"vod_remarks":"",
"vod_actor":"",
"vod_director":"",
"vod_content":""
}
vod['vod_play_from'] = 'CCTV'
vod['vod_play_url'] = title+"$"+link
result = {
'list':[
vod
]
}
return result
def searchContent(self,key,quick):
result = {
'list':[]
}
return result
def playerContent(self,flag,id,vipFlags):
result = {}
rsp = self.fetch(id,headers=self.header)
content = rsp.text.strip()
arr = content.split('\n')
urlPrefix = self.regStr(id,'(http[s]?://[a-zA-z0-9.]+)/')
url = urlPrefix + arr[-1]
result["parse"] = 0
result["playUrl"] = ''
result["url"] = url
result["header"] = ''
return result
config = {
"player": {},
"filter": {"TOPC1451557970755294": [{"key": "d", "name": "年份", "value": [{"n": "全部", "v": ""}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014", "v": "2014"}, {"n": "2013", "v": "2013"}, {"n": "2012", "v": "2012"}, {"n": "2011", "v": "2011"}, {"n": "2010", "v": "2010"}, {"n": "2009", "v": "2009"}]}]}
}
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
}
def localProxy(self,param):
return [200, "video/MP2T", action, ""]
+243
View File
@@ -0,0 +1,243 @@
# coding=utf-8
# !/usr/bin/python
import sys, re
import base64
import hashlib
import requests
from typing import Tuple
from base.spider import Spider
from datetime import datetime, timedelta
from urllib.parse import quote, unquote
from urllib3.util.retry import Retry
sys.path.append('..')
# 搜索用户名,关键词格式为“类别+空格+关键词”
# 类别在标签上已注明,比如“女主播g”,则搜索类别为“g”
# 搜索“g per”,则在“女主播”中搜索“per”, 关键词不区分大小写,但至少3位,否则空结果
class Spider(Spider):
def init(self, extend="{}"):
origin = 'https://zh.stripchat.com'
self.host = origin
self.headers = {
'Origin': origin,
'Referer': f"{origin}/",
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0) Gecko/20100101 Firefox/144.0'
}
self.stripchat_key = self.decode_key_compact()
# 缓存字典
self._hash_cache = {}
self.create_session_with_retry()
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def homeContent(self, filter):
CLASSES = [{'type_name': '女主播g', 'type_id': 'girls'}, {'type_name': '情侣c', 'type_id': 'couples'}, {'type_name': '男主播m', 'type_id': 'men'}, {'type_name': '跨性别t', 'type_id': 'trans'}]
VALUE = ({'n': '中国', 'v': 'tagLanguageChinese'}, {'n': '亚洲', 'v': 'ethnicityAsian'}, {'n': '白人', 'v': 'ethnicityWhite'}, {'n': '拉丁', 'v': 'ethnicityLatino'}, {'n': '混血', 'v': 'ethnicityMultiracial'}, {'n': '印度', 'v': 'ethnicityIndian'}, {'n': '阿拉伯', 'v': 'ethnicityMiddleEastern'}, {'n': '黑人', 'v': 'ethnicityEbony'})
VALUE_MEN = ({'n': '情侣', 'v': 'sexGayCouples'}, {'n': '直男', 'v': 'orientationStraight'})
TIDS = ('girls', 'couples', 'men', 'trans')
filters = {
tid: [{'key': 'tag', 'value': VALUE_MEN + VALUE if tid == 'men' else VALUE}]
for tid in TIDS
}
return {
'class': CLASSES,
'filters': filters
}
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
limit = 60
offset = limit * (int(pg) - 1)
url = f"{self.host}/api/front/models?improveTs=false&removeShows=false&limit={limit}&offset={offset}&primaryTag={tid}&sortBy=stripRanking&rcmGrp=A&rbCnGr=true&prxCnGr=false&nic=false"
if 'tag' in extend:
url += "&filterGroupTags=%5B%5B%22" + extend['tag'] + "%22%5D%5D"
rsp = self.fetch(url).json()
videos = [
{
"vod_id": str(vod['username']).strip(),
"vod_name": f"{self.country_code_to_flag(str(vod['country']).strip())}{str(vod['username']).strip()}",
"vod_pic": f"https://img.doppiocdn.net/thumbs/{vod['snapshotTimestamp']}/{vod['id']}",
"vod_remarks": "" if vod.get('status') == "public" else "🎫"
}
for vod in rsp.get('models', [])
]
total = int(rsp.get('filteredCount', 0))
return {
"list": videos,
"page": pg,
"pagecount": (total + limit - 1) // limit,
"limit": limit,
"total": total
}
def detailContent(self, array):
username = array[0]
rsp = self.fetch(f"{self.host}/api/front/v2/models/username/{username}/cam").json()
info = rsp['cam']
user = rsp['user']['user']
id = str(user['id'])
country = str(user['country']).strip()
isLive = "" if user['isLive'] else " 已下播"
flag = self.country_code_to_flag(country)
remark, startAt = '', ''
if show := info.get('show'):
startAt = show.get('createdAt')
elif show := info.get('groupShowAnnouncement'):
startAt = show.get('startAt')
if startAt:
BJtime = (datetime.strptime(startAt, "%Y-%m-%dT%H:%M:%SZ") + timedelta(hours=8)).strftime("%m月%d%H:%M")
remark = f"🎫 始于 {BJtime}"
vod = {
"vod_id": id,
"vod_name": str(info['topic']).strip(),
"vod_pic": str(user['avatarUrl']),
"vod_director": f"{flag}{username}{isLive}",
"vod_remarks": remark,
'vod_play_from': '书生玩剣ⁱ·*₁'',
'vod_play_url': f"{id}${id}"
}
return {'list': [vod]}
def process_key(self, key: str) -> Tuple[str, str]:
tags = {'G': 'girls', 'C': 'couples', 'M': 'men', 'T': 'trans'}
parts = key.split(maxsplit=1) # 仅分割第一个空格
if len(parts) > 1 and (tag := tags.get(parts[0].upper())):
return tag, parts[1].strip()
return 'girls', key.strip()
def searchContent(self, key, quick, pg="1"):
result = {}
if int(pg) > 1:
return result
tag, key = self.process_key(key)
url = f"{self.host}/api/front/v4/models/search/group/username?query={key}&limit=900&primaryTag={tag}"
rsp = self.fetch(url).json()
result['list'] = [
{
"vod_id": str(user['username']).strip(),
"vod_name": f"{self.country_code_to_flag(str(user['country']).strip())}{user['username']}",
"vod_pic": f"https://img.doppiocdn.net/thumbs/{user['snapshotTimestamp']}/{user['id']}",
"vod_remarks": "" if user['status'] == "public" else "🎫"
}
for user in rsp.get('models', [])
if user['isLive'] # 过滤条件
]
return result
def playerContent(self, flag, id, vipFlags):
url = f"https://edge-hls.doppiocdn.net/hls/{id}/master/{id}_auto.m3u8?playlistType=lowLatency"
rsp = self.fetch(url)
lines = rsp.text.strip().split('\n')
psch, pkey = '', ''
url = []
for i, line in enumerate(lines):
if line.startswith('#EXT-X-MOUFLON:'):
if parts := line.split(':'):
if len(parts) >= 4:
psch, pkey = parts[2], parts[3]
if '#EXT-X-STREAM-INF' in line:
name_start = line.find('NAME="') + 6
name_end = line.find('"', name_start)
qn = line[name_start:name_end]
# URL在下一行
url_base = lines[i + 1]
# 组合最终的URL,并加上psch和pkey参数
full_url = f"{url_base}&psch={psch}&pkey={pkey}"
proxy_url = f"{self.getProxyUrl()}&url={quote(full_url)}"
# 将画质和URL添加到列表中
url.extend([qn, proxy_url])
return {
"url": url,
"parse": '0',
"contentType": '',
"header": self.headers
}
def localProxy(self, param):
url = unquote(param['url'])
data = self.fetch(url)
if data.status_code == 403:
data = self.fetch(re.sub(r'\d+p\d*\.m3u8', '160p_blurred.m3u8', url))
if data.status_code != 200:
return [404, "text/plain", ""]
data = data.text
if "#EXT-X-MOUFLON:FILE" in data:
data = self.process_m3u8_content_v2(data)
return [200, "application/vnd.apple.mpegur", data]
def process_m3u8_content_v2(self, m3u8_content):
lines = m3u8_content.strip().split('\n')
for i, line in enumerate(lines):
if (line.startswith('#EXT-X-MOUFLON:FILE:') and 'media.mp4' in lines[i + 1]):
encrypted_data = line.split(':', 2)[2].strip()
try:
decrypted_data = self.decrypt(encrypted_data, self.stripchat_key)
except Exception as e:
decrypted_data = self.decrypt(encrypted_data, "Zokee2OhPh9kugh4")
lines[i + 1] = lines[i + 1].replace('media.mp4', decrypted_data)
return '\n'.join(lines)
def country_code_to_flag(self, country_code):
if len(country_code) != 2 or not country_code.isalpha():
return country_code
flag_emoji = ''.join([chr(ord(c.upper()) - ord('A') + 0x1F1E6) for c in country_code])
return flag_emoji
def decode_key_compact(self):
base64_str = "NTEgNzUgNjUgNjEgNmUgMzQgNjMgNjEgNjkgMzkgNjIgNmYgNGEgNjEgMzUgNjE="
decoded = base64.b64decode(base64_str).decode('utf-8')
key_bytes = bytes(int(hex_str, 16) for hex_str in decoded.split(" "))
return key_bytes.decode('utf-8')
def compute_hash(self, key: str) -> bytes:
"""计算并缓存SHA-256哈希"""
if key not in self._hash_cache:
sha256 = hashlib.sha256()
sha256.update(key.encode('utf-8'))
self._hash_cache[key] = sha256.digest()
return self._hash_cache[key]
def decrypt(self, encrypted_b64: str, key: str) -> str:
# 修复Base64填充
padding = len(encrypted_b64) % 4
if padding:
encrypted_b64 += '=' * (4 - padding)
# 计算哈希并解密
hash_bytes = self.compute_hash(key)
encrypted_data = base64.b64decode(encrypted_b64)
# 异或解密
decrypted_bytes = bytearray()
for i, cipher_byte in enumerate(encrypted_data):
key_byte = hash_bytes[i % len(hash_bytes)]
decrypted_bytes.append(cipher_byte ^ key_byte)
return decrypted_bytes.decode('utf-8')
def create_session_with_retry(self):
self.session = requests.Session()
retry_strategy = Retry(
total = 3,
backoff_factor = 0.3,
status_forcelist = [429, 500, 502, 503, 504] # 需要重试的状态码
)
adapter = requests.adapters.HTTPAdapter(max_retries=retry_strategy)
self.session.mount("http://", adapter)
self.session.mount("https://", adapter)
def fetch(self, url):
return self.session.get(url, headers=self.headers, timeout=10)
+72
View File
@@ -0,0 +1,72 @@
#coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self,extend=""):
self.base_url='http://api.hclyz.com:81/mf'
def homeContent(self,filter):
classes = [{"type_name": "色播聚合","type_id":"/json.txt"}]
result = {"class": classes}
return result
def categoryContent(self,tid,pg,filter,extend):
home = self.fetch(f'{self.base_url}/json.txt').json()
data = home.get("pingtai")[1:]
videos = [
{
"vod_id": "/" + item['address'],
"vod_name": item['title'],
"vod_pic": item['xinimg'].replace("http://cdn.gcufbd.top/img/",
"https://slink.ltd/https://raw.githubusercontent.com/fish2018/lib/refs/heads/main/imgs/"),
"vod_remarks": item['Number'],
"style": {"type": "rect", "ratio": 1.33}
} for item in sorted(data, key=lambda x: int(x['Number']), reverse=True)
]
result = {
"page": pg,
"pagecount": 1,
"limit": len(videos),
"total": len(videos),
"list": videos
}
return result
def detailContent(self,array):
id = array[0]
data = self.fetch(f'{self.base_url}/{id}').json()
zhubo = data['zhubo']
playUrls = '#'.join([f"{vod['title']}${vod['address']}" for vod in zhubo])
vod = [{
"vod_play_from": '书生玩剣ⁱ·*₁'',
"vod_play_url": playUrls,
"vod_content": 'https://github.com/su147456888444',
}]
result = {"list": vod}
return result
def playerContent(self,flag,id,vipFlags):
result = {
'parse': 0,
'url': id
}
return result
def getName(self):
return '色播聚合'
def homeVideoContent(self):
pass
def isVideoFormat(self,url):
pass
def manualVideoCheck(self):
pass
def searchContent(self,key,quick):
pass
def destroy(self):
pass
def localProxy(self, param):
pass
+18
View File
@@ -0,0 +1,18 @@
var rule = {
title:'ss直播',
host:'http://api.hclyz.com:81',
homeUrl:'/mf/yuncaidan.txt',
url:'/mf/fyclass',
class_name:'all',
class_url:'json.txt',
headers:{
'User-Agent':'MOBILE_UA',
},
timeout:5000,
limit:200,
play_parse:true,
lazy:'',
一级:'json:pingtai;title;xinimg;Number;address',
二级:'js:var d=[];var jo=JSON.parse(request(input)).zhubo;VOD={};for(var i=0;i<jo.length;i++){d.push({title:jo[i].title,url:jo[i].address})}VOD.vod_play_from="播放源";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");setResult(d);',
搜索:'*',
}
+18
View File
@@ -0,0 +1,18 @@
var rule = {
title:'ss直播',
host:'http://api.vipmisss.com:81',
homeUrl:'/mf/yuncaidan.txt',
url:'/mf/fyclass',
class_name:'all',
class_url:'json.txt',
headers:{
'User-Agent':'MOBILE_UA',
},
timeout:5000,
limit:200,
play_parse:true,
lazy:'',
一级:'json:pingtai;title;xinimg;Number;address',
二级:'js:var d=[];var jo=JSON.parse(request(input)).zhubo;VOD={};for(var i=0;i<jo.length;i++){d.push({title:jo[i].title,url:jo[i].address})}VOD.vod_play_from="播放源";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");setResult(d);',
搜索:'*',
}
+35
View File
@@ -0,0 +1,35 @@
{
"t值-c": "https://www.kkys20.com/渲染目标:/name=\"t\".*?value=\"(.*?)\"/请求头(Cookie-c)[工具:渲染#url]",
"域名-c": "https://www.kkys20.com",
"图片前缀-c": "<script src=\"&&\"[包含:rdul][工具:源码#'截取'∬\"截取\"]",
"主页url": "{{域名-c}}/",
"分类url": "{{域名-c}}/show/{cateId}-----{by}-{catePg}.html;;ad0m0s0xn",
"分类": "电影$1#电视剧$2#综艺$4#动漫$3#短剧$6",
"排序": "综合$1#最新$2#最热$3#评分$4",
"数组": "<div class=\"module-item\">&&</a>",
"标题": "<div class=\"v-item-title\">&&</div>",
"副标题": "<span>&&</span>[不含:可可]",
"图片": "{{图片前缀-c}}+data-original=\"&&\"[不含:http]",
"链接": "href=\"&&\"",
"影片年代": "class=\"detail-tags-item\">&&</a>",
"影片地区": "class=\"detail-tags-item\">&&</a>[含序号:2]",
"影片类型": "class=\"detail-tags-item\">&&</a>[含序号:3]",
"导演": "导演*</div>&&</div>",
"主演": "演员*</div>&&</div>",
"简介": "detail-desc\">&&</div>",
"线路数组": "<span class=\"source-item-label&&/span>[不含:4K(]",
"线路标题": ">&&<",
"播放数组": "<div class=\"episode-list&&</div>",
"播放列表": "&&分割(<a)",
"播放标题": ">&&<",
"播放链接": "href=\"&&\"",
"跳转播放链接": "const playSource = {*src*\"&&\"||TMDPPPP = '&&'[工具:解aes-Isu7fOAvI6!&IKpAbVdhf&^F]",
"过滤词": "baidu.com",
"搜索url": "{{域名-c}}/search?t={{t值-c}}&k={wd}",
"搜索二次截取": "<div class=\"search-result-list&&<div class=\"pagenation-box",
"搜索数组": "<a&&</a>",
"搜索标题": "title=\"&&\"",
"搜索副标题": "<div class=\"tags\">&&</div>",
"搜索图片": "{{图片前缀-c}}+data-original=\"&&\"[不含:http]",
"搜索链接": "href=\"&&\""
}
+32
View File
@@ -0,0 +1,32 @@
var rule = {
title:'好趣网',
编码:'GBK',//不填就默认utf-8
搜索编码:'GBK',//不填则不编码,默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
host:'http://tv.haoqu99.com',
url: '/fyclass',
searchUrl: '/e/sch/index.php?page=fypage&keyboard=**&sear=1',
searchable:2,//是否启用全局搜索,
quickSearch:0,//是否启用快速搜索,
headers:{
'User-Agent': 'MOBILE_UA'
},
timeout:5000,//网站的全局请求超时,默认是3000毫秒
class_name:'央视&卫视频道&港澳台频道&国外电视台&广东&湖南&江苏&安徽&浙江&北京&辽宁&江西&山东&黑龙江&上海&云南&四川&河南&湖北&福建&重庆&河北&吉林&广西&山西&陕西&宁夏&海南&甘肃&新疆&内蒙古&天津&贵州&青海&西藏',
class_url:'1&2&4&5&3/guangdong&3/hunan&3/jiangsu&3/anhui&3/zhejiang&3/beijing&3/liaoning&3/jiangxi&3/shandong&3/heilongjiang&3/shanghai&3/yunnan&3/sichuan&3/henan&3/hubei&3/fujian&3/zhongqing&3/hebei&3/jilin&3/guangxi&3/shan-xi&3/shanxi&3/ningxia&3/hainan&3/gansu&3/xinjiang&3/neimenggu&3/tianjin&3/guizhou&3/qinghai&3/xizang',
play_parse:true,
// lazy:'js:input=input.replace("tv", "m")',
lazy:'js:var url=jsp.pdfh(request(input),"body&&script&&Html").split("$")[1];input=url',
limit:6,
推荐: '.p-list-sya&&li;.s&&Text;img&&src;;a&&href',
一级: '.bx-sya&&li;span&&Text;img&&src;;a&&href',
// 二级: '*',
二级: {
"title": "strong.t&&Text;.v-top&&a:eq(1)&&Text",
"img": ".drop-panel:eq(1)&&img&&src",
"desc": ";;;;",
"content": ".drop-panel:eq(1)&&p:eq(2)&&Text",
"tabs": "js:TABS=['播放源']",
'lists': 'js:log(TABS);let d=[];pd=jsp.pd;pdfh=jsp.pdfh;pdfa=jsp.pdfa;if(typeof play_url==="undefined"){var play_url=""}function getLists(html){let src=pdfa(html,".tab-list-syb&&li");let list=[];src.forEach(function(it){let title=pdfh(it,".s&&Text");let url="http://m.haoqu99.com/e/extend/tv.php?id="+pd(it,".tab-item&&data-player");list.push({title:title,url:url})});return{list:list,}}var data=getLists(html);var list=data.list;list=list.map(function(item){return(item.title+"$"+item.url)});log("list------------->"+list);LISTS=[list];'
},
搜索: 'div.list-box.J-medal&&li;a&&Text;;;a&&href',
}
+131
View File
@@ -0,0 +1,131 @@
//写法思路来海阔视界,xpath筛选。本人是海阔用户,所以搬了海阔的jsoup写法过来。2022年9月17日
//jsoup规则写法请查阅海阔视界或者海阔影视相关教程。不支持js写法
//本文档为完整模板,请不要去无中生有添加多余的键值参数。
{
//规则名
"title": "电影港",
//作者
"author": "香雅情",
//请求头UA,键名$键值,每一组用#分开,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
//多个请求头参数写法示例,"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok",每一组用#分开。
//习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA
"Headers":"PC_UA",
//网页编码格式默认UTF-8编码,UTF-8GBKGB2312
"Coding_format":"gb2312",
//图片是否需要代理
"PicNeedProxy":"0",
//是否开启获取首页数据,0关闭,1开启
"homeContent":"0",
//分类链接起始页码,禁止负数和含小数点。
"firstpage": "1",
//分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接]
"class_url": "https://www.dygang.tv/{cateId}/index_{catePg}.htm[firstPage=https://www.dygang.cc/{cateId}/index.htm]",
//分类名,分类1&分类2&分类3
"class_name": "最新电影&经典高清&国配电影&经典港片&国剧&日韩剧&美剧&综艺&动漫&纪录片&高清原盘&4K高清区&3D电影&电影专题",
//分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1
"class_value": "ys&bd&gy&gp&dsj&dsj1&yx&zy&dmq&jilupian&1080p&4K&3d&dyzt",
//筛选数据,json格式,参考xpath的筛选写法
"filterdata":{},
//分类页面截取数据模式,0为json,其它数字为普通网页。
"cat_mode": "1",
//分类列表数组定位,最多支持3层,能力有限,不是所有页面都能支持
"cat_arr_rule": "body&&table[width=388]",
//分类片单信息jsoup与xb截取写法切换,只作用于html网页,1为jsoup写法(默认)0为xb写法
"cat_is_jsoup":"1",
//分类片单标题
"cat_title": "img&&alt",
//分类片单链接
"cat_url": "a&&href",
//分类片单图片,支持自定义图片链接
"cat_pic": "img&&src",
//分类片单副标题
"cat_subtitle":"[align=center]&&Text",
//分类片单链接补前缀
"cat_prefix": "https://www.dygang.tv",
//分类片单链接补后缀
"cat_suffix": "",
//搜索请求头参数,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
//多个请求头参数写法示例,键名$键值,每一组用#分开。"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok"。
"SHeaders":"User-Agent$PC_UA#Content-Type$charset=gb2312",
//搜索链接,搜索关键字用{wd}表示,post请求的最后面加;post
//POST链接示例 http://www.lezhutv.com/index.php?m=vod-search;post
"search_url": "https://www.dygang.tv/e/search/index123.php;post",
//POST搜索body,填写搜索关键字的键值,一般常见的是searchword和wd,不是POST搜索的可留空或删除。
"sea_PtBody":"keyboard={wd}&submit=搜+索&show=title,smalltext&tempid=1&tbname=article",
//搜索截取模式,0为json搜索,只支持列表在list数组里的,其它数字为网页截取。
"search_mode": "1",
//搜索列表数组定位,不填默认内置list,最多支持3层,能力有限,不是所有页面都能支持。
"sea_arr_rule": "body&&table[width=388]",
//搜索片单信息jsoup与xb截取写法切换,只作用于html网页,1为jsoup写法(默认)0为xb写法
"sea_is_jsoup":"1",
//搜索片单图片,支持自定义图片链接
"sea_pic": "img&&src",
//搜索片单标题
"sea_title": "img&&alt",
//搜索片单链接
"sea_url": "a&&href",
//搜索片单副标题
"sea_subtitle":"",
//搜索片单链接补前缀
"search_prefix": "https://www.dygang.tv",
//搜索片单链接补后缀,这个一般json搜索的需要
"search_suffix": "",
//片单链接是否直接播放,0否,1分类片单链接直接播放,2详情选集链接直接播放。
//设置成直接播放后,后面3个参数请注意该留空的请务必留空。
"force_play": "0",
//直接播放链接补前缀
"play_prefix": "",
//直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接
"play_suffix": "",
//直接播放链接设置请求头,只对直链视频有效,每一组用#分开
"play_header": "",
//项目信息jsoup与xb截取写法切换,1为jsoup写法(默认),0为xb写法
"proj_is_jsoup":"0",
//类型数据,截取前缀&&截取后缀
"proj_cate": "",
//年代数据,截取前缀&&截取后缀
"proj_year": "",
//地区数据,截取前缀&&截取后缀
"proj_area": "",
//演员数据,截取前缀&&截取后缀
"proj_actor": "演  员&&</",
//简介内容,截取前缀&&截取后缀
"proj_plot": "简  介&&</",
//线路截取区域,如果不需要请把tab_title或tab_arr_rule置空或者全部不要填。
//线路截取数组
"tab_arr_rule": "#dede_content",
//线路标题,截取前缀&&截取后缀
"tab_title": "strong&&Text",
//列表数组截取,必须
"list_arr_rule": "#dede_content",
//集数数组截取,必须
"epi_arr_rule": "table&&[href*=magnet]",
//集数标题,截取前缀&&截取后缀
"epi_title": "a&&Text",
//集数链接,截取前缀&&截取后缀
"epi_url": "a&&href",
//选集是否反转显示
"epi_reverse": "0",
//集数链接补前缀
"epiurl_prefix": "",
//集数链接补后缀
"epiurl_suffix": "",
//下面几个参数请勿乱用。否则可能会有副作用。
//分析网页源码中有<script type="text/javascript">var player_aaaa={"flag":"play","encrypt这种源码的链接解析
//如果网页源码里没有这种请设置为0
"Anal_MacPlayer":"0",
//是否开启手动嗅探,只对网页嗅探有效,0否,1是
"ManualSniffer":"0",
//手动嗅探视频链接关键字,每个用#隔开
"VideoFormat":".mp4#.m3u8#.flv",
//手动嗅探视频链接过滤关键词,每个用#隔开
"VideoFilter":".html#=http"
}
+50
View File
@@ -0,0 +1,50 @@
var rule = {
title:'相声随身听',
host:'https://www.xsmp3.com',
// url:'/fyclass/fypage.html',
url:'/fyfilter/fypage.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.cateId}}',
filter:{
"gdg":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"gdg"},{"n":"郭德纲单口","v":"gdg-dk"},{"n":"郭德纲于谦","v":"gdg-yq"},{"n":"郭德纲张文顺","v":"gdg-zws"},{"n":"郭德纲李菁","v":"gdg-lj"},{"n":"郭德纲徐德亮","v":"gdg-xdl"},{"n":"郭德纲何云伟","v":"gdg-hyw"},{"n":"郭德纲曹云金","v":"gdg-cyj"},{"n":"郭德纲王玥波","v":"gdg-wyb"},{"n":"郭德纲王文林","v":"gdg-wwl"}]}],
"dys":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"dys"},{"n":"德云社精选","v":"dys-jx"},{"n":"高峰相声全集","v":"dys-gf"},{"n":"岳云鹏相声全集","v":"dys-yyp"},{"n":"郭麒麟相声全集","v":"dys-gql"},{"n":"张鹤伦相声全集","v":"dys-zhl"},{"n":"孟鹤堂相声全集","v":"dys-mht"},{"n":"徐德亮王文林","v":"xdl-wwl"},{"n":"何云伟李菁","v":"hyw-lj"},{"n":"曹云金刘云天","v":"cyj-lyt"}]}]
},
filter_def:{
gdg:{cateId:'gdg'},
dys:{cateId:'dys'},
xsxsl:{cateId:'xsxsl'},
qqs:{cateId:'qqs'},
msl:{cateId:'msl'},
hbl:{cateId:'hbl'},
lbr:{cateId:'lbr'},
mj:{cateId:'mj'},
hyw:{cateId:'hyw'},
ssj:{cateId:'ssj'},
jk:{cateId:'jk'},
mzm:{cateId:'mzm'},
yzh:{cateId:'yzh'},
swm:{cateId:'swm'}
},
searchUrl:'/so/**_fypage.html',
searchable:2,
quickSearch:0,
headers:{
'User-Agent':'MOBILE_UA'
},
timeout:5000,
class_parse: '.list-navi&&li;a&&Text;a&&href;/(\\w+).html',
play_parse:true,
lazy:'js:input={jx:0,url:input,parse:0}',
limit:6,
推荐:'*',
一级:'#post_list_box&&li;h2&&Text;img&&src;.f_r&&span:eq(3)&&Text;a&&href',
二级:{
title:'h1&&Text;.view&&Text',
img:'img&&src',
desc:'.view&&Text;;;.lmname&&Text;.author&&Text',
content:'.jAsrPyf4&&p:eq(1)&&Text',
// tabs:'js:TABS=["相声随身听"]',
lists:'js:var VideoListJson;VideoListJson=eval(html.split("audio: ")[1].split("}\)")[0]);let list1=[];VideoListJson.forEach(function(it){list1.push(it.name.strip()+"$https:"+it.url)});LISTS=[list1];',
},
搜索: '*',
}
+101
View File
@@ -0,0 +1,101 @@
var rule = {
title:'磁力熊[磁]',
host:'https://www.cilixiong.org',
homeUrl:'/top250/index.html',
// url: '/fyclass/index_(fypage-1).html',
url: '/fyclassfyfilter-(fypage-1).html',
filter_url:'-{{fl.class or "0"}}-{{fl.area or "0"}}',
filter:{
"1":[{"key":"class","name":"类型","value":[{"n":"全部","v":"0"},{"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"},{"n":"纪录片","v":"26"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"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"}]}],
"2":[{"key":"class","name":"类型","value":[{"n":"全部","v":"0"},{"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"},{"n":"纪录片","v":"26"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"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"}]}]
},
searchUrl: '/e/search/index.php#classid=1,2&show=title&tempid=1&keyboard=**;post',
searchable:2,
quickSearch:0,
filterable:1,
headers:{
'User-Agent': 'MOBILE_UA'
},
timeout:5000,
class_name:'电影&剧集&豆瓣电影Top250&IMDB Top250&高分悬疑片&高分喜剧片&高分传记片&高分爱情片&高分犯罪片&高分恐怖片&高分冒险片&高分武侠片&高分奇幻片&高分历史片&高分战争片&高分歌舞片&高分灾难片&高分情色片&高分西部片&高分音乐片&高分科幻片&高分动作片&高分动画片&高分纪录片&冷门佳片',
class_url:'1&2&/top250/&/s/imdbtop250/&/s/suspense/&/s/comedy/&/s/biopic/&/s/romance/&/s/crime/&/s/horror/&/s/adventure/&/s/martial/&/s/fantasy/&/s/history/&/s/war/&/s/musical/&/s/disaster/&/s/erotic/&/s/west/&/s/music/&/s/sci-fi/&s/action/&/s/animation/&/s/documentary/&/s/unpopular/',
play_parse:true,
lazy:'',
limit:6,
推荐: `js:
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
var d = [];
var html = request(input);
var list = pdfa(html, 'body&&.col');
list.forEach(it => {
d.push({
title: pdfh(it, 'h2&&Text'),
desc: pdfh(it, '.me-auto&&Text') + '分 / ' + pdfh(it, '.small&&Text'),
// pic_url: pd(it, '.card-img&&style'), // 只有 影视TV&爱佬版 有图片
pic_url: /!'/.test(pd(it, '.card-img&&style'))?pd(it, '.card-img&&style'):pd(it, '.card-img&&style').replaceAll("'",""), // 兼容 影视TV&爱佬版 以外的其它壳子
url: pd(it, 'a&&href')
});
})
setResult(d);
`,
一级: `js:
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
var d = [];
if (MY_CATE !== '1' && MY_CATE !== '2') {
let turl = (MY_PAGE === 1)? 'index' : 'index_'+ MY_PAGE;
input = HOST + MY_CATE + turl + '.html';
}
var html = request(input);
var list = pdfa(html, 'body&&.col');
list.forEach(it => {
d.push({
title: pdfh(it, 'h2&&Text'),
desc: pdfh(it, '.me-auto&&Text') + '分 / ' + pdfh(it, '.small&&Text'),
// pic_url: pdfh(it, '.card-img&&style'), // 只有 影视TV&爱佬版 有图片
pic_url: /!'/.test(pd(it, '.card-img&&style'))?pd(it, '.card-img&&style'):pd(it, '.card-img&&style').replaceAll("'",""), // 兼容 影视TV&爱佬版 以外的其它壳子
url: pd(it, 'a&&href')
});
})
setResult(d);
`,
二级:{
title:'h1&&Text;p.mb-2:eq(4)&&Text',
desc:'p.mb-2:eq(1)&&Text;;;p.mb-2:eq(7)&&Text;p.mb-2:eq(5)&&Text',
img:'.rounded-2&&src',
content:'.mv_card_box&&Text',
// tabs:'js:TABS = ["道长磁力"]',
// lists:'.mv_down:eq(#id)&&.border-bottom',
// list_text:'a&&Text',
// list_url:'a&&href',
tabs:'js:TABS = ["道长磁力","道长在线预览"]',
lists:`js:
log(TABS);
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
LISTS = [];
var dd=[];
TABS.forEach(function(tab) {
if (/道长磁力/.test(tab)) {
var d = pdfa(html, '.mv_down&&.border-bottom');
d = d.map(function(it) {
var title = pdfh(it, 'a&&Text');
log('title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
var burl = pd(it, 'a&&href');
log('burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
return title + '$' + burl
});
LISTS.push(d)
} else if (/道长在线预览/.test(tab)) {
var d = pd(html, 'iframe&&src');
if (d) {
d=['第一集在线播放预览$' + d]
} else {
d=['没有预览不要点$http://www.sharenice.net/douyin/23852']
}
LISTS.push(d)
}
});
`,
},
搜索:'.col;h2&&Text;.card-img&&style;.me-auto&&Text;a&&href',
}
File diff suppressed because one or more lines are too long
+23
View File
@@ -0,0 +1,23 @@
var rule = {
title:'网易公版影像',
host:'https://active.163.com',
homeUrl:'/service/form/v1/9347/view/1618.jsonp?param_entry_kinds=his&page=1&pageSize=20',
url:'/service/form/v1/9347/view/1618.jsonp?param_entry_kinds=fyclass&page=fypage&pageSize=20',
class_name:'电影&纪录片&动画片&珍贵史料',
class_url:'movie&doc&ani&his',
searchUrl:'/service/form/v1/9347/view/1619.jsonp?_charset=UTF-8&_decode=UTF-8&param_title=**&page=fypage&pageSize=6',
searchable:2,
quickSearch:0,
headers:{
'User-Agent':'MOBILE_UA',
},
timeout:5000,
limit:6,
play_parse:true,
lazy:'js:let vid = input.split("/view/")[1];var playJsonUrl="https://so.v.163.com/mobile/getBatchOnlineVideo.do?vidstr=";var reqUrl=playJsonUrl+vid;var reqJson=JSON.parse(request(reqUrl)).data.video_list[0];input={jx:0,url:reqJson.mp4SdUrl,parse:0}',
// lazy:'',
推荐:'*',
一级:'json:list;title;cover_pic;meida_type;vid',
二级:'*',
搜索:'*',
}
+28
View File
@@ -0,0 +1,28 @@
var rule = {
title:'蜻蜓FM',
host:'http://www.qingting.fm',
url:'/radiopage/fyclass/fypage',
searchUrl:'',
searchable:0,
quickSearch:0,
class_name:'广东&浙江&北京&天津&河北&上海&山西&内蒙古&辽宁&吉林&黑龙江&江苏&安徽&福建&江西&山东&河南&湖北&湖南&广西&海南&重庆&四川&贵州&云南&陕西&甘肃&宁夏&新疆&西藏&青海&资讯&音乐&交通&经济&文艺&都市&体育&双语&综合&生活&旅游&曲艺&方言',
class_url:'217&99&3&5&7&83&19&31&44&59&69&85&111&129&139&151&169&187&202&239&254&257&259&281&291&316&327&351&357&308&342&433&442&429&439&432&441&430&431&440&438&435&436&434',
headers:{
'User-Agent':'PC_UA'
},
timeout:5000,
play_parse:true,
play_json:0,
lazy:'js:input=input.replace("www.qingting.fm/radios/","lhttp.qingting.fm/live/")+"/64k.mp3"',
limit:6,
double:false,
//推荐:'*',
一级:'.contentSec&&.radio;span&&Text;img&&src;.descRadio&&Text;a&&href',
二级:'*',
搜索:'',
//是否启用辅助嗅探: 1,0
sniffer:1,
// 辅助嗅探规则
isVideo:"http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)",
}
+11
View File
@@ -0,0 +1,11 @@
[
{"name":"电影","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/电影.txt"},
{"name":"MTV","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/16万MV.txt"},
{"name":"歌曲","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/歌曲.txt"},
{"name":"电台","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/电台.txt"},
{"name":"午夜频道","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/午夜频道.txt"},
{"name":"欧美","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/欧美.txt"},
{"name":"stream.ads.ottera.tv","url":"https://py.nxog.eu.org/https://raw.githubusercontent.com/zheng197600/tvbox/main/tv/stream.ads.ottera.tv.txt"}
]
+112
View File
@@ -0,0 +1,112 @@
var rule = {
title: '金牌影院',
host: 'https://m.sunnafh.com',
url: '/api/mw-movie/anonymous/video/list?pageNum=fypage&pageSize=30&sort=1&sortBy=1&type1=fyclass',
searchUrl: '/api/mw-movie/anonymous/video/searchByWordPageable?keyword=**&pageNum=fypage&pageSize=12&type=false',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
},
searchable: 2,
quickSearch: 0,
filterable: 0,
class_name: '电影&电视剧&综艺&动漫',
class_url: '1&2&3&4',
limit: 6,
double: false,
play_parse:true,
lazy:`js:
let pid = input.split('/')[5];
let nid = input.split('/')[7];
const t = new Date().getTime();
eval(getCryptoJS);
let signkey = 'clientType=1&id='+pid+'&nid='+nid+'&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
const key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
let json_data = JSON.parse(request('https://m.sunnafh.com/api/mw-movie/anonymous/v2/video/episode/url?clientType=1&id='+pid+'&nid='+nid,{headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'deviceid': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
'sign': key,
't': t
}}));
let link = json_data.data.list[0].url;
if(/\\.(m3u8|mp4)/.test(link)){input={jx:0,parse:0,url:link}}else{input={jx:0,parse:1,url:link}}
`,
一级: `js:
let d = [];
let url = '';
let t = new Date().getTime();
eval(getCryptoJS);
let signkey = 'pageNum='+MY_PAGE+'&pageSize=30&sort=1&sortBy=1&type1='+MY_CATE+'&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
let key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
let list = JSON.parse(request(input,{headers:{
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'deviceId': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
'sign': key,
't': t
}})).data.list;
list.forEach((it)=>{
d.push({
title: it.vodName,
desc:it.vodRemarks,
img:it.vodPic,
url:'http'+it.vodId
})
});
setResult(d);
`,
二级: `js:
let kid=input.split('http')[1];
let t = new Date().getTime();
eval(getCryptoJS);
let signkey = 'id='+kid+'&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
let key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
let kjson = JSON.parse(request('https://m.sunnafh.com/api/mw-movie/anonymous/video/detail?id='+kid,{headers:{
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'deviceId': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
'sign': key,
't': t
}})).data;
let kurls = kjson.episodeList.map(function(it) => {
return it.name + "$" + "https://m.sunnafh.com/vod/play/"+kid+"/sid/"+it.nid
}).join('#');
VOD = {
vod_id: kid,
vod_name: kjson.vodName,
vod_pic: kjson.vodPic,
type_name: kjson.vodClass,
vod_remarks: kjson.vodRemarks,
vod_year: kjson.vodYear,
vod_area: kjson.vodArea,
vod_lang: kjson.vodLang,
vod_director: kjson.vodDirector,
vod_actor: kjson.vodActor,
vod_content: kjson.vodContent,
vod_play_from: '金牌线路',
vod_play_url: kurls
}`,
搜索: `js:
let t = new Date().getTime();
eval(getCryptoJS);
let pg = MY_PAGE;
let signkey = 'keyword='+KEY+'&pageNum='+pg+'&pageSize=12&type=false&key=cb808529bae6b6be45ecfab29a4889bc&t='+t;
let key = CryptoJS.SHA1(CryptoJS.MD5(signkey).toString()).toString();
let html = JSON.parse(request(input,{headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'deviceid': '63ffad23-a598-4f96-85d7-7bf5f3e4a0a2',
'sign': key,
't': t
}}));
let data = html.data.list;
let d = [];
data.forEach(it=>{
d.push({
title: it.vodName,
desc:it.vodVersion,
img:it.vodPic,
url:'http'+it.vodId
})
});
setResult(d)
`,
}