Sync all projects
This commit is contained in:
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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',//第三个是描述,一般显示更新或者完结
|
||||
}
|
||||
@@ -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
@@ -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, ""]
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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);',
|
||||
搜索:'*',
|
||||
}
|
||||
@@ -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);',
|
||||
搜索:'*',
|
||||
}
|
||||
@@ -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=\"&&\""
|
||||
}
|
||||
@@ -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',
|
||||
}
|
||||
@@ -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-8,GBK,GB2312
|
||||
"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"
|
||||
}
|
||||
@@ -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];',
|
||||
},
|
||||
搜索: '*',
|
||||
}
|
||||
@@ -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
@@ -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¶m_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',
|
||||
二级:'*',
|
||||
搜索:'*',
|
||||
}
|
||||
@@ -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)",
|
||||
}
|
||||
@@ -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"}
|
||||
|
||||
|
||||
]
|
||||
@@ -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)
|
||||
`,
|
||||
}
|
||||
Reference in New Issue
Block a user