1
This commit is contained in:
parent
bfab4a0246
commit
001eb27a9d
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,703 +0,0 @@
|
|||||||
{
|
|
||||||
|
|
||||||
"classes": [{
|
|
||||||
"type_name": "演唱会筛选",
|
|
||||||
"type_id": "演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "粤语",
|
|
||||||
"type_id": "粤语歌曲超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "热榜",
|
|
||||||
"type_id": "2022年热们歌曲超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "抖音神曲",
|
|
||||||
"type_id": "抖音神曲超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "经典老歌",
|
|
||||||
"type_id": "经典老歌超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "DJ",
|
|
||||||
"type_id": "DJ歌曲超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "网红翻唱",
|
|
||||||
"type_id": "网红翻唱歌曲超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "韩国女团",
|
|
||||||
"type_id": "韩国女团演唱会超清"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
],
|
|
||||||
|
|
||||||
"cookie": "innersign=0; buvid3=2E536ADC-CD6D-46AB-A9FF-904395151EE369713infoc; b_nut=1669016569; i-wanna-go-back=-1; b_ut=7; _uuid=761F7F106-C575-884D-6C10A-92BC10A10D10FBC68934infoc; buvid4=5B25B999-AE15-E09A-A0CC-3661981B71BF70255-122112115-JOyWSaNZfI2kZmT1KYmcQA%3D%3D; fingerprint=6d9ef93c89a567d22b6a9c4104e6cc50; buvid_fp_plain=undefined; buvid_fp=6d9ef93c89a567d22b6a9c4104e6cc50; SESSDATA=2d6f63c8%2C1684568607%2C19eb6%2Ab1; bili_jct=21d538b01566c26afc81ff68c2ac7dca; DedeUserID=3493083203242585; DedeUserID__ckMd5=7b86f3894ed7f8c0; sid=ng0uyvaz; b_lsid=97FB69A2_1869DE8E2C5; bg_view_44176=720227",
|
|
||||||
|
|
||||||
"filter": {
|
|
||||||
"演唱会超清": [{
|
|
||||||
"key": "order",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [{
|
|
||||||
"n": "综合排序",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "最多点击",
|
|
||||||
"v": "click"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "最新发布",
|
|
||||||
"v": "pubdate"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "最多弹幕",
|
|
||||||
"v": "dm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "最多收藏",
|
|
||||||
"v": "stow"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "A阿杜",
|
|
||||||
"v": "阿杜演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "A阿黛尔",
|
|
||||||
"v": "阿黛尔演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "BBeyond",
|
|
||||||
"v": "Beyond演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "BBy2",
|
|
||||||
"v": "By2演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "BBIGBANG",
|
|
||||||
"v": "BIGBANG演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "B布兰妮",
|
|
||||||
"v": "布兰妮演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "B坂井泉水",
|
|
||||||
"v": "坂井泉水演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C陈奕迅",
|
|
||||||
"v": "陈奕迅演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C蔡依林",
|
|
||||||
"v": "蔡依林演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C初音未来",
|
|
||||||
"v": "初音未来演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C蔡健雅",
|
|
||||||
"v": "蔡健雅演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C陈小春",
|
|
||||||
"v": "陈小春演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C草蜢",
|
|
||||||
"v": "草蜢演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C陈慧娴",
|
|
||||||
"v": "陈慧娴演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C崔健",
|
|
||||||
"v": "崔健演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "C仓木麻衣",
|
|
||||||
"v": "仓木麻衣演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D戴荃",
|
|
||||||
"v": "戴荃演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D动力火车",
|
|
||||||
"v": "动力火车演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D邓丽君",
|
|
||||||
"v": "邓丽君演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D丁当",
|
|
||||||
"v": "丁当演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D刀郎",
|
|
||||||
"v": "刀郎演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D邓紫棋",
|
|
||||||
"v": "邓紫棋演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D戴佩妮",
|
|
||||||
"v": "戴佩妮演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "D邓丽君",
|
|
||||||
"v": "邓丽君演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F飞儿乐队",
|
|
||||||
"v": "飞儿乐队演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F费玉清",
|
|
||||||
"v": "费玉清演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F费翔",
|
|
||||||
"v": "费翔演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F方大同",
|
|
||||||
"v": "方大同演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F房东的猫",
|
|
||||||
"v": "房东的猫演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F凤飞飞",
|
|
||||||
"v": "凤飞飞演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "F凤凰传奇",
|
|
||||||
"v": "凤凰传奇演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "G郭采洁",
|
|
||||||
"v": "郭采洁演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "G光良",
|
|
||||||
"v": "光良演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "G郭静",
|
|
||||||
"v": "郭静演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "G郭富城",
|
|
||||||
"v": "郭富城演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H胡彦斌",
|
|
||||||
"v": "胡彦斌演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H胡夏",
|
|
||||||
"v": "胡夏演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H韩红",
|
|
||||||
"v": "韩红演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H黄品源",
|
|
||||||
"v": "黄品源演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H黄小琥",
|
|
||||||
"v": "黄小琥演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H花儿乐队",
|
|
||||||
"v": "花儿乐队演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H黄家强",
|
|
||||||
"v": "黄家强演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "H后街男孩",
|
|
||||||
"v": "后街男孩演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "J经典老歌",
|
|
||||||
"v": "经典老歌演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "J贾斯丁比伯",
|
|
||||||
"v": "贾斯丁比伯演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "J金池",
|
|
||||||
"v": "金池演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "J金志文",
|
|
||||||
"v": "金志文演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "J焦迈奇",
|
|
||||||
"v": "焦迈奇演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "K筷子兄弟",
|
|
||||||
"v": "筷子兄弟演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李玟",
|
|
||||||
"v": "李玟演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L林忆莲",
|
|
||||||
"v": "林忆莲演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李克勤",
|
|
||||||
"v": "李克勤演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L刘宪华",
|
|
||||||
"v": "刘宪华演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李圣杰",
|
|
||||||
"v": "李圣杰演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L林宥嘉",
|
|
||||||
"v": "林宥嘉演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L梁静茹",
|
|
||||||
"v": "梁静茹演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李健",
|
|
||||||
"v": "李健演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L林俊杰",
|
|
||||||
"v": "林俊杰演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李玉刚",
|
|
||||||
"v": "李玉刚演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L林志炫",
|
|
||||||
"v": "林志炫演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李荣浩",
|
|
||||||
"v": "李荣浩演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李宇春",
|
|
||||||
"v": "李宇春演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L洛天依",
|
|
||||||
"v": "洛天依演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L林子祥",
|
|
||||||
"v": "林子祥演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L李宗盛",
|
|
||||||
"v": "李宗盛演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L黎明",
|
|
||||||
"v": "黎明演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L刘德华",
|
|
||||||
"v": "刘德华演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L罗大佑",
|
|
||||||
"v": "罗大佑演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L林肯公园",
|
|
||||||
"v": "林肯公园演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "LLadyGaga",
|
|
||||||
"v": "LadyGaga演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "L旅行团乐队",
|
|
||||||
"v": "旅行团乐队演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "M莫文蔚",
|
|
||||||
"v": "莫文蔚演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "M毛不易",
|
|
||||||
"v": "毛不易演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "M梅艳芳",
|
|
||||||
"v": "梅艳芳演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "M迈克尔杰克逊",
|
|
||||||
"v": "迈克尔杰克逊演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "N南拳妈妈",
|
|
||||||
"v": "南拳妈妈演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "P朴树",
|
|
||||||
"v": "朴树演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Q齐秦",
|
|
||||||
"v": "齐秦演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Q青鸟飞鱼",
|
|
||||||
"v": "青鸟飞鱼演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "R容祖儿",
|
|
||||||
"v": "容祖儿演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "R任贤齐",
|
|
||||||
"v": "任贤齐演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "S水木年华",
|
|
||||||
"v": "水木年华演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "S孙燕姿",
|
|
||||||
"v": "孙燕姿演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "S苏打绿",
|
|
||||||
"v": "苏打绿演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "SSHE",
|
|
||||||
"v": "SHE演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "S孙楠",
|
|
||||||
"v": "孙楠演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T陶喆",
|
|
||||||
"v": "陶喆演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T谭咏麟",
|
|
||||||
"v": "谭咏麟演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T田馥甄",
|
|
||||||
"v": "田馥甄演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T谭维维",
|
|
||||||
"v": "谭维维演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T逃跑计划",
|
|
||||||
"v": "逃跑计划演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T田震",
|
|
||||||
"v": "田震演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T谭晶",
|
|
||||||
"v": "谭晶演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T屠洪刚",
|
|
||||||
"v": "屠洪刚演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "T泰勒·斯威夫特",
|
|
||||||
"v": "泰勒·斯威夫特演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W王力宏",
|
|
||||||
"v": "王力宏演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W王杰",
|
|
||||||
"v": "王杰演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W吴克群",
|
|
||||||
"v": "吴克群演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W王心凌",
|
|
||||||
"v": "王心凌演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W王靖雯",
|
|
||||||
"v": "好声音王靖雯演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W汪峰",
|
|
||||||
"v": "汪峰演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W伍佰",
|
|
||||||
"v": "伍佰演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W王菲",
|
|
||||||
"v": "王菲演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W五月天",
|
|
||||||
"v": "五月天演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "W汪苏泷",
|
|
||||||
"v": "汪苏泷演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X徐佳莹",
|
|
||||||
"v": "徐佳莹演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X弦子",
|
|
||||||
"v": "弦子演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X萧亚轩",
|
|
||||||
"v": "萧亚轩演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X许巍",
|
|
||||||
"v": "许巍演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X薛之谦",
|
|
||||||
"v": "薛之谦演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X许嵩",
|
|
||||||
"v": "许嵩演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X小虎队",
|
|
||||||
"v": "小虎队演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X萧敬腾",
|
|
||||||
"v": "萧敬腾演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X谢霆锋",
|
|
||||||
"v": "谢霆锋演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X徐小凤",
|
|
||||||
"v": "徐小凤演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "X信乐队",
|
|
||||||
"v": "信乐队演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y夜愿乐队",
|
|
||||||
"v": "夜愿乐队演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y羽泉",
|
|
||||||
"v": "羽泉演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y郁可唯",
|
|
||||||
"v": "郁可唯演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y叶倩文",
|
|
||||||
"v": "叶倩文演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y杨坤",
|
|
||||||
"v": "杨坤演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y庾澄庆",
|
|
||||||
"v": "庾澄庆演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y尤长靖",
|
|
||||||
"v": "尤长靖演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y易烊千玺",
|
|
||||||
"v": "易烊千玺演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y袁娅维",
|
|
||||||
"v": "袁娅维演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y杨丞琳",
|
|
||||||
"v": "杨丞琳演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y杨千嬅",
|
|
||||||
"v": "杨千嬅演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Y杨宗纬",
|
|
||||||
"v": "杨宗纬演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z郑秀文",
|
|
||||||
"v": "郑秀文演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z周杰伦",
|
|
||||||
"v": "周杰伦演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张学友",
|
|
||||||
"v": "张学友演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张信哲",
|
|
||||||
"v": "张信哲演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张宇",
|
|
||||||
"v": "张宇演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z周华健",
|
|
||||||
"v": "周华健演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张韶涵",
|
|
||||||
"v": "张韶涵演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z周深",
|
|
||||||
"v": "周深演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z纵贯线",
|
|
||||||
"v": "纵贯线演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z赵雷",
|
|
||||||
"v": "赵雷演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z周传雄",
|
|
||||||
"v": "周传雄演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张国荣",
|
|
||||||
"v": "张国荣演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z周慧敏",
|
|
||||||
"v": "周慧敏演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张惠妹",
|
|
||||||
"v": "张惠妹演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z周笔畅",
|
|
||||||
"v": "周笔畅演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z郑中基",
|
|
||||||
"v": "郑中基演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张艺兴",
|
|
||||||
"v": "张艺兴演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张震岳",
|
|
||||||
"v": "张震岳演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z张雨生",
|
|
||||||
"v": "张雨生演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z郑智化",
|
|
||||||
"v": "郑智化演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z卓依婷",
|
|
||||||
"v": "卓依婷演唱会超清"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "Z中岛美雪",
|
|
||||||
"v": "中岛美雪演唱会超清"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,764 +0,0 @@
|
|||||||
|
|
||||||
{
|
|
||||||
"cookie": "innersign=0; buvid3=2E536ADC-CD6D-46AB-A9FF-904395151EE369713infoc; b_nut=1669016569; i-wanna-go-back=-1; b_ut=7; _uuid=761F7F106-C575-884D-6C10A-92BC10A10D10FBC68934infoc; buvid4=5B25B999-AE15-E09A-A0CC-3661981B71BF70255-122112115-JOyWSaNZfI2kZmT1KYmcQA%3D%3D; fingerprint=6d9ef93c89a567d22b6a9c4104e6cc50; buvid_fp_plain=undefined; buvid_fp=6d9ef93c89a567d22b6a9c4104e6cc50; SESSDATA=2d6f63c8%2C1684568607%2C19eb6%2Ab1; bili_jct=21d538b01566c26afc81ff68c2ac7dca; DedeUserID=3493083203242585; DedeUserID__ckMd5=7b86f3894ed7f8c0; sid=ng0uyvaz; b_lsid=97FB69A2_1869DE8E2C5; bg_view_44176=720227",
|
|
||||||
|
|
||||||
"classes": [{
|
|
||||||
"type_name": "1年级语文",
|
|
||||||
"type_id": "1年级语文"
|
|
||||||
}, {
|
|
||||||
"type_name": "1年级数学",
|
|
||||||
"type_id": "1年级数学"
|
|
||||||
}, {
|
|
||||||
"type_name": "1年级英语",
|
|
||||||
"type_id": "1年级英语"
|
|
||||||
}, {
|
|
||||||
"type_name": "2年级语文",
|
|
||||||
"type_id": "2年级语文"
|
|
||||||
}, {
|
|
||||||
"type_name": "2年级数学",
|
|
||||||
"type_id": "2年级数学"
|
|
||||||
}, {
|
|
||||||
"type_name": "2年级英语",
|
|
||||||
"type_id": "2年级英语"
|
|
||||||
}, {
|
|
||||||
"type_name": "3年级语文",
|
|
||||||
"type_id": "3年级语文"
|
|
||||||
}, {
|
|
||||||
"type_name": "3年级数学",
|
|
||||||
"type_id": "3年级数学"
|
|
||||||
}, {
|
|
||||||
"type_name": "3年级英语",
|
|
||||||
"type_id": "3年级英语"
|
|
||||||
}, {
|
|
||||||
"type_name": "4年级语文",
|
|
||||||
"type_id": "4年级语文"
|
|
||||||
}, {
|
|
||||||
"type_name": "4年级数学",
|
|
||||||
"type_id": "4年级数学"
|
|
||||||
}, {
|
|
||||||
"type_name": "4年级英语",
|
|
||||||
"type_id": "4年级英语"
|
|
||||||
}, {
|
|
||||||
"type_name": "5年级语文",
|
|
||||||
"type_id": "5年级语文"
|
|
||||||
}, {
|
|
||||||
"type_name": "5年级数学",
|
|
||||||
"type_id": "5年级数学"
|
|
||||||
}, {
|
|
||||||
"type_name": "5年级英语",
|
|
||||||
"type_id": "5年级英语"
|
|
||||||
}, {
|
|
||||||
"type_name": "6年级语文",
|
|
||||||
"type_id": "6年级语文"
|
|
||||||
}, {
|
|
||||||
"type_name": "6年级数学",
|
|
||||||
"type_id": "6年级数学"
|
|
||||||
}, {
|
|
||||||
"type_name": "6年级英语",
|
|
||||||
"type_id": "6年级英语"
|
|
||||||
}],
|
|
||||||
"filter": {
|
|
||||||
"1年级语文": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版1年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版1年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版1年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版1年级语文"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"1年级英语": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版1年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版1年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版1年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版1年级英语"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"1年级数学": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版1年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版1年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版1年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版1年级数学"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"2年级语文": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版2年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版2年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版2年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版2年级语文"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"2年级英语": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版2年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版2年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版2年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版2年级英语"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"2年级数学": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版2年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版2年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版2年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版2年级数学"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"3年级语文": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版3年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版3年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版3年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版3年级语文"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"3年级英语": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版3年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版3年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版3年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版3年级英语"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"3年级数学": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版3年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版3年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版3年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版3年级数学"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"4年级语文": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版4年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版4年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版4年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版4年级语文"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"4年级英语": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版4年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版4年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版4年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版4年级英语"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"4年级数学": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版4年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版4年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版4年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版4年级数学"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"5年级语文": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版5年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版5年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版5年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版5年级语文"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"5年级英语": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版5年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版5年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版5年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版5年级英语"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"5年级数学": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版5年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版5年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版5年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版5年级数学"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"6年级语文": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版6年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版6年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版6年级语文"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版6年级语文"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"6年级英语": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版6年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版6年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版6年级英语"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版6年级英语"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"6年级数学": [{
|
|
||||||
"key": "tid",
|
|
||||||
"name": "分类",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "沪教版",
|
|
||||||
"v": "沪教版6年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "人教版",
|
|
||||||
"v": "人教版6年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "北师大版",
|
|
||||||
"v": "北师大版6年级数学"
|
|
||||||
}, {
|
|
||||||
"n": "苏教版",
|
|
||||||
"v": "苏教版6年级数学"
|
|
||||||
}]
|
|
||||||
}, {
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
}, {
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
}, {
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
}, {
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
}, {
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}]
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,477 +0,0 @@
|
|||||||
{
|
|
||||||
"cookie": "innersign=0; buvid3=2E536ADC-CD6D-46AB-A9FF-904395151EE369713infoc; b_nut=1669016569; i-wanna-go-back=-1; b_ut=7; _uuid=761F7F106-C575-884D-6C10A-92BC10A10D10FBC68934infoc; buvid4=5B25B999-AE15-E09A-A0CC-3661981B71BF70255-122112115-JOyWSaNZfI2kZmT1KYmcQA%3D%3D; fingerprint=6d9ef93c89a567d22b6a9c4104e6cc50; buvid_fp_plain=undefined; buvid_fp=6d9ef93c89a567d22b6a9c4104e6cc50; SESSDATA=2d6f63c8%2C1684568607%2C19eb6%2Ab1; bili_jct=21d538b01566c26afc81ff68c2ac7dca; DedeUserID=3493083203242585; DedeUserID__ckMd5=7b86f3894ed7f8c0; sid=ng0uyvaz; b_lsid=97FB69A2_1869DE8E2C5; bg_view_44176=720227",
|
|
||||||
"classes": [
|
|
||||||
{
|
|
||||||
"type_name": "儿童早教",
|
|
||||||
"type_id": "儿童早教"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿童启蒙故事",
|
|
||||||
"type_id": "儿童启蒙故事"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿童英语启蒙",
|
|
||||||
"type_id": "儿童英语启蒙"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿童歌曲",
|
|
||||||
"type_id": "儿童歌曲"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿童绘画",
|
|
||||||
"type_id": "儿童绘画"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "睡前故事",
|
|
||||||
"type_id": "睡前故事"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"type_name": "儿童动画",
|
|
||||||
"type_id": "儿童动画"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿童音乐",
|
|
||||||
"type_id": "儿童音乐"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿童安全教育",
|
|
||||||
"type_id": "儿童安全教育"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "贝瓦儿歌",
|
|
||||||
"type_id": "贝瓦儿歌"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "悟空识字",
|
|
||||||
"type_id": "悟空识字"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "宝宝巴士",
|
|
||||||
"type_id": "宝宝巴士"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "儿歌多多",
|
|
||||||
"type_id": "儿歌多多"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type_name": "学而思",
|
|
||||||
"type_id": "学而思"
|
|
||||||
}],
|
|
||||||
|
|
||||||
|
|
||||||
"filter": {
|
|
||||||
|
|
||||||
"儿童早教": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
|
|
||||||
"儿童启蒙故事": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"儿童英语启蒙": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"儿童歌曲": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"儿童绘画": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"睡前故事": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"儿童动画": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"儿童音乐": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"儿童安全教育": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"贝瓦儿歌": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
"悟空识字": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"宝宝巴士": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"儿歌多多": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"学而思": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"key": "duration",
|
|
||||||
"name": "时长",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"n": "全部",
|
|
||||||
"v": "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "60分钟以上",
|
|
||||||
"v": "4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "30~60分钟",
|
|
||||||
"v": "3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10~30分钟",
|
|
||||||
"v": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"n": "10分钟以下",
|
|
||||||
"v": "1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
}}
|
|
File diff suppressed because it is too large
Load Diff
1258
0307fty/Hlsp/黑料.json
1258
0307fty/Hlsp/黑料.json
File diff suppressed because it is too large
Load Diff
@ -1,301 +0,0 @@
|
|||||||
{
|
|
||||||
"author": "春风",
|
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 10; LYA-AL00; HMSCore 6.4.0.312; GMSCore 20.15.16) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.4.300 Mobile Safari/537.36",
|
|
||||||
"homeUrl": "https://v.xiangdao.me",
|
|
||||||
"dcVipFlag": "true",
|
|
||||||
"dcPlayUrl": "true",
|
|
||||||
"cateManual": {
|
|
||||||
"电影": "1",
|
|
||||||
"连续剧": "2",
|
|
||||||
"动漫": "4",
|
|
||||||
"综艺": "3"
|
|
||||||
},
|
|
||||||
"homeVodNode": "//section/section[position()>2]//ul[@class='resize_list']/li/a",
|
|
||||||
"homeVodName": "/@title",
|
|
||||||
"homeVodId": "/@href",
|
|
||||||
"homeVodIdR": "/(S+).html",
|
|
||||||
"homeVodImg": "//@data-echo",
|
|
||||||
"homeVodImgR": "",
|
|
||||||
"homeVodMark": "/div/span[2]/span/text()",
|
|
||||||
"cateUrl": "https://v.xiangdao.me/index.php?m=vod-list-id-{cateId}-pg-{catePg}.html",
|
|
||||||
"cateVodNode": "//ul[@class='resize_list']/li/a",
|
|
||||||
"cateVodName": "/@title",
|
|
||||||
"cateVodId": "/@href",
|
|
||||||
"cateVodIdR": "/(S+).html",
|
|
||||||
"cateVodImg": "//@data-echo",
|
|
||||||
"cateVodImgR": "",
|
|
||||||
"cateVodMark": "/div/span[2]/span/em/text()",
|
|
||||||
"dtUrl": "https://v.xiangdao.me/{vid}.html",
|
|
||||||
"dtNode": "//body",
|
|
||||||
"dtName": "//section[@class='page-hd']/a/@title",
|
|
||||||
"dtNameR": "",
|
|
||||||
"dtImg": "//section[@class='page-hd']/a/img/@src",
|
|
||||||
"dtImgR": "",
|
|
||||||
"dtCate": "",
|
|
||||||
"dtCateR": "",
|
|
||||||
"dtYear": "//span[contains(text(), '年代')]/following-sibling::a/text()",
|
|
||||||
"dtYearR": "",
|
|
||||||
"dtArea": "",
|
|
||||||
"dtAreaR": "",
|
|
||||||
"dtDirector": "//span[contains(text(), '导演')]/following-sibling::a/text()",
|
|
||||||
"dtDirectorR": "",
|
|
||||||
"dtActor": "//span[contains(text(), '主演')]/following-sibling::a/text()",
|
|
||||||
"dtActorR": "",
|
|
||||||
"dtDesc": "//article[@class='detail-con']/p/text()",
|
|
||||||
"dtDescR": "",
|
|
||||||
"dtFromNode": "//div[@class='hd']/ul/li/a",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtFromNameR": "",
|
|
||||||
"dtUrlNode": "//div[@class='numList']/ul",
|
|
||||||
"dtUrlSubNode": "/li/a",
|
|
||||||
"dtUrlId": "@href",
|
|
||||||
"dtUrlIdR": "/(S+).html",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"dtUrlNameR": "",
|
|
||||||
"playUrl": "https://v.xiangdao.me/{playUrl}.html",
|
|
||||||
"playUa": "",
|
|
||||||
"searchUrl": "https://v.xiangdao.me/index.php?m=vod-search&wd={wd}",
|
|
||||||
"scVodNode": "//ul[@class='ulPicTxt clearfix']/li",
|
|
||||||
"scVodName": "//span[@class='sTit']/text()",
|
|
||||||
"scVodId": "//span[@class='sBtn']/a/@href",
|
|
||||||
"scVodIdR": "/(S+).html",
|
|
||||||
"scVodImg": "//img/@data-src",
|
|
||||||
"scVodMark": "//span[@class='sDes'][2]/text()",
|
|
||||||
"filter":{
|
|
||||||
"1": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"1"},
|
|
||||||
{"n":"动作片","v":"5"},
|
|
||||||
{"n":"喜剧片","v":"6"},
|
|
||||||
{"n":"爱情片","v":"7"},
|
|
||||||
{"n":"科幻片","v":"8"},
|
|
||||||
{"n":"恐怖片","v":"9"},
|
|
||||||
{"n":"剧情片","v":"10"},
|
|
||||||
{"n":"战争片","v":"11"},
|
|
||||||
{"n":"惊悚片","v":"16"},
|
|
||||||
{"n":"奇幻片","v":"17"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"2": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"2"},
|
|
||||||
{"n":"国产剧","v":"12"},
|
|
||||||
{"n":"港台剧","v":"13"},
|
|
||||||
{"n":"日韩剧","v":"14"},
|
|
||||||
{"n":"欧美剧","v":"15"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"3": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"3"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"4": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"4"},
|
|
||||||
{"n":"动漫剧","v":"18"},
|
|
||||||
{"n":"动漫片","v":"19"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,362 +0,0 @@
|
|||||||
{
|
|
||||||
"作者": "菜妮丝https://cainisi.cf",
|
|
||||||
"站名": "爱看影视",
|
|
||||||
"主页url": "https://ikan6.vip",
|
|
||||||
|
|
||||||
"分类": "电影&连续剧&综艺&动漫&日韩剧&美剧",
|
|
||||||
"分类值": "1&2&3&4&15&16",
|
|
||||||
|
|
||||||
"分类url": "https://ikan6.vip/vodshow/{cateId}-{area}-{by}-{class}-----{catePg}---{year}/",
|
|
||||||
|
|
||||||
"副标题": "text-right\">&&</span>",
|
|
||||||
|
|
||||||
"搜索模式": "0",
|
|
||||||
"搜索后缀": "/voddetail/",
|
|
||||||
|
|
||||||
"影片年代": "年份:&&</p>",
|
|
||||||
"影片地区": "地区:&&<span",
|
|
||||||
"影片类型": "分类:&&<span",
|
|
||||||
"导演": "导演:&&</p>",
|
|
||||||
"主演": "主演:&&</p>",
|
|
||||||
"简介": "display: none;\">&&</span>",
|
|
||||||
|
|
||||||
"线路数组": "<a href=\"#playlist&&</li>",
|
|
||||||
"线路标题": ">&&</a>",
|
|
||||||
|
|
||||||
"播放数组": "<div id=\"playlist&&</ul>",
|
|
||||||
|
|
||||||
"筛选":{
|
|
||||||
"1":[
|
|
||||||
{"key":"cateId","name":"类型","value":[
|
|
||||||
{"n":"全部","v":"1"},
|
|
||||||
{"n":"动作片","v":"6"},
|
|
||||||
{"n":"喜剧片","v":"7"},
|
|
||||||
{"n":"爱情片","v":"8"},
|
|
||||||
{"n":"科幻片","v":"9"},
|
|
||||||
{"n":"恐怖片","v":"10"},
|
|
||||||
{"n":"剧情片","v":"11"},
|
|
||||||
{"n":"战争片","v":"12"},
|
|
||||||
{"n":"灾难片","v":"24"}]},
|
|
||||||
|
|
||||||
{"key":"class","name":"剧情","value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"喜剧","v":"喜剧"},
|
|
||||||
{"n":"爱情","v":"爱情"},
|
|
||||||
{"n":"恐怖","v":"恐怖"},
|
|
||||||
{"n":"动作","v":"动作"},
|
|
||||||
{"n":"科幻","v":"科幻"},
|
|
||||||
{"n":"剧情","v":"剧情"},
|
|
||||||
{"n":"战争","v":"战争"},
|
|
||||||
{"n":"警匪","v":"警匪"},
|
|
||||||
{"n":"犯罪","v":"犯罪"},
|
|
||||||
{"n":"动画","v":"动画"},
|
|
||||||
{"n":"奇幻","v":"奇幻"},
|
|
||||||
{"n":"武侠","v":"武侠"},
|
|
||||||
{"n":"冒险","v":"冒险"},
|
|
||||||
{"n":"枪战","v":"枪战"},
|
|
||||||
{"n":"恐怖","v":"恐怖"},
|
|
||||||
{"n":"悬疑","v":"悬疑"},
|
|
||||||
{"n":"惊悚","v":"惊悚"},
|
|
||||||
{"n":"经典","v":"经典"},
|
|
||||||
{"n":"青春","v":"青春"},
|
|
||||||
{"n":"文艺","v":"文艺"},
|
|
||||||
{"n":"微电影","v":"微电影"},
|
|
||||||
{"n":"古装","v":"古装"},
|
|
||||||
{"n":"历史","v":"历史"},
|
|
||||||
{"n":"运动","v":"运动"},
|
|
||||||
{"n":"农村","v":"农村"},
|
|
||||||
{"n":"儿童","v":"儿童"},
|
|
||||||
{"n":"网络电影","v":"网络电影"}]},
|
|
||||||
|
|
||||||
{"key":"area","name":"地区","value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"大陆","v":"大陆"},
|
|
||||||
{"n":"香港","v":"香港"},
|
|
||||||
{"n":"台湾","v":"台湾"},
|
|
||||||
{"n":"美国","v":"美国"},
|
|
||||||
{"n":"法国","v":"法国"},
|
|
||||||
{"n":"英国","v":"英国"},
|
|
||||||
{"n":"日本","v":"日本"},
|
|
||||||
{"n":"韩国","v":"韩国"},
|
|
||||||
{"n":"德国","v":"德国"},
|
|
||||||
{"n":"泰国","v":"泰国"},
|
|
||||||
{"n":"印度","v":"印度"},
|
|
||||||
{"n":"意大利","v":"意大利"},
|
|
||||||
{"n":"西班牙","v":"西班牙"},
|
|
||||||
{"n":"加拿大","v":"加拿大"},
|
|
||||||
{"n":"其他","v":"其他"}]},
|
|
||||||
|
|
||||||
{"key":"year","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"},
|
|
||||||
{"n":"2008","v":"2008"},
|
|
||||||
{"n":"2007","v":"2007"},
|
|
||||||
{"n":"2006","v":"2006"},
|
|
||||||
{"n":"2005","v":"2005"},
|
|
||||||
{"n":"2004","v":"2004"},
|
|
||||||
{"n":"2003","v":"2003"},
|
|
||||||
{"n":"2002","v":"2002"},
|
|
||||||
{"n":"2001","v":"2001"},
|
|
||||||
{"n":"2000","v":"2000"}]},
|
|
||||||
|
|
||||||
{"key":"by","name":"排序","value":[
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}]}],
|
|
||||||
|
|
||||||
"2":[
|
|
||||||
{"key":"cateId","name":"类型","value":[
|
|
||||||
{"n":"全部","v":"2"},
|
|
||||||
{"n":"国产剧","v":"13"}]},
|
|
||||||
|
|
||||||
{"key":"class","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":"其他"}]},
|
|
||||||
|
|
||||||
{"key":"area","name":"地区","value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"内地","v":"内地"},
|
|
||||||
{"n":"韩国","v":"韩国"},
|
|
||||||
{"n":"香港","v":"香港"},
|
|
||||||
{"n":"台湾","v":"台湾"},
|
|
||||||
{"n":"日本","v":"日本"},
|
|
||||||
{"n":"美国","v":"美国"},
|
|
||||||
{"n":"泰国","v":"泰国"},
|
|
||||||
{"n":"英国","v":"英国"},
|
|
||||||
{"n":"新加坡","v":"新加坡"},
|
|
||||||
{"n":"其他","v":"其他"}]},
|
|
||||||
|
|
||||||
{"key":"year","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"},
|
|
||||||
{"n":"2008","v":"2008"},
|
|
||||||
{"n":"2007","v":"2007"},
|
|
||||||
{"n":"2006","v":"2006"},
|
|
||||||
{"n":"2005","v":"2005"},
|
|
||||||
{"n":"2004","v":"2004"},
|
|
||||||
{"n":"2003","v":"2003"},
|
|
||||||
{"n":"2002","v":"2002"},
|
|
||||||
{"n":"2001","v":"2001"},
|
|
||||||
{"n":"2000","v":"2000"}]},
|
|
||||||
|
|
||||||
{"key":"by","name":"排序","value":[
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}]}],
|
|
||||||
|
|
||||||
"3":[
|
|
||||||
{"key":"class","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":"求职"}]},
|
|
||||||
|
|
||||||
{"key":"area","name":"地区","value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"内地","v":"内地"},
|
|
||||||
{"n":"港台","v":"港台"},
|
|
||||||
{"n":"日韩","v":"日韩"},
|
|
||||||
{"n":"欧美","v":"欧美"}]},
|
|
||||||
|
|
||||||
{"key":"year","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"},
|
|
||||||
{"n":"2008","v":"2008"},
|
|
||||||
{"n":"2007","v":"2007"},
|
|
||||||
{"n":"2006","v":"2006"},
|
|
||||||
{"n":"2005","v":"2005"},
|
|
||||||
{"n":"2004","v":"2004"},
|
|
||||||
{"n":"2003","v":"2003"},
|
|
||||||
{"n":"2002","v":"2002"},
|
|
||||||
{"n":"2001","v":"2001"},
|
|
||||||
{"n":"2000","v":"2000"}]},
|
|
||||||
|
|
||||||
{"key":"by","name":"排序","value":[
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}]}],
|
|
||||||
|
|
||||||
"4":[
|
|
||||||
{"key":"class","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":"其他"}]},
|
|
||||||
|
|
||||||
{"key":"area","name":"地区","value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"国产","v":"国产"},
|
|
||||||
{"n":"日本","v":"日本"},
|
|
||||||
{"n":"欧美","v":"欧美"},
|
|
||||||
{"n":"其他","v":"其他"}]},
|
|
||||||
|
|
||||||
{"key":"year","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"},
|
|
||||||
{"n":"2008","v":"2008"},
|
|
||||||
{"n":"2007","v":"2007"},
|
|
||||||
{"n":"2006","v":"2006"},
|
|
||||||
{"n":"2005","v":"2005"},
|
|
||||||
{"n":"2004","v":"2004"},
|
|
||||||
{"n":"2003","v":"2003"},
|
|
||||||
{"n":"2002","v":"2002"},
|
|
||||||
{"n":"2001","v":"2001"},
|
|
||||||
{"n":"2000","v":"2000"}]},
|
|
||||||
|
|
||||||
{"key":"by","name":"排序","value":[
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}]}],
|
|
||||||
|
|
||||||
"15":[
|
|
||||||
{"key":"year","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"},
|
|
||||||
{"n":"2008","v":"2008"},
|
|
||||||
{"n":"2007","v":"2007"},
|
|
||||||
{"n":"2006","v":"2006"},
|
|
||||||
{"n":"2005","v":"2005"},
|
|
||||||
{"n":"2004","v":"2004"},
|
|
||||||
{"n":"2003","v":"2003"},
|
|
||||||
{"n":"2002","v":"2002"},
|
|
||||||
{"n":"2001","v":"2001"},
|
|
||||||
{"n":"2000","v":"2000"}]},
|
|
||||||
|
|
||||||
{"key":"by","name":"排序","value":[
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}]}],
|
|
||||||
|
|
||||||
"16":[
|
|
||||||
{"key":"year","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"},
|
|
||||||
{"n":"2008","v":"2008"},
|
|
||||||
{"n":"2007","v":"2007"},
|
|
||||||
{"n":"2006","v":"2006"},
|
|
||||||
{"n":"2005","v":"2005"},
|
|
||||||
{"n":"2004","v":"2004"},
|
|
||||||
{"n":"2003","v":"2003"},
|
|
||||||
{"n":"2002","v":"2002"},
|
|
||||||
{"n":"2001","v":"2001"},
|
|
||||||
{"n":"2000","v":"2000"}]},
|
|
||||||
|
|
||||||
{"key":"by","name":"排序","value":[
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}]}]}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"作者": "菜妮丝https://cainisi.cf",
|
|
||||||
"站名": "短视频",
|
|
||||||
"主页url": "http://www.sharenice.net",
|
|
||||||
"直接播放": "1",
|
|
||||||
"嗅探词": ".m3u8#m3u8?#.mp4#mp4?#ixigua#.czspp#.flv#.mp3#.m4a#?item/video#is_play_url=1#play/?#qianpailive",
|
|
||||||
|
|
||||||
"分类": "抖音&快手&微视&火山&场库&美拍&秒拍&全民&梨&好兔&开眼&美女&搞笑&社会&音乐&娱乐&影视&正能量&生活&动漫&萌系&美食&体育&游戏&明星&旅游&时尚",
|
|
||||||
"分类值": "douyin&kuaishou&weishi&huoshan&changku&meipai&miaopai&quanmin&lishipin&haotu&kaiyan&t-576O5aWz&t-5pCe56yR&t-56S+5Lya&t-6Z+z5LmQ&t-5aix5LmQ&t-5b2x6KeG&t-5q2j6IO96YeP&t-55Sf5rS7&t-5Yqo5ryr&t-6JCM57O7&t-576O6aOf&t-5L2T6IKy&t-5ri45oiP&t-5piO5pif&t-5peF5ri4&t-5pe25bCa",
|
|
||||||
|
|
||||||
"分类url": "http://www.sharenice.net/{cateId}?page={catePg}",
|
|
||||||
|
|
||||||
"二次截取": "class=\"item-box\">&&</ul>",
|
|
||||||
"数组": "<li&&</li>",
|
|
||||||
"图片": "data-original=\"&&\"",
|
|
||||||
"标题": "title=\"&&\"",
|
|
||||||
"链接": "href=\"&&\""
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
{
|
|
||||||
"author": "",
|
|
||||||
"ua": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.186.400 QQBrowser/11.3.5195.400",
|
|
||||||
"homeUrl": "http://www.jrskan.com/",
|
|
||||||
//"homeUrl": "http://jrsbxj.com/",
|
|
||||||
//"homeUrl": "http://jrsyyds.com/",
|
|
||||||
|
|
||||||
"cateManual": {
|
|
||||||
"JRS赛事直播": "@666"
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
// 分类页地址 {cateId} 分类id {catePg} 当前页
|
|
||||||
"cateUrl2": "http://www.jrskan.com/",
|
|
||||||
// 同上面的homeVod字段 分类列表中的视频信息
|
|
||||||
"cateVodNode": "//ul[@data-stype='zqlq']",
|
|
||||||
//"cateVodName": "/li[@class='lab_events']/span/text()",
|
|
||||||
"cateVodName": "concat(/li[@class='lab_time']/text(),'-',/li[@class='lab_events']/span/text(),'dj')",
|
|
||||||
"cateVodId": "/li[@class='lab_channel']/a[1]/@href",
|
|
||||||
"cateVodIdR": "http://play.sportsteam357.com/play/steam(\\d+).html",
|
|
||||||
//"cateVodIdR": "\\S+/(\\d+).html",
|
|
||||||
"cateVodImg": "/li[@class='lab_team_home']/span/img/@src",
|
|
||||||
"cateVodMark": "concat(//li[@class='lab_team_home']/strong/text(),'-',//li[@class='lab_team_away']/strong/text())",
|
|
||||||
//"cateVodMark": "{vid}",
|
|
||||||
"cate": "dj",
|
|
||||||
// 详情页地址 用于获取详情页信息 及 播放列表和地址
|
|
||||||
//"dtUrl": "{vid}",
|
|
||||||
"dtUrl": "http://play.sportsteam357.com/play/steam{vid}.html",
|
|
||||||
// 详情节点
|
|
||||||
"dtNode": "//ul[@data-stype='zqlq']",
|
|
||||||
// 视频名
|
|
||||||
"dtName": "/li[1]/span/text()",
|
|
||||||
// 视频图片
|
|
||||||
"dtImg": "/li[3]/span/img/@src",
|
|
||||||
// 视频分类
|
|
||||||
"dtCate": "/li[1]/span/text()",
|
|
||||||
//演员
|
|
||||||
"dtActor": "/li[1]/span/text()",
|
|
||||||
// 导演
|
|
||||||
"dtDirector": "concat('勇士总冠军')",
|
|
||||||
"dtDirectorR": "",
|
|
||||||
// 视频简介
|
|
||||||
"dtDesc": "concat(/li[3]/strong/text(),' VS ',/li[5]/strong/text())",
|
|
||||||
|
|
||||||
// 播放源节点
|
|
||||||
"dtFromNode": "//div[@class='sub_channel']",
|
|
||||||
// 播放源名称
|
|
||||||
"dtFromName": "concat('【推荐优先选择中文超清或中文高清直播源观看】')",
|
|
||||||
"dtFromNameR": "",
|
|
||||||
// 播放列表节点
|
|
||||||
"dtUrlNode": "//div[@class='sub_channel']",
|
|
||||||
// 播放地址节点
|
|
||||||
"dtUrlSubNode": "/a",
|
|
||||||
"dtUrlSub": "/ff",
|
|
||||||
// 播放地址
|
|
||||||
"dtUrlId": "@data-play",
|
|
||||||
"dtUrlIdR": "/play/(\\S+)",
|
|
||||||
//"dtUrlIdR": "\\S+/(\\d+)&id2=",
|
|
||||||
// 剧集名称
|
|
||||||
"dtUrlName": "/strong/text()",
|
|
||||||
"dtUrlNameR": "",
|
|
||||||
|
|
||||||
//播放页面的地址 {playUrl} 对应上面 dtUrlId 获取到的地址
|
|
||||||
//"playUrl":"http://play.sportsteam333.com/play/{playUrl}#ff",
|
|
||||||
"playUrl":"http://play.sportsteam357.com/play/{playUrl}"
|
|
||||||
//"playUrl": "http://play.sportsteam365.com/play/{playUrl}"
|
|
||||||
//"playUa": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
|
|
||||||
//"playUa": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
|
|
||||||
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"author": "率性而活",
|
|
||||||
"ua":"Mozilla/5.0 (Linux; Android 8.1.0; OPPO R11t Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.19 SP-engine/2.15.0 baiduboxapp/11.19.5.10 (Baidu; P1 8.1.0)",
|
|
||||||
//125.88.199.34 m.live.qq.com
|
|
||||||
|
|
||||||
//"dcVipFlag": "true",
|
|
||||||
//"dcPlayUrl": "true",
|
|
||||||
"homeUrl": "https://m.live.qq.com/directory/game/Basketball",
|
|
||||||
"cateManual": {
|
|
||||||
"篮球": "@directory/game/Basketball",
|
|
||||||
"足球":"@directory/game/Football",
|
|
||||||
"搏击":"@directory/game/Fight",
|
|
||||||
"网球排球":"@directory/game/Tennis",
|
|
||||||
"英文原声":"@directory/game/English",
|
|
||||||
"台球":"@directory/game/Billiards",
|
|
||||||
"棒球/橄榄球/冰球":"@directory/game/MLB",
|
|
||||||
"NBA":"@directory/game/NBA",
|
|
||||||
"CBA":"@directory/game/CBA",
|
|
||||||
"颜值":"@directory/game/YZ",
|
|
||||||
"棋牌/游戏":"@directory/game/Game"
|
|
||||||
|
|
||||||
},
|
|
||||||
"homeVodNode": "//a[contains(@href,'/10')]","homeVodName": "/div/following-sibling::p[1]/text()","homeVodId": "/@href","homeVodIdR": "/(\\S+)","homeVodImg": "//div[contains(@style,'http')]/@style","homeVodImgR": "(http.*?jpg)","homeVodMark": "",
|
|
||||||
|
|
||||||
"cateUrl2": "https://m.live.qq.com/{cateId}",
|
|
||||||
|
|
||||||
"cateVodNode": "//a[contains(@href,'/10')]",
|
|
||||||
|
|
||||||
"cateVodName": "/div/following-sibling::p[1]/text()",
|
|
||||||
|
|
||||||
"cateVodId": "/@href",
|
|
||||||
|
|
||||||
"cateVodIdR": "/(\\S+)",
|
|
||||||
|
|
||||||
"cateVodImg": "//div[contains(@style,'http')]/@style",
|
|
||||||
|
|
||||||
"cateVodImgR": "(http.*?jpg)",
|
|
||||||
|
|
||||||
"cateVodMark": "",
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
"dtUrl": "https://m.live.qq.com/{vid}",
|
|
||||||
"dtNode": "//body",
|
|
||||||
"dtName": "//p[contains(@class,'p-title')]/text()",
|
|
||||||
"dtNameR": "(“.*?”)",
|
|
||||||
"dtImg": "//div[contains(@class,'share-bar')]/@data-pic",
|
|
||||||
"dtImgR": "",
|
|
||||||
"dtCate": "",
|
|
||||||
"dtCateR": "",
|
|
||||||
"dtYear": "",
|
|
||||||
"dtYearR": "",
|
|
||||||
"dtArea": "",
|
|
||||||
"dtAreaR": "",
|
|
||||||
"dtDirector": "",
|
|
||||||
"dtDirectorR": "",
|
|
||||||
"dtActor": "",
|
|
||||||
"dtActorR": "",
|
|
||||||
"dtDesc": "",
|
|
||||||
"dtDescR": "",
|
|
||||||
"dtFromNode": "//p[contains(@class,'p-title')]",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtFromNameR": "(\\企鹅体育)",
|
|
||||||
"dtUrlNode": "//div[contains(@class,'wenzi')]",
|
|
||||||
"dtUrlSubNode": "/a",
|
|
||||||
"dtUrlId": "/text()",
|
|
||||||
"dtUrlIdR": "m.live.qq.com/(\\S+)",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"dtUrlNameR": "(\\d+)",
|
|
||||||
"playUrl": "https://m.live.qq.com/{playUrl}",
|
|
||||||
"playUa":"{\"User-Agent\":\"okhttp/3.12.11\"}"
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
//写法思路来自biubiu影院,海阔视界,xpath筛选。
|
|
||||||
//项目魔改至github开源仓库https://github.com/Tangsan99999/TvJar中的XBiubiu.java文件,
|
|
||||||
|
|
||||||
{
|
|
||||||
//规则名
|
|
||||||
"title": "310直播",
|
|
||||||
//作者
|
|
||||||
"author": "聆听优美旋律",
|
|
||||||
//请求头UA,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
|
|
||||||
//习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA
|
|
||||||
"UserAgent":"Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36",
|
|
||||||
//请求头Referer参数,如果只是播放页需要,填WebView即可引用播放页的链接作嗅探Referer参数。
|
|
||||||
//一般很少用,留空或删除
|
|
||||||
"Referer":"",
|
|
||||||
//是否开启获取首页数据,0关闭,1开启
|
|
||||||
"homeContent":"0",
|
|
||||||
//分类链接起始页码,禁止负数和含小数点。
|
|
||||||
"firstpage": "1",
|
|
||||||
//分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接]
|
|
||||||
"class_url": "http://www.310.tv/{cateId}",
|
|
||||||
//分类名,分类1&分类2&分类3
|
|
||||||
"class_name": "310直播",
|
|
||||||
//分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1
|
|
||||||
"class_value": "",
|
|
||||||
//筛选数据,json格式,参考xpath的筛选写法
|
|
||||||
"filterdata":{},
|
|
||||||
//分类是否二次截取
|
|
||||||
"cat_YN_twice": "1",
|
|
||||||
//分类二次截取前
|
|
||||||
"cat_twice_pre": "<div class=\"list_content",
|
|
||||||
//分类二次截取后
|
|
||||||
"cat_twice_suf": "<div class=\"indexbtn",
|
|
||||||
|
|
||||||
//分类数组截取前
|
|
||||||
"cat_arr_pre": "<a class = \"clearfix",
|
|
||||||
//分类数组截取后
|
|
||||||
"cat_arr_suf": "</a>",
|
|
||||||
//分类截取片单图片,截取前缀&&截取后缀
|
|
||||||
"cat_pic": "img src=\"&&\"",
|
|
||||||
//分类截取片单标题,截取前缀&&截取后缀
|
|
||||||
"cat_title": "zhudui_wuyd\">&&</section",
|
|
||||||
//分类截取片单副标题,截取前缀&&截取后缀
|
|
||||||
"cat_subtitle": "eventtime\">&&</p",
|
|
||||||
//分类截取片单链接,截取前缀&&截取后缀
|
|
||||||
"cat_url": "href=\"&&\"",
|
|
||||||
//分类片单链接补前缀
|
|
||||||
"cat_prefix": "",
|
|
||||||
//分类片单链接补后缀
|
|
||||||
"cat_suffix": "",
|
|
||||||
"force_play": "1",
|
|
||||||
//是否开启手动嗅探,只对网页嗅探有效,0否,1是
|
|
||||||
"ManualSniffer":"1",
|
|
||||||
//手动嗅探视频链接关键字,每个用#隔开
|
|
||||||
"VideoFormat":"",
|
|
||||||
//手动嗅探视频链接过滤关键词,每个用#隔开
|
|
||||||
"VideoFilter":".html#=http"
|
|
||||||
}
|
|
@ -1,89 +0,0 @@
|
|||||||
//写法思路来自biubiu影院,海阔视界,xpath筛选。
|
|
||||||
//项目魔改至github开源仓库https://github.com/Tangsan99999/TvJar中的XBiubiu.java文件,
|
|
||||||
|
|
||||||
{
|
|
||||||
//规则名
|
|
||||||
"title": "斗鱼直播",
|
|
||||||
//作者
|
|
||||||
"author": "聆听优美旋律",
|
|
||||||
//请求头UA,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
|
|
||||||
//习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA
|
|
||||||
"UserAgent":"MOBILE_UA",
|
|
||||||
//请求头Referer参数,如果只是播放页需要,填WebView即可引用播放页的链接作嗅探Referer参数。
|
|
||||||
//一般很少用,留空或删除
|
|
||||||
"Referer":"",
|
|
||||||
//是否开启获取首页数据,0关闭,1开启
|
|
||||||
"homeContent":"0",
|
|
||||||
//分类链接起始页码,禁止负数和含小数点。
|
|
||||||
"firstpage": "1",
|
|
||||||
//分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接]
|
|
||||||
"class_url": "https://m.douyu.com/api/room/list?page={catePg}&type={cateId}",
|
|
||||||
//分类名,分类1&分类2&分类3
|
|
||||||
"class_name": "英雄联盟&王者荣耀&LOL手游&主机游戏&热门游戏&和平精英&刺客信条:英灵殿&暗区突围&穿越火线&幻塔&火影忍者&CFHD&使命召唤&COD手游&哈利波特:魔法觉醒&lol电竞经理&DNF手游&金铲铲之战&天刀手游&原神&航海王热血航线&万国觉醒&马里奥制造&鸿图之下&DNF&欢乐麻将&逃离塔科夫&DOTA2&王者模拟战&炉石传说&二次元&中国象棋&命运2&CS:GO&天谕手游&一起看&巅峰坦克&新游中心&墲人之境&VALORANT&lol云顶之弈&颜值(横屏)&音乐&热门手游&APEX手游&Evil Dead&Among Us&魔兽争霸&户外&梦幻手游&恐怖游戏&魔兽怀旧服&QQ飞车&荒野大镖客&九劫曲&自走棋&美食&第五人格&欢乐斗地主&荒野乱斗&灵魂筹码&传奇&原创IP&互动交友&跑跑卡丁车&阴阳师&骑马与砍杀&网易游戏&星际争霸&音遇恋人&狼人杀&只狼&格斗游戏&舞蹈&JJ斗地主&街霸对决&人类跌落梦境&机动都市阿尔法&一人之下&饥荒&全境封锁&怀旧游戏&趣生活&多多自走棋&战地风云&隐形守护者&守望先锋&电台新声&崩坏3&ATLAS&DOTA&娱乐推荐&风云岛行动&进击的巨人&魔兽世界&云游戏&NBA2K&八方旅人&跑跑手游&血污:夜之仪式&剑网3&率土之滨&人类一败涂地&我的世界&灌篮高手&挺进地牢&超激斗梦境&冒险岛&三国杀&环世界&梦幻西游&皇室战争&古墓丽影&天涯明月刀&王牌战士&街头篮球&颜值&战歌竞技场&波西亚时光&NBA2KOL2&忍者必须死3&鬼泣&QQ飞车端游&神武4手游&战地之王&军事游戏&梦幻模拟战&往日不再&文化&棋牌娱乐&实况足球&仙剑奇侠传&企鹅直播&FIFA ONLINE 4&剑与远征&神秘海域&热门网游&航海王:燃烧意志&诛仙世界&千古风流&塞尔达系列&数码科技&APEX&百闻牌&僵尸世界大战&社会人文&流放之路POE&球球大作战&汽车&剑网3缘起&逆水寒&英雄杀&足球游戏&科普&风暴英雄&魔域口袋版&橙光&逆战&梦幻三维版&莎木&纪录片&口袋新旅程&圣歌&斗鱼购物&坦克世界&战舰世界&巫师之昆特牌&了不起的修仙模拟器&成年教育&反恐精英Online&剑网3:指尖江湖&女神异闻录&星星点灯&暗黑破坏神3&部落冲突&剑与家园&斯普拉遁&梦三国2&新笑傲江湖&超级马里奥&校园&传奇世界&猫和老鼠&三国志系列&方舟:生存进化&猎人手游&星际公民&刀塔霸业&明日之后&最终幻想&神武4电脑版&影之诗&中土世界:战争之影&群雄逐鹿&流放者柯南&堡垒之夜&决战平安京",
|
|
||||||
//分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1
|
|
||||||
"class_value": "LOL&wzry&LOLM&TVgame&rmyx&hpjy&AC&aqtw&CF&ht&hyrz&CFHD&COD&smzhsy&HarryPotter&EGAME&mdnf&JGAME&tdsy&yuanshen&HHWRXHX&wgjx&Mario&htzx&DNF&HLMJ&EFT&DOTA2&wzrpg&How&ecy&ZGXQ&MY2&CSGO&tysy&yqk&DFTK&xyzx&wu&VALORANT&ydzhy&XX&music&phone&APEXM&EvilDead&AmongUs&mszb&HW&mhxy&Horror&wowclassic&qqfcsy&hydbk&jjq&dota2rpg&ms&dwrg&hlddz&hyld&lhcm&cq&ip&jyhd&Popkart&yys&qmyks&wyyx&SC&yinyu&LRS&ZL&FTG&dance&jj&jbdj&rlybtdsjb&jddsaef&yrzx&DontStarve&qjfs&classic&QSH&zzq&BF&yxshz&Overwatch&dtxs&bhxl&ATLAS&DOTA&yltj&fydxd&AoT&WOW&cloudgame&NBA2K&OT&PPKDCSY&Blood&JX3&stzb&Human&MC&glgs&Enter&cjdmj&g_mxd1&sanguosha&RimWorld&MHXYOL&hszz&gmly&tianya&wpzs&jtlq&yz&ChessRush&bxysg&NBA2KOL2&rzbxs3&DMC&qqfcdy&sw3&AVA&jsyx&mhmnz&WRBZ&wh&qipai&skzq&PAL&qezb&FOL4&jyyz&Uncharted&rmwy&hhwrsyz&zxsj&qgflpc&TLoZ&smkj&APEX&BWP&WWZ&shrw&PathofExile&qqdzz&car&JW3YQ&nsh&yxs&zq&kepu&HOTS&mykdb&cg&NZ&MHXX3D&Shenmue&jlp&KDXLC&sg&DYGW&TKSJ&wfws&wszktp&ACS&jiaoyu&CS&jw3zjjh&P5&xxdd&DIABLO3&blct&jyjy&Splatoon&msg2&xxajh&SMO&xy&cqsj&mhls&Sangokushi&fzscjh&lrlr&StarCitizen&DotaUnderlords&mrzh&FF&swdnb&yzs&MiddleEarth&qxzl&Conan&blzy&jzpaj",
|
|
||||||
//筛选数据,json格式,参考xpath的筛选写法
|
|
||||||
"filterdata":{},
|
|
||||||
|
|
||||||
"cat_mode": "0",
|
|
||||||
"catjsonlist": "data.list",
|
|
||||||
//json片单图片
|
|
||||||
"catjsonpic": "roomSrc",
|
|
||||||
//json片单标题
|
|
||||||
"catjsonname": "roomName",
|
|
||||||
//json片单链接
|
|
||||||
"catjsonid": "rid",
|
|
||||||
//json片单副标题,这个很少有,预留着
|
|
||||||
"catjsonstitle":"nickname",
|
|
||||||
|
|
||||||
|
|
||||||
//分类片单链接补前缀
|
|
||||||
"cat_prefix": "",
|
|
||||||
//分类片单链接补后缀
|
|
||||||
"cat_suffix": "",
|
|
||||||
|
|
||||||
//搜索链接,搜索关键字用{wd}表示,post请求的最后面加;post
|
|
||||||
//POST链接示例 http://www.lezhutv.com/index.php?m=vod-search;post
|
|
||||||
"search_url": "https://m.douyu.com/api/search/liveRoom;post",
|
|
||||||
//POST搜索body,填写搜索关键字的键值,一般常见的是searchword和wd,不是POST搜索的可留空或删除。
|
|
||||||
"sea_PtBody":{"sk":"{wd}","offset":0,"limit":20,"did":"bf1f5579c0b2f6066af0bee200051531"},
|
|
||||||
//搜索模式,0为json搜索,只支持列表在list数组里的,其它为网页截取。
|
|
||||||
"search_mode": "0",
|
|
||||||
"jsonlist": "data.list",
|
|
||||||
//json片单图片
|
|
||||||
"jsonpic": "roomSrc",
|
|
||||||
//json片单标题
|
|
||||||
"jsonname": "roomName",
|
|
||||||
//json片单链接
|
|
||||||
"jsonid": "roomId",
|
|
||||||
//json片单副标题,这个很少有,预留着
|
|
||||||
"jsonstitle":"nickname",
|
|
||||||
|
|
||||||
//搜索片单链接补前缀
|
|
||||||
"search_prefix": "",
|
|
||||||
//搜索片单链接补后缀,这个一般json搜索的需要
|
|
||||||
"search_suffix": "",
|
|
||||||
//搜索副标题,截取前缀&&截取后缀
|
|
||||||
"sea_subtitle": "",
|
|
||||||
|
|
||||||
//片单链接是否直接播放,0否,1分类片单链接直接播放,2详情选集链接直接播放。
|
|
||||||
//设置成直接播放后,后面3个参数请注意该留空的请务必留空。
|
|
||||||
"force_play": "1",
|
|
||||||
//直接播放链接补前缀
|
|
||||||
"play_prefix": "https://m.douyu.com/",
|
|
||||||
//直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接
|
|
||||||
"play_suffix": "",
|
|
||||||
//直接播放链接设置请求头,只对直链视频有效,每一组用#分开
|
|
||||||
"play_header": "",
|
|
||||||
|
|
||||||
//下面几个参数请勿乱用。否则可能会有副作用。
|
|
||||||
//分析网页源码中有<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"
|
|
||||||
}
|
|
@ -1,159 +0,0 @@
|
|||||||
//写法思路来自biubiu影院,海阔视界,xpath筛选。
|
|
||||||
//项目魔改至github开源仓库https://github.com/Tangsan99999/TvJar中的XBiubiu.java文件,
|
|
||||||
|
|
||||||
{
|
|
||||||
//规则名
|
|
||||||
"title": "酷奇MV",
|
|
||||||
//作者
|
|
||||||
"author": "聆听优美旋律",
|
|
||||||
//请求头UA,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
|
|
||||||
//习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA
|
|
||||||
"UserAgent":"PC_UA",
|
|
||||||
//请求头Referer参数,如果只是播放页需要,填WebView即可引用播放页的链接作嗅探Referer参数。
|
|
||||||
//一般很少用,留空或删除
|
|
||||||
"Referer":"WebView",
|
|
||||||
"PicNeedProxy":"1",
|
|
||||||
//是否开启获取首页数据,0关闭,1开启
|
|
||||||
"homeContent":"0",
|
|
||||||
//分类链接起始页码,禁止负数和含小数点。
|
|
||||||
"firstpage": "1",
|
|
||||||
//分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接]
|
|
||||||
"class_url": "https://www.kuqimv.com/play/{cateId}_{catePg}.html",
|
|
||||||
//分类名,分类1&分类2&分类3
|
|
||||||
"class_name": "华语高清&日韩精选&欧美MV&高清现场&影视MV&夜店视频&车模视频&热舞视频&美女写真&美女打碟",
|
|
||||||
//分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1
|
|
||||||
"class_value": "1&2&3&4&5&6&7&8&9&10",
|
|
||||||
//筛选数据,json格式,参考xpath的筛选写法
|
|
||||||
"filterdata":{},
|
|
||||||
//分类是否二次截取
|
|
||||||
"cat_YN_twice": "1",
|
|
||||||
//分类二次截取前
|
|
||||||
"cat_twice_pre": "class=\"mv_list",
|
|
||||||
//分类二次截取后
|
|
||||||
"cat_twice_suf": "class=\"lei_copy",
|
|
||||||
|
|
||||||
//分类数组截取前
|
|
||||||
"cat_arr_pre": "<li",
|
|
||||||
//分类数组截取后
|
|
||||||
"cat_arr_suf": "/li>",
|
|
||||||
//分类截取片单图片,截取前缀&&截取后缀
|
|
||||||
"cat_pic": "<img src=\"&&\"",
|
|
||||||
//分类截取片单标题,截取前缀&&截取后缀
|
|
||||||
"cat_title": "title=\"&&\"",
|
|
||||||
//分类截取片单副标题,截取前缀&&截取后缀
|
|
||||||
"cat_subtitle": "class=\"time\">&&<",
|
|
||||||
//分类截取片单链接,截取前缀&&截取后缀
|
|
||||||
"cat_url": "href=\"&&\"",
|
|
||||||
//分类片单链接补前缀
|
|
||||||
"cat_prefix": "https://www.kuqimv.com",
|
|
||||||
//分类片单链接补后缀
|
|
||||||
"cat_suffix": "",
|
|
||||||
|
|
||||||
//搜索链接,搜索关键字用{wd}表示,post请求的最后面加;post
|
|
||||||
//POST链接示例 http://www.lezhutv.com/index.php?m=vod-search;post
|
|
||||||
"search_url": "空",
|
|
||||||
//POST搜索body,填写搜索关键字的键值,一般常见的是searchword和wd,不是POST搜索的可留空或删除。
|
|
||||||
"sea_PtBody":"空",
|
|
||||||
//搜索模式,0为json搜索,只支持列表在list数组里的,其它为网页截取。
|
|
||||||
"search_mode": "0",
|
|
||||||
//json片单图片
|
|
||||||
"jsonpic": "pic",
|
|
||||||
//json片单标题
|
|
||||||
"jsonname": "name",
|
|
||||||
//json片单链接
|
|
||||||
"jsonid": "id",
|
|
||||||
//json片单副标题,这个很少有,预留着
|
|
||||||
"jsonstitle":"",
|
|
||||||
|
|
||||||
//搜索是否二次截取
|
|
||||||
"sea_YN_twice": "0",
|
|
||||||
//搜索二次截取前
|
|
||||||
"sea_twice_pre": "空",
|
|
||||||
//搜索二次截取后
|
|
||||||
"sea_twice_suf": "空",
|
|
||||||
|
|
||||||
//搜索数组前缀
|
|
||||||
"sea_arr_pre": "空",
|
|
||||||
//搜索数组后缀
|
|
||||||
"sea_arr_suf": "空",
|
|
||||||
//搜索片单图片,截取前缀&&截取后缀
|
|
||||||
"sea_pic": "data-original=\"&&\"",
|
|
||||||
//搜索片单标题,截取前缀&&截取后缀
|
|
||||||
"sea_title": "title=\"&&\"",
|
|
||||||
//搜索片单链接,截取前缀&&截取后缀
|
|
||||||
"sea_url": "href=\"&&\"",
|
|
||||||
//搜索片单链接补前缀
|
|
||||||
"search_prefix": "http://www.lezhutv.com",
|
|
||||||
//搜索片单链接补后缀,这个一般json搜索的需要
|
|
||||||
"search_suffix": "",
|
|
||||||
//搜索副标题,截取前缀&&截取后缀
|
|
||||||
"sea_subtitle": "",
|
|
||||||
|
|
||||||
//片单链接是否直接播放,1是直接播放,0否。
|
|
||||||
"force_play": "1",
|
|
||||||
//直接播放链接补前缀
|
|
||||||
"play_prefix": "",
|
|
||||||
//直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接
|
|
||||||
"play_suffix": "",
|
|
||||||
//直接播放链接设置请求头,只对直链视频有效,每一组用#分开
|
|
||||||
"play_header": "",
|
|
||||||
|
|
||||||
//演员数据,截取前缀&&截取后缀
|
|
||||||
"proj_actor": "主演:</span>&&</p>",
|
|
||||||
//简介内容,截取前缀&&截取后缀
|
|
||||||
"proj_plot": "简介:</span>&&</p>",
|
|
||||||
|
|
||||||
//线路截取区域,如果不需要请把tab_title或tab_arr_pre置空或者全部不要填。
|
|
||||||
//线路是否二次截取
|
|
||||||
"tab_YN_twice": "0",
|
|
||||||
//线路二次截取前
|
|
||||||
"tab_twice_pre": "",
|
|
||||||
//线路二次截取后
|
|
||||||
"tab_twice_suf": "",
|
|
||||||
|
|
||||||
//线路截取数组前
|
|
||||||
"tab_arr_pre": "空",
|
|
||||||
//线路截取数组后
|
|
||||||
"tab_arr_suf": "空",
|
|
||||||
//线路标题,截取前缀&&截取后缀
|
|
||||||
"tab_title": "空",
|
|
||||||
|
|
||||||
//列表是否二次截取
|
|
||||||
"list_YN_twice": "0",
|
|
||||||
//列表二次截取前
|
|
||||||
"list_twice_pre": "空",
|
|
||||||
//列表二次截取后
|
|
||||||
"list_twice_suf": "空",
|
|
||||||
//列表数组截取前,必须
|
|
||||||
"list_arr_pre": "空",
|
|
||||||
//列表数组截取后,必须
|
|
||||||
"list_arr_suf": "空",
|
|
||||||
|
|
||||||
//集数是否二次截取
|
|
||||||
"epi_YN_twice": "0",
|
|
||||||
//集数二次截取前
|
|
||||||
"epi_twice_pre": "空",
|
|
||||||
//集数二次截取后
|
|
||||||
"epi_twice_suf": "空",
|
|
||||||
//集数数组截取前,必须
|
|
||||||
"epi_arr_pre": "",
|
|
||||||
//集数数组截取后,必须
|
|
||||||
"epi_arr_suf": "",
|
|
||||||
//集数标题,截取前缀&&截取后缀
|
|
||||||
"epi_title": "",
|
|
||||||
//集数链接,截取前缀&&截取后缀
|
|
||||||
"epi_url": "",
|
|
||||||
//集数链接补前缀
|
|
||||||
"epiurl_prefix": "",
|
|
||||||
//集数链接补后缀
|
|
||||||
"epiurl_suffix": "",
|
|
||||||
|
|
||||||
//下面几个参数请勿乱用。否则可能会有副作用。
|
|
||||||
//分析网页源码中有<script type="text/javascript">var player_aaaa={"flag":"play","encrypt这种源码的链接解析
|
|
||||||
//如果网页源码里没有这种请设置为0
|
|
||||||
"Anal_MacPlayer":"0",
|
|
||||||
//是否开启手动嗅探,只对网页嗅探有效,0否,1是
|
|
||||||
"ManualSniffer":"0",
|
|
||||||
//手动嗅探视频链接关键字,每个用#隔开
|
|
||||||
"VideoFormat":"playlist.m3u8#.mp4#.m3u8#.flv"
|
|
||||||
}
|
|
@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"规则名": "有声小说吧",
|
|
||||||
"规则作者": "香雅情",
|
|
||||||
"请求头参数": "User-Agent$手机",
|
|
||||||
"网页编码格式": "gb2312",
|
|
||||||
"图片是否需要代理": "0",
|
|
||||||
"是否开启获取首页数据": "1",
|
|
||||||
"首页推荐链接": "http://m.ysxs8.vip",
|
|
||||||
"首页列表数组规则": "body&&.list-ul",
|
|
||||||
"首页片单列表数组规则": ".list-li",
|
|
||||||
"首页片单是否Jsoup写法": "1",
|
|
||||||
"首页片单标题": ".list-name&&Text",
|
|
||||||
"首页片单链接": "a&&href!..",
|
|
||||||
"首页片单图片": "img&&data-original",
|
|
||||||
"首页片单副标题": ".module-slide-author&&Text",
|
|
||||||
"首页片单链接加前缀": "http://m.ysxs8.vip",
|
|
||||||
"首页片单链接加后缀": "",
|
|
||||||
"分类起始页码": "1",
|
|
||||||
"分类链接": "http://m.ysxs8.vip/downlist/r{cateId}_{catePg}.html",
|
|
||||||
"分类名称": "网络玄幻&恐怖悬疑&评书下载&儿童读物&管理营销&相声戏曲&传统武侠&都市言情&官场刑侦&历史军事&人物传记&广播剧&百家讲坛&外语读物&有声文学&探险盗墓&职场商战",
|
|
||||||
"分类名称替换词": "52&17&3&4&6&7&12&13&14&15&16&18&32&35&41&45&81",
|
|
||||||
"筛选数据": {},
|
|
||||||
//"筛选数据": "ext",
|
|
||||||
//{cateId}
|
|
||||||
"筛选子分类名称": "",
|
|
||||||
"筛选子分类替换词": "",
|
|
||||||
//{class}
|
|
||||||
"筛选类型名称": "",
|
|
||||||
"筛选类型替换词": "*",
|
|
||||||
//{area}
|
|
||||||
"筛选地区名称": "",
|
|
||||||
"筛选地区替换词": "*",
|
|
||||||
//{year}
|
|
||||||
"筛选年份名称": "",
|
|
||||||
"筛选年份替换词": "*",
|
|
||||||
//{lang}
|
|
||||||
"筛选语言名称": "",
|
|
||||||
"筛选语言替换词": "*",
|
|
||||||
//{by}
|
|
||||||
"筛选排序名称": "",
|
|
||||||
"筛选排序替换词": "",
|
|
||||||
"分类截取模式": "1",
|
|
||||||
"分类列表数组规则": "body&&.book-li",
|
|
||||||
"分类片单是否Jsoup写法": "1",
|
|
||||||
"分类片单标题": ".book-title&&Text",
|
|
||||||
"分类片单链接": "a&&href!..",
|
|
||||||
"分类片单图片": "img&&data-original",
|
|
||||||
"分类片单副标题": ".book-meta&&Text",
|
|
||||||
"分类片单链接加前缀": "http://m.ysxs8.vip",
|
|
||||||
"分类片单链接加后缀": "",
|
|
||||||
"搜索请求头参数": "User-Agent$手机",
|
|
||||||
"搜索链接": "http://m.ysxs8.vip/search.asp?page=1&searchword={wd}&searchtype=-1",
|
|
||||||
"POST请求数据": "",
|
|
||||||
"搜索截取模式": "1",
|
|
||||||
"搜索列表数组规则": "body&&.book-li",
|
|
||||||
"搜索片单是否Jsoup写法": "1",
|
|
||||||
"搜索片单图片": "img&&data-original",
|
|
||||||
"搜索片单标题": "h4&&Text",
|
|
||||||
"搜索片单链接": "a&&href!..",
|
|
||||||
"搜索片单副标题": ".book-meta&&Text",
|
|
||||||
"搜索片单链接加前缀": "http://m.ysxs8.vip",
|
|
||||||
"搜索片单链接加后缀": "",
|
|
||||||
"链接是否直接播放": "0",
|
|
||||||
"直接播放链接加前缀": "",
|
|
||||||
"直接播放链接加后缀": "",
|
|
||||||
"直接播放直链视频请求头": "",
|
|
||||||
"详情是否Jsoup写法": "1",
|
|
||||||
"类型详情": "",
|
|
||||||
"年代详情": "",
|
|
||||||
"地区详情": "",
|
|
||||||
"演员详情": "",
|
|
||||||
"简介详情": ".book-des&&Text",
|
|
||||||
"线路列表数组规则": "body&&.js_module_list",
|
|
||||||
"线路标题": "h2&&Text",
|
|
||||||
"播放列表数组规则": "body&&#playlist",
|
|
||||||
"选集列表数组规则": "li",
|
|
||||||
"选集标题链接是否Jsoup写法": "1",
|
|
||||||
"选集标题": "a&&Text",
|
|
||||||
"选集链接": "a&&href",
|
|
||||||
"是否反转选集序列": "0",
|
|
||||||
"选集链接加前缀": "http://m.ysxs8.vip",
|
|
||||||
"选集链接加后缀": "",
|
|
||||||
"分析MacPlayer": "0",
|
|
||||||
"是否开启手动嗅探": "1",
|
|
||||||
"手动嗅探视频链接关键词": ".mp3#.m4a",
|
|
||||||
"手动嗅探视频链接过滤词": ".html#=http"
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
{
|
|
||||||
"规则名": "pipiya",
|
|
||||||
"规则作者": "xx",
|
|
||||||
"请求头参数": "User-Agent$PC_UA",
|
|
||||||
"网页编码格式": "UTF-8",
|
|
||||||
"是否开启获取首页数据": "1",
|
|
||||||
"首页推荐链接": "https://www.pipiya.cc/",
|
|
||||||
"首页列表数组规则": "body&&.list-vod",
|
|
||||||
"首页片单列表数组规则": ".public-list-box",
|
|
||||||
"首页片单是否Jsoup写法": "1",
|
|
||||||
"首页片单标题": "a&&title",
|
|
||||||
"首页片单链接": "a&&href",
|
|
||||||
"首页片单图片": ".lazy&&data-original",
|
|
||||||
"首页片单副标题": ".public-list-prb&&Text",
|
|
||||||
"首页片单链接加前缀": "https://www.pipiya.cc",
|
|
||||||
"分类起始页码": "1",
|
|
||||||
"分类链接": "https://www.pipiya.cc/vodtype/{cateId}/area/{area}/class/{class}/year/{year}.html",
|
|
||||||
"分类名称": "电影&国产剧&美剧&日韩剧&泰剧&其他剧&动漫",
|
|
||||||
"分类名称替换词": "20&26&21&28&24&27&25",
|
|
||||||
"筛选数据": "ext",
|
|
||||||
"筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&法国&英国&德国&泰国&印度&西班牙&意大利&加拿大&其他",
|
|
||||||
"筛选地区替换词": "*",
|
|
||||||
"筛选年份名称": "2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004",
|
|
||||||
"筛选排序名称": "时间&人气&评分",
|
|
||||||
"筛选排序替换词": "time&hits&score",
|
|
||||||
"分类截取模式": "1",
|
|
||||||
"分类列表数组规则": "body&&.list-vod&&.public-list-box",
|
|
||||||
"分类片单是否Jsoup写法": "1",
|
|
||||||
"分类片单标题": "a&&title",
|
|
||||||
"分类片单链接": "a&&href",
|
|
||||||
"分类片单图片": ".lazy&&data-original",
|
|
||||||
"分类片单副标题": ".public-list-prb&&Text",
|
|
||||||
"分类片单链接加前缀": "https://www.pipiya.cc",
|
|
||||||
"搜索请求头参数": "User-Agent$PC_UA",
|
|
||||||
"搜索链接": "https://www.pipiya.cc/vodsearch.html?wd={wd}",
|
|
||||||
"POST请求数据": "",
|
|
||||||
"搜索截取模式": "1",
|
|
||||||
"搜索列表数组规则": "body&&.search-box.flex.rel",
|
|
||||||
"搜索片单是否Jsoup写法": "1",
|
|
||||||
"搜索片单图片": ".lazy&&data-original",
|
|
||||||
"搜索片单标题": ".thumb-txt.cor4.hide&&Text",
|
|
||||||
"搜索片单链接": ".public-list-exp&&href",
|
|
||||||
"搜索片单副标题": ".public-list-prb.hide.ft2&&Text",
|
|
||||||
"搜索片单链接加前缀": "https://www.pipiya.cc",
|
|
||||||
"搜索片单链接加后缀": "",
|
|
||||||
"链接是否直接播放": "0",
|
|
||||||
"直接播放链接加前缀": "https://www.pipiya.cc",
|
|
||||||
"直接播放链接加后缀": "#isVideo=true#",
|
|
||||||
"直接播放直链视频请求头": "",
|
|
||||||
"详情是否Jsoup写法": "1",
|
|
||||||
"类型详情": ".slide-info,3&&Text!类型 :",
|
|
||||||
"年代详情": ".slide-info,0&&.slide-info-remarks,1&&Text",
|
|
||||||
"地区详情": ".slide-info,0&&.slide-info-remarks,2&&Text",
|
|
||||||
"演员详情": ".slide-info,2&&Text!演员 :",
|
|
||||||
"简介详情": "#height_limit&&Text",
|
|
||||||
"线路列表数组规则": "body&&.nav-swiper&&a",
|
|
||||||
"线路标题": "Text!",
|
|
||||||
"播放列表数组规则": "body&&.anthology-list-play",
|
|
||||||
"选集列表数组规则": "li",
|
|
||||||
"选集标题链接是否Jsoup写法": "1",
|
|
||||||
"选集标题": "a&&Text",
|
|
||||||
"选集链接": "a&&href",
|
|
||||||
"是否反转选集序列": "0",
|
|
||||||
"选集链接加前缀": "https://www.pipiya.cc",
|
|
||||||
"选集链接加后缀": "",
|
|
||||||
"分析MacPlayer": "0",
|
|
||||||
"是否开启手动嗅探": "1",
|
|
||||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#.m3u8?#vkey=",
|
|
||||||
"手动嗅探视频链接过滤词": ".html#=http#=https"
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@ -1,74 +0,0 @@
|
|||||||
{
|
|
||||||
"规则名": "野马影视",
|
|
||||||
"规则作者": "xx",
|
|
||||||
"请求头参数": "电脑",
|
|
||||||
"网页编码格式": "UTF-8",
|
|
||||||
"图片是否需要代理": "0",
|
|
||||||
"是否开启获取首页数据": "1",
|
|
||||||
"首页推荐链接": "http://v.yemays.tk",
|
|
||||||
"首页列表数组规则": "body&&.myui-vodlist",
|
|
||||||
"首页片单列表数组规则": "li",
|
|
||||||
"首页片单是否Jsoup写法": "1",
|
|
||||||
"分类起始页码": "1",
|
|
||||||
"分类链接": "http://v.yemays.tk/vodshow/{cateId}-{area}-{by}-{class}-----{catePg}---{year}.htmll",
|
|
||||||
"分类名称": "电影&电视剧&综艺&动漫",
|
|
||||||
"分类名称替换词": "1&2&3&4",
|
|
||||||
"筛选数据": "ext",
|
|
||||||
"筛选子分类名称": "动作片&爱情片&科幻片&恐怖片&战争片&喜剧片&剧情片||港台剧&欧美剧&韩剧",
|
|
||||||
"筛选子分类替换词": "6&7&8&9&10&11&12||14&15&16",
|
|
||||||
"筛选类型名称": "动作&喜剧&爱情&科幻&剧情&悬疑&惊悚&恐怖&犯罪&谍战&冒险&奇幻&灾难&战争&动画&歌舞&历史&传记&其他||武侠&喜剧&爱情&剧情&青春&悬疑&科幻&军事&警匪&谍战&奇幻&偶像&年代&乡村&都市&家庭&古装&历史&神话&其他||脱口秀&真人秀&搞笑&访谈&生活&晚会&美食&游戏&亲子&旅游&文化&体育&时尚&纪实&益智&演艺&歌舞&播报&音乐&其他||热血&格斗&恋爱&少女&校园&搞笑&神魔&机战&科幻&真人&青春&魔法&神话&冒险&运动&竞技&童话&亲子&教育&励志&剧情&其他",
|
|
||||||
"筛选类型替换词": "*",
|
|
||||||
"筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&法国&英国&德国&泰国&印度&西班牙&意大利&加拿大&其他",
|
|
||||||
"筛选地区替换词": "*",
|
|
||||||
"筛选年份名称": "2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004",
|
|
||||||
"筛选年份替换词": "*",
|
|
||||||
"筛选语言名称": "普通话&英语&粤语&闽南语&韩语&日语&其他",
|
|
||||||
"筛选语言替换词": "*",
|
|
||||||
"筛选排序名称": "更新时间&人气排序&评分排序",
|
|
||||||
"筛选排序替换词": "time&hits&score",
|
|
||||||
"分类截取模式": "1",
|
|
||||||
"分类列表数组规则": ".myui-vodlist&&li",
|
|
||||||
"分类片单是否Jsoup写法": "1",
|
|
||||||
"分类片单标题": "h4&&a&&Text",
|
|
||||||
"分类片单链接": "h4&&a&&href",
|
|
||||||
"分类片单图片": ".lazyload&&data-original",
|
|
||||||
"分类片单副标题": ".pic-text&&Text",
|
|
||||||
"分类片单链接加前缀": "http://v.yemays.tk",
|
|
||||||
"分类片单链接加后缀": "",
|
|
||||||
"搜索请求头参数": "User-Agent$电脑",
|
|
||||||
"搜索链接": "http://v.yemays.tk/vodsearch/{wd}----------1---.html",
|
|
||||||
"POST请求数据": "",
|
|
||||||
"搜索截取模式": "1",
|
|
||||||
"搜索列表数组规则": ".myui-vodlist__media&&li",
|
|
||||||
"搜索片单是否Jsoup写法": "1",
|
|
||||||
"搜索片单图片": ".lazyload&&data-original",
|
|
||||||
"搜索片单标题": "h4&&a&&Text",
|
|
||||||
"搜索片单链接": "h4&&a&&href",
|
|
||||||
"搜索片单副标题": ".pic-text&&Text",
|
|
||||||
"搜索片单链接加前缀": "http://v.yemays.tk",
|
|
||||||
"搜索片单链接加后缀": "",
|
|
||||||
"链接是否直接播放": "0",
|
|
||||||
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
|
|
||||||
"直接播放链接加后缀": "#isVideo=true#",
|
|
||||||
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
|
|
||||||
"详情是否Jsoup写法": "0",
|
|
||||||
"类型详情": "剧情:</span>&&</p",
|
|
||||||
"年代详情": "更新:</span>&&</p",
|
|
||||||
"地区详情": "地区:</span>&&</p",
|
|
||||||
"演员详情": "主演:</span>&&</p",
|
|
||||||
"简介详情": "<span class=\"data\" style=\"display: none;\"><p>&&</p>",
|
|
||||||
"线路列表数组规则": ".nav-tabs&&li",
|
|
||||||
"线路标题": "Text",
|
|
||||||
"播放列表数组规则": "body&&.myui-content__list",
|
|
||||||
"选集列表数组规则": "li",
|
|
||||||
"选集标题链接是否Jsoup写法": "1",
|
|
||||||
"选集标题": "a&&Text",
|
|
||||||
"选集链接": "a&&href",
|
|
||||||
"是否反转选集序列": "0",
|
|
||||||
"选集链接加前缀": "http://v.yemays.tk",
|
|
||||||
"选集链接加后缀": "",
|
|
||||||
"分析MacPlayer": "",
|
|
||||||
"是否开启手动嗅探": "1",
|
|
||||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#upmso.com",
|
|
||||||
"手动嗅探视频链接过滤词": ".html#=http"
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
b9ef8bd2e30648b2ba5f41abc3699cfc
|
|
@ -1,30 +0,0 @@
|
|||||||
var rule = {
|
|
||||||
title:'88看球',
|
|
||||||
// host:'http://www.88kanqiu.cc',
|
|
||||||
host:'http://www.88kanqiu.live',
|
|
||||||
url:'/match/fyclass/live',
|
|
||||||
searchUrl:'',
|
|
||||||
searchable:0,
|
|
||||||
quickSearch:0,
|
|
||||||
class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live',
|
|
||||||
headers:{
|
|
||||||
'User-Agent':'PC_UA'
|
|
||||||
},
|
|
||||||
timeout:5000,
|
|
||||||
play_parse:true,
|
|
||||||
lazy:'',
|
|
||||||
limit:6,
|
|
||||||
double:false,
|
|
||||||
推荐:'*',
|
|
||||||
一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href',
|
|
||||||
二级:{
|
|
||||||
"title":".game-info-container&&Text;.customer-navbar-nav li&&Text",
|
|
||||||
"img":"img&&src",
|
|
||||||
"desc":";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text",
|
|
||||||
"content":"div.game-time&&Text",
|
|
||||||
"tabs":"js:TABS=['88看球']",
|
|
||||||
// "lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+play_url+it.url});LISTS.push(d)});"
|
|
||||||
"lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+it.url});LISTS.push(d)});"
|
|
||||||
},
|
|
||||||
搜索:'',
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
1
0307fty/js/drpy.min.js
vendored
1
0307fty/js/drpy.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,26 +0,0 @@
|
|||||||
var rule = {
|
|
||||||
title:'兔小贝',
|
|
||||||
host:'https://www.tuxiaobei.com',
|
|
||||||
homeUrl:'',
|
|
||||||
url:'/list/mip-data?typeId=fyclass&page=fypage&callback=',
|
|
||||||
detailUrl:'/play/fyid',
|
|
||||||
searchUrl:'/search/index?key=**',
|
|
||||||
searchable:2,
|
|
||||||
headers:{
|
|
||||||
'User-Agent':'MOBILE_UA'
|
|
||||||
},
|
|
||||||
timeout:5000,
|
|
||||||
class_url:'2&3&4&25',
|
|
||||||
class_name:'儿歌&故事&国学&启蒙',
|
|
||||||
//class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)',
|
|
||||||
cate_exclude:'应用',
|
|
||||||
推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href',
|
|
||||||
double:true,
|
|
||||||
limit:5,
|
|
||||||
play_parse:true,
|
|
||||||
lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;',
|
|
||||||
// 一级:'json:data.items;name;image;collect_num;category_id+video_id',
|
|
||||||
一级:'json:data.items;name;image;duration_string;video_id',
|
|
||||||
二级:'*',
|
|
||||||
搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href',
|
|
||||||
}
|
|
274
0307fty/js/模板.js
274
0307fty/js/模板.js
@ -1,274 +0,0 @@
|
|||||||
if (typeof Object.assign != 'function') {
|
|
||||||
Object.assign = function () {
|
|
||||||
var target = arguments[0];
|
|
||||||
for (var i = 1; i < arguments.length; i++) {
|
|
||||||
var source = arguments[i];
|
|
||||||
for (var key in source) {
|
|
||||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
||||||
target[key] = source[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return target;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function getMubans() {
|
|
||||||
var mubanDict = { // 模板字典
|
|
||||||
mxpro: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
// homeUrl:'/',
|
|
||||||
url: '/vodshow/fyclass--------fypage---.html',
|
|
||||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
// "Cookie": "searchneed=ok"
|
|
||||||
},
|
|
||||||
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1&&Text;.module-info-tag&&Text",
|
|
||||||
"img": ".lazyload&&data-original",
|
|
||||||
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
|
|
||||||
"content": ".module-info-introduction&&Text",
|
|
||||||
"tabs": ".module-tab-item",
|
|
||||||
"lists": ".module-play-list:eq(#id) a"
|
|
||||||
},
|
|
||||||
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
|
||||||
},
|
|
||||||
mxone5: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/show/fyclass--------fypage---.html',
|
|
||||||
searchUrl: '/search/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1&&Text;.tag-link&&Text",
|
|
||||||
"img": ".module-item-pic&&img&&data-src",
|
|
||||||
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
|
|
||||||
"content": ".vod_content&&Text",
|
|
||||||
"tabs": ".module-tab-item",
|
|
||||||
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
|
|
||||||
},
|
|
||||||
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
|
||||||
},
|
|
||||||
首图: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/vodshow/fyclass--------fypage---/',
|
|
||||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
// "Cookie": "searchneed=ok"
|
|
||||||
},
|
|
||||||
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
|
|
||||||
"img": ".myui-content__thumb .lazyload&&data-original",
|
|
||||||
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
|
|
||||||
"content": ".content&&Text",
|
|
||||||
"tabs": ".nav-tabs:eq(0) li",
|
|
||||||
"lists": ".myui-content__list:eq(#id) li"
|
|
||||||
},
|
|
||||||
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
},
|
|
||||||
首图2: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/list/fyclass-fypage.html',
|
|
||||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'UC_UA',
|
|
||||||
// "Cookie": ""
|
|
||||||
},
|
|
||||||
// class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
|
||||||
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
|
|
||||||
"img": ".stui-content__thumb .lazyload&&data-original",
|
|
||||||
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
|
|
||||||
"content": ".detail&&Text",
|
|
||||||
"tabs": ".stui-vodlist__head h3",
|
|
||||||
"lists": ".stui-content__playlist:eq(#id) li"
|
|
||||||
},
|
|
||||||
搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
},
|
|
||||||
默认: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/vodshow/fyclass--------fypage---.html',
|
|
||||||
searchUrl: '/vodsearch/-------------.html?wd=**',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
},
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
},
|
|
||||||
vfed: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
|
||||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'UC_UA',
|
|
||||||
},
|
|
||||||
// class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
|
|
||||||
"img": ".fed-list-info&&a&&data-original",
|
|
||||||
"desc": ".fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text",
|
|
||||||
"content": ".fed-part-esan&&Text",
|
|
||||||
"tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
|
|
||||||
"lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
|
|
||||||
},
|
|
||||||
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
|
||||||
},
|
|
||||||
海螺3: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
searchUrl: '/v_search/**----------fypage---.html',
|
|
||||||
url: '/vod_____show/fyclass--------fypage---.html',
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA'
|
|
||||||
},
|
|
||||||
timeout: 5000,
|
|
||||||
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
cate_exclude: '明星|专题|最新|排行',
|
|
||||||
limit: 40,
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
|
||||||
double: true,
|
|
||||||
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
|
|
||||||
"img": ".hl-lazy&&data-original",
|
|
||||||
"desc": ".hl-infos-content&&.hl-text-conch&&Text",
|
|
||||||
"content": ".hl-content-text&&Text",
|
|
||||||
"tabs": ".hl-tabs&&a",
|
|
||||||
"lists": ".hl-plays-list:eq(#id)&&li"
|
|
||||||
},
|
|
||||||
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
},
|
|
||||||
海螺2: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
|
||||||
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA'
|
|
||||||
},
|
|
||||||
timeout: 5000,
|
|
||||||
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
|
||||||
limit: 40,
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
|
||||||
double: true,
|
|
||||||
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h2&&Text;.deployment&&Text",
|
|
||||||
"img": ".lazy&&data-original",
|
|
||||||
"desc": ".deployment&&Text",
|
|
||||||
"content": ".ec-show&&Text",
|
|
||||||
"tabs": "#tag&&a",
|
|
||||||
"lists": ".play_list_box:eq(#id)&&li"
|
|
||||||
},
|
|
||||||
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
},
|
|
||||||
短视: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
// homeUrl:'/',
|
|
||||||
url: '/channel/fyclass-fypage.html',
|
|
||||||
searchUrl: '/search.html?wd=**',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
// "Cookie": "searchneed=ok"
|
|
||||||
},
|
|
||||||
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
cate_exclude: '解析|动态',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
|
|
||||||
"img": ".img&&img&&data-src",
|
|
||||||
"desc": ".content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text",
|
|
||||||
"content": ".zkjj_a&&Text",
|
|
||||||
"tabs": ".py-tabs&&option",
|
|
||||||
"lists": ".player:eq(#id) li"
|
|
||||||
},
|
|
||||||
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
return JSON.parse(JSON.stringify(mubanDict));
|
|
||||||
}
|
|
||||||
var mubanDict = getMubans();
|
|
||||||
var muban = getMubans();
|
|
||||||
export default {muban,getMubans};
|
|
2734
0307fty/live.txt
2734
0307fty/live.txt
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 116 KiB |
File diff suppressed because one or more lines are too long
@ -1,16 +0,0 @@
|
|||||||
使用方法:
|
|
||||||
1、复制以下本地配置地址;
|
|
||||||
2、app端操作,点开“配置地址”/“配置文件填写",有“存储权限”的点一下,保持此界面不动;
|
|
||||||
3、浏览器操作,本机/同局域网打开步骤1显示的地址,点配置,上传本地包(自动解压);
|
|
||||||
(步骤3等效操作:将本地包中tvboxhh解压放到根目录)
|
|
||||||
4、继续在步骤3的页面中"请输入自定义配置接口地址"处,粘贴步骤1复制的本地配置地址,点"确定";
|
|
||||||
|
|
||||||
5、回到步骤2界面,确认步骤4粘贴内容已显示在"确定"左侧,点“确定”。返回主页即可享用。
|
|
||||||
本地配置地址:
|
|
||||||
影视TV用
|
|
||||||
file://tvboxhh/0307fty/localxd_0307fty.bmp
|
|
||||||
TVBox用
|
|
||||||
clan://localhost/tvboxhh/0307fty/localxd_0307fty.json
|
|
||||||
频道:https://t.me/TVBox_local
|
|
||||||
local by xhh
|
|
||||||
本地化模式:全本地,相对路径
|
|
Binary file not shown.
Before Width: | Height: | Size: 57 KiB |
@ -1 +0,0 @@
|
|||||||
clan://localhost/tvboxhh/0307fty/localxd_0307fty.json
|
|
BIN
0307yyds/100.jar
BIN
0307yyds/100.jar
Binary file not shown.
@ -1,121 +0,0 @@
|
|||||||
{
|
|
||||||
"drives": [
|
|
||||||
{
|
|
||||||
"name": "👧小丫",
|
|
||||||
"server": "https://pan.d1.mk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "⭕️歐逼",
|
|
||||||
"server": "https://alistcn.repl.co"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🌊云哲小站",
|
|
||||||
"server": "http://202.81.231.111:50526"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🐮98NB",
|
|
||||||
"server": "https://a.98nb.ga"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🍆神器云",
|
|
||||||
"server": "https://al.chirmyram.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🎢arhome",
|
|
||||||
"server": "https://xn--ar-4g8e.tk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "💢姹莱坞",
|
|
||||||
"server": "https://a.aa01.ml",
|
|
||||||
"passwd": "agree"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🧬杜比",
|
|
||||||
"server": "https://dubi.tk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🥼帥盘",
|
|
||||||
"server": "https://hi.shuaipeng.wang"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🌤晴园宝藏",
|
|
||||||
"server": "https://alist.52qy.repl.co"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🐭米奇妙妙屋",
|
|
||||||
"server": "https://anime.mqmmw.ga"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "💂小兵网盘",
|
|
||||||
"server": "https://6vv.app"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🐋一只鱼",
|
|
||||||
"server": "https://alist.youte.ml"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🐉神族九帝",
|
|
||||||
"server": "https://alist.shenzjd.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "☃姬路白雪",
|
|
||||||
"server": "https://pan.jlbx.xyz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🕵好汉吧",
|
|
||||||
"server": "https://8023.haohanba.cn"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🎡資源小站",
|
|
||||||
"server": "https://960303.xyz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🎧听闻网盘",
|
|
||||||
"server": "https://wangpan.sangxuesheng.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "💾DISK",
|
|
||||||
"server": "http://124.222.140.243:8080"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🌨云播放",
|
|
||||||
"server": "https://quanzi.laoxianghuijia.cn"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "✨星梦",
|
|
||||||
"server": "https://pan.bashroot.top"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "💫触光",
|
|
||||||
"server": "https://pan.ichuguang.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🥒SB盘",
|
|
||||||
"server": "http://sbpan.tk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🧔老刘备",
|
|
||||||
"server": "https://ali.liucn.repl.co"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🌨秋雨分享",
|
|
||||||
"server": "https://share.laowang.me"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🌼菊花盘",
|
|
||||||
"server": "https://pan.142856.xyz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": " 👀梓澪",
|
|
||||||
"server": "https://zi0.cc"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "💦讯维",
|
|
||||||
"server": "https://pan.xwbeta.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "🦀9T(Adult)",
|
|
||||||
"server": "https://drive.9t.ee"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,301 +0,0 @@
|
|||||||
{
|
|
||||||
"author": "春风",
|
|
||||||
"ua": "Mozilla/5.0 (Linux; Android 10; LYA-AL00; HMSCore 6.4.0.312; GMSCore 20.15.16) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.4.300 Mobile Safari/537.36",
|
|
||||||
"homeUrl": "https://v.xiangdao.me",
|
|
||||||
"dcVipFlag": "true",
|
|
||||||
"dcPlayUrl": "true",
|
|
||||||
"cateManual": {
|
|
||||||
"电影": "1",
|
|
||||||
"连续剧": "2",
|
|
||||||
"动漫": "4",
|
|
||||||
"综艺": "3"
|
|
||||||
},
|
|
||||||
"homeVodNode": "//section/section[position()>2]//ul[@class='resize_list']/li/a",
|
|
||||||
"homeVodName": "/@title",
|
|
||||||
"homeVodId": "/@href",
|
|
||||||
"homeVodIdR": "/(S+).html",
|
|
||||||
"homeVodImg": "//@data-echo",
|
|
||||||
"homeVodImgR": "",
|
|
||||||
"homeVodMark": "/div/span[2]/span/text()",
|
|
||||||
"cateUrl": "https://v.xiangdao.me/index.php?m=vod-list-id-{cateId}-pg-{catePg}.html",
|
|
||||||
"cateVodNode": "//ul[@class='resize_list']/li/a",
|
|
||||||
"cateVodName": "/@title",
|
|
||||||
"cateVodId": "/@href",
|
|
||||||
"cateVodIdR": "/(S+).html",
|
|
||||||
"cateVodImg": "//@data-echo",
|
|
||||||
"cateVodImgR": "",
|
|
||||||
"cateVodMark": "/div/span[2]/span/em/text()",
|
|
||||||
"dtUrl": "https://v.xiangdao.me/{vid}.html",
|
|
||||||
"dtNode": "//body",
|
|
||||||
"dtName": "//section[@class='page-hd']/a/@title",
|
|
||||||
"dtNameR": "",
|
|
||||||
"dtImg": "//section[@class='page-hd']/a/img/@src",
|
|
||||||
"dtImgR": "",
|
|
||||||
"dtCate": "",
|
|
||||||
"dtCateR": "",
|
|
||||||
"dtYear": "//span[contains(text(), '年代')]/following-sibling::a/text()",
|
|
||||||
"dtYearR": "",
|
|
||||||
"dtArea": "",
|
|
||||||
"dtAreaR": "",
|
|
||||||
"dtDirector": "//span[contains(text(), '导演')]/following-sibling::a/text()",
|
|
||||||
"dtDirectorR": "",
|
|
||||||
"dtActor": "//span[contains(text(), '主演')]/following-sibling::a/text()",
|
|
||||||
"dtActorR": "",
|
|
||||||
"dtDesc": "//article[@class='detail-con']/p/text()",
|
|
||||||
"dtDescR": "",
|
|
||||||
"dtFromNode": "//div[@class='hd']/ul/li/a",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtFromNameR": "",
|
|
||||||
"dtUrlNode": "//div[@class='numList']/ul",
|
|
||||||
"dtUrlSubNode": "/li/a",
|
|
||||||
"dtUrlId": "@href",
|
|
||||||
"dtUrlIdR": "/(S+).html",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"dtUrlNameR": "",
|
|
||||||
"playUrl": "https://v.xiangdao.me/{playUrl}.html",
|
|
||||||
"playUa": "",
|
|
||||||
"searchUrl": "https://v.xiangdao.me/index.php?m=vod-search&wd={wd}",
|
|
||||||
"scVodNode": "//ul[@class='ulPicTxt clearfix']/li",
|
|
||||||
"scVodName": "//span[@class='sTit']/text()",
|
|
||||||
"scVodId": "//span[@class='sBtn']/a/@href",
|
|
||||||
"scVodIdR": "/(S+).html",
|
|
||||||
"scVodImg": "//img/@data-src",
|
|
||||||
"scVodMark": "//span[@class='sDes'][2]/text()",
|
|
||||||
"filter":{
|
|
||||||
"1": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"1"},
|
|
||||||
{"n":"动作片","v":"5"},
|
|
||||||
{"n":"喜剧片","v":"6"},
|
|
||||||
{"n":"爱情片","v":"7"},
|
|
||||||
{"n":"科幻片","v":"8"},
|
|
||||||
{"n":"恐怖片","v":"9"},
|
|
||||||
{"n":"剧情片","v":"10"},
|
|
||||||
{"n":"战争片","v":"11"},
|
|
||||||
{"n":"惊悚片","v":"16"},
|
|
||||||
{"n":"奇幻片","v":"17"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"2": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"2"},
|
|
||||||
{"n":"国产剧","v":"12"},
|
|
||||||
{"n":"港台剧","v":"13"},
|
|
||||||
{"n":"日韩剧","v":"14"},
|
|
||||||
{"n":"欧美剧","v":"15"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"3": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"3"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"4": [
|
|
||||||
{
|
|
||||||
"name":"类型",
|
|
||||||
"key":"cateId",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":"4"},
|
|
||||||
{"n":"动漫剧","v":"18"},
|
|
||||||
{"n":"动漫片","v":"19"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"年份",
|
|
||||||
"key":"year",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"2022","v":"2022"},
|
|
||||||
{"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"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"地区",
|
|
||||||
"key":"area",
|
|
||||||
"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":"加拿大"}
|
|
||||||
]},
|
|
||||||
{
|
|
||||||
"name":"排序",
|
|
||||||
"key":"by",
|
|
||||||
"value":[
|
|
||||||
{"n":"全部","v":""},
|
|
||||||
{"n":"时间","v":"time"},
|
|
||||||
{"n":"人气","v":"hits"},
|
|
||||||
{"n":"评分","v":"score"}
|
|
||||||
]}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"author": "率性而活",
|
|
||||||
"ua":"Mozilla/5.0 (Linux; Android 8.1.0; OPPO R11t Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.19 SP-engine/2.15.0 baiduboxapp/11.19.5.10 (Baidu; P1 8.1.0)",
|
|
||||||
//125.88.199.34 m.live.qq.com
|
|
||||||
|
|
||||||
//"dcVipFlag": "true",
|
|
||||||
//"dcPlayUrl": "true",
|
|
||||||
"homeUrl": "https://m.live.qq.com/directory/game/Basketball",
|
|
||||||
"cateManual": {
|
|
||||||
"篮球": "directory/game/Basketball",
|
|
||||||
"足球":"directory/game/Football",
|
|
||||||
"搏击":"directory/game/Fight",
|
|
||||||
"网球排球":"directory/game/Tennis",
|
|
||||||
"英文原声":"directory/game/English",
|
|
||||||
"台球":"directory/game/Billiards",
|
|
||||||
"棒球/橄榄球/冰球":"directory/game/MLB",
|
|
||||||
"NBA":"directory/game/NBA",
|
|
||||||
"CBA":"directory/game/CBA",
|
|
||||||
"颜值":"directory/game/YZ",
|
|
||||||
"棋牌/游戏":"directory/game/Game"
|
|
||||||
|
|
||||||
},
|
|
||||||
"homeVodNode": "//a[contains(@href,'/10')]","homeVodName": "/div/following-sibling::p[1]/text()","homeVodId": "/@href","homeVodIdR": "/(\\S+)","homeVodImg": "//div[contains(@style,'http')]/@style","homeVodImgR": "(http.*?jpg)","homeVodMark": "",
|
|
||||||
|
|
||||||
"cateUrl": "https://m.live.qq.com/{cateId}",
|
|
||||||
|
|
||||||
"cateVodNode": "//a[contains(@href,'/10')]",
|
|
||||||
|
|
||||||
"cateVodName": "/div/following-sibling::p[1]/text()",
|
|
||||||
|
|
||||||
"cateVodId": "/@href",
|
|
||||||
|
|
||||||
"cateVodIdR": "/(\\S+)",
|
|
||||||
|
|
||||||
"cateVodImg": "//div[contains(@style,'http')]/@style",
|
|
||||||
|
|
||||||
"cateVodImgR": "(http.*?jpg)",
|
|
||||||
|
|
||||||
"cateVodMark": "",
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
"dtUrl": "https://m.live.qq.com/{vid}",
|
|
||||||
"dtNode": "//body",
|
|
||||||
"dtName": "//p[contains(@class,'p-title')]/text()",
|
|
||||||
"dtNameR": "(“.*?”)",
|
|
||||||
"dtImg": "//div[contains(@class,'share-bar')]/@data-pic",
|
|
||||||
"dtImgR": "",
|
|
||||||
"dtCate": "",
|
|
||||||
"dtCateR": "",
|
|
||||||
"dtYear": "",
|
|
||||||
"dtYearR": "",
|
|
||||||
"dtArea": "",
|
|
||||||
"dtAreaR": "",
|
|
||||||
"dtDirector": "",
|
|
||||||
"dtDirectorR": "",
|
|
||||||
"dtActor": "",
|
|
||||||
"dtActorR": "",
|
|
||||||
"dtDesc": "",
|
|
||||||
"dtDescR": "",
|
|
||||||
"dtFromNode": "//p[contains(@class,'p-title')]",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtFromNameR": "(\\企鹅体育)",
|
|
||||||
"dtUrlNode": "//div[contains(@class,'wenzi')]",
|
|
||||||
"dtUrlSubNode": "/a",
|
|
||||||
"dtUrlId": "/text()",
|
|
||||||
"dtUrlIdR": "m.live.qq.com/(\\S+)",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"dtUrlNameR": "(\\d+)",
|
|
||||||
"playUrl": "https://m.live.qq.com/{playUrl}",
|
|
||||||
"playUa":"{\"User-Agent\":\"okhttp/3.12.11\"}"
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"ua": "",
|
|
||||||
"homeUrl": "https://dm84.tv",
|
|
||||||
"cateNode": "//ul[contains(@class,'nav_row')]/li/a[contains(@href, '.html')]",
|
|
||||||
"cateName": "/text()",
|
|
||||||
"cateId": "/@href",
|
|
||||||
"cateIdR": "/list-(\\d+).html",
|
|
||||||
"cateManual": {},
|
|
||||||
"homeVodNode": "//ul[@class='v_list']/li/div[@class='item']",
|
|
||||||
"homeVodName": "/a[@class='title']/@title",
|
|
||||||
"homeVodId": "/a[@class='title']/@href",
|
|
||||||
"homeVodIdR": "/v/(\\w+).html",
|
|
||||||
"homeVodImg": "/a/@data-bg",
|
|
||||||
"homeVodMark": "/span[@class='desc']/text()",
|
|
||||||
"cateUrl": "https://dm84.tv/list-{cateId}-{catePg}.html",
|
|
||||||
"cateVodNode": "//ul[@class='v_list']/li/div[@class='item']",
|
|
||||||
"cateVodName": "/a[@class='title']/@title",
|
|
||||||
"cateVodId": "/a[@class='title']/@href",
|
|
||||||
"cateVodIdR": "/v/(\\w+).html",
|
|
||||||
"cateVodImg": "/a/@data-bg",
|
|
||||||
"cateVodMark": "/span[@class='desc']/text()",
|
|
||||||
"dtUrl": "https://dm84.tv/v/{vid}.html",
|
|
||||||
"dtNode": "//div[contains(@class,'v_content')]",
|
|
||||||
"dtName": "/parent::*/h1[@class='v_title']/a/text()",
|
|
||||||
"dtImg": "/div[@class='cover']/img/@src",
|
|
||||||
"dtFromNode": "//ul[contains(@class,'play_from')]/li",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtUrlNode": "//ul[contains(@class,'play_list')]",
|
|
||||||
"dtUrlSubNode": "/li/a",
|
|
||||||
"dtUrlId": "@href",
|
|
||||||
"dtUrlIdR": "/p/(\\S+).html",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"playUrl": "https://dm84.tv/p/{playUrl}.html",
|
|
||||||
"searchUrl": "https://dm84.tv/s----------.html?wd={wd}",
|
|
||||||
"scVodNode": "//ul[@class='v_list']/li/div[@class='item']",
|
|
||||||
"scVodName": "/a[@class='title']/@title",
|
|
||||||
"scVodId": "/a[@class='title']/@href",
|
|
||||||
"scVodIdR": "/v/(\\w+).html",
|
|
||||||
"scVodImg": "/a/@data-bg",
|
|
||||||
"scVodMark": "/span[@class='desc']/text()"
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"ua": "",
|
|
||||||
"homeUrl": "https://dm84.tv",
|
|
||||||
"cateNode": "//ul[contains(@class,'nav_row')]/li/a[contains(@href, '.html')]",
|
|
||||||
"cateName": "/text()",
|
|
||||||
"cateId": "/@href",
|
|
||||||
"cateIdR": "/list-(\\d+).html",
|
|
||||||
"cateManual": {},
|
|
||||||
"homeVodNode": "//ul[@class='v_list']/li/div[@class='item']",
|
|
||||||
"homeVodName": "/a[@class='title']/@title",
|
|
||||||
"homeVodId": "/a[@class='title']/@href",
|
|
||||||
"homeVodIdR": "/v/(\\w+).html",
|
|
||||||
"homeVodImg": "/a/@data-bg",
|
|
||||||
"homeVodMark": "/span[@class='desc']/text()",
|
|
||||||
"cateUrl": "https://dm84.tv/list-{cateId}-{catePg}.html",
|
|
||||||
"cateVodNode": "//ul[@class='v_list']/li/div[@class='item']",
|
|
||||||
"cateVodName": "/a[@class='title']/@title",
|
|
||||||
"cateVodId": "/a[@class='title']/@href",
|
|
||||||
"cateVodIdR": "/v/(\\w+).html",
|
|
||||||
"cateVodImg": "/a/@data-bg",
|
|
||||||
"cateVodMark": "/span[@class='desc']/text()",
|
|
||||||
"dtUrl": "https://dm84.tv/v/{vid}.html",
|
|
||||||
"dtNode": "//div[contains(@class,'v_content')]",
|
|
||||||
"dtName": "/parent::*/h1[@class='v_title']/a/text()",
|
|
||||||
"dtImg": "/div[@class='cover']/img/@src",
|
|
||||||
"dtFromNode": "//ul[contains(@class,'play_from')]/li",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtUrlNode": "//ul[contains(@class,'play_list')]",
|
|
||||||
"dtUrlSubNode": "/li/a",
|
|
||||||
"dtUrlId": "@href",
|
|
||||||
"dtUrlIdR": "/p/(\\S+).html",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"playUrl": "https://dm84.tv/p/{playUrl}.html",
|
|
||||||
"searchUrl": "https://dm84.tv/s----------.html?wd={wd}",
|
|
||||||
"scVodNode": "//ul[@class='v_list']/li/div[@class='item']",
|
|
||||||
"scVodName": "/a[@class='title']/@title",
|
|
||||||
"scVodId": "/a[@class='title']/@href",
|
|
||||||
"scVodIdR": "/v/(\\w+).html",
|
|
||||||
"scVodImg": "/a/@data-bg",
|
|
||||||
"scVodMark": "/span[@class='desc']/text()"
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
{
|
|
||||||
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
|
|
||||||
"homeUrl": "https://www.yinfans.me",
|
|
||||||
"dcPlayUrl": "true",
|
|
||||||
"cateNode": "//a[contains(@href,'/s/')]",
|
|
||||||
"cateName": "concat(//span[contains(@class,'nav-link-title')]/text(),//a[contains(@class,'dropdown-item')]/text())",
|
|
||||||
"cateId": "/@href",
|
|
||||||
"cateIdR": "/s/(\\w+)",
|
|
||||||
"cateManual": {
|
|
||||||
"首页推荐": "page",
|
|
||||||
"蓝光原盘电影": "topic/bluray-movie/movie/page",
|
|
||||||
"蓝光原盘纪录片": "topic/bluray-movie/documentry/page",
|
|
||||||
"4K": "topic/4k/page"
|
|
||||||
},
|
|
||||||
|
|
||||||
"homeVodNode": "//div[contains(@class,'mainleft')]/ul/li/div[contains(@class,'thumbnail')]",
|
|
||||||
"homeVodName": "/a/@title",
|
|
||||||
"homeVodId": "/a/@href",
|
|
||||||
"homeVodIdR": "https://www.yinfans.me/movie/(\\S+)",
|
|
||||||
"homeVodImg": "/a/img/@src",
|
|
||||||
"homeVodImgR": "\\S+(http\\S+)",
|
|
||||||
"homeVodMark": "../div[contains(@class,'info')]/span[2]/a/text()",
|
|
||||||
|
|
||||||
"cateUrl": "https://www.yinfans.me/{cateId}/{catePg}",
|
|
||||||
"cateVodNode": "//div[contains(@class,'mainleft')]/ul/li/div[contains(@class,'thumbnail')]",
|
|
||||||
"cateVodName": "/a/@title",
|
|
||||||
"cateVodId": "/a/@href",
|
|
||||||
"cateVodIdR": "https://www.yinfans.me/movie/(\\S+)",
|
|
||||||
"cateVodImg": "/a/img/@src",
|
|
||||||
"cateVodImgR": "\\S+(http\\S+)",
|
|
||||||
"cateVodMark": "../div[contains(@class,'info')]/span[2]/a/text()",
|
|
||||||
|
|
||||||
"dtUrl": "https://www.yinfans.me/movie/{vid}",
|
|
||||||
"dtNode": "//div[@class='mainleft']",
|
|
||||||
"dtName": "/div[1]/h1/text()",
|
|
||||||
"dtNameR": "",
|
|
||||||
"dtImg": "/div[1]//div[@class='context']/div[1]/p[1]/a/@href",
|
|
||||||
"dtImgR": "",
|
|
||||||
"dtCate": "/div[1]//div[@class='context']/div[1]/p[2]/text()[5]",
|
|
||||||
"dtArea": "/div[1]//div[@class='context']/div[1]/p[2]/text()[4]",
|
|
||||||
"dtAreaR": "",
|
|
||||||
"dtYear": "/div[1]//div[@class='context']/div[1]/p[2]/text()[7]",
|
|
||||||
"dtYearR": "",
|
|
||||||
"dtActor": "/div[1]//div[@class='context']/div[1]/p[2]/text()[14]",
|
|
||||||
"dtDirector": "/div[1]//div[@class='context']/div[1]/p[2]/text()[13]",
|
|
||||||
"dtDesc": "/div[1]//div[@class='context']/div[1]/p[4]/text()",
|
|
||||||
|
|
||||||
"dtFromNode": "//div[@class='tab-pane active']",
|
|
||||||
"dtFromName": "//div[@class='btn-group']/label[1]/text()",
|
|
||||||
|
|
||||||
"dtUrlNode": "//table[@id='cili']/tbody",
|
|
||||||
"dtUrlSubNode": "/tr[1]/td/a",
|
|
||||||
"dtUrlId": "@href",
|
|
||||||
"dtUrlIdR": "",
|
|
||||||
"dtUrlName": "concat(//span/span[1]/text(),'--', //span[@class='label label-warning']/text())",
|
|
||||||
"playUrl": "",
|
|
||||||
|
|
||||||
|
|
||||||
"playUa": "",
|
|
||||||
"searchUrl": "",
|
|
||||||
"scVodNode": "json:list",
|
|
||||||
"scVodName": "name",
|
|
||||||
"scVodId": "id",
|
|
||||||
"scVodIdR": "",
|
|
||||||
"scVodImg": "pic",
|
|
||||||
"scVodMark": ""
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,386 +0,0 @@
|
|||||||
{
|
|
||||||
"author":"takagen99",
|
|
||||||
"ua": "",
|
|
||||||
//"homeUrl": "https://www.duboku.tv/",
|
|
||||||
"homeUrl": "https://u.duboku.io/",
|
|
||||||
"dcVipFlag": "true",
|
|
||||||
"dcPlayUrl": "true",
|
|
||||||
"cateNode": "//ul[contains(@class,'nav-menu')]/li/a[contains(@href, 'vodtype')]",
|
|
||||||
"cateName": "/text()",
|
|
||||||
"cateId": "/@href",
|
|
||||||
"cateIdR": "/vodtype/(\\w+).html",
|
|
||||||
"cateManual": {
|
|
||||||
"国产剧": "13",
|
|
||||||
"日韩剧": "15",
|
|
||||||
"短剧": "21",
|
|
||||||
"英美剧": "16",
|
|
||||||
"台泰剧": "14",
|
|
||||||
"港剧": "20",
|
|
||||||
"综艺": "3",
|
|
||||||
"动漫": "4"
|
|
||||||
},
|
|
||||||
|
|
||||||
// Home Summary ================================================
|
|
||||||
"homeVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a",
|
|
||||||
"homeVodName": "/@title",
|
|
||||||
"homeVodId": "/@href",
|
|
||||||
"homeVodIdR": "/voddetail/(\\w+).html",
|
|
||||||
"homeVodImg": "/@data-original",
|
|
||||||
"homeVodImgR": "\\S+(http\\S+)",
|
|
||||||
"homeVodMark": "//span[contains(@class,'pic-text')]/text()",
|
|
||||||
|
|
||||||
// Category Summary ================================================
|
|
||||||
"cateUrl": "https://u.duboku.io/vodshow/{cateId}-{area}-{by}------{catePg}---{year}.html",
|
|
||||||
"cateVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a",
|
|
||||||
"cateVodName": "/@title",
|
|
||||||
"cateVodId": "/@href",
|
|
||||||
"cateVodIdR": "/voddetail/(\\w+).html",
|
|
||||||
"cateVodImg": "/@data-original",
|
|
||||||
"cateVodImgR": "\\S+(http\\S+)",
|
|
||||||
"cateVodMark": "//span[contains(@class,'pic-text')]/text()",
|
|
||||||
|
|
||||||
// Category Details ================================================
|
|
||||||
"dtUrl": "https://my.duboku.vip/voddetail/{vid}.html",
|
|
||||||
"dtNode": "//body",
|
|
||||||
"dtName": "//div[contains(@class,'myui-content__thumb')]/a/@title",
|
|
||||||
"dtNameR": "",
|
|
||||||
"dtImg": "//div[contains(@class,'myui-content__thumb')]/a/img/@data-original",
|
|
||||||
"dtImgR": "",
|
|
||||||
"dtCate": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '分类')]/following-sibling::a/text()",
|
|
||||||
"dtYear": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '年份')]/following-sibling::a/text()",
|
|
||||||
"dtArea": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '地区')]/following-sibling::a/text()",
|
|
||||||
"dtMark": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '更新')]/following-sibling::a/text()",
|
|
||||||
"dtDirector": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '导演')]/following-sibling::a/text()",
|
|
||||||
"dtActor": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '主演')]/following-sibling::a/text()",
|
|
||||||
"dtDesc": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '简介')]/following-sibling::a/text()",
|
|
||||||
|
|
||||||
// Playlist =====================================================
|
|
||||||
"dtFromNode": "//ul[contains(@class,'nav-tabs')]/li/a",
|
|
||||||
"dtFromName": "/text()",
|
|
||||||
"dtFromNameR": "",
|
|
||||||
"dtUrlNode": "//ul[contains(@class,'myui-content__list')]",
|
|
||||||
"dtUrlSubNode": "/li/a",
|
|
||||||
"dtUrlId": "/@href",
|
|
||||||
"dtUrlIdR": "/vodplay/(\\S+).html",
|
|
||||||
"dtUrlName": "/text()",
|
|
||||||
"dtUrlNameR": "",
|
|
||||||
"playUrl": "https://my.duboku.vip/vodplay/{playUrl}.html",
|
|
||||||
"playUa": "",
|
|
||||||
|
|
||||||
// Search Results ================================================
|
|
||||||
"searchUrl": "https://my.duboku.vip/index.php/ajax/suggest?mid=1&wd={wd}&limit=10",
|
|
||||||
"scVodNode": "json:list",
|
|
||||||
"scVodName": "name",
|
|
||||||
"scVodId": "id",
|
|
||||||
"scVodIdR": "",
|
|
||||||
"scVodImg": "pic",
|
|
||||||
"scVodMark": "",
|
|
||||||
|
|
||||||
// Filters =======================================================
|
|
||||||
"filter": {
|
|
||||||
"13": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"20": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"14": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"16": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"15": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"2": [
|
|
||||||
{
|
|
||||||
"key": "cateId",
|
|
||||||
"name": "类型",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "陆剧","v": "13"},
|
|
||||||
{"n": "日韩剧","v": "15"},
|
|
||||||
{"n": "英美剧","v": "16"},
|
|
||||||
{"n": "台泰剧","v": "14"},
|
|
||||||
{"n": "港剧","v": "20"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "area",
|
|
||||||
"name": "地区",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "内地","v": "内地"},
|
|
||||||
{"n": "韩国","v": "韩国"},
|
|
||||||
{"n": "香港","v": "香港"},
|
|
||||||
{"n": "台湾","v": "台湾"},
|
|
||||||
{"n": "美国","v": "美国"},
|
|
||||||
{"n": "英国","v": "英国"},
|
|
||||||
{"n": "巴西","v": "巴西"},
|
|
||||||
{"n": "西班牙","v": "西班牙"},
|
|
||||||
{"n": "泰国","v": "泰国"},
|
|
||||||
{"n": "德国","v": "德国"},
|
|
||||||
{"n": "法国","v": "法国"},
|
|
||||||
{"n": "日本","v": "日本"},
|
|
||||||
{"n": "荷兰","v": "荷兰"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"3": [
|
|
||||||
{
|
|
||||||
"key": "area",
|
|
||||||
"name": "地区",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "内地","v": "内地"},
|
|
||||||
{"n": "香港","v": "香港"},
|
|
||||||
{"n": "台湾","v": "台湾"},
|
|
||||||
{"n": "韩国","v": "韩国"},
|
|
||||||
{"n": "美国","v": "美国"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"4": [
|
|
||||||
{
|
|
||||||
"key": "area",
|
|
||||||
"name": "地区",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "国产","v": "国产"},
|
|
||||||
{"n": "日本","v": "日本"},
|
|
||||||
{"n": "美国","v": "美国"},
|
|
||||||
{"n": "法国","v": "法国"},
|
|
||||||
{"n": "其他","v": "其他"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"20": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"21": [
|
|
||||||
{
|
|
||||||
"key": "year",
|
|
||||||
"name": "年份",
|
|
||||||
"value": [
|
|
||||||
{"n": "全部","v": ""},
|
|
||||||
{"n": "2022","v": "2022"},
|
|
||||||
{"n": "2021","v": "2021"},
|
|
||||||
{"n": "2020","v": "2020"},
|
|
||||||
{"n": "2019","v": "2019"},
|
|
||||||
{"n": "2018","v": "2018"},
|
|
||||||
{"n": "2017","v": "2017"}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "by",
|
|
||||||
"name": "排序",
|
|
||||||
"value": [
|
|
||||||
{"n": "排序","v": ""},
|
|
||||||
{"n": "时间","v": "time"},
|
|
||||||
{"n": "人气","v": "hits"},
|
|
||||||
{"n": "评分","v": "score"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
{
|
|
||||||
"title": "分享短视频",
|
|
||||||
"author": "香雅情",
|
|
||||||
"UserAgent":"",
|
|
||||||
"firstpage": "1",
|
|
||||||
"class_url": "http://www.sharenice.net/{cateId}?page={catePg}[firstPage=http://www.sharenice.net/{cateId}]",
|
|
||||||
"class_name": "抖音&快手&微视&火山&场库&体育&美拍&秒拍&全民&梨&好兔&美女&正能量&搞笑&社会&游戏&娱乐&旅游&萌系&生活&音乐&美食&明星&动漫&影视&时尚",
|
|
||||||
"class_value": "douyin&kuaishou&weishi&huoshan&changku&tags/t-5L2T6IKy.html&meipai&miaopai&quanmin&lishipin&haotu&tags/t-576O5aWz.html&tags/t-5q2j6IO96YeP.html&tags/t-5pCe56yR.html&tags/t-56S+5Lya.html&tags/t-5ri45oiP.html&tags/t-5aix5LmQ.html&tags/t-5peF5ri4.html&tags/t-6JCM57O7.html&tags/t-55Sf5rS7.html&tags/t-6Z+z5LmQ.html&tags/t-576O6aOf.html&tags/t-5piO5pif.html&tags/t-5Yqo5ryr.html&tags/t-5b2x6KeG.html&tags/t-5pe25bCa.html",
|
|
||||||
"filterdata":{},
|
|
||||||
"cat_YN_twice": "1",
|
|
||||||
"cat_twice_pre": "class=\"main-container\">",
|
|
||||||
"cat_twice_suf": "<div class=\"page",
|
|
||||||
"cat_arr_pre": "<li",
|
|
||||||
"cat_arr_suf": "</li>",
|
|
||||||
"cat_pic": "original=\"&&\"",
|
|
||||||
"cat_title": "title=\"&&\"",
|
|
||||||
"cat_subtitle": "",
|
|
||||||
"cat_url": "href=\"&&\"",
|
|
||||||
"cat_prefix": "",
|
|
||||||
"cat_suffix": "",
|
|
||||||
"search_url": "",
|
|
||||||
"search_mode": "0",
|
|
||||||
"jsonpic": "pic",
|
|
||||||
"jsonname": "name",
|
|
||||||
"jsonid": "id",
|
|
||||||
"jsonstitle":"",
|
|
||||||
"sea_YN_twice": "",
|
|
||||||
"sea_twice_pre": "",
|
|
||||||
"sea_twice_suf": "",
|
|
||||||
"sea_arr_pre": "",
|
|
||||||
"sea_arr_suf": "",
|
|
||||||
"sea_pic": "",
|
|
||||||
"sea_title": "",
|
|
||||||
"sea_url": "",
|
|
||||||
"search_prefix": "",
|
|
||||||
"search_suffix": "",
|
|
||||||
"sea_subtitle": "",
|
|
||||||
"force_play": "1",
|
|
||||||
"play_prefix": "",
|
|
||||||
"play_suffix": "",
|
|
||||||
"play_header": "空",
|
|
||||||
"proj_actor": "空",
|
|
||||||
"proj_plot": "",
|
|
||||||
"tab_YN_twice": "0",
|
|
||||||
"tab_twice_pre": "",
|
|
||||||
"tab_twice_suf": "",
|
|
||||||
"tab_arr_pre": "",
|
|
||||||
"tab_arr_suf": "",
|
|
||||||
"tab_title": "",
|
|
||||||
"list_YN_twice": "0",
|
|
||||||
"list_twice_pre": "空",
|
|
||||||
"list_twice_suf": "空",
|
|
||||||
"list_arr_pre": "",
|
|
||||||
"list_arr_suf": "",
|
|
||||||
"epi_YN_twice": "0",
|
|
||||||
"epi_twice_pre": "空",
|
|
||||||
"epi_twice_suf": "空",
|
|
||||||
"epi_arr_pre": "",
|
|
||||||
"epi_arr_suf": "",
|
|
||||||
"epi_title": "",
|
|
||||||
"epi_url": "",
|
|
||||||
"epiurl_prefix": "",
|
|
||||||
"epiurl_suffix": "",
|
|
||||||
//是否开启手动嗅探
|
|
||||||
"ManualSniffer":"1",
|
|
||||||
//手动嗅探视频链接关键字,每个用#隔开
|
|
||||||
"VideoFormat":".mp4#.m3u8#.flv#is_play_url=1#item/video#kaiyanapp#qianpailive"
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,119 +0,0 @@
|
|||||||
//写法思路来自biubiu影院,海阔视界,xpath筛选。
|
|
||||||
//项目魔改至github开源仓库https://github.com/Tangsan99999/TvJar中的XBiubiu.java文件,
|
|
||||||
//本文档为完整模板,实际情况可按规则写法删去不需要的。
|
|
||||||
{
|
|
||||||
//规则名
|
|
||||||
"title": "网易CC直播",
|
|
||||||
//作者
|
|
||||||
"author": "聆听优美旋律",
|
|
||||||
//请求头UA,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
|
|
||||||
//习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA
|
|
||||||
"UserAgent":"",
|
|
||||||
//请求头Referer参数,如果只是播放页需要,填WebView即可引用播放页的链接作嗅探Referer参数。
|
|
||||||
//一般很少用,留空或删除
|
|
||||||
"Referer":"",
|
|
||||||
//图片是否需要走代理,一般是图片无Referer参数不显示那种需要,全局设置,0否,1是。
|
|
||||||
"PicNeedProxy":"0",
|
|
||||||
//是否开启获取首页数据,0关闭,1开启
|
|
||||||
"homeContent":"0",
|
|
||||||
//分类链接起始页码,禁止负数和含小数点。
|
|
||||||
"firstpage": "1",
|
|
||||||
//分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接]
|
|
||||||
"class_url": "http://api.cc.163.com/v1/wapcc/liveinfo?gametype={cateId}&page={catePg}",
|
|
||||||
//分类名,分类1&分类2&分类3
|
|
||||||
"class_name": "梦幻西游电脑版&星秀&梦幻西游手游&永劫无间&大话西游2经典版&明日之后&大话西游手游&新倩女幽魂&第五人格&倩女幽魂手游&荒野行动&大话西游2免费版&荒野行动PC模拟器&阴阳师&暗黑破坏神:不朽&率土之滨&天下3&主机单机&我的世界&游戏文化&二次元&哈利波特:魔法觉醒&宝可梦大探险&一梦江湖&光·遇&守望先锋&神都夜行录&决战!平安京&猫和老鼠&天谕手游&超激斗梦境&镇魔曲手游&王牌竞速&逆水寒&其他游戏&流星群侠传&梦幻西游三维版&魔兽世界怀旧服&风华正茂&星战前夜:无烬星河&机动都市阿尔法&忘川风华录&FPS综合游戏&非人学园&实况足球&泰亚史诗&游戏王:决斗链接&战争怒吼&漫威超级战争&大唐无双零&梦幻西游网页版&武魂2&天谕&镇魔曲&乱斗西游2&命运2&魔兽世界&暗黑破坏神&炉石传说&风暴英雄&《天下》手游&劲舞团&光明大陆&暴雪经典&三少爷的剑&迷雾世界&终结战场&战意&永远的7日之都&新游中心&狼人杀&影之诗&魂之轨迹&三国如龙传&量子特攻&堡垒前线:破坏与创造&猎魂觉醒&终结战场PC版&轩辕剑龙舞云山&实况:王者集结&权力与纷争&花与剑&易次元&Apex英雄&遇见逆水寒&阴阳师:百闻牌&青璃&阴阳师:妖怪屋&重装上阵&猎手之王&无主之地3&第九所&Badlanders&风云岛行动&一起优诺&隐世录&EVE Online&全面战争:竞技场&正能量&我的世界中国版&暴雪游戏&魔兽争霸&洪荒文明&密特拉之星&阴阳师: 妖怪小班&无尽的拉格朗日&漫威对决&月神的迷宫&有杀气童话2&零号任务&蛋仔派对&绝对演绎&绿茵信仰&大话女儿国&逆水寒手游&古风国色&巨好看&大航海之路&大富翁9&永恒文明&大唐无双手游&语音",
|
|
||||||
//分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1
|
|
||||||
"class_value": "3&65005&25&9133&6&9050&28&4&9045&30&9035&20&9041&9010&9144&90013&2&9022&9006&9118&65008&9109&9097&9049&9063&1007&9053&9031&9077&9085&9105&9020&9123&9051&0&9072&9075&9099&9079&9136&9061&9129&9124&9043&9055&9027&9084&9047&9089&8&9&14&21&23&24&31&1001&1004&1005&1006&9009&9012&9019&9021&9024&9025&9028&9030&9032&99999&9034&9036&9038&9039&9042&9046&9052&9054&9056&9060&9065&9069&9078&9087&9091&9092&9093&9096&9098&9100&9102&9104&9107&9108&9112&9113&9115&9119&9120&65006&9122&9127&9128&9131&9132&9134&9137&9138&9139&9140&9141&9142&9143&9146&9148&65003&65004&90014&90015&90017&90018&95599",
|
|
||||||
//筛选数据,支持直写,clan://本地路径(可能有bug),http云端链接,标准json格式,参考xpath的筛选写法
|
|
||||||
"filterdata":{},
|
|
||||||
//分类页面截取数据模式,0为json,1为普通网页。
|
|
||||||
"cat_mode": "0",
|
|
||||||
|
|
||||||
//分类json列表数组定位,最多支持3层,能力有限,不是所有页面都能支持
|
|
||||||
"catjsonlist": "data.live_list",
|
|
||||||
//分类json片单图片
|
|
||||||
"catjsonpic": "cover",
|
|
||||||
//分类json片单标题
|
|
||||||
"catjsonname": "title",
|
|
||||||
//分类json片单链接
|
|
||||||
"catjsonid": "channelid",
|
|
||||||
//分类json片单副标题
|
|
||||||
"catjsonstitle":"nickname",
|
|
||||||
|
|
||||||
//分类片单链接补前缀
|
|
||||||
"cat_prefix": "https://cc.163.com/live/channel/?channelids=",
|
|
||||||
//分类片单链接补后缀
|
|
||||||
"cat_suffix": "",
|
|
||||||
|
|
||||||
|
|
||||||
//片单链接是否直接播放,0否,1分类片单链接直接播放,2详情选集链接直接播放。
|
|
||||||
//设置成直接播放后,后面3个参数请注意该留空的请务必留空。
|
|
||||||
"force_play": "0",
|
|
||||||
//直接播放链接补前缀
|
|
||||||
"play_prefix": "",
|
|
||||||
//直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接
|
|
||||||
"play_suffix": "#isVideo=true#",
|
|
||||||
//直接播放链接设置请求头,只对直链视频有效,每一组用#分开
|
|
||||||
"play_header": "",
|
|
||||||
|
|
||||||
//演员数据,截取前缀&&截取后缀
|
|
||||||
"proj_actor": "",
|
|
||||||
//简介内容,截取前缀&&截取后缀
|
|
||||||
"proj_plot": "",
|
|
||||||
|
|
||||||
//线路截取区域,如果不需要请把tab_title或tab_arr_pre置空或者全部不要填。
|
|
||||||
//线路是否二次截取
|
|
||||||
"tab_YN_twice": "0",
|
|
||||||
//线路二次截取前
|
|
||||||
"tab_twice_pre": "",
|
|
||||||
//线路二次截取后
|
|
||||||
"tab_twice_suf": "",
|
|
||||||
|
|
||||||
//线路截取数组前
|
|
||||||
"tab_arr_pre": "空",
|
|
||||||
//线路截取数组后
|
|
||||||
"tab_arr_suf": "空",
|
|
||||||
//线路标题,截取前缀&&截取后缀
|
|
||||||
"tab_title": "空",
|
|
||||||
|
|
||||||
//列表是否二次截取
|
|
||||||
"list_YN_twice": "0",
|
|
||||||
//列表二次截取前
|
|
||||||
"list_twice_pre": "空",
|
|
||||||
//列表二次截取后
|
|
||||||
"list_twice_suf": "空",
|
|
||||||
//列表数组截取前,必须
|
|
||||||
"list_arr_pre": "data\": [",
|
|
||||||
//列表数组截取后,必须
|
|
||||||
"list_arr_suf": "follower_num",
|
|
||||||
|
|
||||||
//集数是否二次截取
|
|
||||||
"epi_YN_twice": "0",
|
|
||||||
//集数二次截取前
|
|
||||||
"epi_twice_pre": "空",
|
|
||||||
//集数二次截取后
|
|
||||||
"epi_twice_suf": "空",
|
|
||||||
//集数数组截取前,必须
|
|
||||||
"epi_arr_pre": "quickplay",
|
|
||||||
//集数数组截取后,必须
|
|
||||||
"epi_arr_suf": "gamename",
|
|
||||||
//集数标题,截取前缀&&截取后缀
|
|
||||||
"epi_title": "nickname\": \"&&\"",
|
|
||||||
//集数链接,截取前缀&&截取后缀
|
|
||||||
"epi_url": "sharefile\": \"&&\"",
|
|
||||||
//集数链接补前缀
|
|
||||||
"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"
|
|
||||||
}
|
|
@ -1,159 +0,0 @@
|
|||||||
//写法思路来自biubiu影院,海阔视界,xpath筛选。
|
|
||||||
//项目魔改至github开源仓库https://github.com/Tangsan99999/TvJar中的XBiubiu.java文件,
|
|
||||||
|
|
||||||
{
|
|
||||||
//规则名
|
|
||||||
"title": "酷奇MV",
|
|
||||||
//作者
|
|
||||||
"author": "聆听优美旋律",
|
|
||||||
//请求头UA,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA
|
|
||||||
//习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA
|
|
||||||
"UserAgent":"PC_UA",
|
|
||||||
//请求头Referer参数,如果只是播放页需要,填WebView即可引用播放页的链接作嗅探Referer参数。
|
|
||||||
//一般很少用,留空或删除
|
|
||||||
"Referer":"WebView",
|
|
||||||
"PicNeedProxy":"1",
|
|
||||||
//是否开启获取首页数据,0关闭,1开启
|
|
||||||
"homeContent":"0",
|
|
||||||
//分类链接起始页码,禁止负数和含小数点。
|
|
||||||
"firstpage": "1",
|
|
||||||
//分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接]
|
|
||||||
"class_url": "https://www.kuqimv.com/play/{cateId}_{catePg}.html",
|
|
||||||
//分类名,分类1&分类2&分类3
|
|
||||||
"class_name": "华语高清&日韩精选&欧美MV&高清现场&影视MV&夜店视频&车模视频&热舞视频&美女写真&美女打碟",
|
|
||||||
//分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1
|
|
||||||
"class_value": "1&2&3&4&5&6&7&8&9&10",
|
|
||||||
//筛选数据,json格式,参考xpath的筛选写法
|
|
||||||
"filterdata":{},
|
|
||||||
//分类是否二次截取
|
|
||||||
"cat_YN_twice": "1",
|
|
||||||
//分类二次截取前
|
|
||||||
"cat_twice_pre": "class=\"mv_list",
|
|
||||||
//分类二次截取后
|
|
||||||
"cat_twice_suf": "class=\"lei_copy",
|
|
||||||
|
|
||||||
//分类数组截取前
|
|
||||||
"cat_arr_pre": "<li",
|
|
||||||
//分类数组截取后
|
|
||||||
"cat_arr_suf": "/li>",
|
|
||||||
//分类截取片单图片,截取前缀&&截取后缀
|
|
||||||
"cat_pic": "<img src=\"&&\"",
|
|
||||||
//分类截取片单标题,截取前缀&&截取后缀
|
|
||||||
"cat_title": "title=\"&&\"",
|
|
||||||
//分类截取片单副标题,截取前缀&&截取后缀
|
|
||||||
"cat_subtitle": "class=\"time\">&&<",
|
|
||||||
//分类截取片单链接,截取前缀&&截取后缀
|
|
||||||
"cat_url": "href=\"&&\"",
|
|
||||||
//分类片单链接补前缀
|
|
||||||
"cat_prefix": "https://www.kuqimv.com",
|
|
||||||
//分类片单链接补后缀
|
|
||||||
"cat_suffix": "",
|
|
||||||
|
|
||||||
//搜索链接,搜索关键字用{wd}表示,post请求的最后面加;post
|
|
||||||
//POST链接示例 http://www.lezhutv.com/index.php?m=vod-search;post
|
|
||||||
"search_url": "空",
|
|
||||||
//POST搜索body,填写搜索关键字的键值,一般常见的是searchword和wd,不是POST搜索的可留空或删除。
|
|
||||||
"sea_PtBody":"空",
|
|
||||||
//搜索模式,0为json搜索,只支持列表在list数组里的,其它为网页截取。
|
|
||||||
"search_mode": "0",
|
|
||||||
//json片单图片
|
|
||||||
"jsonpic": "pic",
|
|
||||||
//json片单标题
|
|
||||||
"jsonname": "name",
|
|
||||||
//json片单链接
|
|
||||||
"jsonid": "id",
|
|
||||||
//json片单副标题,这个很少有,预留着
|
|
||||||
"jsonstitle":"",
|
|
||||||
|
|
||||||
//搜索是否二次截取
|
|
||||||
"sea_YN_twice": "0",
|
|
||||||
//搜索二次截取前
|
|
||||||
"sea_twice_pre": "空",
|
|
||||||
//搜索二次截取后
|
|
||||||
"sea_twice_suf": "空",
|
|
||||||
|
|
||||||
//搜索数组前缀
|
|
||||||
"sea_arr_pre": "空",
|
|
||||||
//搜索数组后缀
|
|
||||||
"sea_arr_suf": "空",
|
|
||||||
//搜索片单图片,截取前缀&&截取后缀
|
|
||||||
"sea_pic": "data-original=\"&&\"",
|
|
||||||
//搜索片单标题,截取前缀&&截取后缀
|
|
||||||
"sea_title": "title=\"&&\"",
|
|
||||||
//搜索片单链接,截取前缀&&截取后缀
|
|
||||||
"sea_url": "href=\"&&\"",
|
|
||||||
//搜索片单链接补前缀
|
|
||||||
"search_prefix": "http://www.lezhutv.com",
|
|
||||||
//搜索片单链接补后缀,这个一般json搜索的需要
|
|
||||||
"search_suffix": "",
|
|
||||||
//搜索副标题,截取前缀&&截取后缀
|
|
||||||
"sea_subtitle": "",
|
|
||||||
|
|
||||||
//片单链接是否直接播放,1是直接播放,0否。
|
|
||||||
"force_play": "1",
|
|
||||||
//直接播放链接补前缀
|
|
||||||
"play_prefix": "",
|
|
||||||
//直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接
|
|
||||||
"play_suffix": "",
|
|
||||||
//直接播放链接设置请求头,只对直链视频有效,每一组用#分开
|
|
||||||
"play_header": "",
|
|
||||||
|
|
||||||
//演员数据,截取前缀&&截取后缀
|
|
||||||
"proj_actor": "主演:</span>&&</p>",
|
|
||||||
//简介内容,截取前缀&&截取后缀
|
|
||||||
"proj_plot": "简介:</span>&&</p>",
|
|
||||||
|
|
||||||
//线路截取区域,如果不需要请把tab_title或tab_arr_pre置空或者全部不要填。
|
|
||||||
//线路是否二次截取
|
|
||||||
"tab_YN_twice": "0",
|
|
||||||
//线路二次截取前
|
|
||||||
"tab_twice_pre": "",
|
|
||||||
//线路二次截取后
|
|
||||||
"tab_twice_suf": "",
|
|
||||||
|
|
||||||
//线路截取数组前
|
|
||||||
"tab_arr_pre": "空",
|
|
||||||
//线路截取数组后
|
|
||||||
"tab_arr_suf": "空",
|
|
||||||
//线路标题,截取前缀&&截取后缀
|
|
||||||
"tab_title": "空",
|
|
||||||
|
|
||||||
//列表是否二次截取
|
|
||||||
"list_YN_twice": "0",
|
|
||||||
//列表二次截取前
|
|
||||||
"list_twice_pre": "空",
|
|
||||||
//列表二次截取后
|
|
||||||
"list_twice_suf": "空",
|
|
||||||
//列表数组截取前,必须
|
|
||||||
"list_arr_pre": "空",
|
|
||||||
//列表数组截取后,必须
|
|
||||||
"list_arr_suf": "空",
|
|
||||||
|
|
||||||
//集数是否二次截取
|
|
||||||
"epi_YN_twice": "0",
|
|
||||||
//集数二次截取前
|
|
||||||
"epi_twice_pre": "空",
|
|
||||||
//集数二次截取后
|
|
||||||
"epi_twice_suf": "空",
|
|
||||||
//集数数组截取前,必须
|
|
||||||
"epi_arr_pre": "",
|
|
||||||
//集数数组截取后,必须
|
|
||||||
"epi_arr_suf": "",
|
|
||||||
//集数标题,截取前缀&&截取后缀
|
|
||||||
"epi_title": "",
|
|
||||||
//集数链接,截取前缀&&截取后缀
|
|
||||||
"epi_url": "",
|
|
||||||
//集数链接补前缀
|
|
||||||
"epiurl_prefix": "",
|
|
||||||
//集数链接补后缀
|
|
||||||
"epiurl_suffix": "",
|
|
||||||
|
|
||||||
//下面几个参数请勿乱用。否则可能会有副作用。
|
|
||||||
//分析网页源码中有<script type="text/javascript">var player_aaaa={"flag":"play","encrypt这种源码的链接解析
|
|
||||||
//如果网页源码里没有这种请设置为0
|
|
||||||
"Anal_MacPlayer":"0",
|
|
||||||
//是否开启手动嗅探,只对网页嗅探有效,0否,1是
|
|
||||||
"ManualSniffer":"0",
|
|
||||||
//手动嗅探视频链接关键字,每个用#隔开
|
|
||||||
"VideoFormat":"playlist.m3u8#.mp4#.m3u8#.flv"
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@ -1,86 +0,0 @@
|
|||||||
{
|
|
||||||
"规则名": "野马影院",
|
|
||||||
"规则作者": "dd",
|
|
||||||
"请求头参数": "User-Agent$Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36#Referer$http://v.yemays.tk/",
|
|
||||||
"网页编码格式": "UTF-8",
|
|
||||||
"图片是否需要代理": "0",
|
|
||||||
"是否开启获取首页数据": "1",
|
|
||||||
"首页推荐链接": "http://v.yemays.tk",
|
|
||||||
"首页列表数组规则": ".myui-vodlist.clearfix&&li",
|
|
||||||
"首页片单列表数组规则": ".myui-vodlist__box",
|
|
||||||
"首页片单是否Jsoup写法": "1",
|
|
||||||
"首页片单标题": "a&&title",
|
|
||||||
"首页片单链接": "a&&href",
|
|
||||||
"首页片单图片": "a&&data-original",
|
|
||||||
"首页片单副标题": ".pic-text&&Text",
|
|
||||||
"首页片单链接加前缀": "http://v.yemays.tk",
|
|
||||||
"首页片单链接加后缀": "",
|
|
||||||
"分类起始页码": "1",
|
|
||||||
"分类链接": "http://v.yemays.tk/vodshow/{cateId}-{area}-{by}-{class}-----{catePg}---{year}.html",
|
|
||||||
"分类名称": "电影&电视剧&综艺&动漫&港台剧&欧美剧&日韩剧",
|
|
||||||
"分类名称替换词": "1&2&3&4&14&15&16",
|
|
||||||
"筛选数据": "ext",
|
|
||||||
//{cateId}
|
|
||||||
"筛选子分类名称": "动作片&爱情片&科幻片&恐怖片&战争片&喜剧片&剧情片||港台剧&欧美剧&韩剧",
|
|
||||||
"筛选子分类替换词": "6&7&8&9&10&11&12||14&15&16",
|
|
||||||
//{class}
|
|
||||||
"筛选类型名称": "动作&喜剧&爱情&科幻&剧情&悬疑&惊悚&恐怖&犯罪&谍战&冒险&奇幻&灾难&战争&动画&歌舞&历史&传记&其他||武侠&喜剧&爱情&剧情&青春&悬疑&科幻&军事&警匪&谍战&奇幻&偶像&年代&乡村&都市&家庭&古装&历史&神话&其他||脱口秀&真人秀&搞笑&访谈&生活&晚会&美食&游戏&亲子&旅游&文化&体育&时尚&纪实&益智&演艺&歌舞&播报&音乐&其他||热血&格斗&恋爱&少女&校园&搞笑&神魔&机战&科幻&真人&青春&魔法&神话&冒险&运动&竞技&童话&亲子&教育&励志&剧情&其他",
|
|
||||||
"筛选类型替换词": "*",
|
|
||||||
//{area}
|
|
||||||
"筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&法国&英国&德国&泰国&印度&西班牙&意大利&加拿大&其他",
|
|
||||||
"筛选地区替换词": "*",
|
|
||||||
//{year}
|
|
||||||
"筛选年份名称": "2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004",
|
|
||||||
"筛选年份替换词": "*",
|
|
||||||
//{lang}
|
|
||||||
"筛选语言名称": "普通话&英语&粤语&闽南语&韩语&日语&其他",
|
|
||||||
"筛选语言替换词": "*",
|
|
||||||
//{by}
|
|
||||||
"筛选排序名称": "更新时间&人气排序&评分排序",
|
|
||||||
"筛选排序替换词": "time&hits&score",
|
|
||||||
"分类截取模式": "1",
|
|
||||||
"分类列表数组规则": "body&&.col-lg-8.col-md-6.col-sm-4.col-xs-3",
|
|
||||||
"分类片单是否Jsoup写法": "1",
|
|
||||||
"分类片单标题": "a&&title",
|
|
||||||
"分类片单链接": "a&&href",
|
|
||||||
"分类片单图片": "a&&data-original",
|
|
||||||
"分类片单副标题": ".pic-text&&Text",
|
|
||||||
"分类片单链接加前缀": "http://v.yemays.tk",
|
|
||||||
"分类片单链接加后缀": "",
|
|
||||||
"搜索请求头参数": "手机",
|
|
||||||
"搜索链接": "http://v.yemays.tk/index.php/ajax/suggest.html?mid=1&wd={wd}",
|
|
||||||
"POST请求数据": "",
|
|
||||||
"搜索截取模式": "0",
|
|
||||||
"搜索列表数组规则": "list",
|
|
||||||
"搜索片单是否Jsoup写法": "1",
|
|
||||||
"搜索片单图片": "pic",
|
|
||||||
"搜索片单标题": "name",
|
|
||||||
"搜索片单链接": "id",
|
|
||||||
"搜索片单副标题": "",
|
|
||||||
"搜索片单链接加前缀": "http://v.yemays.tk/voddetail/",
|
|
||||||
"搜索片单链接加后缀": ".html",
|
|
||||||
"链接是否直接播放": "0",
|
|
||||||
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
|
|
||||||
"直接播放链接加后缀": "#isVideo=true#",
|
|
||||||
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
|
|
||||||
"详情是否Jsoup写法": "0",
|
|
||||||
"类型详情": "剧情:</span>&&</p",
|
|
||||||
"年代详情": "更新:</span>&&</p",
|
|
||||||
"地区详情": "地区:</span>&&</p",
|
|
||||||
"演员详情": "主演:</span>&&</p",
|
|
||||||
"简介详情": "<span class=\"data\" style=\"display: none;\"><p>&&</p>",
|
|
||||||
"线路列表数组规则": ".nav&&li",
|
|
||||||
"线路标题": "Text",
|
|
||||||
"播放列表数组规则": "body&&.myui-content__list.scrollbar.sort-list.clearfix",
|
|
||||||
"选集列表数组规则": "li",
|
|
||||||
"选集标题链接是否Jsoup写法": "1",
|
|
||||||
"选集标题": "a&&Text",
|
|
||||||
"选集链接": "a&&href",
|
|
||||||
"是否反转选集序列": "0",
|
|
||||||
"选集链接加前缀": "http://v.yemays.tk",
|
|
||||||
"选集链接加后缀": "",
|
|
||||||
"分析MacPlayer": "2",
|
|
||||||
"是否开启手动嗅探": "0",
|
|
||||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv",
|
|
||||||
"手动嗅探视频链接过滤词": ".html#=http"
|
|
||||||
}
|
|
BIN
0307yyds/ali.jar
BIN
0307yyds/ali.jar
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
5fe7ecb3e9984645aefa0a9ffc6dc99a
|
|
BIN
0307yyds/duo.jar
BIN
0307yyds/duo.jar
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
var rule={title:'310直播',host:'http://www.310.tv',url:'/?s=0&t=1&a=fyclass&g=fypage',searchUrl:'',searchable:0,quickSearch:0,class_name:'热门&足球&篮球',class_url:'0&1&2',headers:{'User-Agent':'MOBILE_UA'},timeout:5000,play_parse:false,lazy:'',limit:6,double:false,推荐:'*',一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href',二级:'*',搜索:'',}
|
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
var rule={title:'88看球',host:'http://www.88kanqiu.live',url:'/match/fyclass/live',searchUrl:'',searchable:0,quickSearch:0,class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live',headers:{'User-Agent':'PC_UA'},timeout:5000,play_parse:true,lazy:'',limit:6,double:false,推荐:'*',一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href',二级:{"title":".game-info-container&&Text;.customer-navbar-nav li&&Text","img":"img&&src","desc":";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text","content":"div.game-time&&Text","tabs":"js:TABS=['88看球']","lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+it.url});LISTS.push(d)});"},搜索:'',}
|
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
var rule={title:'JRKAN直播',host:'http://m.jrkan2023.com',url:'/fyclass',searchUrl:'',searchable:0,quickSearch:0,class_name:'全部',class_url:'/',headers:{'User-Agent':'MOBILE_UA'},timeout:5000,play_parse:true,lazy:'',limit:6,double:false,推荐:'*',一级:'.loc_match:eq(2) ul;li:gt(1):lt(4)&&Text;img&&src;li:lt(2)&&Text;a:eq(1)&&href',二级:{title:'.sub_list li:lt(2)&&Text;.sub_list li:eq(0)&&Text',img:'img&&src',desc:';;;.lab_team_home&&Text;.lab_team_away&&Text',content:'.sub_list ul&&Text',tabs:'',tab_text:'',lists:'.sub_channel a',list_text:'a&&Text',list_url:'a&&data-play'},搜索:'',}
|
|
File diff suppressed because one or more lines are too long
1
0307yyds/js/cheerio.min.js
vendored
1
0307yyds/js/cheerio.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,24 +0,0 @@
|
|||||||
var rule={
|
|
||||||
title:'厂长资源',
|
|
||||||
// host:'https://www.c-zzy.com',
|
|
||||||
host:'https://czspp.com',
|
|
||||||
url:'/fyclass/page/fypage',
|
|
||||||
searchUrl:'/xssearch?q=**&f=_all&p=fypage',
|
|
||||||
searchable:2,//是否启用全局搜索,
|
|
||||||
quickSearch:1,//是否启用快速搜索,
|
|
||||||
filterable:0,//是否启用分类筛选,
|
|
||||||
headers:{'User-Agent':'PC_UA', },
|
|
||||||
play_parse:true,
|
|
||||||
lazy:'',
|
|
||||||
limit:6,
|
|
||||||
class_name:'豆瓣电影Top250&最新电影&电视剧&国产剧&美剧&韩剧&番剧&动漫',
|
|
||||||
class_url:'dbtop250&zuixindianying&dsj&gcj&meijutt&hanjutv&fanju&dm',
|
|
||||||
推荐:'.bt_img;ul&&li;*;*;*;*',
|
|
||||||
double:true,
|
|
||||||
一级:'.bt_img&&ul&&li;h3.dytit&&Text;img.lazy&&data-original;.jidi&&Text;a&&href',
|
|
||||||
二级:{"title":"h1&&Text;.moviedteail_list li&&a&&Text","img":"div.dyimg img&&src","desc":".moviedteail_list li:eq(3) a&&Text;.moviedteail_list li:eq(2) a&&Text;.moviedteail_list li:eq(1) a&&Text;.moviedteail_list li:eq(7) a&&Text;.moviedteail_list li:eq(5) a&&Text","content":".yp_context&&Text","tabs":".mi_paly_box&&span","lists":".paly_list_btn:eq(#id) a"},
|
|
||||||
搜索:'.search_list&&ul&&li;*;*;*;*',
|
|
||||||
// 预处理:'rule_fetch_params.headers.Cookie = "Hm_lvt_d06dda04a24e89e1117ee1455e217c30=1669008856; 6de728358f84bf15ea9bb771c18f37fb=b4a901c371f729a828c31d9d78def299; myannoun=1; Hm_lvt_c08e84f2c697dc9d0af77ff0dbfb3d6d=1669356917; Hm_lpvt_c08e84f2c697dc9d0af77ff0dbfb3d6d=1669357024; Hm_lpvt_d06dda04a24e89e1117ee1455e217c30=1669357024"',
|
|
||||||
预处理:'',
|
|
||||||
预处理:'rule_fetch_params.headers.Cookie="68148872828e9f4d64e7a296f6c6b6d7=5429da9a54375db451f7f9e4f16ce0ea";let new_host="https://czspp.com";let new_html=request(new_host);if(/正在进行人机识别/.test(new_html)){let new_src=pd(new_html,"script&&src",new_host);log(new_src);let hhtml=request(new_src,{withHeaders:true});let json=JSON.parse(hhtml);let html=json.body;let key=html.match(new RegExp(\'var key="(.*?)"\'))[1];let avalue=html.match(new RegExp(\'value="(.*?)"\'))[1];let c="";for(let i=0;i<avalue.length;i++){let a=avalue[i];let b=a.charCodeAt();c+=b}let value=md5(c);log(value);let yz_url="https://czspp.com/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_ip.php?type=96c4e20a0e951f471d32dae103e83881&key="+key+"&value="+value;log(yz_url);hhtml=request(yz_url,{withHeaders:true});json=JSON.parse(hhtml);let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");let cookie=setCk?json[setCk].split(";")[0]:"";log("cookie:"+cookie);rule_fetch_params.headers.Cookie=cookie;setItem(RULE_CK,cookie)}',
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
var rule={title:'ddys',host:'https://ddys.pro',url:'/fyclass/page/fypage/',searchUrl:'/?s=**&post_type=post',searchable:2,quickSearch:0,filterable:0,headers:{'User-Agent':'MOBILE_UA',},class_parse:'#primary-menu li.menu-item;a&&Text;a&&href;\.pro/(.*)',cate_exclude:'站长|^其他$|关于|^电影$|^剧集$|^类型$',play_parse:true,lazy:'js:let purl=input.split("|")[0];let referer=input.split("|")[1];let zm=input.split("|")[2];print("purl:"+purl);print("referer:"+referer);print("zm:"+zm);let myua="okhttp/3.15";if(/ddrkey/.test(purl)){let ret=request(purl,{Referer:referer,withHeaders:true,"User-Agent":myua});log(ret);input=purl}else{let html=request(purl,{headers:{Referer:referer,"User-Agent":myua}});print(html);try{input=JSON.parse(html).url||{}}catch(e){input=purl}}',limit:6,double:true,一级:'.post-box-list&&article;a:eq(-1)&&Text;.post-box-image&&style;a:eq(0)&&Text;a:eq(-1)&&href',二级:{"title":".post-title&&Text;.cat-links&&Text","img":".doulist-item&&img&&data-cfsrc","desc":".published&&Text","content":".abstract&&Text","tabs":"js:TABS=['国内','海外(貌似不能播放)']",lists:'js:log(TABS);let d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;if(typeof play_url==="undefined"){var play_url=""}function getLists(html){let src=pdfh(html,".wp-playlist-script&&Html");src=JSON.parse(src).tracks;let list1=[];let list2=[];src.forEach(function(it){let src0=it.src0;let src1=it.src1;let src2=it.src2;let title=it.caption;let url1="https://ddys.pro/getvddr/video?id="+src1+"&dim=1080P+&type=mix";let url2="https://w.ddys.pro"+src0+"?ddrkey="+src2;let zm="https://ddys.pro/subddr/"+it.subsrc;list1.push({title:title,url:url1,desc:zm});list2.push({title:title,url:url2,desc:zm})});return{list1:list1,list2:list2}}var data=getLists(html);var list1=data.list1;var list2=data.list2;let nums=pdfa(html,"body&&.post-page-numbers");nums.forEach(function(it){let num=pdfh(it,"body&&Text");log(num);let nurl=input+num+"/";if(num==1){return}log(nurl);let html=request(nurl);let data=getLists(html);list1=list1.concat(data.list1);list2=list2.concat(data.list2)});list1=list1.map(function(item){return item.title+"$"+play_url+urlencode(item.url+"|"+input+"|"+item.desc)});list2=list2.map(function(item){return item.title+"$"+play_url+urlencode(item.url+"|"+input+"|"+item.desc)});LISTS=[list1,list2];',},搜索:'#main&&article;.post-title&&Text;;.published&&Text;a&&href',推荐:'*'}
|
|
File diff suppressed because one or more lines are too long
@ -1,189 +0,0 @@
|
|||||||
// drT.js
|
|
||||||
// 2022/09/30 write by hjdhnx
|
|
||||||
// Licensed under the MIT license.
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var drT = {
|
|
||||||
name: "drT",
|
|
||||||
version: "1.0.0",
|
|
||||||
templateSettings: {
|
|
||||||
evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g,
|
|
||||||
interpolate: /\{\{([\s\S]+?)\}\}/g, // 变量渲染
|
|
||||||
encode: /\{\{@([\s\S]+?)\}\}/g, // 变量自动url编码
|
|
||||||
use: /\{\{#([\s\S]+?)\}\}/g,
|
|
||||||
useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,
|
|
||||||
define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
|
|
||||||
defineParams:/^\s*([\w$]+):([\s\S]+)/,
|
|
||||||
conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, // ? if ?? else if ?? else
|
|
||||||
iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
|
|
||||||
varname: "fl",
|
|
||||||
strip: true,
|
|
||||||
append: true,
|
|
||||||
selfcontained: false,
|
|
||||||
doNotSkipEncoded: false
|
|
||||||
},
|
|
||||||
template: undefined, //fn, compile template
|
|
||||||
compile: undefined, //fn, for express
|
|
||||||
log: true
|
|
||||||
}, _globals;
|
|
||||||
|
|
||||||
drT.encodeHTMLSource = function(doNotSkipEncoded) {
|
|
||||||
var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/" },
|
|
||||||
matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g;
|
|
||||||
return function(code) {
|
|
||||||
return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_globals = (function(){ return this || (0,eval)("this"); }());
|
|
||||||
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (typeof module !== "undefined" && module.exports) {
|
|
||||||
module.exports = drT;
|
|
||||||
} else if (typeof define === "function" && define.amd) {
|
|
||||||
define(function(){return drT;});
|
|
||||||
} else {
|
|
||||||
_globals.drT = drT;
|
|
||||||
}
|
|
||||||
|
|
||||||
var startend = {
|
|
||||||
append: { start: "'+(", end: ")+'", startencode: "'+encodeHTML(" },
|
|
||||||
split: { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" }
|
|
||||||
}, skip = /$^/;
|
|
||||||
|
|
||||||
function resolveDefs(c, block, def) {
|
|
||||||
return ((typeof block === "string") ? block : block.toString())
|
|
||||||
.replace(c.define || skip, function(m, code, assign, value) {
|
|
||||||
if (code.indexOf("def.") === 0) {
|
|
||||||
code = code.substring(4);
|
|
||||||
}
|
|
||||||
if (!(code in def)) {
|
|
||||||
if (assign === ":") {
|
|
||||||
if (c.defineParams) value.replace(c.defineParams, function(m, param, v) {
|
|
||||||
def[code] = {arg: param, text: v};
|
|
||||||
});
|
|
||||||
if (!(code in def)) def[code]= value;
|
|
||||||
} else {
|
|
||||||
new Function("def", "def['"+code+"']=" + value)(def);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
})
|
|
||||||
.replace(c.use || skip, function(m, code) {
|
|
||||||
if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) {
|
|
||||||
if (def[d] && def[d].arg && param) {
|
|
||||||
var rw = (d+":"+param).replace(/'|\\/g, "_");
|
|
||||||
def.__exp = def.__exp || {};
|
|
||||||
def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
|
|
||||||
return s + "def.__exp['"+rw+"']";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var v = new Function("def", "return " + code)(def);
|
|
||||||
return v ? resolveDefs(c, v, def) : v;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function unescape(code) {
|
|
||||||
return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
drT.template = function(tmpl, c, def) {
|
|
||||||
c = c || drT.templateSettings;
|
|
||||||
var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv,
|
|
||||||
str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;
|
|
||||||
|
|
||||||
// console.log(str);
|
|
||||||
let beforeCode = '';
|
|
||||||
if(str.match(c.interpolate || skip)){
|
|
||||||
let inter_codes = str.match(c.interpolate || skip);
|
|
||||||
let inter_dict = {};
|
|
||||||
inter_codes.forEach(item=>{
|
|
||||||
item.replace(c.interpolate || skip,function (m,code) {
|
|
||||||
let varname = code.split('.')[0];
|
|
||||||
if(!inter_dict.hasOwnProperty(varname)){
|
|
||||||
let beginCode = `if(typeof(${varname})==='undefined'){${varname}={}}`;
|
|
||||||
inter_dict[varname] = beginCode;
|
|
||||||
}if(!inter_dict.hasOwnProperty(code)){
|
|
||||||
let beginCode = `if(typeof(${code})==='undefined'){${code}=''};`;
|
|
||||||
inter_dict[code] = beginCode;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
let beginCode = Object.values(inter_dict).join('\n');
|
|
||||||
// console.log(beginCode);
|
|
||||||
beforeCode += beginCode;
|
|
||||||
}
|
|
||||||
str = beforeCode+("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ")
|
|
||||||
.replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str)
|
|
||||||
.replace(/'|\\/g, "\\$&")
|
|
||||||
.replace(c.encode || skip, function(m, code) {
|
|
||||||
needhtmlencode = true;
|
|
||||||
return cse.startencode + unescape(code) + cse.end;
|
|
||||||
})
|
|
||||||
.replace(c.interpolate || skip, function(m, code) {
|
|
||||||
let varname = code.split('.')[0];
|
|
||||||
// console.log(varname === code);
|
|
||||||
// console.log(`varname:${varname},code:${code}`);
|
|
||||||
if(varname === code){
|
|
||||||
let res = cse.start + `JSON.stringify(${unescape(code)})` + cse.end;
|
|
||||||
// console.log(res);
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
return cse.start + unescape(code) + cse.end;
|
|
||||||
})
|
|
||||||
.replace(c.conditional || skip, function(m, elsecase, code) {
|
|
||||||
return elsecase ?
|
|
||||||
(code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") :
|
|
||||||
(code ? "';if(" + unescape(code) + "){out+='" : "';}out+='");
|
|
||||||
})
|
|
||||||
.replace(c.iterate || skip, function(m, iterate, vname, iname) {
|
|
||||||
if (!iterate) return "';} } out+='";
|
|
||||||
sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate);
|
|
||||||
return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"<l"+sid+"){"
|
|
||||||
+vname+"=arr"+sid+"["+indv+"+=1];out+='";
|
|
||||||
})
|
|
||||||
.replace(c.evaluate || skip, function(m, code) {
|
|
||||||
return "';" + unescape(code) + "out+='";
|
|
||||||
})
|
|
||||||
+ "';return out;")
|
|
||||||
.replace(/\n/g, "\\n").replace(/\t/g, '\\t').replace(/\r/g, "\\r")
|
|
||||||
.replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, "");
|
|
||||||
//.replace(/(\s|;|\}|^|\{)out\+=''\+/g,'$1out+=');
|
|
||||||
|
|
||||||
if (needhtmlencode) {
|
|
||||||
// console.log('需要编码');
|
|
||||||
// console.log(c.doNotSkipEncoded);
|
|
||||||
if (!c.selfcontained && _globals && !_globals._encodeHTML) _globals._encodeHTML = drT.encodeHTMLSource(c.doNotSkipEncoded);
|
|
||||||
str = "var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("
|
|
||||||
+ drT.encodeHTMLSource.toString() + "(" + (c.doNotSkipEncoded || '') + "));"
|
|
||||||
+ str;
|
|
||||||
// console.log(str);
|
|
||||||
}else{
|
|
||||||
// console.log('不需要编码');
|
|
||||||
}
|
|
||||||
// console.log(c.varname);
|
|
||||||
// console.log(str);
|
|
||||||
try {
|
|
||||||
return new Function(c.varname, str);
|
|
||||||
} catch (e) {
|
|
||||||
/* istanbul ignore else */
|
|
||||||
// console.log(e.message);
|
|
||||||
if (typeof console !== "undefined") console.log("Could not create a template function: " + str);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
drT.compile = function(tmpl, def) {
|
|
||||||
return drT.template(tmpl, null, def);
|
|
||||||
};
|
|
||||||
drT.renderText = function (tmpl,dict,varname){
|
|
||||||
varname = varname||'';
|
|
||||||
if(varname){
|
|
||||||
drT.templateSettings.varname = varname;
|
|
||||||
}
|
|
||||||
dict = dict||{};
|
|
||||||
return drT.compile(tmpl)(dict);
|
|
||||||
};
|
|
||||||
}());
|
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
var rule={title:'JRS看直播',host:'http://www.jrskan.net',url:'/fyclass',searchUrl:'',searchable:0,quickSearch:0,class_name:'全部',class_url:'/',headers:{'User-Agent':'MOBILE_UA'},timeout:5000,play_parse:true,lazy:'',limit:6,double:false,推荐:'*',一级:'.row a;li div:gt(2):lt(6)&&Text;img&&src;.match-start-time&&Text;a&&href',二级:{title:'.live-title&&Text;.live-title&&Text',img:'img:eq(1)&&src',desc:';;;.live-left-team-sj&&Text;.live-right-team-sj&&Text',content:'.live-info&&Text',tabs:'',tab_text:'',lists:'#item-source a',list_text:'a&&Text',list_url:'a&&data-url'},搜索:'',}
|
|
@ -1 +0,0 @@
|
|||||||
var rule={title:'JRS看球网',host:'http://www.jrskanqiu.com',url:'/fyclass',searchUrl:'',searchable:0,quickSearch:0,class_name:'全部',class_url:'/',headers:{'User-Agent':'PC_UA'},timeout:5000,play_parse:true,lazy:'',limit:6,double:false,推荐:'*',一级:'.todayMatch .contenTab;.myList div:gt(0)&&Text;img&&src;.status&&Text;a&&href',二级:{title:'.msg ul&&Text;.msg ul&&Text',img:'img:eq(2)&&src',desc:';;;.nameOne&&Text;.nameTwo&&Text',content:'._t&&Text',tabs:'.checkChannel li:eq(0)',tab_text:'p&&Text',lists:'.checkChannel li:gt(0)',list_text:'a&&Text',list_url:'a&&data-url'},搜索:'',}
|
|
File diff suppressed because one or more lines are too long
@ -1,78 +0,0 @@
|
|||||||
/* 直播弹幕 -> vod_area:'bililivedanmu'
|
|
||||||
目前只有皮皮虾大佬的DMBox, 支持弹幕
|
|
||||||
DMBox下载:https://t.me/pipixiawerun
|
|
||||||
设置 > 窗口预览 > 开启
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Cookie设置
|
|
||||||
Cookie获取方法 https://github.com/UndCover/PyramidStore/blob/main/list.md#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9
|
|
||||||
|
|
||||||
Cookie设置方法1: DR-PY 后台管理界面
|
|
||||||
CMS后台管理 > 设置中心 > 环境变量 > {"bili_cookie":"XXXXXXX","vmid":"XXXXXX"} > 保存
|
|
||||||
|
|
||||||
Cookie设置方法2: 手动替换Cookie
|
|
||||||
底下代码 headers的
|
|
||||||
"Cookie":"$bili_cookie"
|
|
||||||
手动替换为
|
|
||||||
"Cookie":"https://gh-proxy.com/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/txt/cookie.txt"
|
|
||||||
*/
|
|
||||||
|
|
||||||
var rule = {
|
|
||||||
title:'哔哩直播',
|
|
||||||
host:'https://api.live.bilibili.com',
|
|
||||||
homeUrl:'/xlive/web-interface/v1/second/getUserRecommend?page=1&page_size=30&platform=web',//用于"分类获取"和"推荐获取"
|
|
||||||
url:'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=fyclass&area_id=fyfilter&sort_type=online&page=fypage',
|
|
||||||
class_name:'娱乐&网游&手游&单机游戏&电台&虚拟主播&生活&知识&赛事&购物',
|
|
||||||
class_url:'10&2&3&6&1&5&9&11&13&300',
|
|
||||||
filterable: 1,
|
|
||||||
filter_url: '{{fl.area}}',
|
|
||||||
filter_def:{
|
|
||||||
10:{area:'33'},
|
|
||||||
2:{area:'86'},
|
|
||||||
3:{area:'35'},
|
|
||||||
6:{area:'236'},
|
|
||||||
1:{area:'21'},
|
|
||||||
5:{area:'190'},
|
|
||||||
9:{area:'371'},
|
|
||||||
11:{area:'376'},
|
|
||||||
13:{area:'561'},
|
|
||||||
300:{area:'30000'}
|
|
||||||
},
|
|
||||||
filter: {
|
|
||||||
"2":[{"key":"area","name":"分区","value":[{"n":"英雄联盟","v":"86"},{"n":"DOTA2","v":"92"},{"n":"CS:GO","v":"89"},{"n":"APEX英雄","v":"240"},{"n":"永劫无间","v":"666"},{"n":"穿越火线","v":"88"},{"n":"守望先锋","v":"87"},{"n":"吃鸡行动","v":"80"},{"n":"逃离塔科夫","v":"252"},{"n":"传奇","v":"695"},{"n":"DNF","v":"78"},{"n":"生死狙击2","v":"575"},{"n":"洛奇英雄传","v":"599"},{"n":"最终幻想14","v":"102"},{"n":"星际战甲","v":"249"},{"n":"梦三国","v":"710"},{"n":"英魂之刃","v":"690"},{"n":"剑网3","v":"82"},{"n":"铁甲雄兵","v":"691"},{"n":"封印者","v":"300"},{"n":"新天龙八部","v":"653"},{"n":"赛尔号","v":"667"},{"n":"造梦西游","v":"668"},{"n":"洛克王国","v":"669"},{"n":"问道","v":"670"},{"n":"诛仙世界","v":"654"},{"n":"大话西游","v":"652"},{"n":"奇迹MU","v":"683"},{"n":"永恒之塔","v":"684"},{"n":"QQ三国","v":"685"},{"n":"人间地狱","v":"677"},{"n":"VALORANT","v":"329"},{"n":"彩虹岛","v":"686"},{"n":"洛奇","v":"663"},{"n":"跑跑卡丁车","v":"664"},{"n":"星际公民","v":"658"},{"n":"Squad战术小队","v":"659"},{"n":"反恐精英Online","v":"629"},{"n":"风暴奇侠","v":"648"},{"n":"装甲战争","v":"642"},{"n":"失落的方舟","v":"590"},{"n":"阿尔比恩","v":"639"},{"n":"猎杀对决","v":"600"},{"n":"CFHD ","v":"472"},{"n":"骑士精神2","v":"650"},{"n":"超击突破","v":"680"},{"n":"武装突袭","v":"634"},{"n":"300英雄","v":"84"},{"n":"炉石传说","v":"91"},{"n":"剑网3缘起","v":"499"},{"n":"街头篮球","v":"649"},{"n":"综合射击","v":"601"},{"n":"剑灵","v":"505"},{"n":"艾尔之光","v":"651"},{"n":"黑色沙漠","v":"632"},{"n":"天涯明月刀","v":"596"},{"n":"超激斗梦境","v":"519"},{"n":"冒险岛","v":"574"},{"n":"逆战","v":"487"},{"n":"魔兽争霸3","v":"181"},{"n":"QQ飞车","v":"610"},{"n":"魔兽世界","v":"83"},{"n":"FIFA ONLINE 4","v":"388"},{"n":"NBA2KOL2","v":"581"},{"n":"使命召唤:战区","v":"318"},{"n":"VRChat","v":"656"},{"n":"坦克世界","v":"115"},{"n":"战舰世界","v":"248"},{"n":"战争雷霆","v":"316"},{"n":"战意","v":"383"},{"n":"风暴英雄","v":"114"},{"n":"星际争霸2","v":"93"},{"n":"刀塔自走棋","v":"239"},{"n":"堡垒之夜","v":"164"},{"n":"枪神纪","v":"251"},{"n":"三国杀","v":"81"},{"n":"龙之谷","v":"112"},{"n":"古剑奇谭OL","v":"173"},{"n":"幻想全明星","v":"176"},{"n":"怀旧网游","v":"288"},{"n":"新游前瞻","v":"298"},{"n":"星战前夜:晨曦","v":"331"},{"n":"梦幻西游端游","v":"350"},{"n":"流放之路","v":"551"},{"n":"FPS沙盒","v":"633"},{"n":"永恒轮回","v":"459"},{"n":"激战2","v":"607"},{"n":"其他网游","v":"107"}] }],
|
|
||||||
"3":[{"key":"area","name":"分区","value":[{"n":"王者荣耀","v":"35"},{"n":"和平精英","v":"256"},{"n":"LOL手游","v":"395"},{"n":"原神","v":"321"},{"n":"第五人格","v":"163"},{"n":"明日方舟","v":"255"},{"n":"哈利波特:魔法觉醒 ","v":"474"},{"n":"幻塔","v":"550"},{"n":"金铲铲之战","v":"514"},{"n":"APEX手游","v":"506"},{"n":"深空之眼","v":"598"},{"n":"无期迷途","v":"675"},{"n":"光遇","v":"687"},{"n":"跃迁旅人","v":"717"},{"n":"香肠派对","v":"689"},{"n":"猫之城","v":"645"},{"n":"玛娜希斯回响","v":"644"},{"n":"使命召唤手游","v":"386"},{"n":"黑色沙漠手游","v":"615"},{"n":"崩坏3","v":"40"},{"n":"游戏王:决斗链接","v":"407"},{"n":"游戏王","v":"303"},{"n":"蛋仔派对","v":"571"},{"n":"阴阳师","v":"36"},{"n":"空之要塞:启航","v":"718"},{"n":"火影忍者手游","v":"292"},{"n":"Fate/GO","v":"37"},{"n":"综合棋牌","v":"354"},{"n":"QQ飞车手游","v":"154"},{"n":"决战!平安京","v":"140"},{"n":"狼人杀","v":"41"},{"n":"三国杀移动版","v":"352"},{"n":"碧蓝航线","v":"113"},{"n":"影之诗","v":"156"},{"n":"明日之后","v":"189"},{"n":"部落冲突:皇室战争","v":"50"},{"n":"奥比岛手游","v":"661"},{"n":"盾之勇者成名录:浪潮","v":"704"},{"n":"雀姬","v":"214"},{"n":"公主连结Re:Dive","v":"330"},{"n":"DNF手游","v":"343"},{"n":"FIFA足球世界","v":"641"},{"n":"BanG Dream","v":"258"},{"n":"荒野乱斗","v":"469"},{"n":"CF手游","v":"333"},{"n":"战双帕弥什","v":"293"},{"n":"天涯明月刀手游","v":"389"},{"n":"解密游戏","v":"42"},{"n":"恋爱养成游戏","v":"576"},{"n":"暗黑破坏神:不朽","v":"492"},{"n":"暗区突围","v":"502"},{"n":"跑跑卡丁车手游","v":"265"},{"n":"非人学园","v":"212"},{"n":"百闻牌","v":"286"},{"n":"猫和老鼠手游","v":"269"},{"n":"坎公骑冠剑","v":"442"},{"n":"忍者必须死3","v":"203"},{"n":"梦幻西游手游","v":"342"},{"n":"航海王热血航线","v":"504"},{"n":"少女前线","v":"39"},{"n":"300大作战","v":"688"},{"n":"少女前线:云图计划","v":"525"},{"n":"漫威超级战争","v":"478"},{"n":"摩尔庄园手游","v":"464"},{"n":"宝可梦大集结","v":"493"},{"n":"小动物之星","v":"473"},{"n":"天地劫:幽城再临","v":"448"},{"n":"漫威对决","v":"511"},{"n":" 东方归言录","v":"538"},{"n":"梦幻模拟战","v":"178"},{"n":"时空猎人3","v":"643"},{"n":"重返帝国","v":"613"},{"n":"休闲小游戏","v":"679"},{"n":"其他手游","v":"98"},{"n":"新游评测","v":"274"}] }],
|
|
||||||
"6":[{"key":"area","name":"分区","value":[{"n":"主机游戏","v":"236"},{"n":"我的世界","v":"216"},{"n":"独立游戏","v":"283"},{"n":"怀旧游戏","v":"237"},{"n":"弹幕互动玩法","v":"460"},{"n":"恐怖游戏","v":"276"},{"n":"禁闭求生","v":"707"},{"n":"斯普拉遁3","v":"694"},{"n":"卧龙:苍天陨落","v":"700"},{"n":"使命召唤19","v":"282"},{"n":"异度神剑","v":"665"},{"n":"艾尔登法环","v":"555"},{"n":"聚会游戏","v":"636"},{"n":"哥谭骑士","v":"716"},{"n":"命运2","v":"277"},{"n":"沙石镇时光","v":"630"},{"n":"Dread Hunger","v":"591"},{"n":"红色警戒2","v":"693"},{"n":"失落迷城:群星的诅咒","v":"714"},{"n":"策略游戏","v":"570"},{"n":"战地风云","v":"597"},{"n":"幽灵线:东京","v":"612"},{"n":"糖豆人","v":"357"},{"n":"消逝的光芒2","v":"586"},{"n":"只狼","v":"245"},{"n":"怪物猎人","v":"578"},{"n":"饥荒","v":"218"},{"n":"精灵宝可梦","v":"228"},{"n":"FIFA23","v":"708"},{"n":"暖雪","v":"582"},{"n":"全面战争:战锤3","v":"594"},{"n":"彩虹六号:异种","v":"580"},{"n":"战神","v":"579"},{"n":"FORZA 极限竞速","v":"302"},{"n":"NBA2K","v":"362"},{"n":"帝国时代4","v":"548"},{"n":"光环:无限","v":"559"},{"n":"孤岛惊魂6","v":"537"},{"n":"植物大战僵尸","v":"309"},{"n":"仙剑奇侠传七","v":"540"},{"n":"灵魂筹码","v":"223"},{"n":"格斗游戏","v":"433"},{"n":"荒野大镖客2","v":"226"},{"n":"重生细胞","v":"426"},{"n":"刺客信条","v":"227"},{"n":"恐鬼症","v":"387"},{"n":"以撒","v":"219"},{"n":"双人成行","v":"446"},{"n":"方舟","v":"295"},{"n":"仁王2","v":"313"},{"n":"鬼泣5","v":"244"},{"n":"枪火重生","v":"364"},{"n":"盗贼之海","v":"341"},{"n":"胡闹厨房","v":"507"},{"n":"体育游戏","v":"500"},{"n":"恐惧之间","v":"439"},{"n":"塞尔达","v":"308"},{"n":"马力欧制造2","v":"261"},{"n":"全境封锁2","v":"243"},{"n":"骑马与砍杀","v":"326"},{"n":"人类一败涂地","v":"270"},{"n":"鬼谷八荒","v":"424"},{"n":"无主之地3","v":"273"},{"n":"辐射76","v":"220"},{"n":"全面战争","v":"257"},{"n":"亿万僵尸","v":"463"},{"n":"暗黑破坏神2","v":"535"},{"n":"文字游戏","v":"583"},{"n":"恋爱模拟游戏","v":"592"},{"n":"泰拉瑞亚","v":"593"},{"n":"雨中冒险2","v":"441"},{"n":"游戏速通","v":"678"},{"n":"摔角城大乱斗","v":"681"},{"n":"勇敢的哈克","v":"692"},{"n":" 审判系列","v":"698"},{"n":"其他单机","v":"235"}] }],
|
|
||||||
"1":[{"key":"area","name":"分区","value":[{"n":"视频唱见","v":"21"},{"n":"萌宅领域","v":"530"},{"n":"视频聊天","v":"145"},{"n":"舞见","v":"207"},{"n":"情感","v":"706"},{"n":"户外","v":"123"},{"n":"日常","v":"399"}] }],
|
|
||||||
"5":[{"key":"area","name":"分区","value":[{"n":"唱见电台","v":"190"},{"n":"聊天电台","v":"192"},{"n":"配音","v":"193"}] }],
|
|
||||||
"9":[{"key":"area","name":"分区","value":[{"n":"虚拟主播","v":"371"},{"n":"3D虚拟主播","v":"697"}] }],
|
|
||||||
"10":[{"key":"area","name":"分区","value":[{"n":"生活分享","v":"646"},{"n":"运动","v":"628"},{"n":"搞笑","v":"624"},{"n":"手工绘画","v":"627"},{"n":"萌宠","v":"369"},{"n":"美食","v":"367"},{"n":"时尚","v":"378"},{"n":"影音馆","v":"33"}] }],
|
|
||||||
"11":[{"key":"area","name":"分区","value":[{"n":"社科法律心理","v":"376"},{"n":"人文历史","v":"702"},{"n":"校园学习","v":"372"},{"n":"职场·技能","v":"377"},{"n":" 科技","v":"375"},{"n":"科学科普","v":"701"},{"n":"时政","v":"715"}] }],
|
|
||||||
"13":[{"key":"area","name":"分区","value":[{"n":"游戏赛事","v":"561"},{"n":"体育赛事","v":"562"},{"n":"赛事综合","v":"563"}] }],
|
|
||||||
"300":[{"key":"area","name":"分区","value":[{"n":"购物","v":"300000"}] }]
|
|
||||||
},
|
|
||||||
detailUrl:'https://live.bilibili.com/fyid',//二级详情拼接链接(json格式用)
|
|
||||||
// detailUrl:'https://api.live.bilibili.com/xlive/web-room/v1/playUrl/playUrl?cid=fyid&platform=h5&otype=json&quality=0',//二级详情拼接链接(json格式用)
|
|
||||||
// searchUrl:'/x/web-interface/search/type?__refresh__=true&page=fypage&page_size=42&order=online&platform=pc&highlight=1&single_column=0&keyword=**&search_type=live&dynamic_offset=0&preload=true',
|
|
||||||
searchUrl:'https://api.bilibili.com/x/web-interface/search/type?search_type=live&keyword=**&page=1',
|
|
||||||
searchable:2,
|
|
||||||
quickSearch:0,
|
|
||||||
headers:{
|
|
||||||
"User-Agent":"PC_UA",
|
|
||||||
"Referer": "https://www.bilibili.com",
|
|
||||||
"Cookie":"$bili_cookie"
|
|
||||||
},
|
|
||||||
timeout:5000,
|
|
||||||
limit:8,
|
|
||||||
play_parse:true,
|
|
||||||
// play_json:[{re:'*', json:{jx:0, parse:1,header:JSON.stringify({"user-agent":"Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36"})}}],
|
|
||||||
// play_json:[{re:'*', json:{jx:0, parse:1,header:JSON.stringify({"user-agent":"uc_ua"})}}],
|
|
||||||
// play_json:0,
|
|
||||||
lazy:"js:let ids=input.split('_');let result={};let iurl='https://api.live.bilibili.com/room/v1/Room/playUrl?cid='+ids[1]+'&'+ids[0];let html=request(iurl);let jRoot=JSON.parse(html);let jo=jRoot['data'];let ja=jo['durl'];let purl='';if(ja.length>0){purl=ja[0]['url']}result['parse']=0;result['playUrl']='';result['url']=unescape(purl);result['header']={Referer:'https://live.bilibili.com','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'};if(/h5/.test(ids[0])){result['contentType']='';input=result}else{result['contentType']='video/x-flv';input=result}",
|
|
||||||
double:false,
|
|
||||||
推荐:'*',
|
|
||||||
一级:'json:data.list;title;system_cover;uname;roomid',
|
|
||||||
// 二级:'*',
|
|
||||||
二级:"js:let aid=input.match(/\\/(\\d+)/)[1];log(aid);let html=request('https://api.live.bilibili.com/room/v1/Room/get_info?room_id='+aid);let jo=JSON.parse(html).data;let title=jo['title'];let pic=jo['keyframe'];let desc=jo['description'];let dire=jo['uid'];let typeName=jo['area_name'];let remark='在线人数:'+jo['online'];let vod={vod_id:aid,vod_name:title,vod_pic:pic,type_name:typeName,vod_area:'bililivedanmu',vod_remarks:remark,vod_actor:'直播间id-'+aid,vod_director:dire,vod_content:desc};vod['vod_play_from']='B站';vod['vod_play_url']='flv线路原画$platform=web&quality=4_'+aid+'#flv线路高清$platform=web&quality=3_'+aid+'#h5线路原画$platform=h5&quality=4_'+aid+'#h5线路高清$platform=h5&quality=3_'+aid;VOD=vod;",
|
|
||||||
// 搜索:'json:data.result.live_room;title;cover;uname;roomid',
|
|
||||||
搜索:'js:let html=request(input);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let videos=[];let vodList=JSON.parse(html).data.result.live_room;vodList.forEach(function(vod){let aid=vod["roomid"];let title="直播间:"+vod["title"].replace(\'<em class="keyword">\',"").replace("</em>","");let img="https:"+vod["user_cover"];let remark=vod["watched_show"]["text_small"]+" "+vod["uname"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}',
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
var rule={title:'抓饭体育',host:'https://www.zhuafan.tech',url:'/sports-home/category/fyclass',class_name:'全部&足球&篮球&羽乒&台球&棒球&户外&搏击&综合&棋盘&电竞&网球&排球&聊天&原声',class_url:'all&Football&Basketball&Badminton&Billiards&Baseball&Outdoors&Wrestling&Others&Boardgame&Popular&Tennis&Volleyball&Chat&Acoustic',homeUrl:'/sports-home/category/all',detailUrl:'https://m.zhuafan.tech/fyid',searchUrl:'/live-search/search/query/data?keyword=**&page=fypage&num=&searchType=all&uid=null&from=pc',searchable:2,quickSearch:0,headers:{'User-Agent':'PC_UA'},limit:6,timeout:5000,play_parse:true,lazy:'',double:false,推荐:'*',一级:'json:data;cname;imageUrl;uname;id',二级:'*',搜索:'json:cObj.cList;*;*;*;_id',}
|
|
@ -1,274 +0,0 @@
|
|||||||
if (typeof Object.assign != 'function') {
|
|
||||||
Object.assign = function () {
|
|
||||||
var target = arguments[0];
|
|
||||||
for (var i = 1; i < arguments.length; i++) {
|
|
||||||
var source = arguments[i];
|
|
||||||
for (var key in source) {
|
|
||||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
||||||
target[key] = source[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return target;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function getMubans() {
|
|
||||||
var mubanDict = { // 模板字典
|
|
||||||
mxpro: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
// homeUrl:'/',
|
|
||||||
url: '/vodshow/fyclass--------fypage---.html',
|
|
||||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
// "Cookie": "searchneed=ok"
|
|
||||||
},
|
|
||||||
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1&&Text;.module-info-tag&&Text",
|
|
||||||
"img": ".lazyload&&data-original",
|
|
||||||
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
|
|
||||||
"content": ".module-info-introduction&&Text",
|
|
||||||
"tabs": ".module-tab-item",
|
|
||||||
"lists": ".module-play-list:eq(#id) a"
|
|
||||||
},
|
|
||||||
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
|
||||||
},
|
|
||||||
mxone5: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/show/fyclass--------fypage---.html',
|
|
||||||
searchUrl: '/search/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1&&Text;.tag-link&&Text",
|
|
||||||
"img": ".module-item-pic&&img&&data-src",
|
|
||||||
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
|
|
||||||
"content": ".vod_content&&Text",
|
|
||||||
"tabs": ".module-tab-item",
|
|
||||||
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
|
|
||||||
},
|
|
||||||
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
|
||||||
},
|
|
||||||
首图: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/vodshow/fyclass--------fypage---/',
|
|
||||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
// "Cookie": "searchneed=ok"
|
|
||||||
},
|
|
||||||
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
|
|
||||||
"img": ".myui-content__thumb .lazyload&&data-original",
|
|
||||||
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
|
|
||||||
"content": ".content&&Text",
|
|
||||||
"tabs": ".nav-tabs:eq(0) li",
|
|
||||||
"lists": ".myui-content__list:eq(#id) li"
|
|
||||||
},
|
|
||||||
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
},
|
|
||||||
首图2: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/list/fyclass-fypage.html',
|
|
||||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'UC_UA',
|
|
||||||
// "Cookie": ""
|
|
||||||
},
|
|
||||||
// class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
|
||||||
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
|
|
||||||
"img": ".stui-content__thumb .lazyload&&data-original",
|
|
||||||
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
|
|
||||||
"content": ".detail&&Text",
|
|
||||||
"tabs": ".stui-vodlist__head h3",
|
|
||||||
"lists": ".stui-content__playlist:eq(#id) li"
|
|
||||||
},
|
|
||||||
搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
|
||||||
},
|
|
||||||
默认: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/vodshow/fyclass--------fypage---.html',
|
|
||||||
searchUrl: '/vodsearch/-------------.html?wd=**',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
},
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
},
|
|
||||||
vfed: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
|
||||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'UC_UA',
|
|
||||||
},
|
|
||||||
// class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
|
|
||||||
"img": ".fed-list-info&&a&&data-original",
|
|
||||||
"desc": ".fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text",
|
|
||||||
"content": ".fed-part-esan&&Text",
|
|
||||||
"tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
|
|
||||||
"lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
|
|
||||||
},
|
|
||||||
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
|
||||||
},
|
|
||||||
海螺3: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
searchUrl: '/v_search/**----------fypage---.html',
|
|
||||||
url: '/vod_____show/fyclass--------fypage---.html',
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA'
|
|
||||||
},
|
|
||||||
timeout: 5000,
|
|
||||||
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
cate_exclude: '明星|专题|最新|排行',
|
|
||||||
limit: 40,
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
|
||||||
double: true,
|
|
||||||
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
|
|
||||||
"img": ".hl-lazy&&data-original",
|
|
||||||
"desc": ".hl-infos-content&&.hl-text-conch&&Text",
|
|
||||||
"content": ".hl-content-text&&Text",
|
|
||||||
"tabs": ".hl-tabs&&a",
|
|
||||||
"lists": ".hl-plays-list:eq(#id)&&li"
|
|
||||||
},
|
|
||||||
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
},
|
|
||||||
海螺2: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
|
||||||
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA'
|
|
||||||
},
|
|
||||||
timeout: 5000,
|
|
||||||
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
|
||||||
limit: 40,
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
|
||||||
double: true,
|
|
||||||
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h2&&Text;.deployment&&Text",
|
|
||||||
"img": ".lazy&&data-original",
|
|
||||||
"desc": ".deployment&&Text",
|
|
||||||
"content": ".ec-show&&Text",
|
|
||||||
"tabs": "#tag&&a",
|
|
||||||
"lists": ".play_list_box:eq(#id)&&li"
|
|
||||||
},
|
|
||||||
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
},
|
|
||||||
短视: {
|
|
||||||
title: '',
|
|
||||||
host: '',
|
|
||||||
// homeUrl:'/',
|
|
||||||
url: '/channel/fyclass-fypage.html',
|
|
||||||
searchUrl: '/search.html?wd=**',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
filterable: 0,//是否启用分类筛选,
|
|
||||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
// "Cookie": "searchneed=ok"
|
|
||||||
},
|
|
||||||
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
cate_exclude: '解析|动态',
|
|
||||||
play_parse: true,
|
|
||||||
lazy: '',
|
|
||||||
limit: 6,
|
|
||||||
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
|
||||||
double: true, // 推荐内容是否双层定位
|
|
||||||
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
|
||||||
二级: {
|
|
||||||
"title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
|
|
||||||
"img": ".img&&img&&data-src",
|
|
||||||
"desc": ".content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text",
|
|
||||||
"content": ".zkjj_a&&Text",
|
|
||||||
"tabs": ".py-tabs&&option",
|
|
||||||
"lists": ".player:eq(#id) li"
|
|
||||||
},
|
|
||||||
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
return JSON.parse(JSON.stringify(mubanDict));
|
|
||||||
}
|
|
||||||
var mubanDict = getMubans();
|
|
||||||
var muban = getMubans();
|
|
||||||
export default {muban,getMubans};
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,37 +0,0 @@
|
|||||||
var rule = {
|
|
||||||
title:'路漫漫',
|
|
||||||
host:'https://www.96ba.com',
|
|
||||||
// url:'/vod/show/id/fyclass/page/fypage.html',
|
|
||||||
url:'/vod/show/id/fyclassfyfilter.html',
|
|
||||||
filterable:1,//是否启用分类筛选,
|
|
||||||
filter_url:'{{fl.by}}/page/fypage{{fl.year}}',
|
|
||||||
filter:{
|
|
||||||
"ribendongman":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
|
|
||||||
"guochandongman":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
|
|
||||||
"oumeidongman":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
|
|
||||||
"ribendonghuadianying":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
|
|
||||||
"guochandonghuadianying":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
|
|
||||||
"oumeidonghuadianying":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}]
|
|
||||||
},
|
|
||||||
searchUrl:'/vod/search/page/fypage/wd/**.html',
|
|
||||||
searchable: 2,//是否启用全局搜索,
|
|
||||||
quickSearch: 0,//是否启用快速搜索,
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'MOBILE_UA',
|
|
||||||
},
|
|
||||||
class_parse:'.container&&.tag.text-light;a&&Text;a&&href;.*/(.*?).html',
|
|
||||||
play_parse: true,
|
|
||||||
lazy:'js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;var from=html.from;if(/m3u8/.test(url)){input=url.split("&")[0]}else{input}',
|
|
||||||
limit: 6,
|
|
||||||
推荐:'.owl-theme-jable .item;*;*;*;*',
|
|
||||||
一级:'#mdym .col-6;h6&&Text;.lazyload&&data-src;.label&&Text;a&&href',
|
|
||||||
二级:{
|
|
||||||
"title":"h1&&Text;.video-info-aux&&Text",
|
|
||||||
"img":".url_img&&src",
|
|
||||||
"desc":".video-info-items--span:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text",
|
|
||||||
"content":".content-text&&Text",
|
|
||||||
"tabs":".module-tab-content .tab-item",
|
|
||||||
"lists":".scroll-content:eq(#id) a"
|
|
||||||
},
|
|
||||||
搜索:'*',
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 172 KiB |
File diff suppressed because one or more lines are too long
@ -1,189 +0,0 @@
|
|||||||
#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, ""]
|
|
@ -1,278 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"7年级地理":"7年级地理",
|
|
||||||
"7年级生物":"7年级生物",
|
|
||||||
"7年级物理":"7年级物理",
|
|
||||||
"7年级化学":"7年级化学",
|
|
||||||
"8年级语文":"8年级语文",
|
|
||||||
"8年级数学":"8年级数学",
|
|
||||||
"8年级英语":"8年级英语",
|
|
||||||
"8年级历史":"8年级历史",
|
|
||||||
"8年级地理":"8年级地理",
|
|
||||||
"8年级生物":"8年级生物",
|
|
||||||
"8年级物理":"8年级物理",
|
|
||||||
"8年级化学":"8年级化学",
|
|
||||||
"9年级语文":"9年级语文",
|
|
||||||
"9年级数学":"9年级数学",
|
|
||||||
"9年级英语":"9年级英语",
|
|
||||||
"9年级历史":"9年级历史",
|
|
||||||
"9年级地理":"9年级地理",
|
|
||||||
"9年级生物":"9年级生物",
|
|
||||||
"9年级物理":"9年级物理",
|
|
||||||
"9年级化学":"9年级化学"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,287 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"高一语文":"高一语文",
|
|
||||||
"高一数学":"高一数学",
|
|
||||||
"高一英语":"高一英语",
|
|
||||||
"高一历史":"高一历史",
|
|
||||||
"高一地理":"高一地理",
|
|
||||||
"高一生物":"高一生物",
|
|
||||||
"高一思想政治":"高一思想政治",
|
|
||||||
"高一物理":"高一物理",
|
|
||||||
"高一化学":"高一化学",
|
|
||||||
"高二语文":"高二语文",
|
|
||||||
"高二数学":"高二数学",
|
|
||||||
"高二英语":"高二英语",
|
|
||||||
"高二历史":"高二历史",
|
|
||||||
"高二地理":"高二地理",
|
|
||||||
"高二生物":"高二生物",
|
|
||||||
"高二思想政治":"高二思想政治",
|
|
||||||
"高二物理":"高二物理",
|
|
||||||
"高二化学":"高二化学",
|
|
||||||
"高三语文":"高三语文",
|
|
||||||
"高三数学":"高三数学",
|
|
||||||
"高三英语":"高三英语",
|
|
||||||
"高三历史":"高三历史",
|
|
||||||
"高三地理":"高三地理",
|
|
||||||
"高三生物":"高三生物",
|
|
||||||
"高三思想政治":"高三思想政治",
|
|
||||||
"高三物理":"高三物理",
|
|
||||||
"高三化学":"高三化学",
|
|
||||||
"高中信息技术":"高中信息技术",
|
|
||||||
"高中信息技术":"高中信息技术"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,419 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"周杰伦":"周杰伦",
|
|
||||||
"Beyond":"Beyond",
|
|
||||||
"陈奕迅":"陈奕迅",
|
|
||||||
"许巍":"许巍",
|
|
||||||
"刘德华":"刘德华",
|
|
||||||
"张学友":"张学友",
|
|
||||||
"郭富城":"郭富城",
|
|
||||||
"黎明":"黎明",
|
|
||||||
"朴树":"朴树",
|
|
||||||
"迪克牛仔":"迪克牛仔",
|
|
||||||
"李宗盛":"李宗盛",
|
|
||||||
"邓丽君":"邓丽君",
|
|
||||||
"林子祥":"林子祥",
|
|
||||||
"张信哲":"张信哲",
|
|
||||||
"任贤齐":"任贤齐",
|
|
||||||
"孙楠":"孙楠",
|
|
||||||
"张宇":"张宇",
|
|
||||||
"周华健":"周华健",
|
|
||||||
"蔡依林":"蔡依林",
|
|
||||||
"薛之谦":"薛之谦",
|
|
||||||
"许嵩":"许嵩",
|
|
||||||
"初音未来":"初音未来",
|
|
||||||
"洛天依":"洛天依",
|
|
||||||
"戴佩妮":"戴佩妮",
|
|
||||||
"邓紫棋":"邓紫棋",
|
|
||||||
"蔡健雅":"蔡健雅",
|
|
||||||
"张韶涵":"张韶涵",
|
|
||||||
"莫文蔚":"莫文蔚",
|
|
||||||
"刘若英":"刘若英",
|
|
||||||
"周深":"周深",
|
|
||||||
"毛不易":"毛不易",
|
|
||||||
"汪苏泷":"汪苏泷",
|
|
||||||
"李宇春":"李宇春",
|
|
||||||
"徐佳莹":"徐佳莹",
|
|
||||||
"杨宗纬":"杨宗纬",
|
|
||||||
"胡彦斌":"胡彦斌",
|
|
||||||
"杨千嬅":"杨千嬅",
|
|
||||||
"张靓颖":"张靓颖",
|
|
||||||
"李荣浩":"李荣浩",
|
|
||||||
"杨丞琳":"杨丞琳",
|
|
||||||
"林志炫":"林志炫",
|
|
||||||
"陶喆":"陶喆",
|
|
||||||
"胡夏":"胡夏",
|
|
||||||
"弦子":"弦子",
|
|
||||||
"陈小春":"陈小春",
|
|
||||||
"萧亚轩":"萧亚轩",
|
|
||||||
"鹿晗":"鹿晗",
|
|
||||||
"纵贯线":"纵贯线",
|
|
||||||
"林俊杰":"林俊杰",
|
|
||||||
"谭咏麟":"谭咏麟",
|
|
||||||
"赵雷":"赵雷",
|
|
||||||
"凤凰传奇":"凤凰传奇",
|
|
||||||
"容祖儿":"容祖儿",
|
|
||||||
"周传雄":"周传雄",
|
|
||||||
"SHE":"SHE",
|
|
||||||
"苏打绿":"苏打绿",
|
|
||||||
"五月天":"五月天",
|
|
||||||
"张国荣":"张国荣",
|
|
||||||
"梅艳芳":"梅艳芳",
|
|
||||||
"孙燕姿":"孙燕姿",
|
|
||||||
"李健":"李健",
|
|
||||||
"华晨宇":"华晨宇",
|
|
||||||
"袁娅维":"袁娅维",
|
|
||||||
"大张伟":"大张伟",
|
|
||||||
"TFBOYS":"TFBOYS",
|
|
||||||
"易烊千玺":"易烊千玺",
|
|
||||||
"王俊凯":"王俊凯",
|
|
||||||
"王源":"王源",
|
|
||||||
"田馥甄":"田馥甄",
|
|
||||||
"小虎队":"小虎队",
|
|
||||||
"张杰":"张杰",
|
|
||||||
"伍佰":"伍佰",
|
|
||||||
"王菲":"王菲",
|
|
||||||
"刀郎":"刀郎",
|
|
||||||
"草蜢":"草蜢",
|
|
||||||
"潘玮柏":"潘玮柏",
|
|
||||||
"梁静茹":"梁静茹",
|
|
||||||
"林宥嘉":"林宥嘉",
|
|
||||||
"蔡徐坤":"蔡徐坤",
|
|
||||||
"周慧敏":"周慧敏",
|
|
||||||
"李圣杰":"李圣杰",
|
|
||||||
"张惠妹":"张惠妹",
|
|
||||||
"萧敬腾":"萧敬腾",
|
|
||||||
"周笔畅":"周笔畅",
|
|
||||||
"焦迈奇":"焦迈奇",
|
|
||||||
"尤长靖":"尤长靖",
|
|
||||||
"郑中基":"郑中基",
|
|
||||||
"谭维维":"谭维维",
|
|
||||||
"陈慧娴":"陈慧娴",
|
|
||||||
"张艺兴":"张艺兴",
|
|
||||||
"王嘉尔":"王嘉尔",
|
|
||||||
"刘宪华":"刘宪华",
|
|
||||||
"张敬轩":"张敬轩",
|
|
||||||
"李克勤":"李克勤",
|
|
||||||
"阿杜":"阿杜",
|
|
||||||
"郭静":"郭静",
|
|
||||||
"崔健":"崔健",
|
|
||||||
"庾澄庆":"庾澄庆",
|
|
||||||
"汪峰":"汪峰",
|
|
||||||
"那英":"那英",
|
|
||||||
"杨坤":"杨坤",
|
|
||||||
"叶倩文":"叶倩文",
|
|
||||||
"王心凌":"王心凌",
|
|
||||||
"张震岳":"张震岳",
|
|
||||||
"韩红":"韩红",
|
|
||||||
"齐秦":"齐秦",
|
|
||||||
"张雨生":"张雨生",
|
|
||||||
"黄品源":"黄品源",
|
|
||||||
"林忆莲":"林忆莲",
|
|
||||||
"丁当":"丁当",
|
|
||||||
"郑智化":"郑智化",
|
|
||||||
"李玟":"李玟",
|
|
||||||
"谢霆锋":"谢霆锋",
|
|
||||||
"黄小琥":"黄小琥",
|
|
||||||
"徐小凤":"徐小凤",
|
|
||||||
"任嘉伦":"任嘉伦",
|
|
||||||
"卓依婷":"卓依婷",
|
|
||||||
"逃跑计划":"逃跑计划",
|
|
||||||
"青鸟飞鱼":"青鸟飞鱼",
|
|
||||||
"飞儿乐队":"飞儿乐队",
|
|
||||||
"花儿乐队":"花儿乐队",
|
|
||||||
"南拳妈妈":"南拳妈妈",
|
|
||||||
"水木年华":"水木年华",
|
|
||||||
"动力火车":"动力火车",
|
|
||||||
"筷子兄弟":"筷子兄弟",
|
|
||||||
"鹿先森乐队":"鹿先森乐队",
|
|
||||||
"信乐队":"信乐队",
|
|
||||||
"旅行团乐队":"旅行团乐队",
|
|
||||||
"By2":"By2",
|
|
||||||
"郁可唯":"郁可唯",
|
|
||||||
"宋亚森":"宋亚森",
|
|
||||||
"费玉清":"费玉清",
|
|
||||||
"费翔":"费翔",
|
|
||||||
"金志文":"金志文",
|
|
||||||
"方大同":"方大同",
|
|
||||||
"吴克群":"吴克群",
|
|
||||||
"罗大佑":"罗大佑",
|
|
||||||
"光良":"光良",
|
|
||||||
"凤飞飞":"凤飞飞",
|
|
||||||
"田震":"田震",
|
|
||||||
"谭晶":"谭晶",
|
|
||||||
"王杰":"王杰",
|
|
||||||
"羽泉":"羽泉",
|
|
||||||
"金池":"金池",
|
|
||||||
"屠洪刚":"屠洪刚",
|
|
||||||
"戴荃":"戴荃",
|
|
||||||
"郭采洁":"郭采洁",
|
|
||||||
"罗志祥":"罗志祥",
|
|
||||||
"王力宏":"王力宏",
|
|
||||||
"林肯公园":"林肯公园",
|
|
||||||
"迈克尔杰克逊":"迈克尔杰克逊",
|
|
||||||
"泰勒·斯威夫特":"泰勒·斯威夫特",
|
|
||||||
"阿黛尔":"阿黛尔",
|
|
||||||
"BIGBANG":"BIGBANG",
|
|
||||||
"贾斯丁比伯":"贾斯丁比伯",
|
|
||||||
"Lady Gaga":"Lady Gaga",
|
|
||||||
"中岛美雪":"中岛美雪",
|
|
||||||
"后街男孩":"后街男孩",
|
|
||||||
"仓木麻衣":"仓木麻衣",
|
|
||||||
"布兰妮":"布兰妮",
|
|
||||||
"夜愿乐队":"夜愿乐队"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,297 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"抖音合集":"抖音合集",
|
|
||||||
"快手美女合集":"快手美女合集",
|
|
||||||
"小姐姐":"小姐姐超清",
|
|
||||||
"黑丝":"黑丝",
|
|
||||||
"超短裤":"超短裤",
|
|
||||||
"超短裙":"超短裙",
|
|
||||||
"牛仔裤":"牛仔裤",
|
|
||||||
"选美":"选美",
|
|
||||||
"模特":"模特",
|
|
||||||
"泳装秀":"泳装秀",
|
|
||||||
"内衣秀":"内衣秀",
|
|
||||||
"练习室":"练习室",
|
|
||||||
"美女舞蹈":"美女舞蹈",
|
|
||||||
"舞蹈综合":"舞蹈综合",
|
|
||||||
"舞蹈教程":"舞蹈教程",
|
|
||||||
"古风舞蹈":"古风舞蹈",
|
|
||||||
"印度歌舞":"印度歌舞",
|
|
||||||
"明星舞蹈":"明星舞蹈",
|
|
||||||
"韩舞":"韩舞",
|
|
||||||
"古典舞":"古典舞",
|
|
||||||
"翻跳":"翻跳",
|
|
||||||
"中国舞":"中国舞",
|
|
||||||
"古风舞":"古风舞",
|
|
||||||
"现代舞":"现代舞",
|
|
||||||
"爵士舞":"爵士舞",
|
|
||||||
"芭蕾":"芭蕾",
|
|
||||||
"编舞":"编舞",
|
|
||||||
"POPPING":"POPPING",
|
|
||||||
"桃源恋歌":"桃源恋歌",
|
|
||||||
"新宝岛":"新宝岛",
|
|
||||||
"拉丁舞":"拉丁舞",
|
|
||||||
"蹦迪":"蹦迪",
|
|
||||||
"民族舞":"民族舞",
|
|
||||||
"抖肩舞":"抖肩舞",
|
|
||||||
"齐舞":"齐舞",
|
|
||||||
"机械舞":"机械舞",
|
|
||||||
"广场舞":"广场舞",
|
|
||||||
"极乐净土":"极乐净土",
|
|
||||||
"BDF":"BDF"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,374 +0,0 @@
|
|||||||
#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 "明星MV"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"粤语":"粤语MV4k合集",
|
|
||||||
"2022年热榜":"2022年热门MV4k合集",
|
|
||||||
"KTV热门":"KTV热门MV4k合集",
|
|
||||||
"滚石经典":"滚石MV4k合集",
|
|
||||||
"经典老歌":"经典老歌",
|
|
||||||
"古风MV":"古风MV4k合集",
|
|
||||||
"闽南语MV":"闽南语MV4k合集",
|
|
||||||
"印度歌舞":"印度歌舞MV4k合集",
|
|
||||||
|
|
||||||
"网红翻唱":"网红翻唱MV4k合集",
|
|
||||||
"韩国女团":"韩国女团MV4k合集",
|
|
||||||
"A阿黛尔":"阿黛尔MV4k合集",
|
|
||||||
|
|
||||||
"Blackpink":"blackpinkMV4k合集",
|
|
||||||
"Beyond":"beyondMV超清合集",
|
|
||||||
"B坂井泉水":"坂井泉水MV超清合集",
|
|
||||||
"B宝丽金":"宝丽金MV超清合集",
|
|
||||||
"B布兰妮":"布兰妮MV超清合集",
|
|
||||||
"C崔健":"催件MV超清合集",
|
|
||||||
"C草蜢":"草蜢MV超清合集",
|
|
||||||
"Coldplay":"coldplayMV超清合集",
|
|
||||||
"C陈慧娴":"陈慧娴MV超清合集",
|
|
||||||
"C陈百强":"陈百强MV超清合集",
|
|
||||||
"C陈淑桦":"陈淑桦MV超清合集",
|
|
||||||
"C陈楚生":"陈楚生MV超清合集",
|
|
||||||
"C陈慧琳":"陈慧琳MV超清合集",
|
|
||||||
"D邓丽君":"邓丽君MV超清合集",
|
|
||||||
"D邓紫棋":"邓紫棋MV超清合集",
|
|
||||||
"D刀郎":"刀郎MV超清合集",
|
|
||||||
"D达明一派":"刘以达MV超清合集",
|
|
||||||
"F费玉清":"费玉清MV超清合集",
|
|
||||||
"F飞图":"飞图MV超清合集",
|
|
||||||
"G谷村新司":"谷村新司MV超清合集",
|
|
||||||
"G郭富城":"郭富城MV超清合集",
|
|
||||||
"G关淑怡":"关淑怡MV超清合集",
|
|
||||||
"H黄凯芹":"黄凯芹MV超清合集",
|
|
||||||
"J降央卓玛":"降央卓玛MV超清合集",
|
|
||||||
|
|
||||||
"J江慧":"江慧MV超清合集",
|
|
||||||
"J吉永小百合":"吉永小百合MV超清合集",
|
|
||||||
"J金庸":"金庸影视MV超清合集",
|
|
||||||
"K柯以敏":"柯以敏MV超清合集",
|
|
||||||
"K邝美云":"邝美云MV超清合集",
|
|
||||||
"L刘德华":"刘德华MV超清合集",
|
|
||||||
"Lady Gaga":"Lady GagaMV超清合集",
|
|
||||||
"L龙飘飘":"龙飘飘MV超清合集",
|
|
||||||
"L罗大佑":"罗大佑MV",
|
|
||||||
"L林志炫":"林志炫MV",
|
|
||||||
"L林忆莲":"林忆莲MV",
|
|
||||||
"L李知恩":"李知恩MV",
|
|
||||||
"L梁静茹":"梁静茹MV",
|
|
||||||
"L冷漠":"冷漠MV",
|
|
||||||
"L李克勤":"李克勤MV",
|
|
||||||
"L林子祥":"林子祥MV",
|
|
||||||
"L黎明":"黎明MV",
|
|
||||||
"L刘若英":"刘若英MV",
|
|
||||||
"M莫文蔚":"莫文蔚MV",
|
|
||||||
"M孟庭苇":"孟庭苇MV",
|
|
||||||
"M麦当娜":"麦当娜MV",
|
|
||||||
|
|
||||||
"M迈克杰克逊":"迈克杰克逊MV",
|
|
||||||
"N雅尼紫禁城":"雅尼紫禁城MV",
|
|
||||||
"P潘越云":"潘越云MV",
|
|
||||||
"P潘美辰":"潘美辰MV",
|
|
||||||
"Q齐秦":"齐秦MV",
|
|
||||||
|
|
||||||
"R任贤齐":"任贤齐MV",
|
|
||||||
"S苏慧伦":"苏慧伦MV",
|
|
||||||
"T童安格":"童安格MV",
|
|
||||||
"TFBOYS":"TFBOYSMV",
|
|
||||||
"T太极乐队":"太极乐队MV",
|
|
||||||
"T唐朝摇滚":"唐朝摇滚MV",
|
|
||||||
|
|
||||||
"T谭咏麟":"谭咏麟MV",
|
|
||||||
|
|
||||||
"W王琪":"王琪MV",
|
|
||||||
"W伍珂玥":"伍珂玥MV",
|
|
||||||
"W王杰":"王杰MV",
|
|
||||||
"W伍佰":"伍佰MV",
|
|
||||||
"W温兆伦":"温兆伦MV",
|
|
||||||
"W王菲":"王菲MV",
|
|
||||||
"X徐小凤":"徐小凤MV",
|
|
||||||
"X席琳迪翁":"席琳迪翁MV",
|
|
||||||
"X许嵩":"黄许嵩MV",
|
|
||||||
"X许美静":"许美静MV",
|
|
||||||
"X许冠杰":"许冠杰MV",
|
|
||||||
"X熊天平":"熊天平MV",
|
|
||||||
"X小虎队":"小虎队MV",
|
|
||||||
"X许巍":"许巍MV",
|
|
||||||
"Y叶启田":"叶启田MV",
|
|
||||||
"Y杨钰莹":"杨钰莹MV",
|
|
||||||
"Y叶玉卿":"叶玉卿MV",
|
|
||||||
"Y杨千嬅":"杨千嬅MV",
|
|
||||||
"Y怡正宵":"怡正宵MV",
|
|
||||||
"Z左麟右李":"左麟右李MV",
|
|
||||||
"Z张楚":"张楚MV",
|
|
||||||
"Z张真":"张真MV",
|
|
||||||
"Z张震岳":"张震岳MV",
|
|
||||||
"Z赵传":"赵传MV",
|
|
||||||
"Z周华健":"周华健MV",
|
|
||||||
"Z周启生":"周启生MV",
|
|
||||||
"Z张信哲":"张信哲MV",
|
|
||||||
"Z张也":"张也MV",
|
|
||||||
|
|
||||||
"Z周慧敏":"周慧敏MV",
|
|
||||||
|
|
||||||
"Z张碧晨":"张碧晨MV",
|
|
||||||
"Z中岛美雪":"中岛美雪MV",
|
|
||||||
"Z张学友":"张学友MV",
|
|
||||||
"Z猪哥亮":"猪哥亮MV",
|
|
||||||
"Z周杰伦":"周杰伦MV",
|
|
||||||
"Z周深":"周深MV",
|
|
||||||
"Z张蔷":"张蔷MV",
|
|
||||||
"Z张帝":"张帝MV",
|
|
||||||
"Z张国荣":"张国荣MV",
|
|
||||||
"Z周传雄":"周传雄MV"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,312 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"中国女团":"中国女团4K",
|
|
||||||
"日本女团":"日本女团4K",
|
|
||||||
"韩国女团":"韩国女团4K",
|
|
||||||
"SNH48":"SNH48MV合集",
|
|
||||||
"S.H.E":"S.H.EMV合集",
|
|
||||||
"Twins":"TwinsMV合集",
|
|
||||||
"火箭少女101":"火箭少女101MV合集",
|
|
||||||
"BY2":"BY2MV合集",
|
|
||||||
"S.I.N.G":"S.I.N.GMV合集",
|
|
||||||
"3unshine":"3unshineMV合集",
|
|
||||||
"蜜蜂少女队":"蜜蜂少女队MV合集",
|
|
||||||
"七朵组合":"七朵组合MV合集",
|
|
||||||
"GNZ48":"GNZ48MV合集",
|
|
||||||
"TWICE":"TWICEMV合集",
|
|
||||||
"4MINUTE":"4MINUTEMV合集",
|
|
||||||
"EXID":"EXIDMV合集",
|
|
||||||
"KARA":"KARAMV合集",
|
|
||||||
"TARA":"TARAMV合集",
|
|
||||||
"BLACKPINK":"BLACKPINKMV合集",
|
|
||||||
"LOONA":"LOONAMV合集",
|
|
||||||
"ITZY":"ITZYMV合集",
|
|
||||||
"RedVelvet":"RedVelvetMV合集",
|
|
||||||
"Everglow":"EverglowMV合集",
|
|
||||||
"Mamamoo":"MamamooMV合集",
|
|
||||||
"少女时代":"少女时代MV合集",
|
|
||||||
"S.E.S":"S.E.SMV合集",
|
|
||||||
"FIN.K.L":"FIN.K.LMV合集",
|
|
||||||
"2NE1":"2NE1MV合集",
|
|
||||||
"WonderGirls":"WonderGirlsMV合集",
|
|
||||||
"IZ*ONE":"IZ*ONEMV合集",
|
|
||||||
"Sistar":"SistarMV合集",
|
|
||||||
"Apink":"ApinkMV合集",
|
|
||||||
"AOA":"AOAMV合集",
|
|
||||||
"GFRIEND":"GFRIENDMV合集",
|
|
||||||
"f(x)":"f(x)MV合集",
|
|
||||||
"(G)I-DLE":"(G)I-DLEMV合集",
|
|
||||||
"Itzy":"ItzyMV合集",
|
|
||||||
"Oh!GG":"Oh!GGMV合集",
|
|
||||||
"GirlCrush":"GirlCrushMV合集",
|
|
||||||
"AKB48":"AKB48MV合集",
|
|
||||||
"SKE48":"SKE48MV合集",
|
|
||||||
"NMB48":"NMB48MV合集",
|
|
||||||
"JKT48":"JKT48MV合集",
|
|
||||||
"HKT48":"HKT48MV合集",
|
|
||||||
"AKB48TeamTP":"AKB48TeamTPMV合集",
|
|
||||||
"Perfume":"PerfumeMV合集",
|
|
||||||
"桃色幸运草Z":"桃色幸运草ZMV合集",
|
|
||||||
"乃木坂46乃":"乃木坂46乃MV合集",
|
|
||||||
"樱坂46":"樱坂46MV合集",
|
|
||||||
"日向坂46":"日向坂46MV合集",
|
|
||||||
"E-girls":"E-girlsMV合集",
|
|
||||||
"NiziU":"NiziUMV合集",
|
|
||||||
"BiSH":"BiSHMV合集",
|
|
||||||
"早安少女组":"早安少女组MV合集"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,147 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getName(self):
|
|
||||||
return "斗鱼"
|
|
||||||
def init(self,extend=""):
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"热门游戏": "热门游戏",
|
|
||||||
"一起看": "一起看",
|
|
||||||
"主机游戏": "主机游戏",
|
|
||||||
"原创IP": "原创IP",
|
|
||||||
"王者荣耀":"王者荣耀",
|
|
||||||
"英雄联盟":"英雄联盟",
|
|
||||||
"第五人格":"第五人格",
|
|
||||||
"火影忍者":"火影忍者",
|
|
||||||
"和平精英":"和平精英",
|
|
||||||
"DOTA2":"DOTA2",
|
|
||||||
"CF手游":"CF手游"
|
|
||||||
|
|
||||||
}
|
|
||||||
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 = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'http://live.yj1211.work/api/live/getRecommendByPlatformArea?platform=douyu&size=20&area={0}&page={1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = (vod['roomId']).strip()
|
|
||||||
title = vod['roomName'].strip()
|
|
||||||
img = vod['roomPic'].strip()
|
|
||||||
remark = (vod['categoryName']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "http://live.yj1211.work/api/live/getRoomInfo?platform=douyu&roomId={0}".format(aid)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['roomName']
|
|
||||||
pic = jo['roomPic']
|
|
||||||
desc = str(jo['online'])
|
|
||||||
dire = jo['ownerName']
|
|
||||||
typeName = jo['categoryName']
|
|
||||||
remark = jo['categoryName']
|
|
||||||
vod = {
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": typeName,
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": remark,
|
|
||||||
"vod_actor": '在线人数:' + desc,
|
|
||||||
"vod_director": dire,
|
|
||||||
"vod_content": ""
|
|
||||||
}
|
|
||||||
playUrl = '原画' + '${0}#'.format(aid)
|
|
||||||
vod['vod_play_from'] = '斗鱼直播'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url = 'http://live.yj1211.work/api/live/getRealUrl?platform=douyu&roomId={0}'.format(id)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['OD']
|
|
||||||
url = ja
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
def localProxy(self,param):
|
|
||||||
action = {
|
|
||||||
'url':'',
|
|
||||||
'header':'',
|
|
||||||
'param':'',
|
|
||||||
'type':'string',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,185 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import re
|
|
||||||
import time
|
|
||||||
import html
|
|
||||||
import base64
|
|
||||||
import hashlib
|
|
||||||
import urllib.parse
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getName(self):
|
|
||||||
return "虎牙"
|
|
||||||
def init(self,extend=""):
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"音乐":"音乐",
|
|
||||||
"星秀":"星秀",
|
|
||||||
"颜值":"颜值",
|
|
||||||
"交友":"交友",
|
|
||||||
"户外":"户外",
|
|
||||||
"美食":"美食",
|
|
||||||
"一起看":"一起看",
|
|
||||||
"王者荣耀":"王者荣耀",
|
|
||||||
"和平精英":"和平精英",
|
|
||||||
"英雄联盟":"英雄联盟",
|
|
||||||
"天天吃鸡":"天天吃鸡",
|
|
||||||
"穿越火线":"穿越火线",
|
|
||||||
"二次元":"二次元",
|
|
||||||
"体育":"体育",
|
|
||||||
"原神":"原神",
|
|
||||||
"三国杀":"三国杀",
|
|
||||||
"暗黑破坏神:不朽":"暗黑破坏神:不朽",
|
|
||||||
"迷你世界":"迷你世界",
|
|
||||||
"暗区突围":"暗区突围",
|
|
||||||
"生死狙击2":"生死狙击2",
|
|
||||||
"金铲铲之战":"金铲铲之战",
|
|
||||||
"英雄联盟手游":"英雄联盟手游",
|
|
||||||
"lol云顶之弈":"lol云顶之弈",
|
|
||||||
"剑侠世界3":"剑侠世界3",
|
|
||||||
"不良人3":"不良人3",
|
|
||||||
"二次元":"二次元",
|
|
||||||
"主机游戏":"主机游戏"
|
|
||||||
}
|
|
||||||
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 = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'http://live.yj1211.work/api/live/getRecommendByPlatformArea?platform=huya&size=20&area={0}&page={1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = (vod['roomId']).strip()
|
|
||||||
title = vod['roomName'].strip()
|
|
||||||
img = vod['roomPic'].strip()
|
|
||||||
remark = (vod['ownerName']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = 'https://www.huya.com/' + aid
|
|
||||||
header = {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
|
||||||
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'
|
|
||||||
}
|
|
||||||
rsp = self.fetch(url, headers=header)
|
|
||||||
streamInfo = re.findall(r'stream: ([\s\S]*?)\n', rsp.text)
|
|
||||||
if (len(streamInfo) > 0):
|
|
||||||
liveData = json.loads(streamInfo[0])
|
|
||||||
else:
|
|
||||||
streamInfo = re.findall(r'"stream": "([\s\S]*?)"', rsp.text)
|
|
||||||
if (len(streamInfo) > 0):
|
|
||||||
liveDataBase64 = streamInfo[0]
|
|
||||||
liveData = json.loads(str(base64.b64decode(liveDataBase64), 'utf-8'))
|
|
||||||
streamInfoList = liveData['data'][0]['gameStreamInfoList']
|
|
||||||
vod = {
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": liveData['data'][0]['gameLiveInfo']['roomName'],
|
|
||||||
"vod_pic": liveData['data'][0]['gameLiveInfo']['screenshot'],
|
|
||||||
"type_name": liveData['data'][0]['gameLiveInfo']['gameFullName'],
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": "",
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": "",
|
|
||||||
"vod_content": ""
|
|
||||||
}
|
|
||||||
playUrl = ''
|
|
||||||
for streamInfo in streamInfoList:
|
|
||||||
hls_url = streamInfo['sHlsUrl'] + '/' + streamInfo['sStreamName'] + '.' + streamInfo['sHlsUrlSuffix']
|
|
||||||
srcAntiCode = html.unescape(streamInfo['sHlsAntiCode'])
|
|
||||||
c = srcAntiCode.split('&')
|
|
||||||
c = [i for i in c if i != '']
|
|
||||||
n = {i.split('=')[0]: i.split('=')[1] for i in c}
|
|
||||||
fm = urllib.parse.unquote(n['fm'])
|
|
||||||
u = base64.b64decode(fm).decode('utf-8')
|
|
||||||
hash_prefix = u.split('_')[0]
|
|
||||||
ctype = n.get('ctype', '')
|
|
||||||
txyp = n.get('txyp', '')
|
|
||||||
fs = n.get('fs', '')
|
|
||||||
t = n.get('t', '')
|
|
||||||
seqid = str(int(time.time() * 1e3 + 1463993859134))
|
|
||||||
wsTime = hex(int(time.time()) + 3600).replace('0x', '')
|
|
||||||
hash = hashlib.md5('_'.join([hash_prefix, '1463993859134', streamInfo['sStreamName'], hashlib.md5((seqid + '|' + ctype + '|' + t).encode('utf-8')).hexdigest(), wsTime]).encode('utf-8')).hexdigest()
|
|
||||||
ratio = ''
|
|
||||||
purl = "{}?wsSecret={}&wsTime={}&seqid={}&ctype={}&ver=1&txyp={}&fs={}&ratio={}&u={}&t={}&sv=2107230339".format( hls_url, hash, wsTime, seqid, ctype, txyp, fs, ratio, '1463993859134', t)
|
|
||||||
playUrl = playUrl + '{}${}#'.format(streamInfo['sCdnType'], purl)
|
|
||||||
vod['vod_play_from'] = '虎牙直播'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
url = id
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = ''
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
def localProxy(self,param):
|
|
||||||
action = {
|
|
||||||
'url':'',
|
|
||||||
'header':'',
|
|
||||||
'param':'',
|
|
||||||
'type':'string',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
@ -1,142 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import math
|
|
||||||
import re
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getName(self):
|
|
||||||
return "企鹅体育"
|
|
||||||
def init(self,extend=""):
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"全部": "",
|
|
||||||
"足球": "Football",
|
|
||||||
"篮球": "Basketball",
|
|
||||||
"NBA": "NBA",
|
|
||||||
"台球": "Billiards",
|
|
||||||
"搏击": "Fight",
|
|
||||||
"网排": "Tennis",
|
|
||||||
"游戏": "Game",
|
|
||||||
"其他": "Others",
|
|
||||||
"橄棒冰": "MLB"
|
|
||||||
}
|
|
||||||
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 = {}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://live.qq.com/api/live/vlist?page_size=60&shortName={0}&page={1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
numvL = len(vodList)
|
|
||||||
pgc = math.ceil(numvL/15)
|
|
||||||
for vod in vodList:
|
|
||||||
aid = (vod['room_id'])
|
|
||||||
title = vod['room_name'].strip()
|
|
||||||
img = vod['room_src']
|
|
||||||
remark = (vod['game_name']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = pgc
|
|
||||||
result['limit'] = numvL
|
|
||||||
result['total'] = numvL
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://m.live.qq.com/{0}".format(aid)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
html = self.cleanText(rsp.text)
|
|
||||||
if self.regStr(reg=r'\"show_status\":\"(\d)\"', src=html) == '1':
|
|
||||||
title = self.regStr(reg=r'\"room_name\":\"(.*?)\"', src=html)
|
|
||||||
pic = self.regStr(reg=r'\"room_src\":\"(.*?)\"', src=html)
|
|
||||||
typeName = self.regStr(reg=r'\"game_name\":\"(.*?)\"', src=html)
|
|
||||||
remark = self.regStr(reg=r'\"nickname\":\"(.*?)\"', src=html)
|
|
||||||
purl = self.regStr(reg=r'\"hls_url\":\"(.*?)\"', src=html)
|
|
||||||
else:
|
|
||||||
return {}
|
|
||||||
vod = {
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": typeName,
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": remark,
|
|
||||||
"vod_actor": '',
|
|
||||||
"vod_director":'',
|
|
||||||
"vod_content": ''
|
|
||||||
}
|
|
||||||
playUrl = '{0}${1}#'.format(typeName, purl)
|
|
||||||
vod['vod_play_from'] = '企鹅体育'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
url = id
|
|
||||||
header = {
|
|
||||||
'Referer': 'https://m.live.qq.com/',
|
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = header
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
action = {
|
|
||||||
'url':'',
|
|
||||||
'header':'',
|
|
||||||
'param':'',
|
|
||||||
'type':'string',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,289 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"梅西":"梅西",
|
|
||||||
"C罗":"C罗",
|
|
||||||
"天下足球":"天下足球",
|
|
||||||
"罗纳尔多":"罗纳尔多",
|
|
||||||
"亨利":"亨利",
|
|
||||||
"小罗":"小罗",
|
|
||||||
"齐达内":"齐达内",
|
|
||||||
"贝克汉姆":"贝克汉姆",
|
|
||||||
"内马尔":"内马尔",
|
|
||||||
"德布劳内":"德布劳内",
|
|
||||||
"欧冠":"欧冠",
|
|
||||||
"世界杯":"世界杯",
|
|
||||||
"西甲":"西甲",
|
|
||||||
"英超":"英超",
|
|
||||||
"意甲":"意甲",
|
|
||||||
"德甲":"德甲",
|
|
||||||
"国米":"国米",
|
|
||||||
"皇马":"皇马",
|
|
||||||
"巴萨":"巴萨",
|
|
||||||
"巴黎圣日耳曼":"巴黎圣日耳曼",
|
|
||||||
"曼联":"曼联",
|
|
||||||
"曼城":"曼城",
|
|
||||||
"NBA":"NBA",
|
|
||||||
"詹姆斯":"詹姆斯",
|
|
||||||
"库里":"库里",
|
|
||||||
"杜兰特":"杜兰特",
|
|
||||||
"UFC":"UFC",
|
|
||||||
"斯诺克":"斯诺克",
|
|
||||||
"网球":"网球",
|
|
||||||
"F1":"F1",
|
|
||||||
"高尔夫":"高尔夫"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,291 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"自由泳":"自由泳",
|
|
||||||
"广场舞":"广场舞",
|
|
||||||
"蛙泳":"蛙泳",
|
|
||||||
"乒乓球":"乒乓球",
|
|
||||||
"围棋":"围棋",
|
|
||||||
"足球":"足球",
|
|
||||||
"手球":"手球",
|
|
||||||
"篮球":"篮球",
|
|
||||||
"排球":"排球",
|
|
||||||
"羽毛球":"羽毛球",
|
|
||||||
"网球":"网球",
|
|
||||||
"高尔夫球":"高尔夫球",
|
|
||||||
"冰球":"冰球",
|
|
||||||
"沙滩排球":"沙滩排球",
|
|
||||||
"棒球":"棒球",
|
|
||||||
"垒球":"垒球",
|
|
||||||
"藤球":"藤球",
|
|
||||||
"毽球":"毽球",
|
|
||||||
"台球":"台球",
|
|
||||||
"鞠蹴":"鞠蹴",
|
|
||||||
"板球":"板球",
|
|
||||||
"壁球":"壁球",
|
|
||||||
"砂壶":"砂壶",
|
|
||||||
"冰壶":"冰壶",
|
|
||||||
"克郎球":"克郎球",
|
|
||||||
"橄榄球":"橄榄球",
|
|
||||||
"曲棍球":"曲棍球",
|
|
||||||
"水球":"水球",
|
|
||||||
"马球":"马球",
|
|
||||||
"保龄球":"保龄球",
|
|
||||||
"健身球":"健身球",
|
|
||||||
"门球":"门球",
|
|
||||||
"弹球":"弹球"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,211 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
from requests import session, utils
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "B站影视"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"番剧": "1",
|
|
||||||
"国创": "4",
|
|
||||||
"电影": "2",
|
|
||||||
"综艺": "7",
|
|
||||||
"电视剧": "5",
|
|
||||||
"纪录片": "3"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
cookies_str = self.fetch("https://yydsys.top/duo/txt/cookie.txt").text
|
|
||||||
cookies_dic = dict([co.strip().split('=') for co in cookies_str.split(';')])
|
|
||||||
rsp = session()
|
|
||||||
cookies_jar = utils.cookiejar_from_dict(cookies_dic)
|
|
||||||
rsp.cookies = cookies_jar
|
|
||||||
content = self.fetch("http://api.bilibili.com/x/web-interface/nav", cookies=rsp.cookies)
|
|
||||||
res = json.loads(content.text)
|
|
||||||
if res["code"] == 0:
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
else:
|
|
||||||
rsp = self.fetch("https://www.bilibili.com/")
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
return rsp.cookies
|
|
||||||
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://api.bilibili.com/pgc/season/index/result?order=2&season_status=-1&style_id=-1&sort=0&area=-1&pagesize=20&type=1&st={0}&season_type={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['season_id']).strip()
|
|
||||||
title = vod['title'].strip()
|
|
||||||
img = vod['cover'].strip()
|
|
||||||
remark = vod['index_show'].strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "http://api.bilibili.com/pgc/view/web/season?season_id={0}".format(aid)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['result']
|
|
||||||
id = jo['season_id']
|
|
||||||
title = jo['title']
|
|
||||||
pic = jo['cover']
|
|
||||||
areas = jo['areas'][0]['name']
|
|
||||||
typeName = jo['share_sub_title']
|
|
||||||
dec = jo['evaluate']
|
|
||||||
remark = jo['new_ep']['desc']
|
|
||||||
vod = {
|
|
||||||
"vod_id":id,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":remark,
|
|
||||||
"vod_actor":"",
|
|
||||||
"vod_director":"",
|
|
||||||
"vod_content":dec
|
|
||||||
}
|
|
||||||
ja = jo['episodes']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
eid = tmpJo['id']
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['title'].replace("#", "-")
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part, eid, cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站影视'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=media_bangumi&keyword={0}'.format(key) # 番剧搜索
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
rs = jo['data']
|
|
||||||
if rs['numResults'] == 0:
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=media_ft&keyword={0}'.format(key) # 影视搜索
|
|
||||||
rspRetry = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['season_id']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">", "").replace("</em>", "")
|
|
||||||
img = vod['eps'][0]['cover'].strip()
|
|
||||||
remark = vod['index_show']
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
ids = id.split("_")
|
|
||||||
header = {
|
|
||||||
"Referer": "https://www.bilibili.com",
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
url = 'https://api.bilibili.com/pgc/player/web/playurl?qn=116&ep_id={0}&cid={1}'.format(ids[0],ids[1])
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.cookies,headers=header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
if jRoot['message'] != 'success':
|
|
||||||
url = ''
|
|
||||||
else:
|
|
||||||
jo = jRoot['result']
|
|
||||||
ja = jo['durl']
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,282 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"单口相声":"单口相声",
|
|
||||||
"群口相声":"群口相声",
|
|
||||||
"德云社":"德云社",
|
|
||||||
"青曲社":"青曲社",
|
|
||||||
"郭德纲":"郭德纲",
|
|
||||||
"岳云鹏":"岳云鹏",
|
|
||||||
"曹云金":"曹云金",
|
|
||||||
"评书":"评书",
|
|
||||||
"小曲":"小曲",
|
|
||||||
"二人转":"二人转",
|
|
||||||
"春晚小品":"春晚小品",
|
|
||||||
"赵本山":"赵本山",
|
|
||||||
"陈佩斯":"陈佩斯",
|
|
||||||
"冯巩":"冯巩",
|
|
||||||
"宋小宝":"宋小宝",
|
|
||||||
"赵丽蓉":"赵丽蓉",
|
|
||||||
"郭达":"郭达",
|
|
||||||
"潘长江":"潘长江",
|
|
||||||
"郭冬临":"郭冬临",
|
|
||||||
"严顺开":"严顺开",
|
|
||||||
"文松":"文松",
|
|
||||||
"开心麻花":"开心麻花",
|
|
||||||
"屌丝男士":"屌丝男士",
|
|
||||||
"喜剧综艺":"喜剧综艺"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,276 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"1年级语文":"1年级语文",
|
|
||||||
"1年级数学":"1年级数学",
|
|
||||||
"1年级英语":"1年级英语",
|
|
||||||
"2年级语文":"2年级语文",
|
|
||||||
"2年级数学":"2年级数学",
|
|
||||||
"2年级英语":"2年级英语",
|
|
||||||
"3年级语文":"3年级语文",
|
|
||||||
"3年级数学":"3年级数学",
|
|
||||||
"3年级英语":"3年级英语",
|
|
||||||
"4年级语文":"4年级语文",
|
|
||||||
"4年级数学":"4年级数学",
|
|
||||||
"4年级英语":"4年级英语",
|
|
||||||
"5年级语文":"5年级语文",
|
|
||||||
"5年级数学":"5年级数学",
|
|
||||||
"5年级英语":"5年级英语",
|
|
||||||
"6年级语文":"6年级语文",
|
|
||||||
"6年级数学":"6年级数学",
|
|
||||||
"6年级英语":"6年级英语"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,303 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"京剧":"京剧超清",
|
|
||||||
"越剧":"越剧超清",
|
|
||||||
"蒲剧":"蒲剧超清",
|
|
||||||
"眉户":"眉户超清",
|
|
||||||
"吕剧":"吕剧超清",
|
|
||||||
"楚剧":"楚剧超清",
|
|
||||||
"歌仔戏":"歌仔戏超清",
|
|
||||||
"黄梅戏":"黄梅戏超清",
|
|
||||||
"评剧":"评剧超清",
|
|
||||||
"豫剧":"豫剧超清",
|
|
||||||
"花鼓戏":"花鼓戏超清",
|
|
||||||
"布袋戏":"布袋戏合集超清",
|
|
||||||
"沪剧":"沪剧超清",
|
|
||||||
"昆曲":"昆曲超清",
|
|
||||||
"潮剧":"潮剧超清",
|
|
||||||
"超清潮剧":"超清潮剧超清",
|
|
||||||
"百花潮剧院":"百花潮剧院超清",
|
|
||||||
"香港潮剧":"香港潮剧超清",
|
|
||||||
"潮剧院":"潮剧院超清",
|
|
||||||
"潮剧团":"潮剧团超清",
|
|
||||||
"潮剧全剧":"潮剧全剧超清",
|
|
||||||
"潮剧选段":"潮剧选段超清",
|
|
||||||
"名家潮剧":"名家潮剧超清",
|
|
||||||
"潮汕小品":"潮汕小品超清",
|
|
||||||
"潮汕讲古":"潮汕讲古超清",
|
|
||||||
"绍兴莲花落":"绍兴莲花落超清",
|
|
||||||
"河北梆子":"河北梆子超清",
|
|
||||||
"梆子腔":"梆子腔超清",
|
|
||||||
"晋剧":"晋剧超清",
|
|
||||||
"龙江剧":"龙江剧超清",
|
|
||||||
"越调":"越调超清",
|
|
||||||
"河南曲剧":"河南曲剧超清",
|
|
||||||
"山东梆子":"山东梆子超清",
|
|
||||||
"淮剧":"淮剧超清",
|
|
||||||
"滑稽戏":"滑稽戏超清",
|
|
||||||
"婺剧":"婺剧超清",
|
|
||||||
"绍剧":"绍剧超清",
|
|
||||||
"徽剧":"徽剧超清",
|
|
||||||
"雁剧":"雁剧超清",
|
|
||||||
"上党梆子":"上党梆子超清",
|
|
||||||
"秦腔":"秦腔超清",
|
|
||||||
"武安平调":"武安平调超清",
|
|
||||||
"二人台":"二人台超清",
|
|
||||||
"吉剧":"吉剧超清",
|
|
||||||
"高腔":"高腔超清"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,283 +0,0 @@
|
|||||||
#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 "B站音乐"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"经典无损音乐合集":"经典无损音乐合集",
|
|
||||||
"粤语":"粤语歌曲超清",
|
|
||||||
"2022年热榜":"2022年热们歌曲",
|
|
||||||
"经典老歌":"经典老歌",
|
|
||||||
"古风歌曲":"古风歌曲",
|
|
||||||
"闽南语歌曲":"闽南语歌曲",
|
|
||||||
"印度歌舞":"印度歌舞",
|
|
||||||
"8K":"8K",
|
|
||||||
"4K杜比视界":"4K杜比视界",
|
|
||||||
"4K":"4K",
|
|
||||||
"黑胶":"黑胶",
|
|
||||||
"MV":"MV",
|
|
||||||
"4K小姐姐":"4K小姐姐",
|
|
||||||
"超清小姐姐":"超清小姐姐",
|
|
||||||
"经典粤语":"经典粤语",
|
|
||||||
"经典老歌":"经典老歌",
|
|
||||||
"宝华音乐台":"宝华音乐台",
|
|
||||||
"翻唱":"翻唱",
|
|
||||||
"张学友":"张学友",
|
|
||||||
"伍佰":"伍佰",
|
|
||||||
"陈奕迅":"陈奕迅",
|
|
||||||
"演唱会":"演唱会",
|
|
||||||
"欧美金曲":"欧美金曲",
|
|
||||||
"日韩MV":"日韩MV",
|
|
||||||
"DJ":"DJ"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,273 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"儿童早教": "儿童早教",
|
|
||||||
"儿童启蒙故事": "儿童启蒙故事",
|
|
||||||
"儿童英语启蒙": "儿童英语启蒙",
|
|
||||||
"儿童歌曲": "儿童歌曲",
|
|
||||||
"儿童玩具": "儿童玩具",
|
|
||||||
"儿童绘画": "儿童绘画",
|
|
||||||
"睡前故事": "睡前故事",
|
|
||||||
"儿童动画": "儿童动画",
|
|
||||||
"儿童音乐": "儿童音乐",
|
|
||||||
"儿童安全教育": "儿童安全教育",
|
|
||||||
"贝瓦儿歌": "贝瓦儿歌",
|
|
||||||
"悟空识字": "悟空识字",
|
|
||||||
"宝宝巴士": "宝宝巴士",
|
|
||||||
"儿歌多多": "儿歌多多",
|
|
||||||
"学而思": "学而思"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,272 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"中医药":"中医药",
|
|
||||||
"中医基础":"中医基础",
|
|
||||||
"中药基础":"中药基础",
|
|
||||||
"伤寒论":"伤寒论",
|
|
||||||
"难经":"难经",
|
|
||||||
"神农本草经":"神农本草经",
|
|
||||||
"金匮要略":"金匮要略",
|
|
||||||
"脉经":"脉经",
|
|
||||||
"中藏经":"中藏经",
|
|
||||||
"针灸甲乙经":"针灸甲乙经",
|
|
||||||
"濒湖脉学":"濒湖脉学",
|
|
||||||
"本草纲目":"本草纲目",
|
|
||||||
"汤头歌诀":"汤头歌诀",
|
|
||||||
"药性赋":"药性赋"
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,268 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"美女搭讪":"美女搭讪",
|
|
||||||
"搭讪技巧":"搭讪技巧",
|
|
||||||
"女追男":"女追男",
|
|
||||||
"男追女":"男追女",
|
|
||||||
"街头搭讪":"街头搭讪",
|
|
||||||
"夜店搭讪":"夜店搭讪",
|
|
||||||
"商超搭讪":"商超搭讪",
|
|
||||||
"校园搭讪":"校园搭讪",
|
|
||||||
"搭讪失败":"搭讪失败"
|
|
||||||
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,277 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"内衣":"内衣",
|
|
||||||
"男生搭配":"男生搭配",
|
|
||||||
"女生搭配":"女生搭配",
|
|
||||||
"裙子":"裙子",
|
|
||||||
"紧身裤":"紧身裤",
|
|
||||||
"吊带衫":"吊带衫",
|
|
||||||
"娃娃衣":"娃娃衣",
|
|
||||||
"牛仔裙":"牛仔裙",
|
|
||||||
"丝袜":"丝袜",
|
|
||||||
"雪纺":"雪纺",
|
|
||||||
"礼服":"礼服",
|
|
||||||
"裤子":"裤子",
|
|
||||||
"西装":"西装",
|
|
||||||
"领带":"领带",
|
|
||||||
"衬衫":"衬衫",
|
|
||||||
"卫衣":"卫衣",
|
|
||||||
"T恤":"T恤",
|
|
||||||
"Polo衫":"Polo衫"
|
|
||||||
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,305 +0,0 @@
|
|||||||
#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 = {
|
|
||||||
"美食":"美食",
|
|
||||||
"披萨":"披萨",
|
|
||||||
"火锅":"火锅",
|
|
||||||
"烧烤":"烧烤",
|
|
||||||
"烤鱼":"烤鱼",
|
|
||||||
"海鲜":"海鲜",
|
|
||||||
"津菜":"津菜",
|
|
||||||
"川菜":"川菜",
|
|
||||||
"湘菜":"湘菜",
|
|
||||||
"鲁菜":"鲁菜",
|
|
||||||
"苏菜":"苏菜",
|
|
||||||
"闽菜":"闽菜",
|
|
||||||
"粤菜":"粤菜",
|
|
||||||
"东北菜":"东北菜",
|
|
||||||
"冀菜":"冀菜",
|
|
||||||
"豫菜":"豫菜",
|
|
||||||
"鄂菜":"鄂菜",
|
|
||||||
"本帮菜":"本帮菜",
|
|
||||||
"客家菜":"客家菜",
|
|
||||||
"赣菜":"赣菜",
|
|
||||||
"京菜":"京菜",
|
|
||||||
"浙菜":"浙菜",
|
|
||||||
"徽菜":"徽菜",
|
|
||||||
"湘菜":"湘菜",
|
|
||||||
"凉菜":"凉菜",
|
|
||||||
"蒸菜":"蒸菜",
|
|
||||||
"日料":"日料",
|
|
||||||
"点心":"点心",
|
|
||||||
"面食":"面食",
|
|
||||||
"汉堡":"汉堡",
|
|
||||||
"小吃":"小吃",
|
|
||||||
"素食":"素食",
|
|
||||||
"韩国菜":"韩国菜",
|
|
||||||
"泰国菜":"泰国菜",
|
|
||||||
"穆斯林菜":"穆斯林菜",
|
|
||||||
"土耳其菜系":"土耳其菜系",
|
|
||||||
"法国菜":"法国菜",
|
|
||||||
"意大利菜":"意大利菜",
|
|
||||||
"希腊菜":"希腊菜",
|
|
||||||
"德国菜":"德国菜",
|
|
||||||
"西班牙菜":"西班牙菜",
|
|
||||||
"阿拉伯菜":"阿拉伯菜",
|
|
||||||
"伊朗菜":"伊朗菜",
|
|
||||||
"中亚菜":"中亚菜",
|
|
||||||
"糖尿病菜":"糖尿病菜",
|
|
||||||
"早餐":"早餐"
|
|
||||||
|
|
||||||
}
|
|
||||||
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
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
import requests
|
|
||||||
import http.cookies
|
|
||||||
# 这里填cookie
|
|
||||||
raw_cookie_line = "_uuid=E510513EF-101067-E17F-62F4-D7A8FBC10FB10F99961infoc;b_nut=1651385600;buvid3=F9350D47-7372-06BC-B255-176D3CA83F7999992infoc;buvid_fp_plain=undefined;nostalgia_conf=-1;CURRENT_BLACKGAP=0;hit-dyn-v2=1;blackside_state=0;LIVE_BUVID=AUTO9916574431422984;DedeUserID=11484862;DedeUserID__ckMd5=68cf9c3547d3e047;i-wanna-go-back=-1;b_ut=5;rpdid=|(k|~J|Y|kRY0J'uYYmR)k)k);buvid4=3E7B6AAD-86D4-CADB-EF95-57B25F1167A699992-022050114-9H%2BeTTp9%2BHXzHQLOa8rQmw%3D%3D;CURRENT_QUALITY=80;CURRENT_FNVAL=4048;SESSDATA=8d008c0f%2C1689689118%2C37eac%2A12;bili_jct=b85afbb1a7052d40b5153025c211d586;sid=5fhi1cof;PVID=1;session-api=a50rgln1nfe554qdfhb1r615lg;fingerprint=b28330ab73edf4fb4dd1b4db2427fef8;bp_video_offset_11484862=765084617951674400;buvid_fp=a0fb18d20db23e204fb0320df564a12e;_csrf=y5AfWPlWS9tAl7JTBiWbPrPO"
|
|
||||||
simple_cookie = http.cookies.SimpleCookie(raw_cookie_line)
|
|
||||||
cookie_jar = requests.cookies.RequestsCookieJar()
|
|
||||||
cookie_jar.update(simple_cookie)
|
|
||||||
return cookie_jar
|
|
||||||
def get_dynamic(self,pg):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url= 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/all?timezone_offset=-480&type=all&page={0}'.format(pg)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['items']
|
|
||||||
for vod in vodList:
|
|
||||||
if vod['type'] == 'DYNAMIC_TYPE_AV':
|
|
||||||
ivod = vod['modules']['module_dynamic']['major']['archive']
|
|
||||||
aid = str(ivod['aid']).strip()
|
|
||||||
title = ivod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = ivod['cover'].strip()
|
|
||||||
remark = str(ivod['duration_text']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_hot(self,pg):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={0}'.format(pg)
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def get_rank(self):
|
|
||||||
result = {}
|
|
||||||
url= 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] == 0:
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
if tid == "热门":
|
|
||||||
return self.get_hot(pg=pg)
|
|
||||||
if tid == "排行榜" :
|
|
||||||
return self.get_rank()
|
|
||||||
if tid == '动态':
|
|
||||||
return self.get_dynamic(pg=pg)
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = tid + ":" + vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"bilidanmu",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":jo['owner']['name'],
|
|
||||||
"vod_director":jo['owner']['name'],
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
search = self.categoryContent(tid=key,pg=1,filter=None,extend=None)
|
|
||||||
result = {
|
|
||||||
'list':search['list']
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,cookies=self.getCookie())
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
5173
0307yyds/v.txt
5173
0307yyds/v.txt
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user