Add files via upload

This commit is contained in:
yigedashu
2026-01-04 18:21:29 +08:00
committed by GitHub
parent f5d4ea0be3
commit 34af4b9fa1
54 changed files with 9151 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
{
//永久地址:https://www.190av.cc/
"规则名": "170AV",
"规则作者": "飞鱼",
"请求头参数": "PC_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.170av.cc/label/new.html",
"首页列表数组规则": "#app",
"首页片单列表数组规则": ".col-style",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".title&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "'⏱️'+.likes&&Text+'🔥'+.views&&Text",
"首页片单链接加前缀": "https://www.170av.cc",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.170av.cc{cateId}-{catePg}.html",
//https://iook1.cc/vodtype/1-2.html
//https://iook1.cc/label/new/page/1.html
"分类名称": "国产视频&亚洲情色&无码专区&韩国视频&欧美视频&偷拍自拍&中文字幕&三级伦理&卡通动漫&丝袜美腿&制服师生&强奸乱伦&人妻熟女&潮吹喷射&男同女同&变态另类&美女写真&人妖系列&巨乳肥臀&自淫系列&群交系列&口交颜射&东京热&一本道&加勒比&JAV高清&SM捆绑&VR性爱",
"分类名称替换词": "/vodtype/23&/vodtype/21&/vodtype/22&/vodtype/24&/vodtype/25&/vodtype/26&/vodtype/27&/vodtype/28&/vodtype/29&/vodtype/30&/vodtype/31&/vodtype/32&/vodtype/33&/vodtype/34&/vodtype/35&/vodtype/36&/vodtype/37&/vodtype/38&/vodtype/39&/vodtype/40&/vodtype/41&/vodtype/42&/vodtype/43&/vodtype/44&/vodtype/48&/vodtype/45&/vodtype/46&/vodtype/47",
"分类截取模式": "1",
"分类列表数组规则": "#app&&.col-style",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": "'🔥'+.views&&Text+'⏱️'+.likes&&Text",
"分类片单链接加前缀": "https://www.170av.cc",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://www.170av.cc/vodsearch/{wd}----------{catePg}---.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "#app&&.col-style",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "'⏱️'+.likes&&Text+'🔥'+.views&&Text",
"搜索片单链接加前缀": "https://www.170av.cc",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
//下面是选集规则,直接播放的不用下面
"线路列表数组规则":"",
"线路列表":"",
"线路标题":"",
"选集标题链接是否Jsoup写法":"1",
"选集列表数组规则":"",
"播放列表数组规则":"",
"选集标题":"",
"选集链接":"",
"选集链接加前缀":"",
"选集链接加后缀":"",
"是否反转选集序列":"",
"详情是否Jsoup写法":"1",
"类型详情":"",
"年代详情":"",
"地区详情":"",
"演员详情":"",
"简介详情":"",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "baidu.com"
}
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+16
View File
@@ -0,0 +1,16 @@
{
"作者": "Aries",
"站名": "https://www.18xxx6.hair/cn/home/web/",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://www.18xxx6.hair/cn/home/web/",
"首页": "120",
"起始页": "1",
"分类url": "https://www.18xxx6.hair/cn/home/web/index.php/vod/show/id/{cateId}/page/{catePg}.html;;z",
"分类": "绝美少女$20#激情口交$21#同性专区$22#人妖激情$23#重咸口味$24#国产专区$25#日韩专区$26#欧美专区$27#卡通动漫$28#三级伦理$29",
"数组": "<a&&</div>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "✨+多看少撸管+✨",
"链接": "href=\"&&\""
}
+69
View File
@@ -0,0 +1,69 @@
{
//发布页https://mm18vc.com/
//https://18av.mm-cg.com/
//https://18av.mm-cg.com
"规则名": "18AV-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "PC_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://18av.mm-cg.com/zh/content_news/all/1.html",
"首页列表数组规则": ".posts",
"首页片单列表数组规则": ".post",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "h3&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": ".meta&&Text",
"首页片单链接加前缀": "",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://XXXXX.com/vodtype/{cateId}-{catePg}/",
//{cateId}分类id
//{area}地区
//{by}排序
//{class}剧情
//{lang}语言
//{catePg}翻页序列号
//{year}日期
"分类链接": "https://18av.mm-cg.com/zh/{cateId}/all/{catePg}.html",
"分类名称": "中文字幕&无码&动漫&自拍&",
"分类名称替换词": "chinese_list&uncensored_list&animation_list&dt_list&",
"分类截取模式": "1",
"分类列表数组规则": ".posts&&.post",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h3&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": ".meta&&Text",
"分类片单链接加前缀": "",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$PC_UA",
"搜索链接": "https://18av.mm-cg.com/zh/searchform_search/all/index.html?search_keyword={wd}&search_type=fc&op=search",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".posts&&.post",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": "h3&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".meta&&Text",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8",
"手动嗅探视频链接过滤词": "baidu.com",
"筛选数据":{}
}
+19
View File
@@ -0,0 +1,19 @@
{
"作者": "Aries",
"站名": "",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://18jtv.com/",
"首页": "120",
"起始页": "1",
"分类url": "https://18jtv.com/t/{cateId}-{catePg}/;;z",
"分类": "国产$1#日韩$2#欧美$3#伦理$4动漫$16",
"二次截取": "",
"数组": "class=\"&&</div>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "🌹+alt=\"&&\"",
"链接": "href=\"&&\"",
"线路二次截取": "play-title\"&&/div>",
"跳转播放链接": "var player_*\"url\":\"&&\""
}
+153
View File
@@ -0,0 +1,153 @@
{
//永久地址发布页https://gyn.xxkk7.com/323/
"规则名": "18jav-XYQHiker",
"规则作者": "飞鱼",
"请求头参数":"手机",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据":"1",
//首页推荐数据获取链接
"首页推荐链接": "https://18jav.tv/label/new/",
//首页推荐列表数组截取。
"首页列表数组规则": "body",
//首页推荐片单列表数组定位。
"首页片单列表数组规则": ".gap-5&&.group",
//首页推荐片单信息jsoup与正则截取写法切换,只作用于html网页,1为jsoup写法(默认),0为正则截取写法
"首页片单是否Jsoup写法":"1",
//下面这六个首页数据如果不填将调用分类那截取的配置(片单写法需一致且取值也得一致)。
//首页片单标题
"首页片单标题": ".text-nord4&&Text",
//首页推荐片单链接
"首页片单链接": "a&&href",
//首页推荐片单图片,支持自定义图片链接
"首页片单图片": "img&&data-src",
//首页推荐片单副标题
"首页片单副标题":".absolute,1&&Text+.absolute,0&&Text",
//首页推荐片单链接补前缀
"首页片单链接加前缀": "https://18jav.tv",
//首页推荐片单链接补后缀
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://www.l0l.tv/index.php/vod/show/id/{cateId}/page/{catePg}.html",
"分类链接": "https://18jav.tv/{cateId}&function=get_block&from={catePg}",
"分类名称": "最新&热门&主题分类",
"分类名称替换词": "latest-updates?sort_by=release_at&hot?sort_by=views&categories/chinese-subtitle?sort_by=release_at&",
//"筛选数据":{},
"分类截取模式": "1",
"分类列表数组规则": "#list_videos_common_videos_list&&.col-6.col-sm-4.col-lg-3",
"分类片单是否Jsoup写法":"1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",//替换规则
"分类片单图片": "img&&data-src",
"分类片单副标题":".label&&Text",
"分类片单链接加前缀": "https://18jav.tv",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$PC_UA",
"搜索链接": "https://18jav.tv/search/{wd}/",
"POST请求数据":"0",
"搜索截取模式": "1",
"搜索列表数组规则": "#list_videos_videos_list_search_result&&.col-6.col-sm-4.col-lg-3",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": "img&&data-src",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题":".label&&Text",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
//--------
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
//-------
"详情是否Jsoup写法":"0",
"类型详情": ".text-muted&&a&&Text",
"年代详情": "",
"地区详情": "",
"演员详情": "</a>&&</p>",
"简介详情": "概要:</span>&&</p>",
"线路列表数组规则": ".stui-pannel__head&&h3",
"线路标题": ".title&&Text",
"播放列表数组规则": ".stui-content__playlist",
"选集列表数组规则": "li",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://gbyool.yjyh5.makeup",
"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"1",
"手动嗅探视频链接关键词":".m3u8#.mp4",
"手动嗅探视频链接过滤词":".html#=http",
"筛选数据":{
"categories/chinese-subtitle?sort_by=release_at":[
{"key":"cateId","name":"分类","value":[
{"v":"categories/chinese-subtitle?sort_by=release_at","n":"中文字幕"},
{"v":"categories/roleplay?sort_by=release_at","n":"角色劇情"},
{"v":"categories/uncensored?sort_by=release_at","n":"無碼解放"},
{"v":"categories/taiwan-av?sort_by=release_at","n":"台灣AV"},
{"v":"categories/uniform?sort_by=release_at","n":"制服誘惑"},
{"v":"categories/sex-only?sort_by=release_at","n":"直接開啪"},
{"v":"categories/pantyhose?sort_by=release_at","n":"絲襪"},
{"v":"categories/groupsex?sort_by=release_at","n":"多P群交"},
{"v":"categories/bdsm?sort_by=release_at","n":"主奴調教"},
{"v":"categories/rape?sort_by=release_at","n":"強姦"},
{"v":"categories/pov?sort_by=release_at","n":"男友視角"},
{"v":"categories/hidden-cam?sort_by=release_at","n":"偷拍"},
{"v":"categories/lesbian?sort_by=release_at","n":"女同歡愉"}
]}],
"categories/chinese-subtitle":[
{"key":"by","name":"最近更新","value":[
{"v":"release_at","n":"最近更新"},
{"v":"stars","n":"最近佳作"},
{"v":"views","n":"最多观看"}]}
],
"21":[
{"key":"cateId","name":"分类","value":[
{"v":"21","n":"全部"},
{"v":"31","n":"人妻"},
{"v":"44","n":"素人"},
{"v":"46","n":"口爆颜射"},
{"v":"47","n":"萝莉少女"},
{"v":"48","n":"美乳巨乳"},
{"v":"52","n":"制服诱惑"},
{"v":"57","n":"调教"},
{"v":"58","n":"出轨"},
{"v":"101","n":"有码精品"}
]}],
"22":[
{"key":"cateId","name":"分类","value":[
{"v":"22","n":"全部"},
{"v":"102","n":"无码精品"}
]}],
"23":[
{"key":"cateId","name":"分类","value":[
{"v":"23","n":"全部"},
{"v":"104","n":"欧美精品"}
]}],
"24":[
{"key":"cateId","name":"分类","value":[
{"v":"24","n":"全部"},
{"v":"103","n":"动漫精品"}
]}]
,
"25":[
{"key":"cateId","name":"分类","value":[
{"v":"views","n":"全部"},
{"v":"39","n":"综合三级"}
]}],
"hot":[
{"key":"cateId","name":"分类","value":[
{"v":"views","n":"全部"},
{"v":"51","n":"日本中字"}
]}]
}
}
+144
View File
@@ -0,0 +1,144 @@
{
//最新地址发布页https://18fby.com/?18j
//永久地址18j.tv
"规则名": "18jtv-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://18kb.life/label/hot/by/time/nid/1/page/1/sid/1/",
"首页列表数组规则": ".main_list",
//"首页列表数组规则": ".main&&.main_list",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".title&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&data-original",
//"首页片单副标题": "'📆'+span&&Text",
"首页片单链接加前缀": "https://18je.life",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//{cateId}分类id
//{area}地区
//{by}排序
//{class}剧情
//{lang}语言
//{catePg}翻页序列号
//{year}日期
"分类链接": "https://18kb.life/show/{cateId}/by/{by}/nid/1/page/{catePg}/sid/1/",
"分类名称": "国产&日韩&欧美&伦理&动漫&",
"分类名称替换词": "1&2&3&4&16&",
"分类截取模式": "1",
"分类列表数组规则": ".main_list&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": ".vodlist_img&&img&&data-original",
//"分类片单副标题": "'📆'+span&&Text",
"分类片单链接加前缀": "https://18kb.life",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://18kb.life/index.php/ajax/suggest?mid=1&wd={wd}",
"POST请求数据": "",
"搜索截取模式": "0",
"搜索列表数组规则": "list",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "pic",
"搜索片单标题": "name",
"搜索片单链接": "id",
"搜索片单副标题": "",
"搜索片单链接加前缀": "https://18kb.life/v/",
"搜索片单链接加后缀": "/",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8",
"手动嗅探视频链接过滤词": "baidu.com",
"筛选数据":{
"1":[
{"key":"cateId","name":"分类","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":"12"}
]
},
{"key":"by","name":"排序","value":[
{"n":"最新","v":"time"},
{"n":"日榜","v":"hits_day"},
{"n":"周榜","v":"hits_week"},
{"n":"总榜","v":"hits_month"}]}],
"2":[
{"key":"cateId","name":"分类","value":[
{"n":"全部","v":"2"},
{"n":"日韩自拍","v":"13"},
{"n":"日韩无码","v":"14"},
{"n":"中文字幕","v":"15"},
{"n":"av解说","v":"17"},
{"n":"换脸明星","v":"18"},
{"n":"无码字幕","v":"19"},
{"n":"有码字幕","v":"20"}
]
},
{"key":"by","name":"排序","value":[
{"n":"最新","v":"time"},
{"n":"日榜","v":"hits_day"},
{"n":"周榜","v":"hits_week"},
{"n":"总榜","v":"hits_month"}]}],
"3":[
{"key":"cateId","name":"分类","value":[
{"n":"全部","v":"3"},
{"n":"欧美自拍","v":"21"},
{"n":"欧美字幕","v":"22"},
{"n":"重口味","v":"23"}
]
},
{"key":"by","name":"排序","value":[
{"n":"最新","v":"time"},
{"n":"日榜","v":"hits_day"},
{"n":"周榜","v":"hits_week"},
{"n":"总榜","v":"hits_month"}]}],
"4":[
{"key":"cateId","name":"分类","value":[
{"n":"全部","v":"4"},
{"n":"港台伦理","v":"29"},
{"n":"日韩伦理","v":"30"},
{"n":"欧美伦理","v":"31"}
]
},
{"key":"by","name":"排序","value":[
{"n":"最新","v":"time"},
{"n":"日榜","v":"hits_day"},
{"n":"周榜","v":"hits_week"},
{"n":"总榜","v":"hits_month"}]}],
"16":[
{"key":"cateId","name":"分类","value":[
{"n":"全部","v":"16"},
{"n":"剧集动漫","v":"26"},
{"n":"3D动漫","v":"27"},
{"n":"次元动漫","v":"28"}
]
},
{"key":"by","name":"排序","value":[
{"n":"最新","v":"time"},
{"n":"日榜","v":"hits_day"},
{"n":"周榜","v":"hits_week"},
{"n":"总榜","v":"hits_month"}]}]}
}
+73
View File
@@ -0,0 +1,73 @@
{
"规则名": "PPT",
"请求头参数":"PC_UA",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据":"1",
"首页推荐链接": "https://www.pornlulu.com/zh-hans",
//https://www.ptt.sex
"首页列表数组规则": "#videos",
"首页片单列表数组规则": ".card",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "img&&alt",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "{更新}+span,0&&Text",
"首页片单链接加前缀": "https://www.pornlulu.com",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.pornlulu.com/zh-hans/cat/{cateId}?page={catePg}",
"分类名称": "国产自拍&中文字幕&国产情色&日本无码&日本有码&国产精品&强姦乱伦&欧美精品&制服诱惑&成人动漫&亚洲有码&萝莉少女&美女主播&国产视频&巨乳美乳&国产主播&欧美极品&骑兵有码&自拍偷拍&抖阴视频&无码专区&亚洲情色&动漫精品&日韩无码&亚洲无码&女同性恋&欧美情色&AV明星&国产传媒&熟女人妻&三级伦理&日本伦理&网红主播&国产伦理&国产偷拍&名优中字&91探花&精品推荐&卡通动漫&主播直播&美乳巨乳&制服丝袜&映画传媒&人妻熟女&其他亚洲&韩国伦理&步兵无码&欧美性爱&日韩精品&制服师生&国产乱伦&动漫卡通&女优明星&女神学生&童颜巨乳&邻家人妻&主播大秀&调教中文&麻豆传媒&巨乳中文&乱伦中文&绝美少女&娇妻素人&人妻中文&多人群交&国模私拍&空姐模特&自慰群交&国产名人&口交颜射&美熟少妇&网曝门事&女同性爱&国产裸聊&制服中文&国产情侣&大秀视频&金髮幼齿&职场同事&AV解说&欧美专区&出轨中文&精品短视&角色扮演&国产探花&独家DM&激情口交&欧美伦理&激情动漫&巨乳系列&SWAG&长腿丝袜&口交视频&欧美激情&无码中文&网红头条&福利姬视&SM调教&探花系列&抖阴短片&日本素人&伦理三级&HEY诱&人妻系列&三级字幕&高潮喷吹&国产盗摄&Cosp&韩国极品&日本精品&人妖系列&高清无码&网曝黑料&欧美系列&HEYZ&野合车震&国产色情&丝袜美腿&AI换脸&口爆颜射&韩国明星&欧美无码&VR视角&明星换脸&群交淫乱&素人自拍&网爆黑料&网红黑料&强姦中文&韩国精品&麻豆视频&日本片商&传媒出品&传媒剧情&探花约炮&偷拍偷窥&偷拍自拍&网红流出&SM重味&主播秀色&韩国主播&女僕系列&传媒原创&剧情介绍&网曝吃瓜&高清名优&日本女优&主播诱惑&AV明星&女优系列&恋腿狂魔&换脸明星&黑丝诱惑&欺辱凌辱&丝袜OL&网曝视频&香港伦理&SM重口&三级片视&性感人妻&岛国群交&绿帽淫妻&极骚萝莉&其他片商&欧美高清&精品动漫&东南亚A&自慰系列&美颜巨乳&三级自慰&精品素人&瑜伽裤视&海外明星&口交潮吹&3P合辑&剧情动漫&虚拟VR&台湾辣妹&唯美港姐&天美传媒&素人搭讪&韩国唯美&野外露出&91系列&教师学生&多P 3&闷骚护士&韩国御姐&可爱学生&童真萝莉&恋腿癖视&凌辱束缚&蜜桃传媒&传媒机构&糖心Vl&首次亮相&风情旗袍&极品少妇&兽耳系列&无码破解&古装扮演&日本乱伦&多人多P&mini&东南亚情&抖音视频&颜射系列&乌鸦传媒&女优合集&同性同志&主播自拍&贫乳小奶&翘臀美尻&韩美眉主&欧美视频&星空传媒&91製片&重咸口味&精东影业&台湾sw&韩国自拍&国产女奴&骚货护士&学生系列&性感港姐&网曝热门&野外系列&同性女优&台湾色情&学生中出&人兽性交&岛国素人&日韩主播&性感旗袍&大象传媒&伦理影片&高丽棒子&名优写真&兽耳作品&乱伦背德&及膝袜视&萝莉社视&开心鬼传&重口激情&TS人妖&滴滴探花&兔子先生&非亚洲视&SPA视&VR有码&性视界视&名优综艺&网红少女&国产女王&高清欧美&皇家华人&UP精品&明星淫梦&抖音短视&极品媚黑&成人头条&杏吧原创&P站原创&国漫3D&探花寻花&SM捆绑&人妖视频&日韩伦理&AI合成&视频伦理&日本中字&精选独家&精选视频&热门头条&VR无码&女同人妖&水果派原&性世界视&高清伦理&91大神&精选口爆&杏吧传媒&少女破处&果冻传媒&星空无限&JVID&颜射瞬间&三级剧情&香港三级&SA国际&性知识视&小鸟酱专&乐播传媒&扣扣传媒&中文音声",
"分类名称替换词": "263&48&119&270&269&249&13&260&92&274&105&103&264&304&93&268&266&261&98&25&254&22&86&259&64&115&265&401&390&267&84&45&88&285&277&37&455&140&130&303&111&248&395&23&287&44&288&52&275&272&252&149&438&250&125&273&253&16&416&292&290&109&15&289&129&31&5&33&251&374&8&58&132&521&291&66&89&262&6&392&531&19&36&221&482&97&134&286&453&99&452&138&110&328&293&437&27&375&433&514&393&367&123&101&442&96&522&418&57&467&477&280&483&131&124&24&460&169&357&369&54&246&451&69&520&419&440&476&30&55&490&403&474&512&511&515&278&457&106&417&158&402&370&415&513&394&432&510&439&471&468&516&454&466&424&547&61&243&548&425&391&524&142&536&527&534&472&100&378&143&532&410&358&215&126&517&523&461&464&501&450&56&456&429&128&423&469&459&465&408&422&421&494&556&503&135&458&478&463&70&462&530&470&500&426&441&136&498&525&152&208&436&434&59&232&497&493&144&504&528&159&71&420&479&413&526&407&398&412&414&141&372&317&406&496&120&443&40&427&399&409&508&506&518&545&553&505&50&563&18&509&60&559&72&567&492&564&163&561&519&499&507&62&558&384&81&147&150&400&148&562&435&551&549&34&428&560&537&565&314&151&541&557&535&533&540&67&276&529&538&566&74&495&539&568",
"筛选数据":{},
"分类截取模式": "1",
"分类列表数组规则": "#videos&&.card",
"分类片单是否Jsoup写法":"1",
"分类片单标题": "img&&alt",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题":"span,0&&Text",
"分类片单链接加前缀": "https://www.pornlulu.com",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$PC_UA",
"搜索链接": "https://www.pornlulu.com/zh-hans?q={wd}",
"搜索截取模式": "1",
"搜索列表数组规则": "#videos&&.card",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": "img&&data-src",
"搜索片单标题": "img&&alt",
"搜索片单链接": "a&&href",
"搜索片单副标题":"",
"搜索片单链接加前缀": "https://www.pornlulu.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
//"详情是否Jsoup写法":"1",
//"类型详情": "",
//"年代详情": "",
//"地区详情": "",
//"演员详情": "#w4&&.breadcrumb-item,1&&Text",
//"简介详情": "meta,7&&content",
//"线路列表数组规则": "head&&meta,9&&[property]",
//"线路标题": "meta&&content",
//"播放列表数组规则": "head",
//"选集列表数组规则": "meta,10&&[property]",
//"选集标题链接是否Jsoup写法":"1",
//"选集标题": "meta&&property",
//"选集链接": "meta&&content",
//"是否反转选集序列": "0",
//"选集链接加前缀": "https://www.pornlulu.com/zh-hans",
//"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"1",
"手动嗅探视频链接关键词":".m3u8",
"手动嗅探视频链接过滤词":".mp4"
}
+29
View File
@@ -0,0 +1,29 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://qqqys.com",
"首页": "120",
"起始页": "1",
"分类url": "https://qqqys.com/vodshow/{cateId}/{catePg}.html;;mrcd0",
"分类": "电影&剧集&综艺&动漫&短剧",
"分类值": "1&2&4&3&5",
"数组": "/vd&&</a>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "truncate text*>&&</div",
"链接": "/vd/+/&&\"",
"影片类型": "1.5\">&&</div></div>",
"状态": "上映:&&</div>",
"导演": "导演:&&</div>",
"主演": "主演:&&</div>",
"简介": "【友情提醒:请不要相信视频中的广告,以免上当受骗!】✨乐哥为您介绍剧情👉+<p>&&</p>",
"跳转数组": "vodId:&&,",
"跳转链接": "https://qqqys.com/api.php/internal/search_aggregate?vod_id=+\"&&\"",
"线路数组": "",
"线路标题": "✨乐哥推荐✨线路",
"播放数组": "vod_play_url\":&&,[替换:\">>接表题#$>>题接#\\#>>接表表题]",
"播放列表": "表&&表",
"播放标题": "题&&题",
"播放链接": "接&&接"
}
+45
View File
@@ -0,0 +1,45 @@
{
"作者": "黑哥传媒",
"站名": "",
"请求头": "User-Agent@Mozilla/5.0 (Linux;; Android 12;; RMX3370 Build/RKQ1.211103.002;; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/136.0.7103.60 Mobile Safari/537.36&&Cookie@tcpvsd=1756552262454;; 404_lang=zh;; HstCfa4688805=1756550997675;; HstCmu4688805=1756550997675;; HstCnv4688805=1;; HstCns4688805=1;; c_ref_4688805=https%3A%2F%2F2506_ningmeng.xav301.top%2Furl%2F;; Hm_tf_k848bd84m4b=1756550998;; Hm_lvt_k848bd84m4b=1756550998;; index=2025%2F8%2F30;; 0_type=2025%2F8%2F30;; sskd__uuid_=237ba8cd21cd4b2e8a74ac2fcd66b985;; __uid=a867e333d7734dbb86034d0676678065;; 0_video=2025%2F8%2F30;; 0_search=2025%2F8%2F30;; sskd_f-ss-237ba8cd21cd4b2e8a74ac2fcd66b985=15;; __dtsu=4C301750358809B70FF3DC3A2633DF62;; HstCla4688805=1756552262252;; HstPn4688805=29;; HstPt4688805=29;; Hm_lpvt_k848bd84m4b=1756552262;; sskd_t-ss-237ba8cd21cd4b2e8a74ac2fcd66b985=1;; sskd_v-ss-237ba8cd21cd4b2e8a74ac2fcd66b985=2;; fkpp2-a867e333d7734dbb86034d0676678065=2&&Accept@text/html,application/xhtml+xml,application/xml;;q=0.9,image/avif,image/webp,image/apng,*/*;;q=0.8,application/signed-exchange;;v=b3;;q=0.7&&Accept-Language@zh-CN,zh;;q=0.9",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://xn--08303-404xavcom-2h61a0814fire.4042516.icu",
"首页": "120",
"起始页": "1",
"分类url": "https://xn--08303-404xavcom-2h61a0814fire.4042516.icu/type/{cateId}/0/{catePg}.html;;mrcd0",
"分类": "xvideos&xnxx&91资源&91资源cn&原创资源&仓库资源&杏吧资源&桃花资源&细胞资源&百万资源&番号资源&色P资源&GAY资源&155资源&玉兔资源&jkun资源&奥斯卡资源&黄瓜资源&草榴资源&森林资源&奶香香资源&丝袜资源&大地资源&乐播资源&辣椒资源&色猫资源&滴滴资源&美少女资源&淫水机资源&香奶儿资源&白嫖资源&小湿妹资源&黄AV资源&鲨鱼资源&老色逼资源&精品X资源",
"分类值": "*",
"二次截取": "web_grid_box\">&&class=\"page-active[替换:pages>>cell_box]",
"数组": "v_thumb\">&&cell_box\">",
"标题": "v_title\">&&</div",
"图片": "data-original=\"&&\"",
"副标题": "text-right\">&&<",
"链接": "href=\"&&\"",
"简介": "👶黑哥传媒推荐:+web_detail_title\">&&</h1>",
"线路二次截取": "",
"线路数组": "module-tab-item tab-item&&/small>",
"线路标题": "👶+>&&</span>+【共+<small>&&<+集】",
"播放二次截取": "",
"播放数组": "module-play-list\">&&</div>",
"播放列表": "<a&&/a>",
"播放标题": ">&&<",
"播放链接": "href=\"&&\"",
"解析": "",
"直接播放": "1",
"播放请求头": "",
"嗅探词": ".mp4#.m3u8",
"过滤词": "",
"跳转播放链接": "var play_data =\"&&\"",
"跳转解析": "",
"搜索请求头": "User-Agent$MOBILE_UA",
"搜索url": "https://xn--08303-404xavcom-2h61a0814fire.4042516.icu/search/{wd}.html",
"搜索模式": "1",
"搜索后缀": "",
"搜索二次截取": "",
"筛选": "1",
"类型": "",
"剧情": "",
"剧情值": "*",
"地区": ""
}
+175
View File
@@ -0,0 +1,175 @@
{
//
//回家地址 → https://www.444.coffee/数字改
//https://www.444.coffee/
"规则名": "444咖啡-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "0",
"首页推荐链接": "https://www.444.coffee",
"首页列表数组规则": ".list-videos",
"首页片单列表数组规则": ".item",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".title&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&data-original",
"首页片单副标题": "'📅'+.added&&Text+'👁️'+.views&&Text",
"首页片单链接加前缀": "",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.444.coffee/page/{catePg}?order={cateId}",
"分类名称": "最新&最多人看&评分",
"分类名称替换词": "newest&views&rate",
"分类截取模式": "1",
"分类列表数组规则": ".Thumbnail_List&&li:has(img)",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": "'更新于'+.added&&Text!ago+'前'+'👁️'+.post-views&&Text!Views+.post-category&&Text",
"分类片单链接加前缀": "",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://www.444.coffee/?post_type=post&s={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".Thumbnail_List&&li:has(img)",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "'📅'+.added&&Text+'👁️'+.post-views&&Text+.post-category&&Text",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"0",
"类型详情": "<p>類型:&&</p>",
"年代详情": "<p>更新:&&</p>",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": ".play-btn-group&&.line",
"线路标题": "'📽️'+a&&Text+'📺'",
"播放列表数组规则": ".line",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://www.444.coffee",
"选集链接加后缀": "",
"筛选数据":{
"/vodshow/1":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/vodshow/1","n":"全部"},
{"v":"/vodshow/6","n":"国产自拍"},
{"v":"/vodshow/7","n":"主播大秀"},
{"v":"/vodshow/8","n":"探花约啪"},
{"v":"/vodshow/9","n":"国产番号"},
{"v":"/vodshow/10","n":"网红少女"},
{"v":"/vodshow/11","n":"偷窥偷拍"}]},
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/2":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/vodshow/2","n":"全部"},
{"v":"/vodshow/13","n":"日本无码"},
{"v":"/vodshow/14","n":"中文字幕"},
{"v":"/vodshow/15","n":"日韩有码"},
{"v":"/vodshow/16","n":"AV解说"}]},
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/21":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/3":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/4":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/5":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/20":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/22":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
]
},
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "baidu.com"
}
+20
View File
@@ -0,0 +1,20 @@
{
"作者": "Aries",
"站名": "51吃瓜短剧",
"编码": "UTF-8",
"请求头": "User-Agent$MOBILE_UA",
"主页url": "https://51cg1.com/category/cbdj/",
"首页": "200",
"起始页": "0",
"分类url": "https://51cg1.com/category/{cateId}/{catePg}/[https://51cg1.com/category/{cateId}/];;mrcRAz",
"分类": "✨短剧✨$cbdj#",
"数组": "url *\"&&</a[不包含:旗士]",
"图片": "https://v2.api-m.com/api/meinvpic?return=302",
"标题": "《&&》",
"副标题": "<span itemprop=\"datePublished*>&&<",
"链接": "<a href=\"&&\"",
"简介": "👉+/blockquote><p>&&</p><p><div class=\"dplayer",
"跳转播放链接": "video\":{\"url\":\"&&\"",
"搜索url": "https://51cg1.com/category/id/{pg}/?wd={wd}",
"搜索模式": "1"
}
+191
View File
@@ -0,0 +1,191 @@
{
"规则名": "52av论坛2-XYQHiker",
"规则作者": "飞鱼",
"请求头参数":"手机",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据": "0",
//首页推荐数据获取链接
"首页推荐链接": "https://bad.news/search/q-学生",
//首页推荐列表数组截取。
"首页列表数组规则": "#item-container",
//首页推荐片单列表数组定位。
"首页片单列表数组规则": "table",
//首页推荐片单信息jsoup与正则截取写法切换,只作用于html网页,1为jsoup写法(默认),0为正则截取写法
"首页片单是否Jsoup写法":"1",
//下面这六个首页数据如果不填将调用分类那截取的配置(片单写法需一致且取值也得一致)。
//首页片单标题
"首页片单标题": "h3&&a&&Text",
//首页推荐片单链接
"首页片单链接": "h3&&a&&href",
//首页推荐片单图片,支持自定义图片链接
"首页片单图片": ".my-videos&&poster",
//首页推荐片单副标题
"首页片单副标题":".ct-time&&Text",
//首页推荐片单链接补前缀
"首页片单链接加前缀": "https://www.52av.one/",
//首页推荐片单链接补后缀
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.52av.one/forum.php?mod=forumdisplay&fid={cateId}&filter=typeid&typeid={class}&page={catePg}&mobile=2",
"分类名称": "华语A片&自拍偷拍一区&自拍偷拍二区",
"分类名称替换词": "67&64&88",
"分类截取模式": "1",
"分类列表数组规则": ".threadlist.vk_threadlist_pic&&li:not(:has(script))",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h2||li&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": ".by&&Text",
"分类片单链接加前缀": "https://www.52av.one/",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$手机",
"搜索链接": "{wd}",
"POST请求数据":"0",
"搜索截取模式": "1",
"搜索列表数组规则": "#item-container&&table",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": ".my-videos&&poster",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题":".ct-time&&Text",
"搜索片单链接加前缀": "https://bad.news",
"搜索片单链接加后缀": "",
"链接是否直接播放": "是",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"1",
"类型详情": ".detail-content&&p:has(:contains(标签))&&Text!标签:",
"年代详情": "",
"地区详情": "",
"演员详情": ".detail-content&&a,0&&title",
"简介详情": ".detail-content&&.desc.margin-0&&Text",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": ".col-lg-12.clearfix||.coverimg",
"选集列表数组规则": "video",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "'播放'",
"选集链接": "video&&data-source",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"1",
"手动嗅探视频链接关键词":".m3u8#.flv",
"手动嗅探视频链接过滤词":".html#=http#edge-hls",
"筛选数据":{
"64":[
{"key":"class","name":"分类","value":[
{"v":"","n":"全部"},
{"v":"250","n":"自拍"},
{"v":"251","n":"偷拍"},
{"v":"322","n":"直播"}
]
}
],
"67":[
{"key":"class","name":"分类","value":[
{"v":"","n":"全部"},
{"v":"102","n":"自拍偷拍"},
{"v":"245","n":"航空1"},
{"v":"244","n":"歐美18歲|Teenage"},
{"v":"382","n":"華語AV"},
{"v":"246","n":"航空2"},
{"v":"128","n":"亞洲無碼"},
{"v":"129","n":"歐美無碼"},
{"v":"130","n":"中文字幕"},
{"v":"132","n":"微乳貧乳"},
{"v":"133","n":"桃尻美臀"},
{"v":"131","n":"美乳巨乳"},
{"v":"134","n":"企劃單體"},
{"v":"135","n":"AV女優"},
{"v":"140","n":"清純美少女"},
{"v":"139","n":"個人撮影"},
{"v":"138","n":"天然無暇"},
{"v":"137","n":"投稿素人"},
{"v":"136","n":"幼齒蘿莉"},
{"v":"142","n":"花嫁若妻"},
{"v":"141","n":"熟女人妻"},
{"v":"143","n":"夫妻交換"},
{"v":"144","n":"風俗孃"},
{"v":"145","n":"可愛童顔"},
{"v":"148","n":"制服學生服"},
{"v":"147","n":"女子大生"},
{"v":"146","n":"女子校生"},
{"v":"252","n":"潮吹噴汁"},
{"v":"164","n":"家教教師"},
{"v":"163","n":"捜査官"},
{"v":"162","n":"溫泉旅行"},
{"v":"161","n":"不倫亂倫"},
{"v":"160","n":"近親相姦"},
{"v":"159","n":"凌辱虐待SM"},
{"v":"158","n":"輪姦強姦生姦"},
{"v":"152","n":"顔射口射"},
{"v":"151","n":"淫亂淫蕩"},
{"v":"150","n":"催眠洗腦"},
{"v":"149","n":"野外露出"},
{"v":"153","n":"中出內射"},
{"v":"154","n":"癡漢癡女"},
{"v":"157","n":"調教奴隷"},
{"v":"156","n":"約束束縛監禁"},
{"v":"155","n":"亂交雜交"},
{"v":"166","n":"援交少女"},
{"v":"165","n":"視訊女郎"},
{"v":"170","n":"人妖"},
{"v":"169","n":"女女同戀"},
{"v":"167","n":"男扮女裝"},
{"v":"168","n":"男男同戀"},
{"v":"174","n":"辦公OL"},
{"v":"173","n":"美腿絲襪"},
{"v":"172","n":"角色扮演"},
{"v":"171","n":"性感妖艶"},
{"v":"175","n":"性感護士"},
{"v":"176","n":"成人動漫"},
{"v":"177","n":"無露寫真"}
]
}],
"sort/id/295":[
{"key":"cateId","name":"分类","value":[
{"v":"sort/id/295","n":"无码专区"},
{"v":"sort/id/297","n":"制服诱惑"},
{"v":"sort/id/298","n":"三级伦理"},
{"v":"sort/id/299","n":"AI换脸"},
{"v":"sort/id/300","n":"中文字幕"},
{"v":"sort/id/301","n":"卡通动漫"},
{"v":"sort/id/302","n":"欧美系列"},
{"v":"sort/id/303","n":"美女主播"},
{"v":"sort/id/304","n":"国产自拍"},
{"v":"sort/id/305","n":"熟女人妻"},
{"v":"sort/id/306","n":"萝莉少女"},
{"v":"sort/id/307","n":"女同性爱"},
{"v":"sort/id/308","n":"多人群交"},
{"v":"sort/id/309","n":"美乳巨乳"},
{"v":"sort/id/310","n":"强奸乱伦"},
{"v":"sort/id/311","n":"抖阴视频"},
{"v":"sort/id/312","n":"韩国主播"},
{"v":"sort/id/313","n":"网红头条"},
{"v":"sort/id/314","n":"网爆黑料"},
{"v":"sort/id/315","n":"欧美无码"},
{"v":"sort/id/316","n":"女优明星"},
{"v":"sort/id/317","n":"SM调教"},
{"v":"sort/id/326","n":"AV解说"}
]}],
"/tag/porn":[
{"key":"by",
"name":"排序",
"value":[
{"v":"/sort-new","n":"最新"},
{"v":"/sort-hot","n":"热门"},
{"v":"/sort-score","n":"最高分"},
{"v":"/sort-better","n":"精选"}]}
]}
}
+16
View File
@@ -0,0 +1,16 @@
{
"作者": "Aries",
"站名": "https://www.55sp3.help/cn/home/web/",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://www.55sp3.help/cn/home/web/",
"首页": "120",
"起始页": "1",
"分类url": "https://www.55sp3.help/cn/home/web/index.php/vod/type/id/{cateId}/page/{catePg}.html;;z",
"分类": "国产自拍$20#强奸乱伦$21#男同女同$22#重口味$23#日本AV$24#无码视频$25#有码视频$26#中文字幕$27#欧美极品$28#三级伦理$29#动漫精品$30",
"数组": "item\"&&</a></li>",
"标题": "title*>&&<",
"图片": "lazy fadein*src=\"&&\"",
"副标题": "✨+多看少撸管+✨",
"链接": "href=\"&&\""
}
+31
View File
@@ -0,0 +1,31 @@
{
"作者": "黑哥传媒",
"站名": "",
"请求头": "User-Agent@Mozilla/5.0 (Linux;; Android 12;; RMX3370 Build/RKQ1.211103.002;; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/136.0.7103.60 Mobile Safari/537.36&&Cookie@zone-cap-3959997=1;; zone-cap-3954650=1;; zone-cap-3614151=1;; zone-cap-3614329=1;; xv_nbview=-1;; wpn-popupunder=1;; autojumpNum10604=1;; autojumpPV10604=1;; autojumpStats10604=1;; zone-cap-3959997=1;; zone-cap-3954650=1;; zone-cap-3614151=1;; zone-cap-3614329=1;; xv_nbview=-1;; wpn-popupunder=1;; autojumpNum10604=1;; autojumpPV10604=1;; autojumpStats10604=1;; static_cdn=c7;; zone-cap-3959997=1;; zone-cap-3954650=1;; zone-cap-3614151=1;; zone-cap-3614329=1;; xv_nbview=-1;; wpn-popupunder=1;; autojumpNum10604=1;; autojumpPV10604=1;; autojumpStats10604=1;; showdomain=1;; tackStats10604=1;; HstCfa4579560=1758499369351;; HstCmu4579560=1758499369351;; HstCnv4579560=1;; c_ref_4579560=https%3A%2F%2Fwww.69bag.buzz%2F;; __dtsu=4C301750358809B70FF3DC3A2633DF62;; UBGLAI63GV=bsftm.1758499417;; pending_thumb=%7B%22t%22%3A%5B%5D%2C%22s%22%3A%5B%5D%2C%22p%22%3A%5B%5D%2C%22r%22%3A%5B%5D%7D;; HstCns4579560=2;; __ty_cpvx_t_4899_cpv_plan_ids=%7C54%7C;; __ty_cpvx_t_4899_cpv_plan_uids=%7C3607%7C;; __ty_cpvx_b_4900_cpv_plan_ids=%7C16%7C%7C19%7C%7C11%7C%7C54%7C%7C31%7C%7C2%7C%7C29%7C;; __ty_cpvx_b_4900_cpv_plan_uids=%7C10%7C%7C11%7C%7C9%7C%7C3607%7C%7C2297%7C%7C6%7C%7C1536%7C;; HstCla4579560=1758501440842;; HstPn4579560=28;; HstPt4579560=28&&Accept@text/html,application/xhtml+xml,application/xml;;q=0.9,image/avif,image/webp,image/apng,*/*;;q=0.8,application/signed-exchange;;v=b3;;q=0.7&&Accept-Language@zh-CN,zh;;q=0.9",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://www.69bag25.com",
"首页": "120",
"起始页": "1",
"分类url": "https://www.69bag25.com/search/{cateId}/{catePg};;mrcd0",
"分类二次截取": "locale_flag\":\"&&more_links\"",
"分类数组": "{\"&&\"cat_id",
"分类标题": "黑哥传媒+label\":\"&&\"",
"分类ID": "url\":\"&&\"",
"分类": "",
"分类值": "",
"二次截取": "",
"数组": "thumb-inside\">&&</script>",
"标题": "title=\"&&\"",
"图片": "data-src=\"&&\"",
"副标题": "✨+right\">&&<",
"链接": "href=\"&&\"",
"解析": "",
"直接播放": "1",
"播放请求头": "",
"嗅探词": ".mp4#.m3u8",
"过滤词": "",
"跳转播放链接": "",
"跳转解析": "",
"搜索请求头": "User-Agent$MOBILE_UA"
}
+18
View File
@@ -0,0 +1,18 @@
{
"作者": "Aries",
"站名": "",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://rep.83sp3.work/cn/home/web/",
"首页": "120",
"起始页": "1",
"分类url": "https://rep.83sp3.work/cn/home/web/index.php/vod/type/id/{cateId}/page/{catePg}.html;;z",
"分类": "自拍偷拍$20#强奸乱伦$22#人妻熟女$23#制服丝袜$24#花季少女$25#无码露毛$26#群P多人$27#人兽人妖$28#男同女同$29#韩日专区$30#欧美色情$31#成人动漫$32#三级剧情$33",
"二次截取": "",
"数组": "/vod/play/&&</p>",
"标题": "/vod/play/*>&&<",
"图片": "src=\"&&\"",
"副标题": "✨+多看少撸管+✨",
"链接": "href=\"&&\"",
"跳转播放链接": "var player_*\"url\":\"&&\""
}
+697
View File
@@ -0,0 +1,697 @@
{
//
//回家地址 → https://91porn.asia/
//https://91porn.asia/
"规则名": "91porn_asia-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://91porn.asia/zh",
"首页列表数组规则": "#main",
"首页片单列表数组规则": "article",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "a&&title",
"首页片单链接": "a&&href",
"首页片单图片": "img&&data-src",
"首页片单副标题": "'👁️'+.views&&Text+'\n⏱️'+.duration&&Text",
"首页片单链接加前缀": "",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://91porn.asia{cateId}page/{catePg}/?filter={by}",
"分类名称": "最新&Onlyfans&中出&中国&人妻&制服诱惑&国产AV&多P&女友&巨乳&无码&日本 JAV&未分类&欧美&素人&标签分类🏷️",
"分类名称替换词": "/&/category/onlyfans-zh/&/category/中出/&/category/中国-zh/&/category/人妻/&/category/制服诱惑/&/category/国产/&/category/多p/&/category/女友/&/category/巨乳/&/category/无码/&/category/jav-zh/&/category/未分类/&/category/欧美/&/category/素人/&/tag/3p/",
"分类截取模式": "1",
"分类列表数组规则": "#main&&article",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title",
"分类片单链接": "a&&href",
"分类片单图片": "img&&data-src",
"分类片单副标题": "'👁️'+.views&&Text+'\n⏱️'+.duration&&Text",
"分类片单链接加前缀": "",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://91porn.asia/zh/?s={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "#main&&article",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&data-src",
"搜索片单标题": "a&&title",
"搜索片单链接": "a&&href",
"搜索片单副标题": "'👁️'+.views&&Text+'\n⏱️'+.duration&&Text",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"0",
"类型详情": "<p>類型:&&</p>",
"年代详情": "<p>更新:&&</p>",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": ".play-btn-group&&.line",
"线路标题": "'📽️'+a&&Text+'📺'",
"播放列表数组规则": ".line",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://91porn.asia",
"选集链接加后缀": "",
"筛选数据":{
"/tag/3p/":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/tag/3p/","n":"3P"},
{"v":"/tag/3p%ef%bc%8c%e5%a7%90%e5%a6%b9%ef%bc%8c%e5%a4%a7%e8%b1%a1%ef%bc%8c%e5%86%85%e8%89%b2%ef%bc%8c%e4%b8%ad%e5%9b%bd%ef%bc%8c%e5%a4%a7%e9%99%86-zh/","n":"3P,姐妹,大象,内色,中国,大陆"},
{"v":"/tag/4k-zh/","n":"4K"},
{"v":"/tag/4p-zh/","n":"4P"},
{"v":"/tag/6p-zh/","n":"6P"},
{"v":"/tag/18%e5%b2%81%e7%9a%84%e5%8f%af%e7%88%b1%e5%a5%b3%e5%ad%a9-zh/","n":"18岁的可爱女孩"},
{"v":"/tag/69-zh/","n":"69"},
{"v":"/tag/91porn-zh/","n":"91porn"},
{"v":"/tag/after-shower-zh/","n":"after shower"},
{"v":"/tag/amateur-zh/","n":"amateur"},
{"v":"/tag/anal-zh/","n":"anal"},
{"v":"/tag/asian-zh/","n":"asian"},
{"v":"/tag/asian-porn-zh/","n":"Asian Porn"},
{"v":"/tag/a%e7%89%87/","n":"A片"},
{"v":"/tag/babe-zh/","n":"babe"},
{"v":"/tag/bdsm-zh/","n":"bdsm"},
{"v":"/tag/big-ass-zh/","n":"big ass"},
{"v":"/tag/big-butt-zh/","n":"big butt"},
{"v":"/tag/big-tits-zh/","n":"big tits"},
{"v":"/tag/blonde-zh/","n":"blonde"},
{"v":"/tag/brunette-zh/","n":"brunette"},
{"v":"/tag/bunni-zh/","n":"bunni"},
{"v":"/tag/busty-zh/","n":"busty"},
{"v":"/tag/china-zh/","n":"china"},
{"v":"/tag/chinese-porn-zh/","n":"Chinese Porn"},
{"v":"/tag/condom-break-zh/","n":"condom break"},
{"v":"/tag/cosplay-zh/","n":"cosplay"},
{"v":"/tag/creampie-zh/","n":"creampie"},
{"v":"/tag/cum-inside-zh/","n":"cum inside"},
{"v":"/tag/cute-zh/","n":"cute"},
{"v":"/tag/cuteshaved/","n":"cuteshaved"},
{"v":"/tag/deepthroat-zh/","n":"deepthroat"},
{"v":"/tag/doggy-zh/","n":"doggy"},
{"v":"/tag/fingering-zh/","n":"fingering"},
{"v":"/tag/flixko/","n":"FLIXKO"},
{"v":"/tag/handjob-zh/","n":"handjob"},
{"v":"/tag/hd-zh/","n":"HD"},
{"v":"/tag/hentai-zh/","n":"hentai"},
{"v":"/tag/homemade-zh/","n":"homemade"},
{"v":"/tag/hot-zh/","n":"hot"},
{"v":"/tag/japan-zh/","n":"japan"},
{"v":"/tag/japanese18/","n":"japanese18"},
{"v":"/tag/japanese-porn-zh/","n":"Japanese porn"},
{"v":"/tag/jav-zh/","n":"JAV"},
{"v":"/tag/kiki-zh/","n":"kiki"},
{"v":"/tag/korean-porn-zh/","n":"Korean porn"},
{"v":"/tag/ntr-zh/","n":"Ntr"},
{"v":"/tag/ol-zh/","n":"Ol"},
{"v":"/tag/porn-zh/","n":"porn"},
{"v":"/tag/pov-zh/","n":"pov"},
{"v":"/tag/pussy-zh/","n":"pussy"},
{"v":"/tag/rona/","n":"RONA"},
{"v":"/tag/sex-zh/","n":"sex"},
{"v":"/tag/sexy-zh/","n":"sexy"},
{"v":"/tag/sucking-zh/","n":"sucking"},
{"v":"/tag/teen-zh/","n":"teen"},
{"v":"/tag/teen-porn-etc-zh/","n":"teen porn etc"},
{"v":"/tag/thai-porn-zh/","n":"Thai porn"},
{"v":"/tag/vlog-zh/","n":"vlog"},
{"v":"/tag/xjx0062/","n":"xjx0062"},
{"v":"/tag/%e4%b8%87%e9%9d%99%e9%9b%aa/","n":"万静雪"},
{"v":"/tag/%e4%b8%8a%e5%8d%b7/","n":"上卷"},
{"v":"/tag/%e4%b8%8a%e9%97%a8/","n":"上门"},
{"v":"/tag/%e4%b8%8a%e9%97%a8%e6%9c%8d%e5%8a%a1/","n":"上门服务"},
{"v":"/tag/%e4%b8%8b%e5%b1%9e%e6%88%96%e5%90%8c%e4%ba%8b/","n":"下属或同事"},
{"v":"/tag/%e4%b8%8d%e5%80%ab/","n":"不倫"},
{"v":"/tag/%e4%b8%9a%e4%bd%99/","n":"业余"},
{"v":"/tag/%e4%b8%9a%e4%bd%99%e6%80%a7%e7%88%b1/","n":"业余性爱"},
{"v":"/tag/%e4%b8%9d%e8%a2%9c-zh/","n":"丝袜"},
{"v":"/tag/%e4%b8%ad%e5%87%ba-zh/","n":"中出"},
{"v":"/tag/%e4%b8%ad%e5%9b%bd-zh/","n":"中国"},
{"v":"/tag/%e4%b8%ad%e5%9b%bd-av/","n":"中国 AV"},
{"v":"/tag/%e4%b8%ad%e5%9b%bd%e7%be%8e%e5%a5%b3/","n":"中国美女"},
{"v":"/tag/%e4%b8%ad%e5%9b%bd%ef%bc%8c%e5%a4%a7%e9%99%86/","n":"中国,大陆"},
{"v":"/tag/%e4%b8%ad%e6%97%a5%e5%a4%a7%e5%af%b9%e6%8a%97ep1/","n":"中日大对抗EP1"},
{"v":"/tag/%e4%b9%90%e5%a5%88%e5%ad%90/","n":"乐奈子"},
{"v":"/tag/%e4%b9%90%e6%92%ad%e4%bc%a0%e5%aa%92/","n":"乐播传媒"},
{"v":"/tag/%e4%b9%b1%e4%bc%a6/","n":"乱伦"},
{"v":"/tag/%e4%b9%b3%e4%ba%a4/","n":"乳交"},
{"v":"/tag/%e4%ba%82%e5%80%ab/","n":"亂倫"},
{"v":"/tag/%e4%ba%8c%e8%88%85/","n":"二舅"},
{"v":"/tag/%e4%ba%9a%e6%b4%b2/","n":"亚洲"},
{"v":"/tag/%e4%ba%9a%e6%b4%b2%e6%80%a7%e7%88%b1/","n":"亚洲性爱"},
{"v":"/tag/%e4%ba%ba%e5%a6%bb-zh/","n":"人妻"},
{"v":"/tag/%e4%ba%ba%e5%a6%bb%ef%bc%8c%e5%87%ba%e8%bb%8c%ef%bc%8c%e5%b7%a8%e4%b9%b3%ef%bc%8c%e7%84%a6%e9%bb%9e%e5%82%b3%e5%aa%92%ef%bc%8c%e7%97%b4%e5%a5%b3%ef%bc%8c%e8%82%89%e7%b5%b2%ef%bc%8c%e8%bf%b7%e4%bd%a0/","n":"人妻,出軌,巨乳,焦點傳媒,痴女,肉絲,迷你裙,香蕉视频"},
{"v":"/tag/%e4%bb%8b%e7%bb%8d/","n":"介绍"},
{"v":"/tag/%e4%bc%81%e5%88%92/","n":"企划"},
{"v":"/tag/%e4%bc%98%e5%a8%9c/","n":"优娜"},
{"v":"/tag/%e4%bc%a0%e5%aa%92/","n":"传媒"},
{"v":"/tag/%e4%bf%9d%e5%ae%89/","n":"保安"},
{"v":"/tag/%e5%81%9a%e7%88%b1/","n":"做爱"},
{"v":"/tag/%e5%81%b7%e6%83%85/","n":"偷情"},
{"v":"/tag/%e5%82%b3%e6%95%99%e5%a3%ab/","n":"傳教士"},
{"v":"/tag/%e5%84%aa%e9%85%92/","n":"優酒"},
{"v":"/tag/%e5%84%bf%e5%aa%b3/","n":"儿媳"},
{"v":"/tag/%e5%85%84%e5%a6%b9/","n":"兄妹"},
{"v":"/tag/%e5%85%84%e5%bc%9f/","n":"兄弟"},
{"v":"/tag/%e5%85%8d%e8%b2%bba%e7%89%87/","n":"免費A片"},
{"v":"/tag/%e5%85%94%e5%ad%90%e5%85%88%e7%94%9f/","n":"兔子先生"},
{"v":"/tag/%e5%85%94%e5%ad%90%e5%85%88%e7%94%9f%ef%bc%8c%e6%97%a5%e6%9c%ac%ef%bc%8c%e7%be%8e%e4%ba%ba%ef%bc%8c%e5%86%85%e5%b0%84%ef%bc%8c%e4%b8%ad%e5%9b%bd%ef%bc%8c%e5%a4%a7%e9%99%86/","n":"兔子先生,日本,美人,内射,中国,大陆"},
{"v":"/tag/%e5%85%94%e5%ad%90%e5%85%88%e7%94%9f%ef%bc%8c%e7%be%8e%e5%a5%b3%ef%bc%8c%e4%b8%ad%e5%9b%bd%ef%bc%8c%e5%a4%a7%e9%99%86/","n":"兔子先生,美女,中国,大陆"},
{"v":"/tag/%e5%85%ad%e7%82%b9/","n":"六点"},
{"v":"/tag/%e5%86%85%e5%b0%84-zh/","n":"内射"},
{"v":"/tag/%e5%86%85%e8%a3%a4-zh/","n":"内裤"},
{"v":"/tag/%e5%86%99%e7%9c%9f/","n":"写真"},
{"v":"/tag/%e5%87%8c%e8%be%b1/","n":"凌辱"},
{"v":"/tag/%e5%87%ba%e8%bb%8c/","n":"出軌"},
{"v":"/tag/%e5%87%ba%e9%81%93%e4%bd%9c/","n":"出道作"},
{"v":"/tag/%e5%88%9b%e6%84%8f/","n":"创意"},
{"v":"/tag/%e5%88%b6%e6%9c%8d-zh/","n":"制服"},
{"v":"/tag/%e5%88%ba%e6%bf%80/","n":"刺激"},
{"v":"/tag/%e5%8a%87%e6%83%85/","n":"劇情"},
{"v":"/tag/%e5%8a%a8%e6%bc%ab/","n":"动漫"},
{"v":"/tag/%e5%8c%bb%e7%94%9f/","n":"医生"},
{"v":"/tag/%e5%8d%95%e4%bd%93%e4%bd%9c%e5%93%81/","n":"单体作品"},
{"v":"/tag/%e5%8f%8c%e9%a3%9e/","n":"双飞"},
{"v":"/tag/%e5%8f%8c%e9%a9%ac%e5%b0%be/","n":"双马尾"},
{"v":"/tag/%e5%8f%8d%e5%b7%ae/","n":"反差"},
{"v":"/tag/%e5%8f%8d%e5%b7%ae%e5%a9%8a/","n":"反差婊"},
{"v":"/tag/%e5%8f%98%e6%80%81/","n":"变态"},
{"v":"/tag/blowjob-zh/","n":"口交"},
{"v":"/tag/%e5%8f%a3%e4%ba%a4-zh/","n":"口交"},
{"v":"/tag/%e5%8f%a3%e7%88%86/","n":"口爆"},
{"v":"/tag/%e5%8f%a3%e7%bd%a9%ef%bc%8c-%e9%98%b4%e9%81%93-%ef%bc%8c%e6%9a%b4%e5%8a%9b-%ef%bc%8c%e9%a6%99%e8%95%89%e4%bc%a0%e5%aa%92/","n":"口罩, 阴道 ,暴力 ,香蕉传媒"},
{"v":"/tag/%e5%8f%a4%e8%a3%85/","n":"古装"},
{"v":"/tag/%e5%8f%af%e7%88%b1/","n":"可爱"},
{"v":"/tag/%e5%90%8c%e5%ad%a6%e4%bc%9a/","n":"同学会"},
{"v":"/tag/%e5%90%8e%e5%85%a5-zh/","n":"后入"},
{"v":"/tag/%e5%90%b4%e6%a2%a6%e6%a2%a6/","n":"吴梦梦"},
{"v":"/tag/%e5%90%b4%e8%8a%b3%e5%ae%9c/","n":"吴芳宜"},
{"v":"/tag/%e5%90%b8%e7%b2%be/","n":"吸精"},
{"v":"/tag/%e5%90%b9%e7%ae%ab/","n":"吹箫"},
{"v":"/tag/%e5%91%98%e5%b7%a5/","n":"员工"},
{"v":"/tag/%e5%91%bb%e5%90%9f/","n":"呻吟"},
{"v":"/tag/%e5%94%90%e9%9b%a8%e8%8f%b2/","n":"唐雨菲"},
{"v":"/tag/%e5%96%ae%e9%ab%94%e4%bd%9c%e5%93%81/","n":"單體作品"},
{"v":"/tag/%e5%96%b7%e6%b0%b4/","n":"喷水"},
{"v":"/tag/%e5%98%89%e4%bb%aa/","n":"嘉仪"},
{"v":"/tag/%e5%98%bf%e5%b0%bc/","n":"嘿尼"},
{"v":"/tag/%e5%9b%bd%e4%ba%a7-zh/","n":"国产"},
{"v":"/tag/%e5%9b%bd-%e4%ba%a7%e5%89%a7%e6%83%85/","n":"国 产剧情"},
{"v":"/tag/%e5%9b%bd%e9%a3%8e/","n":"国风"},
{"v":"/tag/%e5%9c%8b%e7%94%a2av/","n":"國產AV"},
{"v":"/tag/%e5%9c%8b%e7%94%a2%e5%8e%9f%e5%89%b5/","n":"國產原創"},
{"v":"/tag/%e5%9c%a3%e8%af%9e%e8%80%81%e4%ba%ba%ef%bc%8c%e6%b5%aa%e5%a5%b3%ef%bc%8c%e5%8b%be%e5%bc%95%ef%bc%8c%e5%8f%91%e6%83%85%ef%bc%8c%e5%a4%a7%e8%b1%a1%e4%bc%a0%e5%aa%92/","n":"圣诞老人,浪女,勾引,发情,大象传媒"},
{"v":"/tag/%e5%a3%b0%e4%b9%90/","n":"声乐"},
{"v":"/tag/%e5%a4%8f%e6%99%b4%e5%ad%90/","n":"夏晴子"},
{"v":"/tag/%e5%a4%96%e5%8d%96/","n":"外卖"},
{"v":"/tag/%e5%a4%96%e9%81%87/","n":"外遇"},
{"v":"/tag/%e5%a4%9ap/","n":"多P"},
{"v":"/tag/%e5%a4%a7%e5%b1%81%e8%82%a1/","n":"大屁股"},
{"v":"/tag/%e5%a4%a7%e6%88%98/","n":"大战"},
{"v":"/tag/%e5%a4%a7%e8%b1%a1%e4%bc%a0%e5%aa%92/","n":"大象传媒"},
{"v":"/tag/%e5%a4%a7%e8%b1%a1%e4%bc%a0%e5%aa%92%ef%bc%8cda23-zh/","n":"大象传媒,DA23"},
{"v":"/tag/%e5%a4%a7%e8%b1%a1%e5%82%b3%e5%aa%92/","n":"大象傳媒"},
{"v":"/tag/%e5%a4%a9%e4%b8%8b%e5%b8%83%e9%ad%94/","n":"天下布魔"},
{"v":"/tag/%e5%a4%a9%e7%be%8e%e4%bc%a0%e5%aa%92/","n":"天美传媒"},
{"v":"/tag/%e5%a5%b3%e4%bb%86/","n":"女仆"},
{"v":"/tag/%e5%a5%b3%e4%bc%98/","n":"女优"},
{"v":"/tag/%e5%a5%b3%e4%bc%98%ef%bc%8c%e7%88%b1%e8%b1%86/","n":"女优,爱豆"},
{"v":"/tag/%e5%a5%b3%e5%84%aa-zh/","n":"女優"},
{"v":"/tag/%e5%a5%b3%e5%8f%8b/","n":"女友"},
{"v":"/tag/%e5%a5%b3%e5%a4%a7%e5%ad%a6%e7%94%9f/","n":"女大学生"},
{"v":"/tag/%e5%a5%b3%e5%ad%a6%e7%94%9f/","n":"女学生"},
{"v":"/tag/%e5%a5%b3%e6%95%99%e5%b8%88/","n":"女教师"},
{"v":"/tag/%e5%a5%b3%e7%89%9b%e4%bb%94-zh/","n":"女牛仔"},
{"v":"/tag/%e5%a5%b3%e7%a5%9e-zh/","n":"女神"},
{"v":"/tag/%e5%a5%b3%e7%a7%98%e4%b9%a6/","n":"女秘书"},
{"v":"/tag/%e5%a5%b3%e9%94%80%e5%94%ae/","n":"女销售"},
{"v":"/tag/%e5%a5%b6%e5%a6%b9/","n":"奶妹"},
{"v":"/tag/%e5%a5%b6%e7%89%9b%e5%a5%b3%e5%ad%a9/","n":"奶牛女孩"},
{"v":"/tag/%e5%a6%bb%e7%99%bd%e8%99%8e/","n":"妻白虎"},
{"v":"/tag/%e5%a7%90%e5%a7%90/","n":"姐姐"},
{"v":"/tag/%e5%a7%90%e5%bc%9f/","n":"姐弟"},
{"v":"/tag/%e5%a7%9a%e5%ae%9b%e5%84%bf/","n":"姚宛儿"},
{"v":"/tag/%e5%a8%83%e5%a8%83/","n":"娃娃"},
{"v":"/tag/%e5%aa%9a%e8%8d%af/","n":"媚药"},
{"v":"/tag/%e5%aa%9a%e8%97%a5/","n":"媚藥"},
{"v":"/tag/%e5%ab%82%e5%ad%90/","n":"嫂子"},
{"v":"/tag/%e5%ab%a9%e7%a9%b4/","n":"嫩穴"},
{"v":"/tag/%e5%ad%a6%e6%a0%a1/","n":"学校"},
{"v":"/tag/%e5%ad%a6%e7%94%9f%e5%a6%b9/","n":"学生妹"},
{"v":"/tag/%e5%ae%8b%e5%8d%97%e4%bc%8a/","n":"宋南伊"},
{"v":"/tag/%e5%ae%8b%e9%9b%a8%e5%b7%9d/","n":"宋雨川"},
{"v":"/tag/%e5%ae%a4%e5%8f%8b-zh/","n":"室友"},
{"v":"/tag/%e5%ae%b6%e6%95%99/","n":"家教"},
{"v":"/tag/%e5%af%b9%e7%99%bd/","n":"对白"},
{"v":"/tag/%e5%af%bc%e6%bc%94%e7%b3%bb%e5%88%97/","n":"导演系列"},
{"v":"/tag/%e5%b0%84%e7%b2%be-zh/","n":"射精"},
{"v":"/tag/%e5%b0%8f%e5%96%b5%e5%92%aa/","n":"小喵咪"},
{"v":"/tag/%e5%b0%8f%e5%a7%a8/","n":"小姨"},
{"v":"/tag/%e5%b0%8f%e5%a7%a8%ef%bc%8c%e7%88%b1%e8%b1%86%e4%bc%a0%e5%aa%92/","n":"小姨,爱豆传媒"},
{"v":"/tag/%e5%b0%8f%e6%b0%b4%e6%b0%b4/","n":"小水水"},
{"v":"/tag/%e5%b0%8f%e6%b2%90/","n":"小沐"},
{"v":"/tag/%e5%b0%8f%e7%8c%ab%e5%92%aa/","n":"小猫咪"},
{"v":"/tag/%e5%b0%8f%e9%9b%a8/","n":"小雨"},
{"v":"/tag/%e5%b0%8f%e9%b9%bf/","n":"小鹿"},
{"v":"/tag/%e5%b0%91%e5%a5%b3-zh/","n":"少女"},
{"v":"/tag/%e5%b0%91%e5%a6%87-zh/","n":"少妇"},
{"v":"/tag/%e5%b0%91%e5%a9%a6/","n":"少婦"},
{"v":"/tag/%e5%b0%a4%e7%89%a9/","n":"尤物"},
{"v":"/tag/%e5%b7%a8%e4%b9%b3-zh/","n":"巨乳"},
{"v":"/tag/%e5%b7%a8%e4%b9%b3%ef%bc%8c%e4%b8%ad%e5%87%ba%ef%bc%8c%e5%b0%91%e5%a5%b3/","n":"巨乳,中出,少女"},
{"v":"/tag/%e5%b7%a8%e4%b9%b3%ef%bc%8c%e8%ae%a1%e8%b0%8b%ef%bc%8c%e5%a4%a7%e8%b1%a1%e4%bc%a0%e5%aa%92/","n":"巨乳,计谋,大象传媒"},
{"v":"/tag/%e5%b9%b3%e9%9d%a2/","n":"平面"},
{"v":"/tag/%e5%bb%81%e6%89%80/","n":"廁所"},
{"v":"/tag/%e5%bc%80%e5%8f%91/","n":"开发"},
{"v":"/tag/%e5%bc%80%e5%bf%83%e9%ac%bc%e4%bc%a0%e5%aa%92/","n":"开心鬼传媒"},
{"v":"/tag/%e5%bc%b7%e5%88%b6%e5%8f%a3%e4%ba%a4/","n":"強制口交"},
{"v":"/tag/%e5%bc%ba%e4%b8%8a/","n":"强上"},
{"v":"/tag/%e5%bc%ba%e5%a5%b8/","n":"强奸"},
{"v":"/tag/%e5%bd%b1%e5%83%8f/","n":"影像"},
{"v":"/tag/%e5%be%90%e5%8f%af%e5%ae%a3/","n":"徐可宣"},
{"v":"/tag/%e5%be%a1%e5%a7%90-zh/","n":"御姐"},
{"v":"/tag/%e5%be%ae%e4%b9%b3/","n":"微乳"},
{"v":"/tag/%e5%bf%83%e8%90%b1/","n":"心萱"},
{"v":"/tag/%e6%80%80%e5%ad%95/","n":"怀孕"},
{"v":"/tag/%e6%80%a7%e4%b8%ad%e5%9b%bd/","n":"性中国"},
{"v":"/tag/%e6%80%a7%e6%84%9f/","n":"性感"},
{"v":"/tag/%e6%80%a7%e7%88%b1%ef%bc%8c%e9%a6%99%e8%95%89%ef%bc%8c%e7%be%8e%e5%a5%b3%ef%bc%8c%e5%8f%a3%e4%ba%a4%e3%80%82%e4%b8%ad%e5%9b%bd%ef%bc%8c%e5%a4%a7%e9%99%86/","n":"性爱,香蕉,美女,口交。中国,大陆"},
{"v":"/tag/%e6%81%8b%e4%ba%ba/","n":"恋人"},
{"v":"/tag/%e6%83%85%e4%ba%ba%e8%8a%82/","n":"情人节"},
{"v":"/tag/%e6%83%85%e6%ac%b2/","n":"情欲"},
{"v":"/tag/%e6%84%8f%e5%a4%96/","n":"意外"},
{"v":"/tag/%e6%84%9b%e8%b1%86/","n":"愛豆"},
{"v":"/tag/%e6%88%9a%e5%b0%8f%e6%80%9c/","n":"戚小怜"},
{"v":"/tag/%e6%88%b4%e6%8b%89%e6%8b%89/","n":"戴拉拉"},
{"v":"/tag/%e6%8a%96%e9%9f%b3/","n":"抖音"},
{"v":"/tag/%e6%8a%a4%e5%a3%ab/","n":"护士"},
{"v":"/tag/%e6%8c%89%e6%91%a9/","n":"按摩"},
{"v":"/tag/%e6%8c%89%e6%91%a9%e6%a3%92/","n":"按摩棒"},
{"v":"/tag/%e6%8d%a2/","n":"换"},
{"v":"/tag/%e6%8e%a8%e7%89%b9%e7%bd%91%e7%ba%a2/","n":"推特网红"},
{"v":"/tag/%e6%8e%a8%e9%94%80%e5%91%98/","n":"推销员"},
{"v":"/tag/%e6%91%84%e5%bd%b1%e5%b8%88/","n":"摄影师"},
{"v":"/tag/%e6%91%a7%e6%af%81/","n":"摧毁"},
{"v":"/tag/%e6%92%9e%e8%a6%8b/","n":"撞見"},
{"v":"/tag/%e6%93%8d%e5%93%ad/","n":"操哭"},
{"v":"/tag/%e6%94%b9%e7%bc%96/","n":"改编"},
{"v":"/tag/%e6%96%91%e6%96%91/","n":"斑斑"},
{"v":"/tag/%e6%96%b0%e5%b9%b4/","n":"新年"},
{"v":"/tag/%e6%97%85%e6%b8%b8/","n":"旅游"},
{"v":"/tag/%e6%97%a0%e5%a5%97-zh/","n":"无套"},
{"v":"/tag/%e6%97%a0%e7%a0%81%e6%b5%81%e5%87%ba/","n":"无码流出"},
{"v":"/tag/%e6%97%a5%e6%9c%ac/","n":"日本"},
{"v":"/tag/%e6%97%a5%e6%9c%ac%e4%b8%9a%e4%bd%99/","n":"日本业余"},
{"v":"/tag/%e6%97%a5%e6%9c%ac%e4%ba%ba-zh/","n":"日本人"},
{"v":"/tag/%e6%97%a5%e6%9c%ac%e5%a4%a7%e4%b9%b3%e6%88%bf/","n":"日本大乳房"},
{"v":"/tag/%e6%97%a5%e6%9c%ac%e5%a5%b3%e5%ad%a9/","n":"日本女孩"},
{"v":"/tag/%e6%97%b6%e9%97%b4%e9%9d%99%e6%ad%a2/","n":"时间静止"},
{"v":"/tag/%e6%97%b7%e8%af%be%ef%bc%8c%e8%80%81%e5%b8%88%ef%bc%8c%e7%9a%87%e5%ae%b6%e5%8d%8e%e4%ba%ba/","n":"旷课,老师,皇家华人"},
{"v":"/tag/%e6%98%9f%e7%a9%ba/","n":"星空"},
{"v":"/tag/%e6%98%9f%e7%a9%ba%e4%bc%a0%e5%aa%92/","n":"星空传媒"},
{"v":"/tag/%e6%98%a5%e8%8a%82/","n":"春节"},
{"v":"/tag/%e6%99%a8%e6%9b%a6/","n":"晨曦"},
{"v":"/tag/%e6%9c%8d%e5%8a%a1/","n":"服务"},
{"v":"/tag/%e6%9c%a6%e6%9c%a6/","n":"朦朦"},
{"v":"/tag/%e6%9d%8e%e4%be%9d%e4%be%9d/","n":"李依依"},
{"v":"/tag/%e6%9d%8e%e5%80%a9/","n":"李倩"},
{"v":"/tag/%e6%9d%8e%e5%85%81%e7%86%99/","n":"李允熙"},
{"v":"/tag/%e6%9d%8e%e5%a6%8d%e5%b8%8c/","n":"李妍希"},
{"v":"/tag/%e6%9d%8e%e5%a8%9c%e5%a8%9c/","n":"李娜娜"},
{"v":"/tag/%e6%9d%8e%e6%9b%bc%e5%a6%ae/","n":"李曼妮"},
{"v":"/tag/%e6%9d%8e%e8%93%89%e8%93%89/","n":"李蓉蓉"},
{"v":"/tag/%e6%9d%8f%e5%90%a7/","n":"杏吧"},
{"v":"/tag/%e6%9e%81%e5%93%81/","n":"极品"},
{"v":"/tag/%e6%9e%97%e5%ab%a3/","n":"林嫣"},
{"v":"/tag/%e6%9e%97%e6%80%9d%e5%a6%a4/","n":"林思妤"},
{"v":"/tag/%e6%9e%97%e8%a5%bf%e8%90%8c/","n":"林西萌"},
{"v":"/tag/%e6%9e%9c%e5%86%bb%e4%bc%a0%e5%aa%92/","n":"果冻传媒"},
{"v":"/tag/%e6%9e%9c%e5%86%bb%e4%bc%a0%e5%aa%92%ef%bc%8c%e5%b0%8f%e5%a5%b3%e5%ad%a9%ef%bc%8c%e5%ad%a6%e7%94%9f%ef%bc%8c%e7%be%8e%e5%a5%b3%ef%bc%8c%e4%b8%ad%e5%9b%bd%ef%bc%8c%e5%a4%a7%e9%99%86/","n":"果冻传媒,小女孩,学生,美女,中国,大陆"},
{"v":"/tag/%e6%a0%a1%e6%9c%8d/","n":"校服"},
{"v":"/tag/%e6%a2%81%e4%bd%b3%e8%8a%af/","n":"梁佳芯"},
{"v":"/tag/%e6%a2%a6%e6%83%b3/","n":"梦想"},
{"v":"/tag/%e6%a8%a1%e7%89%b9-zh/","n":"模特"},
{"v":"/tag/%e6%a8%aa%e5%bc%80%e6%99%ba%e7%be%8e/","n":"横开智美"},
{"v":"/tag/%e6%af%8d%e5%a5%b3/","n":"母女"},
{"v":"/tag/%e6%af%8d%e5%ad%90/","n":"母子"},
{"v":"/tag/%e6%af%92%e9%be%99/","n":"毒龙"},
{"v":"/tag/%e6%b0%b4%e6%b5%92/","n":"水浒"},
{"v":"/tag/%e6%b1%bd%e8%bb%8a/","n":"汽車"},
{"v":"/tag/%e6%b2%99%e7%be%8e%e8%be%b0/","n":"沙美辰"},
{"v":"/tag/%e6%b2%b9%e5%8e%8b/","n":"油压"},
{"v":"/tag/%e6%b2%bb%e6%84%88-%e7%88%b1%e8%b1%86%e4%bc%a0%e5%aa%92/","n":"治愈 爱豆传媒"},
{"v":"/tag/%e6%b7%98%e6%b0%94/","n":"淘气"},
{"v":"/tag/%e6%b7%ab%e4%b9%b1/","n":"淫乱"},
{"v":"/tag/%e6%b7%ab%e4%ba%82/","n":"淫亂"},
{"v":"/tag/%e6%b7%ab%e5%a6%bb/","n":"淫妻"},
{"v":"/tag/%e6%b7%ab%e8%8d%a1/","n":"淫荡"},
{"v":"/tag/%e6%b7%b1%e5%85%a5/","n":"深入"},
{"v":"/tag/%e6%b8%85%e7%ba%af-zh/","n":"清纯"},
{"v":"/tag/%e6%b8%a9%e8%8a%ae%e6%ac%a3/","n":"温芮欣"},
{"v":"/tag/%e6%ba%ab%e6%b3%89/","n":"溫泉"},
{"v":"/tag/%e6%bc%82%e4%ba%ae%e7%9a%84%e5%a5%b3%e5%ad%a9/","n":"漂亮的女孩"},
{"v":"/tag/%e6%bc%82%e4%ba%ae%e7%9a%84%e8%84%b8%e8%9b%8b/","n":"漂亮的脸蛋"},
{"v":"/tag/%e6%bd%ae%e5%90%b9-zh/","n":"潮吹"},
{"v":"/tag/%e6%bf%80%e6%83%85/","n":"激情"},
{"v":"/tag/%e7%84%a1%e5%a5%97/","n":"無套"},
{"v":"/tag/%e7%84%a6%e9%bb%9e%e5%82%b3%e5%aa%92/","n":"焦點傳媒"},
{"v":"/tag/%e7%86%9f%e5%a5%b3-zh/","n":"熟女"},
{"v":"/tag/%e7%88%86%e4%b9%b3/","n":"爆乳"},
{"v":"/tag/%e7%88%86%e6%93%8d/","n":"爆操"},
{"v":"/tag/%e7%88%b1%e8%b1%86/","n":"爱豆"},
{"v":"/tag/%e7%88%b1%e8%b1%86%e4%bc%a0%e5%aa%92/","n":"爱豆传媒"},
{"v":"/tag/%e7%88%b1%e8%b1%86%e4%bc%a0%e5%aa%92%ef%bc%8c%e8%85%b3%e4%ba%a4%ef%bc%8c%e9%bb%91%e7%b5%b2/","n":"爱豆传媒,腳交,黑絲"},
{"v":"/tag/%e7%88%b6%e5%a5%b3/","n":"父女"},
{"v":"/tag/%e7%88%b8%e5%8f%a3%e4%ba%a4/","n":"爸口交"},
{"v":"/tag/%e7%88%b8%e7%88%b8/","n":"爸爸"},
{"v":"/tag/%e7%89%b9%e5%86%99/","n":"特写"},
{"v":"/tag/%e7%8b%97%e4%bb%94%e5%bc%8f/","n":"狗仔式"},
{"v":"/tag/%e7%8b%ac%e5%ae%b6/","n":"独家"},
{"v":"/tag/%e7%8b%ac%e6%b4%bb/","n":"独活"},
{"v":"/tag/%e7%8c%ab%e7%88%aa%e5%bd%b1%e5%83%8f/","n":"猫爪影像"},
{"v":"/tag/%e7%8c%ab%e7%88%aa%e5%bd%b1%e5%83%8f-%e7%9a%87%e5%ae%b6%e5%8d%8e%e4%ba%ba/","n":"猫爪影像 皇家华人"},
{"v":"/tag/%e7%8c%ae%e8%ba%ab/","n":"献身"},
{"v":"/tag/%e7%8d%a8%e5%ae%b6/","n":"獨家"},
{"v":"/tag/%e7%90%aa%e7%90%aa/","n":"琪琪"},
{"v":"/tag/%e7%91%9c%e4%bc%bd/","n":"瑜伽"},
{"v":"/tag/%e7%94%9c%e7%94%9c/","n":"甜甜"},
{"v":"/tag/%e7%95%87%e5%b8%8c/","n":"畇希"},
{"v":"/tag/%e7%95%99%e6%a0%a1/","n":"留校"},
{"v":"/tag/%e7%97%89%e6%8c%9b/","n":"痉挛"},
{"v":"/tag/%e7%97%b4%e5%a5%b3/","n":"痴女"},
{"v":"/tag/%e7%99%bd%e4%b8%9d-zh/","n":"白丝"},
{"v":"/tag/%e7%99%bd%e5%85%81%e5%84%bf/","n":"白允儿"},
{"v":"/tag/%e7%99%bd%e5%ab%a9/","n":"白嫩"},
{"v":"/tag/%e7%99%bd%e8%99%8e-zh/","n":"白虎"},
{"v":"/tag/%e7%99%bd%e8%99%8e%ef%bc%8c%e4%b8%ad%e6%96%87%e5%ad%97%e5%b9%95%ef%bc%8c%e7%9a%87%e5%ae%b6%e5%8d%8e%e4%ba%ba%ef%bc%8c%e5%a6%88%e5%a6%88%ef%bc%8c%e5%90%8c%e5%ad%a6/","n":"白虎,中文字幕,皇家华人,妈妈,同学"},
{"v":"/tag/%e7%99%bd%e9%9c%b2/","n":"白露"},
{"v":"/tag/%e7%99%bd%e9%b9%bf/","n":"白鹿"},
{"v":"/tag/%e7%9a%87%e5%ae%b6%e5%8d%8e%e4%ba%ba/","n":"皇家华人"},
{"v":"/tag/%e7%9a%87%e5%ae%b6%e5%8d%8e%e4%ba%ba%e4%bc%a0%e5%aa%92/","n":"皇家华人传媒"},
{"v":"/tag/%e7%9b%b4%e6%92%ad/","n":"直播"},
{"v":"/tag/%e7%9c%8b%e8%ad%b7/","n":"看護"},
{"v":"/tag/%e7%9c%bc%e9%8f%a1%e5%a8%98/","n":"眼鏡娘"},
{"v":"/tag/%e7%9f%ad%e9%ab%ae/","n":"短髮"},
{"v":"/tag/%e7%a7%81%e6%88%bf/","n":"私房"},
{"v":"/tag/%e7%a7%98%e4%b9%a6/","n":"秘书"},
{"v":"/tag/%e7%b1%b3%e6%ac%a7/","n":"米欧"},
{"v":"/tag/%e7%b2%89%e5%ab%a9/","n":"粉嫩"},
{"v":"/tag/%e7%b2%be%e4%b8%9c%e5%bd%b1%e4%b8%9a/","n":"精东影业"},
{"v":"/tag/%e7%b4%a0%e4%ba%ba-zh/","n":"素人"},
{"v":"/tag/%e7%b5%95%e5%b0%8d%e9%a0%98%e5%9f%9f%e5%82%b3%e5%aa%92/","n":"絕對領域傳媒"},
{"v":"/tag/%e7%b5%b2%e8%a5%aa/","n":"絲襪"},
{"v":"/tag/%e7%b5%b2%e8%a5%aa%e6%83%85%e8%b6%a3/","n":"絲襪情趣"},
{"v":"/tag/%e7%ba%a6%e7%82%ae-zh/","n":"约炮"},
{"v":"/tag/%e7%ba%aa%e5%bd%95%e7%89%87/","n":"纪录片"},
{"v":"/tag/%e7%bb%9d%e9%a1%b6/","n":"绝顶"},
{"v":"/tag/%e7%bb%a7%e5%a6%b9-zh/","n":"继妹"},
{"v":"/tag/%e7%bb%a7%e5%a7%90/","n":"继姐"},
{"v":"/tag/%e7%bb%a7%e5%a7%90creampie-zh/","n":"继姐creampie"},
{"v":"/tag/%e7%bb%a7%e6%af%8d/","n":"继母"},
{"v":"/tag/%e7%bd%91%e7%ba%a2-zh/","n":"网红"},
{"v":"/tag/%e7%be%8e%e4%b8%bd%e7%9a%84%e5%a5%b3%e5%ad%a9/","n":"美丽的女孩"},
{"v":"/tag/%e7%be%8e%e4%b9%b3/","n":"美乳"},
{"v":"/tag/%e7%be%8e%e5%a5%b3-zh/","n":"美女"},
{"v":"/tag/%e7%be%8e%e5%b0%91%e5%a5%b3/","n":"美少女"},
{"v":"/tag/%e7%be%8e%e5%b0%bb/","n":"美尻"},
{"v":"/tag/%e7%be%8e%e7%a9%b4-zh/","n":"美穴"},
{"v":"/tag/%e7%be%8e%e8%84%9a-zh/","n":"美脚"},
{"v":"/tag/%e7%be%8e%e8%85%bf/","n":"美腿"},
{"v":"/tag/%e7%be%8e%e8%87%80/","n":"美臀"},
{"v":"/tag/%e7%be%a4%e4%ba%a4%e7%9b%9b%e5%ae%b4/","n":"群交盛宴"},
{"v":"/tag/%e7%be%bd%e6%bf%91%e7%ba%b1%e7%bb%87/","n":"羽濑纱织"},
{"v":"/tag/%e8%80%81%e5%85%ac/","n":"老公"},
{"v":"/tag/%e8%82%89%e4%b8%9d/","n":"肉丝"},
{"v":"/tag/%e8%83%8c%e5%be%8c%e4%bd%8d/","n":"背後位"},
{"v":"/tag/%e8%85%b3%e4%ba%a4/","n":"腳交"},
{"v":"/tag/%e8%87%aa%e5%88%b6-zh/","n":"自制"},
{"v":"/tag/%e8%87%aa%e5%ae%85%ef%bc%8c%e8%af%b1%e6%83%91%ef%bc%8c%e6%8e%88%e8%af%be%ef%bc%8c%e6%95%99%e5%b8%88%ef%bc%8c%e5%a4%a7%e8%b1%a1%e4%bc%a0%e5%aa%92/","n":"自宅,诱惑,授课,教师,大象传媒"},
{"v":"/tag/%e8%87%aa%e6%85%b0-zh/","n":"自慰"},
{"v":"/tag/%e8%88%94%e5%a5%b6%e5%a4%b4/","n":"舔奶头"},
{"v":"/tag/%e8%88%9e%e8%b9%88/","n":"舞蹈"},
{"v":"/tag/%e8%89%b2%e6%8e%a7/","n":"色控"},
{"v":"/tag/%e8%89%be%e5%b8%8c/","n":"艾希"},
{"v":"/tag/%e8%89%be%e6%82%a0/","n":"艾悠"},
{"v":"/tag/%e8%89%be%e7%86%99/","n":"艾熙"},
{"v":"/tag/%e8%89%be%e7%8e%9b/","n":"艾玛"},
{"v":"/tag/%e8%89%be%e9%b2%a4/","n":"艾鲤"},
{"v":"/tag/%e8%8a%8a%e8%8a%8a/","n":"芊芊"},
{"v":"/tag/%e8%8a%b1%e8%8a%b1/","n":"花花"},
{"v":"/tag/%e8%8b%8f%e6%97%8b/","n":"苏旋"},
{"v":"/tag/%e8%8b%8f%e7%92%87/","n":"苏璇"},
{"v":"/tag/%e8%8b%8f%e7%95%85/","n":"苏畅"},
{"v":"/tag/%e8%8b%8f%e8%89%be%e6%96%87/","n":"苏艾文"},
{"v":"/tag/%e8%8b%8f%e8%af%ad%e6%a3%a0/","n":"苏语棠"},
{"v":"/tag/%e8%8b%97%e6%a2%9d/","n":"苗條"},
{"v":"/tag/%e8%8b%97%e8%8b%97/","n":"苗苗"},
{"v":"/tag/%e8%8c%b6%e7%90%86/","n":"茶理"},
{"v":"/tag/%e8%8e%89%e5%a8%9c/","n":"莉娜"},
{"v":"/tag/%e8%8e%8e%e8%8e%8e/","n":"莎莎"},
{"v":"/tag/%e8%90%8c%e5%a6%b9/","n":"萌妹"},
{"v":"/tag/%e8%90%9d%e8%8e%89/","n":"萝莉"},
{"v":"/tag/%e8%9c%9c%e6%a1%83/","n":"蜜桃"},
{"v":"/tag/%e8%9c%9c%e6%a1%83%e4%bc%a0%e5%aa%92/","n":"蜜桃传媒"},
{"v":"/tag/%e8%9c%9c%e6%a1%83%e4%bc%a0%e5%aa%92-%e8%9c%9c%e6%a1%83%e5%bd%b1%e5%83%8f/","n":"蜜桃传媒 蜜桃影像"},
{"v":"/tag/%e8%9c%9c%e6%a1%83%e5%bd%b1%e5%83%8f/","n":"蜜桃影像"},
{"v":"/tag/%e8%9c%9c%e6%a1%83%e5%bd%b1%e5%83%8f%e4%bc%a0%e5%aa%92/","n":"蜜桃影像传媒"},
{"v":"/tag/%e8%9c%9c%e6%a1%83%e7%9a%84%e8%aa%98%e6%83%91/","n":"蜜桃的誘惑"},
{"v":"/tag/%e8%9d%99%e8%9d%a0/","n":"蝙蝠"},
{"v":"/tag/%e8%a5%bf%e8%88%94%e5%8f%96%e7%b2%be%e4%b9%8b%e5%a5%b3%e5%84%bf%e5%9b%bd/","n":"西舔取精之女儿国"},
{"v":"/tag/%e8%a7%92%e8%89%b2%e6%89%ae%e6%bc%94-en-zh/","n":"角色扮演"},
{"v":"/tag/%e8%a7%a3%e9%94%81/","n":"解锁"},
{"v":"/tag/%e8%aa%bf%e6%95%99%e7%b3%bb%e5%88%97/","n":"調教系列"},
{"v":"/tag/%e8%af%88%e9%aa%97%e6%8a%a5%e5%a4%8d/","n":"诈骗报复"},
{"v":"/tag/%e8%af%95%e8%bd%a6/","n":"试车"},
{"v":"/tag/%e8%af%b1%e6%83%91/","n":"诱惑"},
{"v":"/tag/%e8%b0%83%e6%95%99/","n":"调教"},
{"v":"/tag/%e8%b4%ab%e4%b9%b3/","n":"贫乳"},
{"v":"/tag/%e8%b6%b3%e4%ba%a4/","n":"足交"},
{"v":"/tag/%e8%b6%b3%e6%8e%a7-zh/","n":"足控"},
{"v":"/tag/%e8%ba%ab%e4%bd%93/","n":"身体"},
{"v":"/tag/%e8%bd%ae%e5%a5%b8/","n":"轮奸"},
{"v":"/tag/%e8%bf%90%e5%8a%a8%e5%91%98/","n":"运动员"},
{"v":"/tag/%e8%bf%91%e4%ba%b2/","n":"近亲"},
{"v":"/tag/%e8%bf%b7%e4%bd%a0%e8%a3%99/","n":"迷你裙"},
{"v":"/tag/%e9%81%8e%e8%86%9d%e8%a5%aa/","n":"過膝襪"},
{"v":"/tag/%e9%87%87%e7%b2%be/","n":"采精"},
{"v":"/tag/%e9%87%8e%e9%9d%99/","n":"野静"},
{"v":"/tag/%e9%92%9f%e5%ae%9b%e5%86%b0/","n":"钟宛冰"},
{"v":"/tag/%e9%94%80%e5%94%ae/","n":"销售"},
{"v":"/tag/%e9%95%b7%e8%ba%ab/","n":"長身"},
{"v":"/tag/%e9%96%a8%e5%af%86/","n":"閨密"},
{"v":"/tag/%e9%97%ba%e8%9c%9c/","n":"闺蜜"},
{"v":"/tag/%e9%98%b2%e6%b6%b2%e5%b0%88%e5%8d%80/","n":"防液專區"},
{"v":"/tag/%e9%98%bf%e5%85%ac/","n":"阿公"},
{"v":"/tag/%e9%99%88%e5%8f%af%e5%bf%83/","n":"陈可心"},
{"v":"/tag/%e9%9b%a8%e8%92%99/","n":"雨蒙"},
{"v":"/tag/%e9%9c%b2%e8%84%b8-zh/","n":"露脸"},
{"v":"/tag/%e9%9f%a9%e5%9b%bd/","n":"韩国"},
{"v":"/tag/%e9%a6%99%e6%b8%af-zh/","n":"香港"},
{"v":"/tag/%e9%a6%99%e8%8f%b1/","n":"香菱"},
{"v":"/tag/%e9%a6%99%e8%95%89/","n":"香蕉"},
{"v":"/tag/%e9%a6%99%e8%95%89%e4%bc%a0%e5%aa%92/","n":"香蕉传媒"},
{"v":"/tag/%e9%a6%99%e8%95%89%e5%82%b3%e5%aa%92/","n":"香蕉傳媒"},
{"v":"/tag/%e9%a6%99%e8%95%89%e8%a7%86%e9%a2%91/","n":"香蕉视频"},
{"v":"/tag/%e9%a8%8e%e4%b9%98%e4%bd%8d/","n":"騎乘位"},
{"v":"/tag/%e9%a9%ac%e8%99%8e%e5%8f%a3%e4%ba%a4/","n":"马虎口交"},
{"v":"/tag/%e9%aa%91%e4%b9%98/","n":"骑乘"},
{"v":"/tag/%e9%aa%91%e4%b9%98%e4%bd%8d-zh/","n":"骑乘位"},
{"v":"/tag/%e9%aa%9a%e8%b4%a7/","n":"骚货"},
{"v":"/tag/%e9%ab%98%e4%b8%ad%e7%94%9f/","n":"高中生"},
{"v":"/tag/%e9%ab%98%e6%b8%85/","n":"高清"},
{"v":"/tag/%e9%ab%98%e6%bd%ae-zh/","n":"高潮"},
{"v":"/tag/%e9%ab%98%e7%ab%af%e5%a4%96%e5%9b%b4/","n":"高端外围"},
{"v":"/tag/%e9%ac%bc%e7%88%b6/","n":"鬼父"},
{"v":"/tag/%e9%ba%bb%e8%b1%86-zh/","n":"麻豆"},
{"v":"/tag/%e9%ba%bb%e8%b1%86%e4%bc%a0%e5%aa%92/","n":"麻豆传媒"},
{"v":"/tag/%e9%ba%bb%e8%b1%86%e4%bc%a0%e5%aa%92%e6%98%a0%e7%94%bb/","n":"麻豆传媒映画"},
{"v":"/tag/%e9%ba%bb%e8%b1%86%e4%bc%a0%e5%aa%92%e6%98%a0%e7%94%bb%ef%bc%8c%e5%a4%96%e5%9b%b4/","n":"麻豆传媒映画,外围"},
{"v":"/tag/%e9%ba%bb%e8%b1%86%e4%bc%a0%e5%aa%92%e6%98%a0%e7%94%bb%ef%bc%8c%e6%80%a7%e6%84%9f%ef%bc%8c%e4%ba%ba%e5%a6%bb%ef%bc%8c%e7%be%8e%e4%b9%b3/","n":"麻豆传媒映画,性感,人妻,美乳"},
{"v":"/tag/%e9%ba%bb%e8%b1%86%e5%82%b3%e5%aa%92/","n":"麻豆傳媒"},
{"v":"/tag/%e9%bb%91%e4%b8%9d-zh/","n":"黑丝"},
{"v":"/tag/%e9%bb%91%e4%b8%9d%e5%a4%a7/","n":"黑丝大"},
{"v":"/tag/%e9%bb%91%e7%b5%b2/","n":"黑絲"}
]},
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/onlyfans-zh/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/中出/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/中国-zh/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/人妻/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/制服诱惑/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/国产/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/多p/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/女友/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/巨乳/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/无码/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/jav-zh/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/未分类/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/欧美/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
],
"/category/素人/":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"most-viewed","n":"最受欢迎"},
{"v":"longest","n":"最长"},
{"v":"random","n":"随机的"}
]}
]
},
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "baidu.com"
}
+15
View File
@@ -0,0 +1,15 @@
{
"主页url": "https://yi.yirensp.fun/",
"二次截取": "&&&&",
"图片": "data-src=\"&&\"",
"标题": "title=\"&&\"",
"副标题": "🔥",
"链接": "href=\"&&\"",
"简介": "description\" content=\"&&\"",
"分类url": "https://yi.yirensp.fun/type/{cateId}-{catePg}.html;;z",
"分类": "奶香香资源$1#日韩无码$2#中文字幕$3#AV解说$4#换脸明星$5#国产大制作$6#嫖妓全过程$7#黑料不打烊$8#国产自拍$9#主播诱惑$10#探花约炮$11#偷拍偷窥$12#网曝吃瓜$13#抖阴短片$14#传媒剧情$15#日韩主播$16#强奸乱伦$20#女优明星$21#欧美激情$22#重口激情$23#三级伦理$24#探探资源$29#精品推荐$30#国产视频$31#主播直播$32#日本无码$33#日本有码$34#中文字幕$35#巨乳美乳$36#熟女人妻$37#强奸乱伦$38#欧美精品$39#少女萝莉$40#三级伦理$41#成人动漫$42#制服丝袜$43#角色扮演$44#口交颜射$45#自拍偷拍$46#大地资源$47#日韩无码$48#强奸乱伦$49#欧美精品$50#国产精品$51#人妻系列$52#中文字幕$53#动漫精品$54#伦理片$55#日韩精品$56#制服诱惑$57#自拍偷拍$58#AV明星$59#3P合$60#巨乳系列$61#颜射系列$62#口交视频$63#自慰系列$64#SM重口$65#教师学生$66#大秀视频$67#色猫资源$68#国产自拍$69#日本无码$70#日本有码$71#中文字幕$72#欧美精品$73#成人动漫$74#日本素人$75#高清名优$76#三级伦理$77#网红主播$78#映画传媒$79#人妻熟女$80#口爆颜射$81#萝莉少女$82#SM调教$83#美乳巨乳$84#短视频$85#制服诱惑$86#女同制服$87#AI换脸$88#老色B资源$96#亚洲有码$97#亚洲无码$98#制服诱惑$99#强奸乱伦$100#巨乳美乳$101#AI换脸$102#中文字幕$103#角色扮演$104#日本女优$105#成人动漫$106#欧美激情$107#三级片$108#网曝视频$109#AV解说$110#国产传媒$111#主播直播$112#国产精品$113#国产探花$114#鲨鱼资源$115#国产情色$116#日本无码$117#AV明星$118#中文字幕$119#网红主播$120#成人动漫$121#欧美情色$122#国模私拍$123#长腿丝袜$124#邻家人妻$125#韩国伦理$126#香港伦理$127#精品推荐$128#乐播资源$129#亚洲情色$130#国产主播$131#国产自拍$132#无码专区$133#欧美性爱$134#熟女人妻$135#强奸乱伦$136#巨乳美乳$137#中文字幕$138#制服诱惑$139#女同性恋$140#卡通动画$141#视频伦理$142#少女萝莉$143#重口色情$144#人兽性交$145#福利姬$201#黄瓜资源$146#国产精品$147#绿帽淫妻$148#国产探花$149#国产乱伦$150#美女主播$151#明星淫梦$152#TS人妖$153#香港三级$154#麻豆传媒$155#杏吧传媒$156#兔子先生$157#天美传媒$158#SA国际传媒$159#性世界$160#扣扣传媒$161#果冻传媒$162#星空无限$163#精东影业$164#葫芦影业$165#蜜桃传媒$166#小说专区$181#学生校园$182#玄幻仙侠$183#明星偶像$184#生活都市$185#不伦恋情$186#经验故事$187#科学幻想$188#暴力虐待$189#",
"分类二次截取": "div class=\"menu clearfix\">&&",
"分类数组": "",
"分类标题": ">&&</a",
"分类ID": "/type/&&.html"
}
+14
View File
@@ -0,0 +1,14 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://wwww.cqifei.my/",
"数组": "<dt>&&</dl>",
"图片": "data-src=\"&&\"",
"标题": "title=\"&&\"",
"链接": "href=\"&&\"[替换:detail>>play#.html>>/sid/1/nid/1.html]",
"分类url": "https://wwww.cqifei.my/index.php/vod/type/id/{cateId}/page/{catePg}.html;;z",
"分类二次截取": "menu clearfix&&wrap pre",
"分类数组": "<a&&/a>",
"分类标题": ">&&</a",
"分类ID": "/index.php/vod/type/id/&&.html"
}
+51
View File
@@ -0,0 +1,51 @@
{
"作者": "黑哥传媒",
"站名": "",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://admin.941cad.cc/bin/?utm_source=",
"首页": "120",
"起始页": "1",
"分类url": "https://admin.941cad.cc/bin/index.php/vod/type/id/{cateId}/page/{catePg}.html;;mrcd0",
"分类": "必看专区$74#无码专区$75#偷拍自拍$76#国产自拍$77#国产视频$78#人妻熟女$79#AV解说$80#激情动漫$81#人妖系列$82#热播片库$65#制服丝袜$66#探花系列$67#翹臀美尻$68#丝袜美腿$69#强奸乱伦$70#精选独家$71#国产传媒$72#明星换脸$73#精品资源$56#网曝黑料$57#网红头条$58#湿身诱惑$59#VR视角$60#淫乱学生妹$61#口爆颜射$62#SM调教$63#美乳巨乳$64#站长精选$47#中文字幕$48#日本素人$49#三级伦理$50#女优明星$51#欧美性爱$52#日本有码$53#日本无码$54#韩国主播$55#国产剧情$38#麻豆视频$39#91制片厂$40#天美传媒$41#蜜桃传媒$42#皇家华人$43#星空传媒$44#精东影业$45#乐播传媒$46#特色仓库$29#成人头条$30#乌鸦传媒$31#兔子先生$32#杏吧原创$33#映画传媒$34#国产大制作$35#抖阴视频$36#极品媚黑$37#探索精选$20#玩偶姐姐$21#mini传媒$22#大象传媒$23#开心鬼传媒$24#PsychoPorn$25#糖心Vlog$26#萝莉社$27#性视界$28",
"二次截取": "",
"数组": "thumbnail\"&&</li>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "<p>&&</p",
"链接": "href=\"&&\"",
"状态": "日期:&&</li>",
"导演": "黑哥传媒",
"主演": "",
"简介": "👶黑哥传媒介绍:+片名:&&</li>",
"线路二次截取": "",
"线路数组": "",
"线路标题": "👶+",
"播放二次截取": "",
"播放数组": "detail-play-list&&</ul>",
"播放列表": "<a&&/a>",
"播放标题": ">&&<",
"播放链接": "href=\"&&\"",
"解析": "",
"直接播放": "0",
"播放请求头": "",
"嗅探词": ".mp4#.m3u8",
"过滤词": "",
"跳转播放链接": "var player_*url\":\"&&\"",
"跳转解析": "",
"搜索请求头": "User-Agent$MOBILE_UA",
"搜索url": "https://admin.941cad.cc/bin/index.php/vod/search/page/{pg}/wd/{wd}.html",
"搜索模式": "1",
"搜索后缀": "",
"搜索二次截取": "",
"搜索数组": "thumbnail\"&&</li>",
"搜索标题": "title=\"&&\"",
"搜索图片": "data-original=\"&&\"",
"搜索副标题": "<p>&&</p",
"搜索链接": "href=\"&&\"",
"筛选": "1",
"类型": "",
"剧情": "",
"剧情值": "*"
}
+18
View File
@@ -0,0 +1,18 @@
{
"作者": "",
"编码": "UTF-8",
"请求头": "User-Agent$MOBILE_UA",
"主页url": "https://www.avdg.xyz/",
"数组": "content-item\">&&</li>",
"直接播放": "1",
"图片": "data-original=\"&&\"",
"标题": "title=\"&&\"",
"副标题": "text-bg-r\">&&</span>",
"链接": "https://www.avdg.xyz/vodplay/+href=\"/voddetail/&&.html\"+-1-1.html",
"简介": "description\" content=\"&&\"",
"搜索模式": "1",
"搜索url": "https://www.avdg.xyz/vodsearch/{wd}----------{pg}---.html",
"分类url": "https://www.avdg.xyz/vodtype/{cateId}-{catePg}.html",
"分类": "视频一区$43#视频二区$62#视频三区$1#视频四区$93#视频五区$102",
"类型": "明星换脸$9#国产传媒$47#国产主播$48#网曝黑料$49#口交颜射$50#可爱学生$54#野外露出$57||日本无码$31#VR视角$38#91探花$63#兽耳系列$64#多人多P$65#主播直播$66#古装扮演$69#风情旗袍$70||国产视频$6#素人自拍$7#国产主播$8#极品媚黑$11#网曝黑料$12#网红头条$13#巨乳美乳$46#Cosplay$85||精品推荐$94#国产色情$95#瑜伽裤$96#过膝袜$97#网红流出$98#R星传媒$99#女同性恋$100#台湾辣妹$101||唯美港姐$103#SM调教$104#萝莉少女$105#日本动漫$106#强奸乱伦$107#欧美无码$108#女优明星$109#人妖系列$110"
}
BIN
View File
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
{
"作者": "Aries",
"站名": "",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://av01.club/zh/",
"首页": "120",
"起始页": "1",
"分类url": "https://av01.club/zh/{cateId}?page={catePg};;z",
"分类": "有码$censored#无码$uncensored#欧美$western#FC2$fc2#动漫$hanime#国产$chinese",
"二次截取": "",
"数组": "class=\"card-img-top embed-responsive-item lazyload\"&&div class=\"video-list-item-tag-wrapper\"",
"标题": "title=\"&&\"",
"图片": "data-src=\"&&\"",
"副标题": "title=\"&&\"",
"链接": "href=\"&&\""
}
+16
View File
@@ -0,0 +1,16 @@
{
"作者": "Aries",
"站名": "https://www.fullhd.xxx/zh/",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://www.fullhd.xxx/zh/",
"首页": "120",
"起始页": "1",
"分类url": "https://www.fullhd.xxx/zh/networks/{cateId}/{catePg}.html;;z",
"分类": "Brazzers$brazzers-com#MYLF$mylf-com#BLACKED$blacked#Team Skeet$teamskeet-com#Bangbros$bangbros#Nubiles Porn$nubiles-porn-com#Adult Time$adult-time#TUSHY$tushy-com#Private$private#Woodman Casting$woodman-casting#Naughty America$naughtyamerica-com#Mom Lover$mom-lover#Reality Kings$rk-com#MOFOS$mofos-com",
"数组": "class=\"item\"&&</div></a>",
"标题": "title=\"&&\"",
"图片": "src=\"&&\"",
"副标题": "🌹+>&&<",
"链接": "href=\"&&\""
}
+25
View File
@@ -0,0 +1,25 @@
{
"作者": "",
"站名": "",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://www.camversity.com",
"首页": "120",
"起始页": "1",
"分类url": "https://www.camversity.com/{cateId}?p={catePg};;mrcd0",
"分类": "couples$couples#trans$trans#girls$girls#men$Guys",
"二次截取": "<!-- -->star&&previous page",
"数组": "<a&&</a>",
"标题": "alt=\"&&\"",
"图片": "src=\"&&\"",
"副标题": "module__withEye--b3m0y\">&&<",
"链接": "href=\"&&\"",
"线路二次截取": "",
"直接播放": "1",
"播放请求头": "",
"嗅探词": "",
"过滤词": "",
"跳转播放链接": "",
"跳转解析": ""
}
+16
View File
@@ -0,0 +1,16 @@
{
"作者": "Aries",
"站名": "https://www.gdd5.quest/cn/home/web/",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://www.gdd5.quest/cn/home/web/",
"首页": "120",
"起始页": "1",
"分类url": "https://www.gdd5.quest/cn/home/web/index.php/vod/type/id/{cateId}/page/{catePg}.html;;z",
"分类": "女神学生$21#美女直播$22#人妻系列$23#强奸乱伦$24#自拍偷拍$25#制服诱惑$26#巨乳系列$27#自慰系列$28#国产视频$29#无码视频$30#有码视频$31#中文字幕$32#日韩精品$33#欧美精品$34#动漫精品$35#三级伦理$36",
"数组": "video\"&&</span>",
"标题": "title=\"&&\"",
"图片": "src=\"&&\"",
"副标题": "✨+多看少撸管+✨",
"链接": "href=\"&&\""
}
+10
View File
@@ -0,0 +1,10 @@
{
"主页url": "https://jav.sb/",
"直接播放": "1",
"数组": "class=\"relative aspect-w-16 aspect-h-9 rounded overflow-hidden shadow-lg\"&&</div>",
"图片": "data-src=\"&&\"",
"标题": "alt=\"&&\"",
"链接": "href=\"&&\"",
"分类url": "https://jav.sb/javtype/{cateId}-{catePg}.html",
"分类": "日本有碼$Censored#日本無碼$Uncensored#FC2-PPV$FC2-PPV#無碼破解$Mosaic_Removed#中文字幕$CHN_SUB#MGS動画$MGS#寫真$Adult_IDOL#國產$Asian_Amateur"
}
+188
View File
@@ -0,0 +1,188 @@
{
//
//回家地址 → https://airav.io/数字改
//https://airav.io/
"规则名": "airAV-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://airav.io",
"首页列表数组规则": ".row-cols-2",
//"首页列表数组规则": "body",
"首页片单列表数组规则": ".col oneVideo",
//"首页片单列表数组规则": ".m_vedio",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "a&&alt",
"首页片单链接": "a&&href",
"首页片单图片": "img[src*=storage]&&src",
"首页片单副标题": "'👁️'+.click_count&&Text",
"首页片单链接加前缀": "https://airav.io",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://hscangku.com/vodshow/{cateId}-{catePg}/",
"分类链接": "https://airav.io/list?idx={catePg}&sort={cateId}",
"分类名称": "最作上市&发行日&今日热门&本周热门&本月热门&总排行",
"分类名称替换词": "1&2&3&4&5&6",
"分类截取模式": "1",
"分类列表数组规则": "body&&.oneVideo:has(img)",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h5&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img[src*=storage]&&src",
"分类片单副标题": "'👁️'+p,0&&Text+'❤️'+p,1&&Text",
"分类片单链接加前缀": "https://airav.io",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://airav.io/index.aspx?search_type=1&kw={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "body&&.m_vedio",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img[src*=storage]&&src",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "'👁️'+.click_count&&Text",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"0",
"类型详情": "<p>類型:&&</p>",
"年代详情": "<p>更新:&&</p>",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": ".play-btn-group&&.line",
"线路标题": "'📽️'+a&&Text+'📺'",
"播放列表数组规则": ".line",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://airav.io",
"选集链接加后缀": "",
"筛选数据":{
"":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=1":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=2":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=3":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=4":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=1003":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=6":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=7":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=8":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"status=9":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"Search=無碼":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
],
"Search=偷拍":[
{"key":"by",
"name":"排序",
"value":[
{"v":"dateproduce","n":"最新"},
{"v":"Playon","n":"热门"},
{"v":"dateupload","n":"更新"}
]}
]
},
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "baidu.com"
}
+533
View File
@@ -0,0 +1,533 @@
import re
import sys
import urllib.parse
import threading
import time
import requests
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def __init__(self):
# 基础配置
self.name = '好色TV(优)'
self.host = 'https://hsex.icu/'
self.candidate_hosts = [
"https://hsex.icu/",
"https://hsex1.icu/",
"https://hsex.tv/"
]
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Referer': self.host
}
self.timeout = 5000
# 分类映射(关键修复:视频分类url_suffix设为空,适配list-{pg}.htm格式)
self.class_map = {
'视频': {'type_id': 'list', 'url_suffix': ''}, # 修复点1:视频分类后缀为空
'周榜': {'type_id': 'top7', 'url_suffix': 'top7'},
'月榜': {'type_id': 'top', 'url_suffix': 'top'},
'5分钟+': {'type_id': '5min', 'url_suffix': '5min'},
'10分钟+': {'type_id': 'long', 'url_suffix': 'long'}
}
def getName(self):
return self.name
def init(self, extend=""):
# 尝试获取最快可用域名
self.host = self.get_fastest_host()
self.headers['Referer'] = self.host
def isVideoFormat(self, url):
if not url:
return False
return any(fmt in url.lower() for fmt in ['.mp4', '.m3u8', '.flv', '.avi'])
def manualVideoCheck(self):
def check(url):
if not self.isVideoFormat(url):
return False
try:
resp = self.fetch(url, headers=self.headers, method='HEAD', timeout=3)
return resp.status_code in (200, 302) and 'video' in resp.headers.get('Content-Type', '')
except:
return False
return check
def get_fastest_host(self):
"""测试候选域名,返回最快可用的"""
results = {}
threads = []
def test_host(url):
try:
start_time = time.time()
resp = requests.head(url, headers=self.headers, timeout=2, allow_redirects=False)
if resp.status_code in (200, 301, 302):
delay = (time.time() - start_time) * 1000
results[url] = delay
else:
results[url] = float('inf')
except:
results[url] = float('inf')
for host in self.candidate_hosts:
t = threading.Thread(target=test_host, args=(host,))
threads.append(t)
t.start()
for t in threads:
t.join()
valid_hosts = [(h, d) for h, d in results.items() if d != float('inf')]
return valid_hosts[0][0] if valid_hosts else self.candidate_hosts[0]
def homeContent(self, filter):
result = {}
# 构造分类列表
classes = []
for name, info in self.class_map.items():
classes.append({
'type_name': name,
'type_id': info['type_id']
})
result['class'] = classes
try:
# 获取首页内容
html = self.fetch_with_retry(self.host, retry=2, timeout=5).text
data = pq(html)
# 提取视频列表
vlist = []
items = data('.row .col-xs-6.col-md-3')
for item in items.items():
try:
title = item('h5').text().strip()
if not title:
continue
# 提取图片URL
style = item('.image').attr('style') or ''
pic_match = re.search(r'url\(["\']?([^"\']+)["\']?\)', style)
vod_pic = pic_match.group(1) if pic_match else ''
if vod_pic and not vod_pic.startswith('http'):
vod_pic = f"{self.host.rstrip('/')}/{vod_pic.lstrip('/')}"
# 提取时长备注
desc = item('.duration').text().strip() or '未知'
# 提取视频ID
href = item('a').attr('href') or ''
if not href:
continue
vod_id = href.split('/')[-1]
if not vod_id.endswith('.htm'):
vod_id += '.htm'
vlist.append({
'vod_id': vod_id,
'vod_name': title,
'vod_pic': vod_pic,
'vod_remarks': desc
})
except Exception as e:
print(f"解析首页视频项失败: {e}")
continue
result['list'] = vlist
except Exception as e:
print(f"首页解析失败: {e}")
result['list'] = []
return result
def homeVideoContent(self):
return []
def categoryContent(self, tid, pg, filter, extend):
result = {}
try:
# 匹配分类信息
cate_info = None
for name, info in self.class_map.items():
if info['type_id'] == tid:
cate_info = info
break
if not cate_info:
result['list'] = []
return result
# 关键修复:区分视频分类与其他分类的URL格式
if tid == 'list': # 视频分类(type_id为list
url = f"{self.host}list-{pg}.htm" # 格式:list-1.htm、list-2.htm
else: # 其他分类(周榜/月榜等):xxx_list-{pg}.htm
url = f"{self.host}{cate_info['url_suffix']}_list-{pg}.htm"
# 请求分类页
html = self.fetch(url, headers=self.headers, timeout=8).text
html = html.encode('utf-8', errors='ignore').decode('utf-8')
data = pq(html)
# 提取视频列表
vlist = []
items = data('.row .col-xs-6.col-md-3')
for item in items.items():
try:
title = item('h5').text().strip()
if not title:
continue
style = item('.image').attr('style') or ''
pic_match = re.search(r'url\(["\']?([^"\']+)["\']?\)', style)
vod_pic = pic_match.group(1) if pic_match else ''
if vod_pic and not vod_pic.startswith('http'):
vod_pic = f"{self.host.rstrip('/')}/{vod_pic.lstrip('/')}"
desc = item('.duration').text().strip() or '未知'
href = item('a').attr('href') or ''
if not href:
continue
vod_id = href.split('/')[-1]
if not vod_id.endswith('.htm'):
vod_id += '.htm'
vlist.append({
'vod_id': vod_id,
'vod_name': title,
'vod_pic': vod_pic,
'vod_remarks': desc
})
except Exception as e:
print(f"解析分类视频项失败: {e}")
continue
# 提取总页数
pagecount = 1
try:
pagination = data('.pagination1 li a')
page_nums = []
for a in pagination.items():
text = a.text().strip()
if text.isdigit():
page_nums.append(int(text))
if page_nums:
pagecount = max(page_nums)
except:
pagecount = 1
result['list'] = vlist
result['page'] = pg
result['pagecount'] = pagecount
result['limit'] = len(vlist)
result['total'] = 999999
except Exception as e:
print(f"分类解析失败: {e}")
result['list'] = []
result['page'] = pg
result['pagecount'] = 1
result['limit'] = 0
result['total'] = 0
return result
def detailContent(self, ids):
try:
if not ids or not ids[0]:
return {'list': []}
vod_id = ids[0].strip()
if not vod_id.endswith('.htm'):
vod_id += '.htm'
url = f"{self.host}{vod_id.lstrip('/')}"
html = self.fetch_with_retry(url, retry=2, timeout=8).text
html = html.encode('utf-8', errors='ignore').decode('utf-8')
data = pq(html)
# 提取标题
title = data('.panel-title, .video-title, h1').text().strip() or '未知标题'
# 提取封面图
vod_pic = ''
poster_style = data('.vjs-poster').attr('style') or ''
pic_match = re.search(r'url\(["\']?([^"\']+)["\']?\)', poster_style)
if pic_match:
vod_pic = pic_match.group(1)
if not vod_pic:
vod_pic = data('.video-pic img, .vjs-poster img, .thumbnail img').attr('src') or ''
if vod_pic and not vod_pic.startswith('http'):
vod_pic = f"{self.host}{vod_pic.lstrip('/')}"
# 提取时长和观看量
duration = '未知'
views = '未知'
info_items = data('.panel-body .col-md-3, .video-info .info-item, .info p')
for item in info_items.items():
text = item.text().strip()
if '时长' in text or 'duration' in text.lower():
duration = text.replace('时长:', '').replace('时长', '').strip()
elif '观看' in text or 'views' in text.lower():
views_match = re.search(r'(\d+\.?\d*[kK]?)次观看', text)
if views_match:
views = views_match.group(1)
else:
views = text.replace('观看:', '').replace('观看', '').strip()
remarks = f"{duration} | {views}"
# 提取播放地址
video_url = ''
m3u8_match = re.search(r'videoUrl\s*=\s*["\']([^"\']+\.m3u8)["\']', html)
if m3u8_match:
video_url = m3u8_match.group(1)
if not video_url:
source = data('source[src*=".m3u8"], source[src*=".mp4"]')
video_url = source.attr('src') or ''
if not video_url:
js_matches = re.findall(r'(https?://[^\s"\']+\.(?:m3u8|mp4))', html)
if js_matches:
video_url = js_matches[0]
if video_url and not video_url.startswith('http'):
video_url = f"{self.host}{video_url.lstrip('/')}"
vod = {
'vod_id': vod_id,
'vod_name': title,
'vod_pic': vod_pic,
'vod_remarks': remarks,
'vod_play_from': '好色TV(优)',
'vod_play_url': f'正片${video_url}' if video_url else '正片$暂无地址'
}
return {'list': [vod]}
except Exception as e:
print(f"详情解析失败: {e}")
return {'list': []}
def searchContent(self, key, quick, pg=1):
try:
# 关键词合法性校验
if not key.strip():
print("搜索关键词不能为空")
return {'list': [], 'page': int(pg), 'pagecount': 1, 'limit': 0, 'total': 0}
# 编码关键词
encoded_key = urllib.parse.quote(key.strip(), encoding='utf-8', errors='replace')
# 构造搜索URL
search_url = f"{self.host}search.htm"
params = {
'search': encoded_key,
'page': int(pg)
}
# 发起请求
resp = self.fetch(
url=search_url,
headers=self.headers,
params=params,
timeout=8
)
if resp.status_code not in (200, 302):
print(f"搜索页面请求失败,URL{resp.url},状态码:{resp.status_code}")
return {'list': [], 'page': int(pg), 'pagecount': 1, 'limit': 0, 'total': 0}
# 处理页面内容
html = resp.text.encode('utf-8', errors='ignore').decode('utf-8')
data = pq(html)
# 检测无结果场景
no_result_texts = ['没有找到相关视频', '无搜索结果', 'No results found', '未找到匹配内容']
no_result = any(data(f'div:contains("{text}"), p:contains("{text}")').text() for text in no_result_texts)
if no_result:
print(f"搜索关键词「{key}」第{pg}页无结果")
return {'list': [], 'page': int(pg), 'pagecount': 1, 'limit': 0, 'total': 0}
# 解析搜索结果
vlist = []
items = data('.row .col-xs-6.col-md-3')
for item in items.items():
try:
title = item('h5').text().strip()
if not title:
continue
style = item('.image').attr('style') or ''
pic_match = re.search(r'url\(["\']?([^"\']+)["\']?\)', style)
vod_pic = pic_match.group(1) if pic_match else ''
if vod_pic and not vod_pic.startswith(('http://', 'https://')):
vod_pic = f"{self.host.rstrip('/')}/{vod_pic.lstrip('/')}"
desc = item('.duration').text().strip() or '未知时长'
href = item('a').attr('href') or ''
if not href:
continue
vod_id = href.split('/')[-1]
if not vod_id.endswith('.htm'):
vod_id += '.htm'
vlist.append({
'vod_id': vod_id,
'vod_name': title,
'vod_pic': vod_pic,
'vod_remarks': desc
})
except Exception as e:
print(f"解析单条搜索结果失败:{e}(跳过该条)")
continue
# 解析总页数
pagecount = 1
try:
pagination = data('.pagination1 li a')
page_nums = []
for a in pagination.items():
text = a.text().strip()
if text.isdigit():
page_nums.append(int(text))
if page_nums:
pagecount = max(page_nums)
print(f"搜索关键词「{key}」分页解析完成,共{pagecount}")
except Exception as e:
print(f"解析分页失败(默认单页):{e}")
pagecount = 1
# 返回结果(修复点2:补全page键的引号,修正语法错误)
total = len(vlist) * pagecount
print(f"搜索关键词「{key}」第{pg}页处理完成,结果{len(vlist)}条,总页数{pagecount}")
return {
'list': vlist,
'page': int(pg), # 原代码此处缺少引号,导致语法错误
'pagecount': pagecount,
'limit': len(vlist),
'total': total
}
except Exception as e:
print(f"搜索功能整体异常:{e}")
return {
'list': [],
'page': int(pg), 'pagecount': 1,
'limit': 0,
'total': 0
}
def playerContent(self, flag, id, vipFlags):
headers = self.headers.copy()
headers.update({
'Referer': self.host,
'Origin': self.host.rstrip('/'),
'Host': urllib.parse.urlparse(self.host).netloc,
})
# 根据rule中的double设置
return {
'parse': 1, # 根据rule中的play_parse设置
'url': id,
'header': headers,
'double': True # 根据rule中的double设置
}
def localProxy(self, param):
try:
url = param['url']
if url and not url.startswith(('http://', 'https://')):
url = f"{self.host.rstrip('/')}/{url.lstrip('/')}"
img_headers = self.headers.copy()
img_headers.update({'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8'})
res = self.fetch(url, headers=img_headers, timeout=10)
content_type = res.headers.get('Content-Type', 'image/jpeg')
return [200, content_type, res.content]
except Exception as e:
print(f"图片代理失败: {e}")
return [200, 'image/jpeg', b'']
def fetch_with_retry(self, url, retry=2, timeout=5):
for i in range(retry + 1):
try:
resp = self.fetch(f'https://vpsdn.leuse.top/proxy?single=true&url={urllib.parse.quote(url)}',headers=self.headers, timeout=timeout)
if resp.status_code in (200, 301, 302):
return resp
print(f"请求{url}返回状态码{resp.status_code},重试中...")
except Exception as e:
print(f"{i+1}次请求{url}失败: {e}")
if i < retry:
time.sleep(0.5)
return type('obj', (object,), {'text': '', 'status_code': 404})
def fetch(self, url, headers=None, timeout=5, method='GET', params=None):
headers = headers or self.headers
params = params or {}
try:
if method.upper() == 'GET':
resp = requests.get(
f'https://vpsdn.leuse.top/proxy?single=true&url={urllib.parse.quote(url)}',
headers=headers,
timeout=timeout,
allow_redirects=True,
params=params # 支持GET请求带参数,适配搜索分页
)
elif method.upper() == 'HEAD':
resp = requests.head(
f'https://vpsdn.leuse.top/proxy?single=true&url={urllib.parse.quote(url)}',
headers=headers,
timeout=timeout,
allow_redirects=False,
params=params
)
else:
resp = requests.get( # 默认GET请求,兼容其他方法调用
f'https://vpsdn.leuse.top/proxy?single=true&url={urllib.parse.quote(url)}',
headers=headers,
timeout=timeout,
allow_redirects=True,
params=params
)
# 自动适配编码,避免中文乱码
if 'charset' in resp.headers.get('Content-Type', '').lower():
resp.encoding = resp.apparent_encoding
else:
resp.encoding = 'utf-8'
return resp
except Exception as e:
print(f"网络请求失败({url}): {e}")
# 返回统一格式空响应,避免后续逻辑崩溃
return type('obj', (object,), {
'text': '',
'status_code': 500,
'headers': {},
'url': url
})
# ------------------------------
# 可选测试代码(运行时注释或删除,用于验证功能)
# ------------------------------
if __name__ == "__main__":
# 初始化爬虫
spider = Spider()
spider.init()
# 测试首页内容
print("=== 测试首页 ===")
home_data = spider.homeContent(filter='')
print(f"首页分类数:{len(home_data['class'])}")
print(f"首页视频数:{len(home_data['list'])}")
# 测试视频分类(修复后的数据获取)
print("\n=== 测试视频分类(第1页) ===")
cate_data = spider.categoryContent(tid='list', pg=1, filter='', extend='')
print(f"视频分类第1页视频数:{len(cate_data['list'])}")
print(f"视频分类总页数:{cate_data['pagecount']}")
# 测试搜索功能(修复语法错误后)
print("\n=== 测试搜索(关键词:测试) ===")
search_data = spider.searchContent(key="测试", quick=False, pg=1)
print(f"搜索结果数:{len(search_data['list'])}")
print(f"搜索总页数:{search_data['pagecount']}")
+443
View File
@@ -0,0 +1,443 @@
// JSON 解析错误:JSON语法结构存在错误,无法解析,以下为您输出接口原文。
var il = "jsjiami.com.v6",
il_ = ["il"],
lIIIl1ll = [
il,
"\x6f\x6b\x68\x74\x74\x70\x2f\x33\x2e\x31\x35",
"\x69\x6e\x64\x65\x78\x4f\x66",
"\x24\x24\x24",
"\x73\x70\x6c\x69\x74",
"\x74\x72\x69\x6d",
"\x26\x26\x26",
"\x3a\x2f\x2f",
"\x6c\x6f\x67",
"\x70\x69\x63\x55\x72\x6c\x3a\x20",
"\x72\x65\x70\x6c\x61\x63\x65",
"\x70\x75\x73\x68",
"\x2f\x66\x69\x6c\x65\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74",
"\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74",
"\x47\x45\x54",
"\x70\x61\x72\x73\x65",
"\x63\x6f\x6e\x74\x65\x6e\x74",
"\x73\x75\x62\x73\x74\x72\x69\x6e\x67",
"\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x4f\x66",
"\x6e\x61\x6d\x65",
"\x75\x72\x6c",
"\x3d\x3d\x3d\x3d\x20\x3e\x3e\x3e\x20",
"\x73\x74\x72\x69\x6e\x67\x69\x66\x79",
"\x65\x78\x65\x63",
"\x74\x65\x73\x74",
"\x6d\x61\x74\x63\x68",
"\x63\x68\x61\x6e\x6e\x65\x6c",
"\x2c\x23\x67\x65\x6e\x72\x65\x23\x0a",
"\x75\x72\x6c\x73",
"\x64\x61\x74\x61",
"\x64\x61\x74\x61\x6c\x69\x73\x74",
"\x70\x72\x6f\x76",
"\x6c\x69\x73\x74",
"\x2d\x2d\x2d",
"\x6c\x69\x6e\x65",
"\x77\x65\x62\x50\x69\x63\x55\x72\x6c\x3a\x20",
"\x23\x45\x58\x54\x4d\x33\x55",
"\x22\x63\x68\x61\x6e\x6e\x65\x6c\x22",
"\x22\x75\x72\x6c\x73\x22",
"\x22\x64\x61\x74\x61\x6c\x69\x73\x74\x22",
"\x6c\x65\x6e\x67\x74\x68",
"\x23\x67\x65\x6e\x72\x65\x23",
"\x7b\x6e\x61\x6d\x65\x7d",
"\x7b\x63\x61\x74\x65\x7d",
"\u76f4\u64ad\u5217\u8868",
"\x6e\x75\x6c\x6c",
"\x74\x79\x70\x65\x5f\x69\x64",
"\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x75\x72\x6c",
"\x68\x61\x73\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79",
"\x6a\x6f\x69\x6e",
"\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x66\x72\x6f\x6d",
"\x6a\x43\x50\x73\x4e\x6a\x77\x69\x4a\x61\x51\x6d\x69\x2e\x63\x6f\x4e\x4f\x6d\x47\x72\x2e\x76\x56\x36\x41\x46\x67\x79\x74\x74\x3d\x3d",
];
function Ii1l1III(_0x3b13df, _0x346a54) {
_0x3b13df = ~~"0x"["concat"](_0x3b13df["slice"](0x0));
var _0x4db44b = lIIIl1ll[_0x3b13df];
return _0x4db44b;
}
(function (_0x209161, _0x5eaa4a) {
var _0x42ecdf = 0x0;
for (
_0x5eaa4a = _0x209161["shift"](_0x42ecdf >> 0x2);
_0x5eaa4a &&
_0x5eaa4a !==
(_0x209161["pop"](_0x42ecdf >> 0x3) + "")["replace"](
/[CPNwJQNOGrVAFgytt=]/g,
""
);
_0x42ecdf++
) {
_0x42ecdf = _0x42ecdf ^ 0x127efd;
}
})(lIIIl1ll, Ii1l1III);
let headers = { "User-Agent": Ii1l1III("0") };
let classes = [];
let cates = {};
let picUrl = "";
let webPaths = {};
function init(IiIIi1i) {
let i1Ii11I1 = "";
if (IiIIi1i[Ii1l1III("1")](Ii1l1III("2")) > 0x0) {
i1Ii11I1 = IiIIi1i[Ii1l1III("3")](Ii1l1III("2"))[0x0][Ii1l1III("4")]();
IiIIi1i = IiIIi1i[Ii1l1III("3")](Ii1l1III("2"))[0x1][Ii1l1III("4")]();
}
if (IiIIi1i[Ii1l1III("1")](Ii1l1III("5")) > 0x0) {
picUrl = IiIIi1i[Ii1l1III("3")](Ii1l1III("5"))[0x1][Ii1l1III("4")]();
if (picUrl[Ii1l1III("1")](Ii1l1III("6")) < 0x0) {
picUrl = i1Ii11I1 + picUrl;
}
IiIIi1i = IiIIi1i[Ii1l1III("3")](Ii1l1III("5"))[0x0][Ii1l1III("4")]();
}
console[Ii1l1III("7")](Ii1l1III("8") + picUrl);
let IIlIlI1I = IiIIi1i[Ii1l1III("3")]("\x23");
for (const IlII1I1 of IIlIlI1I) {
if (IlII1I1[Ii1l1III("1")]("\x24") > 0x0) {
let illIl111 = IlII1I1;
let Ill1iIi = IlII1I1[Ii1l1III("3")]("\x24")[0x0];
if (illIl111[Ii1l1III("1")](Ii1l1III("6")) < 0x0) {
illIl111 = illIl111[Ii1l1III("9")]("\x24", "\x24" + i1Ii11I1);
}
classes[Ii1l1III("a")]({
type_id: illIl111,
type_name: Ill1iIi[Ii1l1III("9")]("\x21\x21", ""),
});
} else {
let II1lIlli = IlII1I1;
if (II1lIlli[Ii1l1III("1")](Ii1l1III("6")) < 0x0) {
II1lIlli = i1Ii11I1 + II1lIlli;
}
II1lIlli = II1lIlli[Ii1l1III("9")](Ii1l1III("b"), Ii1l1III("c"));
let Illi11ll = req(II1lIlli, {
"\x6d\x65\x74\x68\x6f\x64": Ii1l1III("d"),
"\x68\x65\x61\x64\x65\x72\x73": headers,
});
try {
let l1lIiill = JSON[Ii1l1III("e")](Illi11ll[Ii1l1III("f")]);
let lillI11l = II1lIlli[Ii1l1III("10")](
0x0,
II1lIlli[Ii1l1III("11")]("\x2f") + 0x1
);
for (const i1iilII1 of l1lIiill) {
let Iillil = i1iilII1[Ii1l1III("12")];
let lI1iIl = i1iilII1[Ii1l1III("13")];
let illIl111 =
Iillil +
"\x24" +
(lI1iIl[Ii1l1III("1")](Ii1l1III("6")) < 0x0 ? lillI11l : "") +
lI1iIl;
classes[Ii1l1III("a")]({
type_id: illIl111,
type_name: Iillil[Ii1l1III("9")]("\x21\x21", ""),
});
webPaths[illIl111] = lillI11l;
}
} catch (Ii1Ii11) {
console[Ii1l1III("7")](Ii1l1III("14") + Ii1Ii11);
}
}
}
}
function home(I1iiIiIl) {
return JSON[Ii1l1III("15")]({ class: classes, filters: null });
}
function parseM3u(iIi1Ii1I, I1IlIIIi) {
let iI1iiIii = {};
let iiI11111 = /(#EXTINF:.+?),([^,]+?)\s*\n(.+?)\s*\n/g;
let ii1iilil = null;
while ((ii1iilil = iiI11111[Ii1l1III("16")](iIi1Ii1I)) != null) {
let lllli1iI = ii1iilil[0x1];
let il1Ili1I = ii1iilil[0x2];
let liIlll1l = ii1iilil[0x3];
if (
il1Ili1I == null ||
liIlll1l == null ||
il1Ili1I == "" ||
liIlll1l == ""
) {
continue;
}
il1Ili1I = il1Ili1I[Ii1l1III("4")]();
liIlll1l = liIlll1l[Ii1l1III("4")]();
let IiI1lI1l = I1IlIIIi;
let ilIl1i1i = /group-title="(.*?)"/;
if (ilIl1i1i[Ii1l1III("17")](lllli1iI)) {
IiI1lI1l = lllli1iI[Ii1l1III("18")](ilIl1i1i)[0x1];
}
if (!iI1iiIii[IiI1lI1l]) {
iI1iiIii[IiI1lI1l] = [];
}
iI1iiIii[IiI1lI1l][Ii1l1III("a")](il1Ili1I + "\x2c" + liIlll1l);
}
let ll11III1 = "";
for (const li1Ili in iI1iiIii) {
ll11III1 += li1Ili + "\x0a";
let IlIil1ll = iI1iiIii[li1Ili];
for (const li1iI11 of IlIil1ll) {
ll11III1 += li1iI11 + "\x0a";
}
}
return ll11III1;
}
function parseFm(IliiIl1I) {
let lliiI1i1 = "";
let Iii1ll = JSON[Ii1l1III("e")](IliiIl1I);
for (const i1lIlli1 of Iii1ll) {
let I111Il1l = i1lIlli1[Ii1l1III("12")];
let ilI11li = i1lIlli1[Ii1l1III("19")];
lliiI1i1 += I111Il1l + Ii1l1III("1a");
for (const iiilI1iI of ilI11li) {
let I11111l1 = iiilI1iI[Ii1l1III("12")];
let IlI1l1I1 = iiilI1iI[Ii1l1III("1b")];
for (const l1II1lll of IlI1l1I1) {
lliiI1i1 += I11111l1 + "\x2c" + l1II1lll + "\x0a";
}
}
}
return lliiI1i1;
}
function parseLu(iIliI1lI) {
let IIlilI1i = "";
let I11ilI1i = JSON[Ii1l1III("e")](iIliI1lI)[Ii1l1III("1c")];
for (const i1Ii1l1 of I11ilI1i[Ii1l1III("1d")]) {
let I11111l = i1Ii1l1[Ii1l1III("1e")];
let IiIiii1l = i1Ii1l1[Ii1l1III("1f")];
IIlilI1i += I11111l + Ii1l1III("1a");
for (const l1111lI of IiIiii1l) {
let lIlI1iI = l1111lI[Ii1l1III("12")];
let ll11i1II = l1111lI[Ii1l1III("1b")];
for (const Iliilii of ll11i1II) {
IIlilI1i +=
lIlI1iI +
Ii1l1III("20") +
Iliilii[Ii1l1III("21")] +
"\x2c" +
Iliilii[Ii1l1III("13")] +
"\x0a";
}
}
}
return IIlilI1i;
}
function getCateData(IliI1i) {
let iI1I1I1I = picUrl;
if (IliI1i[Ii1l1III("1")](Ii1l1III("5")) > 0x0) {
iI1I1I1I = IliI1i[Ii1l1III("3")](Ii1l1III("5"))[0x1][Ii1l1III("4")]();
if (iI1I1I1I[Ii1l1III("1")](Ii1l1III("6")) < 0x0 && webPaths[IliI1i]) {
iI1I1I1I = webPaths[IliI1i] + iI1I1I1I;
}
IliI1i = IliI1i[Ii1l1III("3")](Ii1l1III("5"))[0x0][Ii1l1III("4")]();
}
console[Ii1l1III("7")](Ii1l1III("22") + iI1I1I1I);
let ll1iIiiI = IliI1i[Ii1l1III("3")]("\x24")[0x1];
let i1I1l1i = IliI1i[Ii1l1III("3")]("\x24")[0x0];
if (!cates[IliI1i]) {
cates[IliI1i] = [];
let iIl11Iii = headers;
if (ll1iIiiI[Ii1l1III("1")]("\x7c") > 0x0) {
let ii111I1I = decodeURIComponent(ll1iIiiI[Ii1l1III("3")]("\x7c")[0x1]);
ll1iIiiI = ll1iIiiI[Ii1l1III("3")]("\x7c")[0x0];
for (const II1Ii1l of ii111I1I[Ii1l1III("3")]("\x26")) {
if (II1Ii1l[Ii1l1III("1")]("\x3d") > 0x0) {
let lI1lliii = II1Ii1l[Ii1l1III("3")]("\x3d")[0x0];
let I11Iii1i = II1Ii1l[Ii1l1III("3")]("\x3d")[0x1];
iIl11Iii[lI1lliii] = I11Iii1i;
}
}
}
let I111lilI = req(ll1iIiiI, {
"\x6d\x65\x74\x68\x6f\x64": Ii1l1III("d"),
"\x68\x65\x61\x64\x65\x72\x73": iIl11Iii,
});
I111lilI = I111lilI[Ii1l1III("f")][Ii1l1III("4")]();
if (I111lilI[Ii1l1III("1")](Ii1l1III("23")) >= 0x0) {
I111lilI = parseM3u(I111lilI, i1I1l1i);
} else if (
I111lilI[Ii1l1III("1")](Ii1l1III("24")) > 0x0 &&
I111lilI[Ii1l1III("1")](Ii1l1III("25")) > 0x0
) {
I111lilI = parseFm(I111lilI);
} else if (
I111lilI[Ii1l1III("1")](Ii1l1III("26")) > 0x0 &&
I111lilI[Ii1l1III("1")](Ii1l1III("25")) > 0x0
) {
I111lilI = parseLu(I111lilI);
}
let li1IiiII = (i1I1l1i + "\x0a" + I111lilI[Ii1l1III("9")]("\x0d", ""))[
Ii1l1III("3")
]("\x0a");
let lli11iI = i1I1l1i;
let IiiIIiIi = null;
let iiiI1l = "";
for (let i1ii1IIl = 0x0; i1ii1IIl < li1IiiII[Ii1l1III("27")]; i1ii1IIl++) {
let lIliIii = li1IiiII[i1ii1IIl][Ii1l1III("9")](/\s+/g, "");
if (
lIliIii != "" &&
lIliIii[Ii1l1III("1")](Ii1l1III("6")) < 0x0 &&
(lIliIii[Ii1l1III("1")]("\x2c") < 0x0 ||
lIliIii[Ii1l1III("1")](Ii1l1III("28")) > 0x0)
) {
if (iiiI1l != "") {
let ilIIIl = iI1I1I1I[Ii1l1III("9")](
Ii1l1III("29"),
encodeURIComponent(lli11iI)
)[Ii1l1III("9")](Ii1l1III("2a"), encodeURIComponent(i1I1l1i));
let ilI1ilI = ilIIIl[Ii1l1III("1")]("\x3c");
let iili1I1i = ilIIIl[Ii1l1III("11")]("\x3e");
if (ilI1ilI > -0x1 && iili1I1i > ilI1ilI) {
let I11Ilili = ilIIIl[Ii1l1III("10")](ilI1ilI, iili1I1i + 0x1);
let I1liliII = new RegExp(I11Ilili[Ii1l1III("9")](/<|>/g, ""));
let lii11liI = lli11iI[Ii1l1III("9")](
I1liliII,
function (Ili1lIi1, iiliII1l) {
return iiliII1l;
}
);
ilIIIl = ilIIIl[Ii1l1III("9")](I11Ilili, lii11liI);
console[Ii1l1III("7")](lli11iI + "\x2c\x20" + ilIIIl);
}
let IiiIIiIi = {
vod_id: IliI1i + Ii1l1III("2") + cates[IliI1i][Ii1l1III("27")],
vod_name: lli11iI,
vod_pic: ilIIIl,
vod_remarks: "",
type_name: Ii1l1III("2b"),
vod_year: "",
vod_area: "",
vod_actor: "",
vod_director: "",
vod_content: "",
vod_play_from: i1I1l1i,
vod_play_url: iiiI1l,
};
cates[IliI1i][Ii1l1III("a")](IiiIIiIi);
}
lli11iI = lIliIii[Ii1l1III("3")]("\x2c")[0x0][Ii1l1III("4")]();
iiiI1l = "";
} else if (
lIliIii[Ii1l1III("1")]("\x2c") > 0x0 &&
/http|rtmp|rtsp|rsp/[Ii1l1III("17")](lIliIii)
) {
let l1iiI1ii = lIliIii[Ii1l1III("3")]("\x2c");
if (iiiI1l != "") {
iiiI1l += "\x23";
}
iiiI1l +=
l1iiI1ii[0x0][Ii1l1III("4")]() +
"\x24" +
l1iiI1ii[0x1][Ii1l1III("4")]();
}
}
if (iiiI1l != "") {
let II1Iliil = iI1I1I1I[Ii1l1III("9")](
Ii1l1III("29"),
encodeURIComponent(lli11iI)
)[Ii1l1III("9")](Ii1l1III("2a"), encodeURIComponent(i1I1l1i));
let ilI1ilI = II1Iliil[Ii1l1III("1")]("\x3c");
let iili1I1i = II1Iliil[Ii1l1III("11")]("\x3e");
if (ilI1ilI > -0x1 && iili1I1i > ilI1ilI) {
let I11Ilili = II1Iliil[Ii1l1III("10")](ilI1ilI, iili1I1i + 0x1);
let I1liliII = new RegExp(I11Ilili[Ii1l1III("9")](/<|>/g, ""));
let lii11liI = I1liliII[Ii1l1III("17")](lli11iI)
? lli11iI[Ii1l1III("18")](I1liliII)[0x1]
: Ii1l1III("2c");
II1Iliil = II1Iliil[Ii1l1III("9")](I11Ilili, lii11liI);
}
let IiiIIiIi = {
vod_id: IliI1i + Ii1l1III("2") + cates[IliI1i][Ii1l1III("27")],
vod_name: lli11iI,
vod_pic: II1Iliil,
vod_remarks: "",
type_name: Ii1l1III("2b"),
vod_year: "",
vod_area: "",
vod_actor: "",
vod_director: "",
vod_content: "",
vod_play_from: i1I1l1i,
vod_play_url: iiiI1l,
};
cates[IliI1i][Ii1l1III("a")](IiiIIiIi);
}
}
return cates[IliI1i];
}
function homeVod(liIIlIl1) {
let iIl1IIii = getCateData(classes[0x0][Ii1l1III("2d")]);
let I1l1iil = JSON[Ii1l1III("15")]({ list: iIl1IIii });
return I1l1iil;
}
function category(I1l1i1Ii, l1IiiIli, IIi1Illi, lilIliIl) {
let IIi1i1ll = [];
if (l1IiiIli == 0x1) {
IIi1i1ll = getCateData(I1l1i1Ii);
}
let iIiiIi1i = JSON[Ii1l1III("15")]({ list: IIi1i1ll });
return iIiiIi1i;
}
function detail(lIl11iii) {
let I1IIIil = lIl11iii[Ii1l1III("3")](Ii1l1III("2"));
let liiiil1i = I1IIIil[0x0];
let l1l111II = liiiil1i[Ii1l1III("3")]("\x24")[0x0];
let Il1li11i = parseInt(I1IIIil[0x1]);
let Iill11Ii = getCateData(liiiil1i)[Il1li11i];
console[Ii1l1III("7")](JSON[Ii1l1III("15")](Iill11Ii));
if (l1l111II[Ii1l1III("1")]("\x21\x21") >= 0x0) {
l1l111II = l1l111II[Ii1l1III("9")]("\x21\x21", "");
const ii1l1iil = Iill11Ii[Ii1l1III("2e")][Ii1l1III("3")]("\x23");
console[Ii1l1III("7")](JSON[Ii1l1III("15")](ii1l1iil));
let i1Ili1I = {};
let IIIllli1 = {};
for (const i1IiIlIl of ii1l1iil) {
let Ill1iii1 = i1IiIlIl[Ii1l1III("3")]("\x24")[0x0];
let IIiIII11 = l1l111II;
if (Ill1iii1[Ii1l1III("1")](Ii1l1III("20")) > 0x0) {
IIiIII11 = Ill1iii1[Ii1l1III("3")](Ii1l1III("20"))[0x1];
Ill1iii1 = Ill1iii1[Ii1l1III("3")](Ii1l1III("20"))[0x0];
}
if (!i1Ili1I[Ii1l1III("2f")](Ill1iii1)) {
i1Ili1I[Ill1iii1] = 0x1;
} else {
i1Ili1I[Ill1iii1]++;
}
IIiIII11 =
l1l111II + (i1Ili1I[Ill1iii1] > 0x1 ? "\x20" + i1Ili1I[Ill1iii1] : "");
if (!IIIllli1[Ii1l1III("2f")](IIiIII11)) {
IIIllli1[IIiIII11] = [];
}
IIIllli1[IIiIII11][Ii1l1III("a")](
Ill1iii1 + "\x24" + i1IiIlIl[Ii1l1III("3")]("\x24")[0x1]
);
}
let III1i1ii = [];
let iii1lIIi = [];
for (let iliI1I1i in IIIllli1) {
III1i1ii[Ii1l1III("a")](iliI1I1i);
iii1lIIi[Ii1l1III("a")](IIIllli1[iliI1I1i][Ii1l1III("30")]("\x23"));
}
Iill11Ii[Ii1l1III("31")] = III1i1ii[Ii1l1III("30")](Ii1l1III("2"));
Iill11Ii[Ii1l1III("2e")] = iii1lIIi[Ii1l1III("30")](Ii1l1III("2"));
}
return JSON[Ii1l1III("15")]({ list: [Iill11Ii] });
}
function play(l1llIIii, illiiIII, lIIIiIiI) {
return JSON[Ii1l1III("15")]({ parse: 0x0, url: illiiIII });
}
function search(I1lll, lI1iiIII) {
return null;
}
__JS_SPIDER__ = {
"\x69\x6e\x69\x74": init,
"\x68\x6f\x6d\x65": home,
"\x68\x6f\x6d\x65\x56\x6f\x64": homeVod,
"\x63\x61\x74\x65\x67\x6f\x72\x79": category,
"\x64\x65\x74\x61\x69\x6c": detail,
"\x70\x6c\x61\x79": play,
"\x73\x65\x61\x72\x63\x68": search,
};
il = "jsjiami.com.v6";
+212
View File
@@ -0,0 +1,212 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import sys
from base64 import b64encode, b64decode
from Crypto.Hash import MD5, SHA256
sys.path.append('..')
from base.spider import Spider
from Crypto.Cipher import AES
import json
import time
class Spider(Spider):
def getName(self):
return "lav"
def init(self, extend=""):
self.id = self.ms(str(int(time.time() * 1000)))[:16]
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
host = "http://sir_new.tiansexyl.tv"
t = str(int(time.time() * 1000))
headers = {'User-Agent': 'okhttp-okgo/jeasonlzy', 'Connection': 'Keep-Alive',
'Content-Type': 'application/x-www-form-urlencoded'}
def homeContent(self, filter):
cateManual = {"演员": "actor", "分类": "avsearch", }
classes = []
for k in cateManual:
classes.append({'type_name': k, 'type_id': cateManual[k]})
j = {'code': 'homePage', 'mod': 'down', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv',
'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn',
'oauth_id': self.id}
body = self.aes(j)
data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data']
data1 = self.aes(data, False)['data']
self.r = data1['r']
for i, d in enumerate(data1['avTag']):
# if i == 4:
# break
classes.append({'type_name': d['name'], 'type_id': d['tag']})
resutl = {}
resutl["class"] = classes
return resutl
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
id = tid.split("@@")
result = {}
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
if id[0] == 'avsearch':
if pg == '1':
j = {'code': 'avsearch', 'mod': 'search', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv',
'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn',
'oauth_id': self.id}
if len(id) > 1:
j = {'code': 'find', 'mod': 'tag', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv',
'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn',
'oauth_id': self.id, 'type': 'av', 'dis': 'new', 'page': str(pg), 'tag': id[1]}
elif id[0] == 'actor':
j = {'mod': 'actor', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', 'app_type': 'rn',
'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', 'oauth_id': self.id,
'page': str(pg), 'filter': ''}
if len(id) > 1:
j = {'code': 'eq', 'mod': 'actor', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv',
'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn',
'oauth_id': self.id, 'page': str(pg), 'id': id[1], 'actor': id[2]}
else:
j = {'code': 'search', 'mod': 'av', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv',
'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn',
'oauth_id': self.id, 'page': str(pg), 'tag': id[0]}
body = self.aes(j)
data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data']
data1 = self.aes(data, False)['data']
videos = []
if tid == 'avsearch' and len(id) == 1:
for item in data1:
videos.append({"vod_id": id[0] + "@@" + str(item.get('tags')), 'vod_name': item.get('name'),
'vod_pic': self.imgs(item.get('ico')), 'vod_tag': 'folder',
'style': {"type": "rect", "ratio": 1.33}})
elif tid == 'actor' and len(id) == 1:
for item in data1:
videos.append({"vod_id": id[0] + "@@" + str(item.get('id')) + "@@" + item.get('name'),
'vod_name': item.get('name'), 'vod_pic': self.imgs(item.get('cover')),
'vod_tag': 'folder', 'style': {"type": "oval"}})
else:
for item in data1:
if item.get('_id'):
videos.append({"vod_id": str(item.get('id')), 'vod_name': item.get('title'),
'vod_pic': self.imgs(item.get('cover_thumb') or item.get('cover_full')),
'vod_remarks': item.get('good'), 'style': {"type": "rect", "ratio": 1.33}})
result["list"] = videos
return result
def detailContent(self, ids):
id = ids[0]
j = {'code': 'detail', 'mod': 'av', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv',
'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn',
'oauth_id': self.id, 'id': id}
body = self.aes(j)
data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data']
data1 = self.aes(data, False)['line']
vod = {}
play = []
for itt in data1:
a = itt['line'].get('s720')
if a:
b = a.split('.')
b[0] = 'https://m3u8'
a = '.'.join(b)
play.append(itt['info']['tips'] + "$" + a)
break
vod["vod_play_from"] = 'LAV'
vod["vod_play_url"] = "#".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
pass
def playerContent(self, flag, id, vipFlags):
url = self.getProxyUrl() + "&url=" + b64encode(id.encode('utf-8')).decode('utf-8') + "&type=m3u8"
self.hh = {'User-Agent': 'dd', 'Connection': 'Keep-Alive', 'Referer': self.r}
result = {}
result["parse"] = 0
result["url"] = url
result["header"] = self.hh
return result
def localProxy(self, param):
url = param["url"]
if param.get('type') == "m3u8":
return self.vod(b64decode(url).decode('utf-8'))
else:
return self.img(url)
def vod(self, url):
data = self.fetch(url, headers=self.hh).text
key = bytes.fromhex("13d47399bda541b85e55830528d4e66f1791585b2d2216f23215c4c63ebace31")
iv = bytes.fromhex(data[:32])
data = data[32:]
cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128)
data_bytes = bytes.fromhex(data)
decrypted = cipher.decrypt(data_bytes)
encoded = decrypted.decode("utf-8").replace("\x08", "")
return [200, "application/vnd.apple.mpegur", encoded]
def imgs(self, url):
return self.getProxyUrl() + '&url=' + url
def img(self, url):
type = url.split('.')[-1]
data = self.fetch(url).text
key = bytes.fromhex("ba78f184208d775e1553550f2037f4af22cdcf1d263a65b4d5c74536f084a4b2")
iv = bytes.fromhex(data[:32])
data = data[32:]
cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128)
data_bytes = bytes.fromhex(data)
decrypted = cipher.decrypt(data_bytes)
return [200, f"image/{type}", decrypted]
def ms(self, data, m=False):
h = MD5.new()
if m:
h = SHA256.new()
h.update(data.encode('utf-8'))
return h.hexdigest()
def aes(self, data, operation=True):
key = bytes.fromhex("620f15cfdb5c79c34b3940537b21eda072e22f5d7151456dec3932d7a2b22c53")
t = str(int(time.time()))
ivt = self.ms(t)
if operation:
data = json.dumps(data, separators=(',', ':'))
iv = bytes.fromhex(ivt)
else:
iv = bytes.fromhex(data[:32])
data = data[32:]
cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128)
if operation:
data_bytes = data.encode('utf-8')
encrypted = cipher.encrypt(data_bytes)
ep = f'{ivt}{encrypted.hex()}'
edata = f"data={ep}&timestamp={t}0d27dfacef1338483561a46b246bf36d"
sign = self.ms(self.ms(edata, True))
edata = f"timestamp={t}&data={ep}&sign={sign}"
return edata
else:
data_bytes = bytes.fromhex(data)
decrypted = cipher.decrypt(data_bytes)
return json.loads(decrypted.decode('utf-8'))
+301
View File
@@ -0,0 +1,301 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import re
import sys
from base64 import b64decode, b64encode
from urllib.parse import urlparse
import requests
from pyquery import PyQuery as pq
from requests import Session
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
'''
内置代理配置:真心jar为例
{
"key": "Phb",
"name": "Phb",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"api": "./py/Phb.py",
"ext": {
"http": "http://127.0.0.1:1072",
"https": "http://127.0.0.1:1072"
}
},
注:http(s)代理都是http
'''
try:self.proxies = json.loads(extend)
except:self.proxies = {}
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'sec-ch-ua-platform': '"Windows"',
'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
'dnt': '1',
'sec-ch-ua-mobile': '?0',
'sec-fetch-site': 'cross-site',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'priority': 'u=1, i',
}
self.host = self.gethost()
self.headers.update({'referer': f'{self.host}/', 'origin': self.host})
self.session = Session()
self.session.proxies.update(self.proxies)
self.session.headers.update(self.headers)
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def homeContent(self, filter):
result = {}
cateManual = {
"视频": "/video",
"片单": "/playlists",
"频道": "/channels",
"分类": "/categories",
"明星": "/pornstars"
}
classes = []
filters = {}
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
data = self.getpq('/recommended')
vhtml = data("#recommendedListings .pcVideoListItem .phimage")
return {'list': self.getlist(vhtml)}
def categoryContent(self, tid, pg, filter, extend):
vdata = []
result = {}
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
if tid == '/video' or '_this_video' in tid:
pagestr = f'&' if '?' in tid else f'?'
tid = tid.split('_this_video')[0]
data = self.getpq(f'{tid}{pagestr}page={pg}')
vdata = self.getlist(data('#videoCategory .pcVideoListItem'))
elif tid == '/playlists':
data = self.getpq(f'{tid}?page={pg}')
vhtml = data('#playListSection li')
vdata = []
for i in vhtml.items():
vdata.append({
'vod_id': 'playlists_click_' + i('.thumbnail-info-wrapper .display-block a').attr('href'),
'vod_name': i('.thumbnail-info-wrapper .display-block a').attr('title'),
'vod_pic': self.proxy(i('.largeThumb').attr('src')),
'vod_tag': 'folder',
'vod_remarks': i('.playlist-videos .number').text(),
'style': {"type": "rect", "ratio": 1.33}
})
elif tid == '/channels':
data = self.getpq(f'{tid}?o=rk&page={pg}')
vhtml = data('#filterChannelsSection li .description')
vdata = []
for i in vhtml.items():
vdata.append({
'vod_id': 'director_click_' + i('.avatar a').attr('href'),
'vod_name': i('.avatar img').attr('alt'),
'vod_pic': self.proxy(i('.avatar img').attr('src')),
'vod_tag': 'folder',
'vod_remarks': i('.descriptionContainer ul li').eq(-1).text(),
'style': {"type": "rect", "ratio": 1.33}
})
elif tid == '/categories' and pg == '1':
result['pagecount'] = 1
data = self.getpq(f'{tid}')
vhtml = data('.categoriesListSection li .relativeWrapper')
vdata = []
for i in vhtml.items():
vdata.append({
'vod_id': i('a').attr('href') + '_this_video',
'vod_name': i('a').attr('alt'),
'vod_pic': self.proxy(i('a img').attr('src')),
'vod_tag': 'folder',
'style': {"type": "rect", "ratio": 1.33}
})
elif tid == '/pornstars':
data = self.getpq(f'{tid}?o=t&page={pg}')
vhtml = data('#popularPornstars .performerCard .wrap')
vdata = []
for i in vhtml.items():
vdata.append({
'vod_id': 'pornstars_click_' + i('a').attr('href'),
'vod_name': i('.performerCardName').text(),
'vod_pic': self.proxy(i('a img').attr('src')),
'vod_tag': 'folder',
'vod_year': i('.performerVideosViewsCount span').eq(0).text(),
'vod_remarks': i('.performerVideosViewsCount span').eq(-1).text(),
'style': {"type": "rect", "ratio": 1.33}
})
elif 'playlists_click' in tid:
tid = tid.split('click_')[-1]
if pg == '1':
hdata = self.getpq(tid)
self.token = hdata('#searchInput').attr('data-token')
vdata = self.getlist(hdata('#videoPlaylist .pcVideoListItem .phimage'))
else:
tid = tid.split('playlist/')[-1]
data = self.getpq(f'/playlist/viewChunked?id={tid}&token={self.token}&page={pg}')
vdata = self.getlist(data('.pcVideoListItem .phimage'))
elif 'director_click' in tid:
tid = tid.split('click_')[-1]
data = self.getpq(f'{tid}/videos?page={pg}')
vdata = self.getlist(data('#showAllChanelVideos .pcVideoListItem .phimage'))
elif 'pornstars_click' in tid:
tid = tid.split('click_')[-1]
data = self.getpq(f'{tid}/videos?page={pg}')
vdata = self.getlist(data('#mostRecentVideosSection .pcVideoListItem .phimage'))
result['list'] = vdata
return result
def detailContent(self, ids):
url = f"{self.host}{ids[0]}"
data = self.getpq(ids[0])
vn = data('meta[property="og:title"]').attr('content')
dtext = data('.userInfo .usernameWrap a')
pdtitle = '[a=cr:' + json.dumps(
{'id': 'director_click_' + dtext.attr('href'), 'name': dtext.text()}) + '/]' + dtext.text() + '[/a]'
vod = {
'vod_name': vn,
'vod_director': pdtitle,
'vod_remarks': (data('.userInfo').text() + ' / ' + data('.ratingInfo').text()).replace('\n', ' / '),
'vod_play_from': 'Pornhub',
'vod_play_url': ''
}
js_content = data("#player script").eq(0).text()
plist = [f"{vn}${self.e64(f'{1}@@@@{url}')}"]
try:
pattern = r'"mediaDefinitions":\s*(\[.*?\]),\s*"isVertical"'
match = re.search(pattern, js_content, re.DOTALL)
if match:
json_str = match.group(1)
udata = json.loads(json_str)
plist = [
f"{media['height']}${self.e64(f'{0}@@@@{url}')}"
for media in udata[:-1]
if (url := media.get('videoUrl'))
]
except Exception as e:
print(f"提取mediaDefinitions失败: {str(e)}")
vod['vod_play_url'] = '#'.join(plist)
return {'list': [vod]}
def searchContent(self, key, quick, pg="1"):
data = self.getpq(f'/video/search?search={key}&page={pg}')
return {'list': self.getlist(data('#videoSearchResult .pcVideoListItem .phimage'))}
def playerContent(self, flag, id, vipFlags):
ids = self.d64(id).split('@@@@')
if '.m3u8' in ids[1]: ids[1] = self.proxy(ids[1], 'm3u8')
return {'parse': int(ids[0]), 'url': ids[1], 'header': self.headers}
def localProxy(self, param):
url = self.d64(param.get('url'))
if param.get('type') == 'm3u8':
return self.m3Proxy(url)
else:
return self.tsProxy(url)
def m3Proxy(self, url):
ydata = requests.get(url, headers=self.headers, proxies=self.proxies, allow_redirects=False)
data = ydata.content.decode('utf-8')
if ydata.headers.get('Location'):
url = ydata.headers['Location']
data = requests.get(url, headers=self.headers, proxies=self.proxies).content.decode('utf-8')
lines = data.strip().split('\n')
last_r = url[:url.rfind('/')]
parsed_url = urlparse(url)
durl = parsed_url.scheme + "://" + parsed_url.netloc
for index, string in enumerate(lines):
if '#EXT' not in string:
if 'http' not in string:
domain = last_r if string.count('/') < 2 else durl
string = domain + ('' if string.startswith('/') else '/') + string
lines[index] = self.proxy(string, string.split('.')[-1].split('?')[0])
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def tsProxy(self, url):
data = requests.get(url, headers=self.headers, proxies=self.proxies, stream=True)
return [200, data.headers['Content-Type'], data.content]
def gethost(self):
try:
response = requests.get('https://www.pornhub.com', headers=self.headers, proxies=self.proxies,
allow_redirects=False)
return response.headers['Location'][:-1]
except Exception as e:
print(f"获取主页失败: {str(e)}")
return "https://www.pornhub.com"
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self, encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def getlist(self, data):
vlist = []
for i in data.items():
vlist.append({
'vod_id': i('a').attr('href'),
'vod_name': i('a').attr('title'),
'vod_pic': self.proxy(i('img').attr('src')),
'vod_remarks': i('.bgShadeEffect').text() or i('.duration').text(),
'style': {'ratio': 1.33, 'type': 'rect'}
})
return vlist
def getpq(self, path):
try:
response = self.session.get(f'{self.host}{path}').text
return pq(response.encode('utf-8'))
except Exception as e:
print(f"请求失败: , {str(e)}")
return None
def proxy(self, data, type='img'):
if data and len(self.proxies):return f"{self.getProxyUrl()}&url={self.e64(data)}&type={type}"
else:return data
+165
View File
@@ -0,0 +1,165 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import time
import uuid
from base64 import b64decode, b64encode
import json
import sys
from urllib.parse import urlparse, urlunparse
from Crypto.Cipher import AES
from Crypto.Hash import MD5
from Crypto.Util.Padding import unpad, pad
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host = "https://api.230110.xyz"
phost = "https://cdn.230110.xyz"
headers = {
'origin': host,
'referer': f'{host}/',
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1',
}
def homeContent(self, filter):
data='9XSPkyFMrOOG34JSg//ZosMof45cyBo9hwZMZ5rvI6Yz/ZZlXWIf8/644OzwW+FNIOdJ61R/Lxjy1tqN+ZzokxtiVzb8LjYAkh6GFudwAUXFt9yS1ZjAxC3tDKrQsJQLk3nym0s00DBBzLBntRBDFz7nbba+OOBuQOZpL3CESGL42l4opdoViQLhO/dIizY1kIOk2NxxpDC9Z751gPl1ctHWuLWhuLG/QWgNWi/iHScjKrMHJKcC9GQHst/4Q3dgZ03eQIIVB6jvoV1XXoBCz6fjM/jM3BXpzSttT4Stglwy93gWuNWuZiKypHK2Q0lO10oM0ceRW2a0fPGId+rNYMRO3cR/C0ZueD4cmTAVOuxVr9ZZSP8/nhD0bHyAPONXtchIDJb0O/kdFHk2KTJfQ5q4fHOyzezczc4iQDV/R0S8cGZKM14MF+wytA/iljfj43H0UYqq5pM+MCUGRTdYEtuxCp0+A+DiOhNZwY/Km/TgBoGZQWGbpljJ2LAVnWhxX+ickLH7zuR/FeIwP/R8zOuR+8C8UlT9eHTqtvfNzaGdFxt316atHy8TNjRO7J5a177mqsHs3ziG0toDDzLDCbhRUjFgVA3ktahhXiWaaCo/ZGSJAA8TDO5DYqnJ0JDaX0ILPj8QB5zxrHYmRE8PboIr3RBAjz1sREbaHfjrUjoh29ePhlolLV00EvgoxP5knaqt5Ws/sq5IG57qKCAPgqXzblPLHToJGBtukKhLp8jbGJrkb6PVn4/jysks0NGE'
return {'class':self.aes(data,False)}
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
data = {"q": "", "filter": [f"type_id = {tid}"], "offset": (int(pg)-1) * 24, "limit": 24, "sort": ["video_time:desc"],"lang": "zh-cn", "route": "/videos/search"}
result = {}
if 'skey_' in tid:return self.searchContent(tid.split('_')[-1], True, pg)
result['list'] = self.getl(self.getdata(data))
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data={"limit":1,"filter":[f"video_id = {ids[0]}"],"lang":"zh-cn","route":"/videos/search"}
res = self.getdata(data)[0]
purl=urlunparse(urlparse(self.phost)._replace(path=urlparse(res.get('video_url')).path))
vod = {
'vod_play_from': 'dsysav',
'vod_play_url': f"{res.get('video_duration')}${purl}"
}
if res.get('video_tag'):
clist = []
tags=res['video_tag'].split(',')
for k in tags:
clist.append('[a=cr:' + json.dumps({'id': f'skey_{k}', 'name': k}) + '/]' + k + '[/a]')
vod['vod_content'] = ' '.join(clist)
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data={"q":key,"filter":[],"offset":(int(pg)-1) * 24,"limit":24,"sort":["video_time:desc"],"lang":"zh-cn","route":"/videos/search"}
return {'list':self.getl(self.getdata(data)),'page':pg}
def playerContent(self, flag, id, vipFlags):
if id.endswith('.mpd'):
id=f"{self.getProxyUrl()}&url={self.e64(id)}&type=mpd"
return {'parse': 0, 'url': id, 'header':self.headers}
def localProxy(self, param):
if param.get('type') and param['type']=='mpd':
url = self.d64(param.get('url'))
ids=url.split('/')
id=f"{ids[-3]}/{ids[-2]}/"
xpu = f"{self.getProxyUrl()}&path=".replace('&', '&amp;')
data = self.fetch(url, headers=self.headers).text
data = data.replace('initialization="', f'initialization="{xpu}{id}').replace('media="',f'media="{xpu}{id}')
return [200,'application/octet-stream',data]
else:
hsign=self.md5(f"AjPuom638LmWfWyeM5YueKuJ9PuWLdRn/mpd/{param.get('path')}1767196800")
bytes_data = bytes.fromhex(hsign)
sign = b64encode(bytes_data).decode('utf-8').replace('=','').replace('+','-').replace('/','_')
url=f"{self.phost}/mpd/{param.get('path')}?sign={sign}&expire=1767196800"
return [302,'text/plain',None,{'Location':url}]
def liveContent(self, url):
pass
def aes(self, text, operation=True):
key = b'OPQT123412FRANME'
iv = b'MRDCQP12QPM13412'
cipher = AES.new(key, AES.MODE_CBC, iv)
if operation:
ct_bytes = cipher.encrypt(pad(json.dumps(text).encode("utf-8"), AES.block_size))
ct = b64encode(ct_bytes).decode("utf-8")
return ct
else:
pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size)
return json.loads(pt.decode("utf-8"))
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def md5(self, text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()
def getl(self,data):
videos = []
for i in data:
img = i.get('video_cover')
if img and 'http' in img:img = urlunparse(urlparse(self.phost)._replace(path=urlparse(img).path))
videos.append({
'vod_id': i.get('video_id'),
'vod_name': i.get('video_title'),
'vod_pic': img,
'vod_remarks': i.get('video_duration'),
'style': {"type": "rect", "ratio": 1.33}
})
return videos
def getdata(self,data):
uid = str(uuid.uuid4())
t = int(time.time())
json_data = {
'sign': self.md5(f"{self.e64(json.dumps(data))}{uid}{t}AjPuom638LmWfWyeM5YueKuJ9PuWLdRn"),
'nonce': uid,
'timestamp': t,
'data': self.aes(data),
}
res = self.post(f"{self.host}/v1", json=json_data, headers=self.headers).json()
res = self.aes(res['data'], False)
return res
+404
View File
@@ -0,0 +1,404 @@
# -*- coding: utf-8 -*-
# 🌈 Love
import json
import random
import re
import sys
import threading
import time
from base64 import b64decode, b64encode
from urllib.parse import urlparse
import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
try:self.proxies = json.loads(extend)
except:self.proxies = {}
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Cache-Control': 'no-cache',
}
# Use working dynamic URLs directly
self.host = self.get_working_host()
self.headers.update({'Origin': self.host, 'Referer': f"{self.host}/"})
self.log(f"使用站点: {self.host}")
print(f"使用站点: {self.host}")
pass
def getName(self):
return "🌈 51吸瓜"
def isVideoFormat(self, url):
# Treat direct media formats as playable without parsing
return any(ext in (url or '') for ext in ['.m3u8', '.mp4', '.ts'])
def manualVideoCheck(self):
return False
def destroy(self):
pass
def homeContent(self, filter):
try:
response = requests.get(self.host, headers=self.headers, proxies=self.proxies, timeout=15)
if response.status_code != 200:
return {'class': [], 'list': []}
data = self.getpq(response.text)
result = {}
classes = []
# Try to get categories from different possible locations
category_selectors = [
'.category-list ul li',
'.nav-menu li',
'.menu li',
'nav ul li'
]
for selector in category_selectors:
for k in data(selector).items():
link = k('a')
href = (link.attr('href') or '').strip()
name = (link.text() or '').strip()
# Skip placeholder or invalid entries
if not href or href == '#' or not name:
continue
classes.append({
'type_name': name,
'type_id': href
})
if classes:
break
# If no categories found, create some default ones
if not classes:
classes = [
{'type_name': '首页', 'type_id': '/'},
{'type_name': '最新', 'type_id': '/latest/'},
{'type_name': '热门', 'type_id': '/hot/'}
]
result['class'] = classes
result['list'] = self.getlist(data('#index article a'))
return result
except Exception as e:
print(f"homeContent error: {e}")
return {'class': [], 'list': []}
def homeVideoContent(self):
try:
response = requests.get(self.host, headers=self.headers, proxies=self.proxies, timeout=15)
if response.status_code != 200:
return {'list': []}
data = self.getpq(response.text)
return {'list': self.getlist(data('#index article a, #archive article a'))}
except Exception as e:
print(f"homeVideoContent error: {e}")
return {'list': []}
def categoryContent(self, tid, pg, filter, extend):
try:
if '@folder' in tid:
id = tid.replace('@folder', '')
videos = self.getfod(id)
else:
# Build URL properly
if tid.startswith('/'):
if pg and pg != '1':
url = f"{self.host}{tid}page/{pg}/"
else:
url = f"{self.host}{tid}"
else:
url = f"{self.host}/{tid}"
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=15)
if response.status_code != 200:
return {'list': [], 'page': pg, 'pagecount': 1, 'limit': 90, 'total': 0}
data = self.getpq(response.text)
videos = self.getlist(data('#archive article a, #index article a'), tid)
result = {}
result['list'] = videos
result['page'] = pg
result['pagecount'] = 1 if '@folder' in tid else 99999
result['limit'] = 90
result['total'] = 999999
return result
except Exception as e:
print(f"categoryContent error: {e}")
return {'list': [], 'page': pg, 'pagecount': 1, 'limit': 90, 'total': 0}
def detailContent(self, ids):
try:
url = f"{self.host}{ids[0]}" if not ids[0].startswith('http') else ids[0]
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=15)
if response.status_code != 200:
return {'list': [{'vod_play_from': '51吸瓜', 'vod_play_url': f'页面加载失败${url}'}]}
data = self.getpq(response.text)
vod = {'vod_play_from': '51吸瓜'}
# Get content/description
try:
clist = []
if data('.tags .keywords a'):
for k in data('.tags .keywords a').items():
title = k.text()
href = k.attr('href')
if title and href:
clist.append('[a=cr:' + json.dumps({'id': href, 'name': title}) + '/]' + title + '[/a]')
vod['vod_content'] = ' '.join(clist) if clist else data('.post-title').text()
except:
vod['vod_content'] = data('.post-title').text() or '51吸瓜视频'
# Get video URLs (build episode list when multiple players exist)
try:
plist = []
used_names = set()
if data('.dplayer'):
for c, k in enumerate(data('.dplayer').items(), start=1):
config_attr = k.attr('data-config')
if config_attr:
try:
config = json.loads(config_attr)
video_url = config.get('video', {}).get('url', '')
# Determine a readable episode name from nearby headings if present
ep_name = ''
try:
parent = k.parents().eq(0)
# search up to a few ancestors for a heading text
for _ in range(3):
if not parent: break
heading = parent.find('h2, h3, h4').eq(0).text() or ''
heading = heading.strip()
if heading:
ep_name = heading
break
parent = parent.parents().eq(0)
except Exception:
ep_name = ''
base_name = ep_name if ep_name else f"视频{c}"
name = base_name
count = 2
# Ensure the name is unique
while name in used_names:
name = f"{base_name} {count}"
count += 1
used_names.add(name)
if video_url:
self.log(f"解析到视频: {name} -> {video_url}")
print(f"解析到视频: {name} -> {video_url}")
plist.append(f"{name}${video_url}")
except:
continue
if plist:
self.log(f"拼装播放列表,共{len(plist)}")
print(f"拼装播放列表,共{len(plist)}")
vod['vod_play_url'] = '#'.join(plist)
else:
vod['vod_play_url'] = f"未找到视频源${url}"
except Exception as e:
vod['vod_play_url'] = f"视频解析失败${url}"
return {'list': [vod]}
except Exception as e:
print(f"detailContent error: {e}")
return {'list': [{'vod_play_from': '51吸瓜', 'vod_play_url': f'详情页加载失败${ids[0] if ids else ""}'}]}
def searchContent(self, key, quick, pg="1"):
try:
url = f"{self.host}/search/{key}/{pg}" if pg != "1" else f"{self.host}/search/{key}/"
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=15)
if response.status_code != 200:
return {'list': [], 'page': pg}
data = self.getpq(response.text)
videos = self.getlist(data('#archive article a, #index article a'))
return {'list': videos, 'page': pg}
except Exception as e:
print(f"searchContent error: {e}")
return {'list': [], 'page': pg}
def playerContent(self, flag, id, vipFlags):
url = id
p = 1
if self.isVideoFormat(url):
# m3u8/mp4 direct play; when using proxy setting, wrap to proxy for m3u8
if '.m3u8' in url:
url = self.proxy(url)
p = 0
self.log(f"播放请求: parse={p}, url={url}")
print(f"播放请求: parse={p}, url={url}")
return {'parse': p, 'url': url, 'header': self.headers}
def localProxy(self, param):
if param.get('type') == 'img':
res=requests.get(param['url'], headers=self.headers, proxies=self.proxies, timeout=10)
return [200,res.headers.get('Content-Type'),self.aesimg(res.content)]
elif param.get('type') == 'm3u8':return self.m3Proxy(param['url'])
else:return self.tsProxy(param['url'])
def proxy(self, data, type='m3u8'):
if data and len(self.proxies):return f"{self.getProxyUrl()}&url={self.e64(data)}&type={type}"
else:return data
def m3Proxy(self, url):
url=self.d64(url)
ydata = requests.get(url, headers=self.headers, proxies=self.proxies, allow_redirects=False)
data = ydata.content.decode('utf-8')
if ydata.headers.get('Location'):
url = ydata.headers['Location']
data = requests.get(url, headers=self.headers, proxies=self.proxies).content.decode('utf-8')
lines = data.strip().split('\n')
last_r = url[:url.rfind('/')]
parsed_url = urlparse(url)
durl = parsed_url.scheme + "://" + parsed_url.netloc
iskey=True
for index, string in enumerate(lines):
if iskey and 'URI' in string:
pattern = r'URI="([^"]*)"'
match = re.search(pattern, string)
if match:
lines[index] = re.sub(pattern, f'URI="{self.proxy(match.group(1), "mkey")}"', string)
iskey=False
continue
if '#EXT' not in string:
if 'http' not in string:
domain = last_r if string.count('/') < 2 else durl
string = domain + ('' if string.startswith('/') else '/') + string
lines[index] = self.proxy(string, string.split('.')[-1].split('?')[0])
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def tsProxy(self, url):
url = self.d64(url)
data = requests.get(url, headers=self.headers, proxies=self.proxies, stream=True)
return [200, data.headers['Content-Type'], data.content]
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self, encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def get_working_host(self):
"""Get working host from known dynamic URLs"""
# Known working URLs from the dynamic gateway
dynamic_urls = [
'https://artist.vgwtswi.xyz',
'https://ability.vgwtswi.xyz',
'https://am.vgwtswi.xyz'
]
# Test each URL to find a working one
for url in dynamic_urls:
try:
response = requests.get(url, headers=self.headers, proxies=self.proxies, timeout=10)
if response.status_code == 200:
# Verify it has the expected content structure
data = self.getpq(response.text)
articles = data('#index article a')
if len(articles) > 0:
self.log(f"选用可用站点: {url}")
print(f"选用可用站点: {url}")
return url
except Exception as e:
continue
# Fallback to first URL if none work (better than crashing)
self.log(f"未检测到可用站点,回退: {dynamic_urls[0]}")
print(f"未检测到可用站点,回退: {dynamic_urls[0]}")
return dynamic_urls[0]
def getlist(self, data, tid=''):
videos = []
l = '/mrdg' in tid
for k in data.items():
a = k.attr('href')
b = k('h2').text()
# Some pages might not include datePublished; use a fallback
c = k('span[itemprop="datePublished"]').text() or k('.post-meta, .entry-meta, time').text()
if a and b:
videos.append({
'vod_id': f"{a}{'@folder' if l else ''}",
'vod_name': b.replace('\n', ' '),
'vod_pic': self.getimg(k('script').text()),
'vod_remarks': c or '',
'vod_tag': 'folder' if l else '',
'style': {"type": "rect", "ratio": 1.33}
})
return videos
def getfod(self, id):
url = f"{self.host}{id}"
data = self.getpq(requests.get(url, headers=self.headers, proxies=self.proxies).text)
vdata=data('.post-content[itemprop="articleBody"]')
r=['.txt-apps','.line','blockquote','.tags','.content-tabs']
for i in r:vdata.remove(i)
p=vdata('p')
videos=[]
for i,x in enumerate(vdata('h2').items()):
c=i*2
videos.append({
'vod_id': p.eq(c)('a').attr('href'),
'vod_name': p.eq(c).text(),
'vod_pic': f"{self.getProxyUrl()}&url={p.eq(c+1)('img').attr('data-xkrkllgl')}&type=img",
'vod_remarks':x.text()
})
return videos
def getimg(self, text):
match = re.search(r"loadBannerDirect\('([^']+)'", text)
if match:
url = match.group(1)
return f"{self.getProxyUrl()}&url={url}&type=img"
else:
return ''
def aesimg(self, word):
key = b'f5d965df75336270'
iv = b'97b60394abc2fbe1'
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher.decrypt(word), AES.block_size)
return decrypted
def getpq(self, data):
try:
return pq(data)
except Exception as e:
print(f"{str(e)}")
return pq(data.encode('utf-8'))
+260
View File
@@ -0,0 +1,260 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import re
import sys
from pyquery import PyQuery as pq
from base64 import b64decode, b64encode
from requests import Session
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.headers['referer']=f'{self.host}/'
self.session = Session()
self.session.headers.update(self.headers)
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host = "https://www.xvideos.com"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-full-version': '"133.0.6943.98"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-platform': '"Windows"',
'sec-ch-ua-platform-version': '"19.0.0"',
'sec-ch-ua-model': '""',
'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.98", "Chromium";v="133.0.6943.98"',
'dnt': '1',
'upgrade-insecure-requests': '1',
'sec-fetch-site': 'none',
'sec-fetch-mode': 'navigate',
'sec-fetch-user': '?1',
'sec-fetch-dest': 'document',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'priority': 'u=0, i'
}
def homeContent(self, filter):
result = {}
cateManual = {
"最新": "/new",
"最佳": "/best",
"频道": "/channels-index",
"标签": "/tags",
"明星": "/pornstars-index"
}
classes = []
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
return result
def homeVideoContent(self):
data = self.getpq()
return {'list':self.getlist(data(".mozaique .frame-block"))}
def categoryContent(self, tid, pg, filter, extend):
vdata = []
result = {}
page = f"/{int(pg) - 1}" if pg != '1' else ''
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
if tid=='/new' or 'tags_click' in tid:
if 'tags_click' in tid:tid=tid.split('click_')[-1]
data=self.getpq(f'{tid}/{pg}')
vdata=self.getlist(data(".mozaique .frame-block"))
elif tid=='/best':
if pg=='1':
self.path=self.session.get(f'{self.host}{tid}',headers=self.headers,allow_redirects=False).headers['Location']
data=self.getpq(f'{self.path}{page}')
vdata=self.getlist(data(".mozaique .frame-block"))
elif tid=='/channels-index' or tid=='/pornstars-index':
data = self.getpq(f'{tid}{page}')
vhtml=data(".mozaique .thumb-block")
for i in vhtml.items():
a = i('.thumb-inside .thumb a')
match = re.search(r'src="([^"]+)"', a('script').text())
img=''
if match:
img = match.group(1).strip()
vdata.append({
'vod_id': f"channels_click_{'/channels'if tid=='/channels-index' else ''}"+a.attr('href'),
'vod_name': a('.profile-name').text() or i('.profile-name').text().replace('\xa0','/'),
'vod_pic': img,
'vod_tag': 'folder',
'vod_remarks': i('.thumb-under .profile-counts').text(),
'style': {'ratio': 1.33, 'type': 'rect'}
})
elif tid=='/tags':
result['pagecount'] = pg
vhtml = self.getpq(tid)
vhtml = vhtml('.tags-list')
for d in vhtml.items():
for i in d('li a').items():
vdata.append({
'vod_id': "tags_click_"+i.attr('href'),
'vod_name': i.attr('title') or i('b').text(),
'vod_pic': '',
'vod_tag': 'folder',
'vod_remarks': i('.navbadge').text(),
'style': {'ratio': 1.33, 'type': 'rect'}
})
elif 'channels_click' in tid:
tid=tid.split('click_')[-1]
headers=self.session.headers.copy()
headers.update({'Accept': 'application/json, text/javascript, */*; q=0.01'})
vhtml=self.post(f'{self.host}{tid}/videos/best/{int(pg)-1}',headers=headers).json()
for i in vhtml['videos']:
vdata.append({
'vod_id': i.get('u'),
'vod_name': i.get('tf'),
'vod_pic': i.get('il'),
'vod_year': i.get('n'),
'vod_remarks': i.get('d'),
'style': {'ratio': 1.33, 'type': 'rect'}
})
result['list'] = vdata
return result
def detailContent(self, ids):
url = f"{self.host}{ids[0]}"
data = self.getpq(ids[0])
vn=data('meta[property="og:title"]').attr('content')
dtext=data('.main-uploader a')
href=dtext.attr('href')
pdtitle=''
if href and href.count('/') < 2:
href=f'/channels{href}'
pdtitle = '[a=cr:' + json.dumps({'id': 'channels_click_'+href, 'name': dtext('.name').text()}) + '/]' + dtext('.name').text() + '[/a]'
vod = {
'vod_name': vn,
'vod_director':pdtitle,
'vod_remarks': data('.page-title').text().replace(vn,''),
'vod_play_from': '老僧酿酒',
'vod_play_url': ''
}
js_content = data("#video-player-bg script")
jstr=''
for script in js_content.items():
content = script.text()
if 'setVideoUrlLow' in content and 'html5player' in content:
jstr = content
break
plist = [f"{vn}${self.e64(f'{1}@@@@{url}')}"]
def extract_video_urls(js_content):
try:
low = re.search(r'setVideoUrlLow\([\'"]([^\'"]+)[\'"]\)', js_content)
high = re.search(r'setVideoUrlHigh\([\'"]([^\'"]+)[\'"]\)', js_content)
hls = re.search(r'setVideoHLS\([\'"]([^\'"]+)[\'"]\)', js_content)
return {
'hls': hls.group(1) if hls else None,
'high': high.group(1) if high else None,
'low': low.group(1) if low else None
}
except Exception as e:
print(f"提取视频URL失败: {str(e)}")
return {}
if jstr:
try:
urls = extract_video_urls(jstr)
plist = [
f"{quality}${self.e64(f'{0}@@@@{url}')}"
for quality, url in urls.items()
if url
]
except Exception as e:
print(f"提取url失败: {str(e)}")
vod['vod_play_url'] = '#'.join(plist)
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data=self.getpq(f'/?k={key}&p={int(pg)-1}')
return {'list':self.getlist(data(".mozaique .frame-block")),'page':pg}
def playerContent(self, flag, id, vipFlags):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'sec-ch-ua-platform': '"Windows"',
'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
'dnt': '1',
'sec-ch-ua-mobile': '?0',
'origin': self.host,
'sec-fetch-site': 'cross-site',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': f'{self.host}/',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'priority': 'u=1, i',
}
ids=self.d64(id).split('@@@@')
return {'parse': int(ids[0]), 'url': ids[1], 'header': headers}
def localProxy(self, param):
pass
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def getlist(self, data):
vlist=[]
for i in data.items():
a=i('.thumb-inside .thumb a')
b=i('.thumb-under .title a')
vlist.append({
'vod_id': a.attr('href'),
'vod_name': b('a').attr('title'),
'vod_pic': a('img').attr('data-src'),
'vod_year': a('.video-hd-mark').text(),
'vod_remarks': b('.duration').text(),
'style': {'ratio': 1.33, 'type': 'rect'}
})
return vlist
def getpq(self, path=''):
response = self.session.get(f'{self.host}{path}').text
try:
return pq(response)
except Exception as e:
print(f"{str(e)}")
return pq(response.encode('utf-8'))
+260
View File
@@ -0,0 +1,260 @@
# coding=utf-8
# !/python
import sys
import requests
from bs4 import BeautifulSoup
import re
from base.spider import Spider
sys.path.append('..')
xurl = "https://kb11.adultporna-av1sim111.xyz"
headerx = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36'
}
class Spider(Spider):
global xurl
global headerx
def getName(self):
return "首页"
def init(self, extend):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def homeVideoContent(self):
videos = []
try:
res = requests.get(xurl + '/show/30/', headers=headerx)
res.encoding = "utf-8"
res = res.text
doc = BeautifulSoup(res, "html.parser")
vodss = doc.find('ul', class_='row row-space8 row-m-space8')
vods = vodss.find_all('li')
for vod in vods:
name = vod.select_one('section a')['title']
id = vod.select_one('section a')['href']
remarks = vod.select_one('section a span small').text
pic = vod.select_one('section a img')['src']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remarks
}
videos.append(video)
except:
pass
result = {'list': videos}
return result
def homeContent(self, filter):
res = requests.get(xurl + '/zzzz', headers=headerx)
res.encoding = "utf-8"
res = res.text
doc = BeautifulSoup(res, "html.parser")
result = {}
result['class'] = []
vodss = doc.find_all('dd')
result['class'].append({'type_id': '/t/86', 'type_name': '女优'})
result['class'].append({'type_id': '/t/141', 'type_name': '日本番號'})
result['class'].append({'type_id': '/t/1', 'type_name': '日本有码'})
result['class'].append({'type_id': '/t/5', 'type_name': '日本无码'})
result['class'].append({'type_id': '/t/32', 'type_name': '日本巨乳无码'})
result['class'].append({'type_id': '/t/34', 'type_name': '日本人妻无码'})
result['class'].append({'type_id': '/t/35', 'type_name': '日本制服无码'})
result['class'].append({'type_id': '/t/223', 'type_name': '日本乱伦无码'})
result['class'].append({'type_id': '/t/224', 'type_name': '日本强奸无码'})
result['class'].append({'type_id': '/t/36', 'type_name': '日本丝袜美腿'})
result['class'].append({'type_id': '/t/13', 'type_name': '日本中文字幕'})
result['class'].append({'type_id': '/t/53', 'type_name': '日本绝美少女'})
result['class'].append({'type_id': '/t/6', 'type_name': '日本强奸乱伦'})
result['class'].append({'type_id': '/t/7', 'type_name': '日本巨乳'})
result['class'].append({'type_id': '/t/9', 'type_name': '日本制服诱惑'})
result['class'].append({'type_id': '/t/11', 'type_name': '日本调教'})
result['class'].append({'type_id': '/t/58', 'type_name': '日本口爆'})
result['class'].append({'type_id': '/t/30', 'type_name': '欧美'})
result['class'].append({'type_id': '/t/164', 'type_name': '成人动漫'})
result['class'].append({'type_id': '/t/85', 'type_name': '伦理电影'})
result['class'].append({'type_id': '/t/2', 'type_name': '国产传媒'})
result['class'].append({'type_id': '/t/163', 'type_name': '国产视频'})
result['class'].append({'type_id': '/t/67', 'type_name': '国产空姐模特'})
result['class'].append({'type_id': '/t/69', 'type_name': '国产学生'})
result['class'].append({'type_id': '/t/70', 'type_name': '国产人妻熟女'})
result['class'].append({'type_id': '/t/71', 'type_name': '国产乱伦'})
result['class'].append({'type_id': '/t/72', 'type_name': '国产自慰'})
result['class'].append({'type_id': '/t/73', 'type_name': '国产野合车震'})
result['class'].append({'type_id': '/t/75', 'type_name': '国产名人'})
result['class'].append({'type_id': '/t/74', 'type_name': '国产OL'})
result['class'].append({'type_id': '/t/18', 'type_name': '国产剧情'})
result['class'].append({'type_id': '/t/19', 'type_name': '国产偷怕'})
result['class'].append({'type_id': '/t/76', 'type_name': '国产网曝'})
result['class'].append({'type_id': '/t/227', 'type_name': '综合传媒'})
result['class'].append({'type_id': '/t/38', 'type_name': '麻豆合集'})
result['class'].append({'type_id': '/t/109', 'type_name': '葫芦影业'})
result['class'].append({'type_id': '/t/111', 'type_name': '天美传媒'})
result['class'].append({'type_id': '/t/112', 'type_name': '果冻传媒'})
result['class'].append({'type_id': '/t/131', 'type_name': '91制片厂'})
result['class'].append({'type_id': '/t/113', 'type_name': '蜜桃传媒'})
result['class'].append({'type_id': '/t/114', 'type_name': '精东影业'})
result['class'].append({'type_id': '/t/115', 'type_name': '皇家华人'})
result['class'].append({'type_id': '/t/116', 'type_name': 'SWAG'})
result['class'].append({'type_id': '/t/120', 'type_name': '兔子先生'})
result['class'].append({'type_id': '/t/122', 'type_name': 'PsychoPornTW'})
result['class'].append({'type_id': '/t/124', 'type_name': '微啪 & 陌丽影像传媒'})
result['class'].append({'type_id': '/t/125', 'type_name': '大象传媒'})
result['class'].append({'type_id': '/t/126', 'type_name': '乌鸦传媒'})
result['class'].append({'type_id': '/t/141', 'type_name': '日本番号'})
result['class'].append({'type_id': '/t/225', 'type_name': '综合番号'})
result['class'].append({'type_id': '/t/142', 'type_name': '200GANA'})
result['class'].append({'type_id': '/t/146', 'type_name': '259LUXU'})
result['class'].append({'type_id': '/t/147', 'type_name': '261ARA'})
result['class'].append({'type_id': '/t/148', 'type_name': '277DCV'})
result['class'].append({'type_id': '/t/143', 'type_name': '300MIUM'})
result['class'].append({'type_id': '/t/149', 'type_name': '300MAAN'})
result['class'].append({'type_id': '/t/150', 'type_name': '300NTK'})
result['class'].append({'type_id': '/t/152', 'type_name': '328HMDN'})
result['class'].append({'type_id': '/t/154', 'type_name': '336KNB'})
result['class'].append({'type_id': '/t/155', 'type_name': '348NTR'})
result['class'].append({'type_id': '/t/156', 'type_name': '390JAC'})
result['class'].append({'type_id': '/t/158', 'type_name': '428SUKE'})
result['class'].append({'type_id': '/t/181', 'type_name': 'AARM'})
result['class'].append({'type_id': '/t/180', 'type_name': 'ADN'})
result['class'].append({'type_id': '/t/185', 'type_name': 'ATID'})
result['class'].append({'type_id': '/t/192', 'type_name': 'DFDM'})
result['class'].append({'type_id': '/t/194', 'type_name': 'DLDSS'})
for vod in vodss:
id = vod.find('a')['href'].rstrip("/")
name = vod.find('a').text
if not any(d['type_name'] == name for d in result['class']):
result['class'].append({'type_id': id, 'type_name': name})
return result
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
if pg == "" or pg == 1:
url = xurl + cid
else:
url = xurl + cid + '-' + str(pg)
res = requests.get(url=url, headers=headerx)
res.encoding = "utf-8"
res = res.text
doc = BeautifulSoup(res, "html.parser")
vodss = doc.find('ul', class_='row row-space8 row-m-space8')
vods = vodss.find_all('li')
for vod in vods:
name = vod.select_one('section a')['title']
id = vod.select_one('section a')['href']
remarks = vod.select_one('section a span small').text
pic = vod.select_one('section a img')['src']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remarks
}
videos.append(video)
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
did = ids[0].replace("voddetail", "v")
videos = []
result = {}
res = requests.get(url=xurl + did, headers=headerx)
res.encoding = "utf-8"
res = res.text
source_match = re.search(r'"","url":"(.*?)"', res)
if source_match:
purl = source_match.group(1).replace("\\", "")
videos.append({
"vod_id": did,
"vod_name": '',
"vod_pic": "",
"type_name": "",
"vod_year": "",
"vod_area": "",
"vod_remarks": "",
"vod_actor": "",
"vod_director": "",
"vod_content": "",
"vod_play_from": '直链播放',
"vod_play_url": purl
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
result["parse"] = 0
result["playUrl"] = ''
result["url"] = id
result["header"] = headerx
return result
def searchContent(self, key, quick):
return self.searchContentPage(key, quick, '1')
def searchContentPage(self, key, quick, page):
result = {}
header2 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'
}
res = requests.get(xurl + '/s/page/' + str(page) + '/wd/' + key, headers=header2)
res.encoding = "utf-8"
res = res.text
videos = []
doc = BeautifulSoup(res, "html.parser")
vodss = doc.find('ul', class_='row row-space8 row-m-space8')
vods = vodss.find_all('li')
for vod in vods:
name = vod.select_one('section a')['title']
id = vod.select_one('section a')['href']
remarks = vod.select_one('section a span small').text
pic = vod.select_one('section a img')['src']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remarks
}
videos.append(video)
result['list'] = videos
result['page'] = page
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def localProxy(self, params):
if params['type'] == "m3u8":
return self.proxyM3u8(params)
elif params['type'] == "media":
return self.proxyMedia(params)
elif params['type'] == "ts":
return self.proxyTs(params)
return None
+419
View File
@@ -0,0 +1,419 @@
# coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import json
import time
import urllib.parse
import re
import requests
from lxml import etree
class Spider(Spider):
def getName(self):
return "香蕉视频"
def init(self, extend=""):
self.host = "https://618013.xyz"
self.api_host = "https://h5.xxoo168.org"
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Referer': self.host
}
self.log(f"香蕉视频爬虫初始化完成,主站: {self.host}")
def html(self, content):
"""将HTML内容转换为可查询的对象"""
try:
return etree.HTML(content)
except:
self.log("HTML解析失败")
return None
def regStr(self, pattern, string, index=1):
"""正则表达式提取字符串"""
try:
match = re.search(pattern, string, re.IGNORECASE)
if match and len(match.groups()) >= index:
return match.group(index)
except:
pass
return ""
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def homeContent(self, filter):
"""获取首页内容和分类"""
result = {}
# 只保留指定的分类
classes = [
{'type_id': '618013.xyz_1', 'type_name': '全部视频'},
{'type_id': '618013.xyz_22', 'type_name': '制服诱惑'},
{'type_id': '618013.xyz_6', 'type_name': '国产视频'},
{'type_id': '618013.xyz_8', 'type_name': '清纯少女'},
{'type_id': '618013.xyz_9', 'type_name': '辣妹大奶'},
{'type_id': '618013.xyz_10', 'type_name': '女同专属'},
{'type_id': '618013.xyz_11', 'type_name': '素人出演'},
{'type_id': '618013.xyz_12', 'type_name': '角色扮演'},
{'type_id': '618013.xyz_20', 'type_name': '人妻熟女'},
{'type_id': '618013.xyz_23', 'type_name': '日韩剧情'},
{'type_id': '618013.xyz_21', 'type_name': '经典伦理'},
{'type_id': '618013.xyz_7', 'type_name': '成人动漫'},
{'type_id': '618013.xyz_14', 'type_name': '精品二区'},
{'type_id': '618013.xyz_40', 'type_name': '精品三区'},
{'type_id': '618013.xyz_53', 'type_name': '动漫中字'},
{'type_id': '618013.xyz_52', 'type_name': '日本无码'},
{'type_id': '618013.xyz_33', 'type_name': '中文字幕'},
{'type_id': '618013.xyz_44', 'type_name': '国产传媒'},
{'type_id': '618013.xyz_32', 'type_name': '国产自拍'}
]
result['class'] = classes
try:
rsp = self.fetch(self.host, headers=self.headers)
doc = self.html(rsp.text)
videos = self._get_videos(doc, limit=20)
result['list'] = videos
except Exception as e:
self.log(f"首页获取出错: {str(e)}")
result['list'] = []
return result
def homeVideoContent(self):
"""分类定义 - 兼容性方法"""
return {
'class': [
{'type_id': '618013.xyz_1', 'type_name': '全部视频'},
{'type_id': '618013.xyz_13', 'type_name': '香蕉精品'},
{'type_id': '618013.xyz_22', 'type_name': '制服诱惑'},
{'type_id': '618013.xyz_6', 'type_name': '国产视频'},
{'type_id': '618013.xyz_8', 'type_name': '清纯少女'},
{'type_id': '618013.xyz_9', 'type_name': '辣妹大奶'},
{'type_id': '618013.xyz_10', 'type_name': '女同专属'},
{'type_id': '618013.xyz_11', 'type_name': '素人出演'},
{'type_id': '618013.xyz_12', 'type_name': '角色扮演'},
{'type_id': '618013.xyz_20', 'type_name': '人妻熟女'},
{'type_id': '618013.xyz_23', 'type_name': '日韩剧情'},
{'type_id': '618013.xyz_21', 'type_name': '经典伦理'},
{'type_id': '618013.xyz_7', 'type_name': '成人动漫'},
{'type_id': '618013.xyz_14', 'type_name': '精品二区'},
{'type_id': '618013.xyz_40', 'type_name': '精品三区'},
{'type_id': '618013.xyz_53', 'type_name': '动漫中字'},
{'type_id': '618013.xyz_52', 'type_name': '日本无码'},
{'type_id': '618013.xyz_33', 'type_name': '中文字幕'},
{'type_id': '618013.xyz_44', 'type_name': '国产传媒'},
{'type_id': '618013.xyz_32', 'type_name': '国产自拍'}
]
}
def categoryContent(self, tid, pg, filter, extend):
"""分类内容"""
try:
domain, type_id = tid.split('_')
url = f"https://{domain}/index.php/vod/type/id/{type_id}.html"
if pg and pg != '1':
url = url.replace('.html', f'/page/{pg}.html')
self.log(f"访问分类URL: {url}")
rsp = self.fetch(url, headers=self.headers)
doc = self.html(rsp.text)
videos = self._get_videos(doc, limit=20)
# 获取总页数
pagecount = 1
page_elements = doc.xpath('//div[@class="mypage"]//a')
if page_elements:
try:
last_page = page_elements[-2].xpath('./qyg0.js')[0] # 获取"尾页"前一个元素
if last_page.isdigit():
pagecount = int(last_page)
except:
pass
return {
'list': videos,
'page': int(pg),
'pagecount': pagecount,
'limit': 20,
'total': pagecount * 20
}
except Exception as e:
self.log(f"分类内容获取出错: {str(e)}")
return {'list': []}
def searchContent(self, key, quick, pg="1"):
"""搜索功能"""
try:
search_url = f"{self.host}/index.php/vod/search.html?wd={urllib.parse.quote(key)}&page={pg}"
self.log(f"搜索URL: {search_url}")
rsp = self.fetch(search_url, headers=self.headers)
if not rsp or rsp.status_code != 200:
return {'list': []}
doc = self.html(rsp.text)
videos = self._get_videos(doc)
return {'list': videos}
except Exception as e:
self.log(f"搜索出错: {str(e)}")
return {'list': []}
def detailContent(self, ids):
"""详情页面"""
try:
vid = ids[0]
if '_' in vid:
domain, video_id = vid.split('_')
detail_url = f"https://{domain}/index.php/vod/detail/id/{video_id}.html"
else:
detail_url = f"{self.host}/index.php/vod/detail/id/{vid}.html"
self.log(f"访问详情URL: {detail_url}")
rsp = self.fetch(detail_url, headers=self.headers)
doc = self.html(rsp.text)
video_info = self._get_detail(doc, vid)
return {'list': [video_info]} if video_info else {'list': []}
except Exception as e:
self.log(f"详情获取出错: {str(e)}")
return {'list': []}
def playerContent(self, flag, id, vipFlags):
"""播放链接 - 直接使用API获取视频地址"""
try:
self.log(f"获取播放链接: flag={flag}, id={id}")
# 提取视频ID
if '_' in id:
_, video_id = id.split('_')
else:
video_id = id
self.log(f"视频ID: {video_id}")
# 直接调用API获取视频地址
api_url = f"{self.api_host}/api/v2/vod/reqplay/{video_id}"
self.log(f"请求API获取视频地址: {api_url}")
api_headers = self.headers.copy()
api_headers.update({
'Referer': f"{self.host}/",
'Origin': self.host,
'X-Requested-With': 'XMLHttpRequest'
})
api_response = self.fetch(api_url, headers=api_headers)
if api_response and api_response.status_code == 200:
data = api_response.json()
self.log(f"API响应: {data}")
if data.get('retcode') == 3:
video_url = data.get('data', {}).get('httpurl_preview', '')
else:
video_url = data.get('data', {}).get('httpurl', '')
if video_url:
# 移除可能的参数
video_url = video_url.replace('?300', '')
self.log(f"从API获取到视频地址: {video_url}")
return {'parse': 0, 'playUrl': '', 'url': video_url}
else:
self.log("API响应中没有找到视频地址")
else:
self.log(f"API请求失败,状态码: {api_response.status_code if api_response else '无响应'}")
# 如果API请求失败,回退到原来的方法
if '_' in id:
domain, play_id = id.split('_')
play_url = f"https://{domain}/html/kkyd.html?m={play_id}"
else:
play_url = f"{self.host}/html/kkyd.html?m={id}"
self.log(f"回退到播放页面: {play_url}")
return {'parse': 1, 'playUrl': '', 'url': play_url}
except Exception as e:
self.log(f"播放链接获取出错: {str(e)}")
# 出错时也返回播放页面URL
if '_' in id:
domain, play_id = id.split('_')
play_url = f"https://{domain}/html/kkyd.html?m={play_id}"
else:
play_url = f"{self.host}/html/kkyd.html?m={id}"
return {'parse': 1, 'playUrl': '', 'url': play_url}
# ========== 辅助方法 ==========
def _get_videos(self, doc, limit=None):
"""获取影片列表 - 根据实际网站结构"""
try:
videos = []
elements = doc.xpath('//a[@class="vodbox"]')
self.log(f"找到 {len(elements)} 个vodbox元素")
for elem in elements:
video = self._extract_video(elem)
if video:
videos.append(video)
return videos[:limit] if limit and videos else videos
except Exception as e:
self.log(f"获取影片列表出错: {str(e)}")
return []
def _extract_video(self, element):
"""提取影片信息 - 修复标题乱码问题,正确读取km-script标签文本"""
try:
# 1. 提取影片链接(获取vod_id的来源)
link = element.xpath('./qyg1.js')[0] # 获取a标签的href属性
if link.startswith('/'):
link = self.host + link # 补全相对路径为完整URL
# 2. 提取vod_id(从URL的m参数获取,而非hash,更准确)
vod_id = self.regStr(r'm=(\d+)', link) # 匹配 ?m=123 中的数字
if not vod_id:
vod_id = str(hash(link) % 1000000) # 兜底:hash生成唯一ID
# 3. 提取标题(关键修复:读取<p class="km-script">内的文本并解密)
title_elem = element.xpath('./qyg2.js') # 定位km-script标签
if not title_elem:
# 尝试其他可能的标题选择器
title_elem = element.xpath('.//p[contains(@class, "script")]/text()')
if not title_elem:
title_elem = element.xpath('./qyg3.js')
if not title_elem:
title_elem = element.xpath('./qyg4.js')
if not title_elem:
title_elem = element.xpath('./qyg5.js')
if not title_elem:
self.log(f"未找到标题元素,跳过该视频")
return None
title_encrypted = title_elem[0].strip() # 获取加密的标题文本
# 4. 解密标题 - 使用网站的解密算法
title = self._decrypt_title(title_encrypted)
# 5. 提取封面图(逻辑不变,兼容data-original和src
pic_elem = element.xpath('./qyg6.js') # 优先懒加载地址
if not pic_elem:
pic_elem = element.xpath('./qyg7.js') # 兜底:直接src地址
pic = pic_elem[0] if pic_elem else ''
# 6. 补全图片URL(处理相对路径或无协议的情况)
if pic:
if pic.startswith('//'):
pic = 'https:' + pic # 补全https协议
elif pic.startswith('/'):
pic = self.host + pic # 补全主域名
# 7. 返回正确的视频信息
return {
'vod_id': f"618013.xyz_{vod_id}",
'vod_name': title, # 此时title已为正确文本
'vod_pic': pic,
'vod_remarks': '',
'vod_year': ''
}
except Exception as e:
self.log(f"提取影片信息出错: {str(e)}")
return None
def _decrypt_title(self, encrypted_text):
"""解密标题 - 使用网站的解密算法"""
try:
# 网站使用的解密算法:每个字符与128进行异或操作
decrypted_chars = []
for char in encrypted_text:
# 将字符转换为Unicode码点
code_point = ord(char)
# 与128进行异或操作
decrypted_code = code_point ^ 128
# 转换回字符
decrypted_char = chr(decrypted_code)
decrypted_chars.append(decrypted_char)
# 拼接解密后的字符
decrypted_text = ''.join(decrypted_chars)
return decrypted_text
except Exception as e:
self.log(f"标题解密失败: {str(e)}")
return encrypted_text # 如果解密失败,返回原文本
def _get_detail(self, doc, vid):
"""获取详情信息 (优化版) - 修复播放源提取问题"""
try:
title = self._get_text(doc, ['//h1/text()', '//title/text()'])
pic = self._get_text(doc, ['//div[@class="dyimg"]//img/@src', '//img[@class="poster"]/@src'])
if pic and pic.startswith('/'):
pic = self.host + pic
desc = self._get_text(doc, ['//div[@class="yp_context"]/text()', '//div[@class="introduction"]//text()'])
actor = self._get_text(doc, ['//span[contains(text(),"主演")]/following-sibling::*/text()'])
director = self._get_text(doc, ['//span[contains(text(),"导演")]/following-sibling::*/text()'])
play_from = []
play_urls = []
# 尝试查找播放源
play_links = doc.xpath('//a[contains(@href, "m=")]')
if play_links:
episodes = []
for link in play_links:
ep_title = link.xpath('./qyg0.js')
ep_href = link.xpath('./qyg1.js')[0]
if ep_title:
ep_title = ep_title[0].strip()
play_id = self.regStr(r'm=(\d+)', ep_href)
if play_id:
episodes.append(f"{ep_title}${play_id}")
if episodes:
play_from.append("默认播放源")
play_urls.append('#'.join(episodes))
if not play_from:
self.log("未找到播放源元素,无法定位播放源列表")
# 即使没有播放源,也返回基本信息
return {
'vod_id': vid,
'vod_name': title,
'vod_pic': pic,
'type_name': '',
'vod_year': '',
'vod_area': '',
'vod_remarks': '',
'vod_actor': actor,
'vod_director': director,
'vod_content': desc,
'vod_play_from': '默认播放源',
'vod_play_url': f"第1集${vid}"
}
return {
'vod_id': vid,
'vod_name': title,
'vod_pic': pic,
'type_name': '',
'vod_year': '',
'vod_area': '',
'vod_remarks': '',
'vod_actor': actor,
'vod_director': director,
'vod_content': desc,
'vod_play_from': '$$$'.join(play_from),
'vod_play_url': '$$$'.join(play_urls)
}
except Exception as e:
self.log(f"获取详情出错: {str(e)}")
return None
def _get_text(self, doc, selectors):
"""通用文本提取"""
for selector in selectors:
texts = doc.xpath(selector)
for text in texts:
if text and text.strip():
return text.strip()
return ''
+669
View File
@@ -0,0 +1,669 @@
# coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import json
import time
import urllib.parse
import re
import requests
from lxml import etree
from urllib.parse import urljoin
class Spider(Spider):
def getName(self):
return "苹果视频"
def init(self, extend=""):
self.host = "https://618041.xyz"
self.api_host = "https://h5.xxoo168.org"
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Referer': self.host
}
# 定义特殊分区ID列表,包含所有需要特殊处理的分类
self.special_categories = ['13', '14', '33', '53', '32', '52', '9']
self.log(f"苹果视频爬虫初始化完成,主站: {self.host}")
def html(self, content):
"""将HTML内容转换为可查询的对象"""
try:
return etree.HTML(content)
except:
self.log("HTML解析失败")
return None
def regStr(self, pattern, string, index=1):
"""正则表达式提取字符串"""
try:
match = re.search(pattern, string, re.IGNORECASE)
if match and len(match.groups()) >= index:
return match.group(index)
except:
pass
return ""
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def homeContent(self, filter):
"""获取首页内容和分类"""
result = {}
# 只保留指定的分类
classes = [
{'type_id': '618041.xyz_1', 'type_name': '全部视频'},
{'type_id': '618041.xyz_13', 'type_name': '香蕉精品'},
{'type_id': '618041.xyz_22', 'type_name': '制服诱惑'},
{'type_id': '618041.xyz_6', 'type_name': '国产视频'},
{'type_id': '618041.xyz_8', 'type_name': '清纯少女'},
{'type_id': '618041.xyz_9', 'type_name': '辣妹大奶'},
{'type_id': '618041.xyz_10', 'type_name': '女同专属'},
{'type_id': '618041.xyz_11', 'type_name': '素人出演'},
{'type_id': '618041.xyz_12', 'type_name': '角色扮演'},
{'type_id': '618041.xyz_20', 'type_name': '人妻熟女'},
{'type_id': '618041.xyz_23', 'type_name': '日韩剧情'},
{'type_id': '618041.xyz_21', 'type_name': '经典伦理'},
{'type_id': '618041.xyz_7', 'type_name': '成人动漫'},
{'type_id': '618041.xyz_14', 'type_name': '精品二区'},
{'type_id': '618041.xyz_53', 'type_name': '动漫中字'},
{'type_id': '618041.xyz_52', 'type_name': '日本无码'},
{'type_id': '618041.xyz_33', 'type_name': '中文字幕'},
{'type_id': '618041.xyz_32', 'type_name': '国产自拍'}
]
result['class'] = classes
try:
rsp = self.fetch(self.host, headers=self.headers)
doc = self.html(rsp.text)
videos = self._get_videos(doc, limit=20)
result['list'] = videos
except Exception as e:
self.log(f"首页获取出错: {str(e)}")
result['list'] = []
return result
def homeVideoContent(self):
"""分类定义 - 兼容性方法"""
return {
'class': [
{'type_id': '618041.xyz_1', 'type_name': '全部视频'},
{'type_id': '618041.xyz_13', 'type_name': '香蕉精品'},
{'type_id': '618041.xyz_22', 'type_name': '制服诱惑'},
{'type_id': '618041.xyz_6', 'type_name': '国产视频'},
{'type_id': '618041.xyz_8', 'type_name': '清纯少女'},
{'type_id': '618041.xyz_9', 'type_name': '辣妹大奶'},
{'type_id': '618041.xyz_10', 'type_name': '女同专属'},
{'type_id': '618041.xyz_11', 'type_name': '素人出演'},
{'type_id': '618041.xyz_12', 'type_name': '角色扮演'},
{'type_id': '618041.xyz_20', 'type_name': '人妻熟女'},
{'type_id': '618041.xyz_23', 'type_name': '日韩剧情'},
{'type_id': '618041.xyz_21', 'type_name': '经典伦理'},
{'type_id': '618041.xyz_7', 'type_name': '成人动漫'},
{'type_id': '618041.xyz_14', 'type_name': '精品二区'},
{'type_id': '618041.xyz_53', 'type_name': '动漫中字'},
{'type_id': '618041.xyz_52', 'type_name': '日本无码'},
{'type_id': '618041.xyz_33', 'type_name': '中文字幕'},
{'type_id': '618041.xyz_32', 'type_name': '国产自拍'}
]
}
def categoryContent(self, tid, pg, filter, extend):
"""分类内容 - 修改为使用固定页数设置"""
try:
domain, type_id = tid.split('_')
url = f"https://{domain}/index.php/vod/type/id/{type_id}.html"
if pg and pg != '1':
url = url.replace('.html', f'/page/{pg}.html')
self.log(f"访问分类URL: {url}")
rsp = self.fetch(url, headers=self.headers)
doc = self.html(rsp.text)
# 在这里将 type_id 传递给 _get_videos 方法
videos = self._get_videos(doc, category_id=type_id, limit=20)
# 使用固定页数设置,而不是尝试从页面解析
pagecount = 999
total = 19980
return {
'list': videos,
'page': int(pg),
'pagecount': pagecount,
'limit': 20,
'total': total
}
except Exception as e:
self.log(f"分类内容获取出错: {str(e)}")
return {'list': []}
def searchContent(self, key, quick, pg="1"):
"""搜索功能 - 完全修复版"""
try:
# 构造搜索URL
search_url = f"{self.host}/index.php/vod/type/id/1/wd/{urllib.parse.quote(key)}/page/{pg}.html"
self.log(f"搜索URL: {search_url}")
# 发送请求
rsp = self.fetch(search_url, headers=self.headers)
if not rsp or rsp.status_code != 200:
self.log("搜索请求失败")
return {'list': []}
# 解析HTML
doc = self.html(rsp.text)
if not doc:
self.log("搜索页面解析失败")
return {'list': []}
# 提取搜索结果
videos = self._get_videos(doc, limit=20)
# 尝试从页面提取分页信息
pagecount = 5 # 默认值
total = 100 # 默认值
# 尝试从分页元素中提取真实的分页信息
page_elements = doc.xpath('//div[@class="mypage"]/a')
if page_elements and len(page_elements) > 0:
try:
# 查找尾页链接
last_page = None
for elem in page_elements:
href = elem.xpath('./qyg10.js')[0]
if '尾页' in elem.text or 'page/' in href:
last_page = href
break
if last_page:
# 从尾页URL中提取页码
page_match = re.search(r'/page/(\d+)\.html', last_page)
if page_match:
pagecount = int(page_match.group(1))
total = pagecount * 20 # 估算总数
except:
pass
return {
'list': videos,
'page': int(pg),
'pagecount': pagecount,
'limit': 20,
'total': total
}
except Exception as e:
self.log(f"搜索出错: {str(e)}")
return {'list': []}
def detailContent(self, ids):
"""详情页面 - 特别处理特殊分区的链接"""
try:
vid = ids[0]
# 检查是否是特殊分区的链接
if vid.startswith('special_'):
# 解析特殊分区ID格式: special_{category_id}_{video_id}_{encoded_url}
parts = vid.split('_')
if len(parts) >= 4:
category_id = parts[1]
video_id = parts[2]
encoded_url = '_'.join(parts[3:])
play_url = urllib.parse.unquote(encoded_url)
self.log(f"特殊分区视频,直接使用链接: {play_url}")
# 从播放链接中提取视频URL
parsed_url = urllib.parse.urlparse(play_url)
query_params = urllib.parse.parse_qs(parsed_url.query)
video_url = query_params.get('v', [''])[0]
pic_url = query_params.get('b', [''])[0]
title_encrypted = query_params.get('m', [''])[0]
# 解码标题
title = self._decrypt_title(title_encrypted)
return {
'list': [{
'vod_id': vid,
'vod_name': title,
'vod_pic': pic_url,
'vod_remarks': '',
'vod_year': '',
'vod_play_from': '直接播放',
'vod_play_url': f"第1集${play_url}"
}]
}
# 常规处理
if '_' in vid and len(vid.split('_')) > 2:
domain, category_id, video_id = vid.split('_')
else:
domain, video_id = vid.split('_')
detail_url = f"https://{domain}/index.php/vod/detail/id/{video_id}.html"
self.log(f"访问详情URL: {detail_url}")
rsp = self.fetch(detail_url, headers=self.headers)
doc = self.html(rsp.text)
video_info = self._get_detail(doc, rsp.text, vid)
return {'list': [video_info]} if video_info else {'list': []}
except Exception as e:
self.log(f"详情获取出错: {str(e)}")
return {'list': []}
def playerContent(self, flag, id, vipFlags):
"""播放链接 - 特别处理特殊分区的链接"""
try:
self.log(f"获取播放链接: flag={flag}, id={id}")
# 检查是否是特殊分区的链接
if id.startswith('special_'):
# 解析特殊分区ID格式: special_{category_id}_{video_id}_{encoded_url}
parts = id.split('_')
if len(parts) >= 4:
category_id = parts[1]
video_id = parts[2]
encoded_url = '_'.join(parts[3:])
play_url = urllib.parse.unquote(encoded_url)
self.log(f"特殊分区视频,直接使用链接: {play_url}")
# 从播放链接中提取视频URL
parsed_url = urllib.parse.urlparse(play_url)
query_params = urllib.parse.parse_qs(parsed_url.query)
video_url = query_params.get('v', [''])[0]
if video_url:
# 确保URL是完整的
if video_url.startswith('//'):
video_url = 'https:' + video_url
elif not video_url.startswith('http'):
video_url = urljoin(self.host, video_url)
self.log(f"从特殊链接中提取到视频地址: {video_url}")
return {'parse': 0, 'playUrl': '', 'url': video_url}
# 检查传入的ID是否为完整URL,如果是则直接解析
if id.startswith('http'):
self.log("ID 是一个完整URL,直接解析参数")
parsed_url = urllib.parse.urlparse(id)
query_params = urllib.parse.parse_qs(parsed_url.query)
# 尝试获取视频参数
video_url = query_params.get('v', [''])[0]
if not video_url:
# 尝试其他可能的参数名
for key in query_params:
if key in ['url', 'src', 'file']:
video_url = query_params[key][0]
break
if video_url:
# 解码可能的URL编码
video_url = urllib.parse.unquote(video_url)
# 确保URL是完整的
if video_url.startswith('//'):
video_url = 'https:' + video_url
elif not video_url.startswith('http'):
# 尝试添加基本域名
video_url = urljoin(self.host, video_url)
self.log(f"从 URL 参数中提取到视频地址: {video_url}")
return {'parse': 0, 'playUrl': '', 'url': video_url}
else:
self.log("URL 中没有找到视频参数,尝试从页面提取")
# 请求页面并提取视频链接
rsp = self.fetch(id, headers=self.headers)
if rsp and rsp.status_code == 200:
video_url = self._extract_direct_video_url(rsp.text)
if video_url:
self.log(f"从页面提取到视频地址: {video_url}")
return {'parse': 0, 'playUrl': '', 'url': video_url}
self.log("无法从页面提取视频链接,返回原始URL")
return {'parse': 1, 'playUrl': '', 'url': id}
# 从新的 id 格式中提取视频ID和分类ID
if id.count('_') >= 2:
parts = id.split('_')
video_id = parts[-1]
category_id = parts[1]
else:
video_id = id.split('_')[-1]
category_id = ''
self.log(f"视频ID: {video_id}, 分类ID: {category_id}")
# 对于特殊分类,使用直接解析播放页面的方式
if category_id in self.special_categories:
self.log("特殊分类,尝试从详情页提取直接播放链接")
# 构造播放页面URL
play_page_url = f"{self.host}/index.php/vod/play/id/{video_id}.html"
# 请求播放页面
rsp = self.fetch(play_page_url, headers=self.headers)
if rsp and rsp.status_code == 200:
# 从页面提取视频链接
video_url = self._extract_direct_video_url(rsp.text)
if video_url:
self.log(f"从播放页面提取到视频地址: {video_url}")
return {'parse': 0, 'playUrl': '', 'url': video_url}
# 如果提取失败,回退到API方式
self.log("从播放页面提取失败,尝试API方式")
return self._get_video_by_api(id, video_id)
else:
# 其他分类使用API方式
self.log("使用API方式获取视频地址")
return self._get_video_by_api(id, video_id)
except Exception as e:
self.log(f"播放链接获取出错: {str(e)}")
if '_' in id:
domain, play_id = id.split('_')
play_url = f"https://{domain}/html/kkyd.html?m={play_id}"
else:
play_url = f"{self.host}/html/kkyd.html?m={id}"
return {'parse': 1, 'playUrl': '', 'url': play_url}
def _get_video_by_api(self, id, video_id):
"""通过API获取视频地址"""
try:
api_url = f"{self.api_host}/api/v2/vod/reqplay/{video_id}"
self.log(f"请求API获取视频地址: {api_url}")
api_headers = self.headers.copy()
api_headers.update({
'Referer': f"{self.host}/",
'Origin': self.host,
'X-Requested-With': 'XMLHttpRequest'
})
api_response = self.fetch(api_url, headers=api_headers)
if api_response and api_response.status_code == 200:
data = api_response.json()
self.log(f"API响应: {data}")
if data.get('retcode') == 3:
video_url = data.get('data', {}).get('httpurl_preview', '')
else:
video_url = data.get('data', {}).get('httpurl', '')
if video_url:
video_url = video_url.replace('?300', '')
self.log(f"从API获取到视频地址: {video_url}")
return {'parse': 0, 'playUrl': '', 'url': video_url}
else:
self.log("API响应中没有找到视频地址")
else:
self.log(f"API请求失败,状态码: {api_response.status_code if api_response else '无响应'}")
if '_' in id:
domain, play_id = id.split('_')
play_url = f"https://{domain}/html/kkyd.html?m={play_id}"
else:
play_url = f"{self.host}/html/kkyd.html?m={id}"
self.log(f"API请求失败,回退到播放页面: {play_url}")
return {'parse': 1, 'playUrl': '', 'url': play_url}
except Exception as e:
self.log(f"API方式获取视频出错: {str(e)}")
if '_' in id:
domain, play_id = id.split('_')
play_url = f"https://{domain}/html/kkyd.html?m={play_id}"
else:
play_url = f"{self.host}/html/kkyd.html?m={id}"
return {'parse': 1, 'playUrl': '', 'url': play_url}
def _extract_direct_video_url(self, html_content):
"""从HTML内容中提取直接播放链接 (优化版)"""
try:
# 首先尝试提取明显的视频链接
patterns = [
r'v=([^&]+\.(?:m3u8|mp4))',
r'"url"\s*:\s*["\']([^"\']+\.(?:mp4|m3u8))["\']',
r'src\s*=\s*["\']([^"\']+\.(?:mp4|m3u8))["\']',
r'http[^\s<>"\'?]+\.(?:mp4|m3u8)'
]
for pattern in patterns:
matches = re.findall(pattern, html_content, re.IGNORECASE)
for match in matches:
if isinstance(match, tuple):
match = match[0]
extracted_url = match.replace('\\', '')
extracted_url = urllib.parse.unquote(extracted_url)
if extracted_url.startswith('//'):
extracted_url = 'https:' + extracted_url
elif extracted_url.startswith('http'):
return extracted_url
return None
except Exception as e:
self.log(f"提取直接播放URL出错: {str(e)}")
return None
def _get_videos(self, doc, category_id=None, limit=None):
"""获取影片列表 - 根据实际网站结构"""
try:
videos = []
elements = doc.xpath('//a[@class="vodbox"]')
self.log(f"找到 {len(elements)} 个vodbox元素")
for elem in elements:
video = self._extract_video(elem, category_id)
if video:
videos.append(video)
return videos[:limit] if limit and videos else videos
except Exception as e:
self.log(f"获取影片列表出错: {str(e)}")
return []
def _extract_video(self, element, category_id=None):
"""提取影片信息 - 特别处理特殊分区的链接"""
try:
link = element.xpath('./qyg10.js')[0]
if link.startswith('/'):
link = self.host + link
# 检查是否是特殊分区的链接
is_special_link = 'ar-kk.html' in link or 'ar.html' in link
# 对于特殊分区,直接使用链接本身作为ID
if is_special_link and category_id in self.special_categories:
# 提取链接中的参数
parsed_url = urllib.parse.urlparse(link)
query_params = urllib.parse.parse_qs(parsed_url.query)
# 获取视频ID(从v参数中提取)
video_url = query_params.get('v', [''])[0]
if video_url:
# 从视频URL中提取ID
video_id_match = re.search(r'/([a-f0-9-]+)/video\.m3u8', video_url)
if video_id_match:
video_id = video_id_match.group(1)
else:
# 如果没有匹配到,使用哈希值
video_id = str(hash(link) % 1000000)
else:
video_id = str(hash(link) % 1000000)
# 对于特殊分区,保留完整的链接作为vod_id的一部分
final_vod_id = f"special_{category_id}_{video_id}_{urllib.parse.quote(link)}"
else:
# 常规处理
vod_id = self.regStr(r'm=(\d+)', link)
if not vod_id:
vod_id = str(hash(link) % 1000000)
final_vod_id = f"618041.xyz_{vod_id}"
if category_id:
final_vod_id = f"618041.xyz_{category_id}_{vod_id}"
# 提取标题
title_elem = element.xpath('./qyg12.js')
if not title_elem:
title_elem = element.xpath('.//p[contains(@class, "script")]/text()')
if not title_elem:
title_elem = element.xpath('./qyg13.js')
if not title_elem:
title_elem = element.xpath('./qyg14.js')
if not title_elem:
title_elem = element.xpath('./qyg15.js')
if not title_elem:
self.log(f"未找到标题元素,跳过该视频")
return None
title_encrypted = title_elem[0].strip()
title = self._decrypt_title(title_encrypted)
# 提取图片
pic_elem = element.xpath('./qyg16.js')
if not pic_elem:
pic_elem = element.xpath('./qyg17.js')
pic = pic_elem[0] if pic_elem else ''
if pic:
if pic.startswith('//'):
pic = 'https:' + pic
elif pic.startswith('/'):
pic = self.host + pic
return {
'vod_id': final_vod_id,
'vod_name': title,
'vod_pic': pic,
'vod_remarks': '',
'vod_year': ''
}
except Exception as e:
self.log(f"提取影片信息出错: {str(e)}")
return None
def _decrypt_title(self, encrypted_text):
"""解密标题 - 使用网站的解密算法"""
try:
decrypted_chars = []
for char in encrypted_text:
code_point = ord(char)
decrypted_code = code_point ^ 128
decrypted_char = chr(decrypted_code)
decrypted_chars.append(decrypted_char)
decrypted_text = ''.join(decrypted_chars)
return decrypted_text
except Exception as e:
self.log(f"标题解密失败: {str(e)}")
return encrypted_text
def _get_detail(self, doc, html_content, vid):
"""获取详情信息 (优化版) - 修复播放源提取问题"""
try:
title = self._get_text(doc, ['//h1/text()', '//title/text()'])
pic = self._get_text(doc, ['//div[contains(@class,"dyimg")]//img/@src', '//img[contains(@class,"poster")]/@src'])
if pic and pic.startswith('/'):
pic = self.host + pic
desc = self._get_text(doc, ['//div[contains(@class,"yp_context")]/text()', '//div[contains(@class,"introduction")]//text()'])
actor = self._get_text(doc, ['//span[contains(text(),"主演")]/following-sibling::*/text()'])
director = self._get_text(doc, ['//span[contains(text(),"导演")]/following-sibling::*/text()'])
play_from = []
play_urls = []
# 使用更灵活的正则匹配来查找播放链接
player_link_patterns = [
re.compile(r'href="(.*?ar\.html.*?)"'),
re.compile(r'href="(.*?kkyd\.html.*?)"'),
re.compile(r'href="(.*?ar-kk\.html.*?)"')
]
player_links = []
for pattern in player_link_patterns:
matches = pattern.findall(html_content)
player_links.extend(matches)
if player_links:
episodes = []
for link in player_links:
full_url = urljoin(self.host, link)
episodes.append(f"第1集${full_url}")
if episodes:
play_from.append("默认播放源")
play_urls.append('#'.join(episodes))
if not play_from:
self.log("未找到播放源元素,无法定位播放源列表")
return {
'vod_id': vid,
'vod_name': title,
'vod_pic': pic,
'type_name': '',
'vod_year': '',
'vod_area': '',
'vod_remarks': '',
'vod_actor': actor,
'vod_director': director,
'vod_content': desc,
'vod_play_from': '默认播放源',
'vod_play_url': f"第1集${vid}"
}
return {
'vod_id': vid,
'vod_name': title,
'vod_pic': pic,
'type_name': '',
'vod_year': '',
'vod_area': '',
'vod_remarks': '',
'vod_actor': actor,
'vod_director': director,
'vod_content': desc,
'vod_play_from': '$$$'.join(play_from),
'vod_play_url': '$$$'.join(play_urls)
}
except Exception as e:
self.log(f"获取详情出错: {str(e)}")
return None
def _get_text(self, doc, selectors):
"""通用文本提取"""
for selector in selectors:
try:
texts = doc.xpath(selector)
for text in texts:
if text and text.strip():
return text.strip()
except:
continue
return ''
def log(self, message):
"""日志输出"""
print(f"[苹果视频] {message}")
def fetch(self, url, headers=None, method='GET', data=None, timeout=10):
"""网络请求"""
try:
if headers is None:
headers = self.headers
if method == 'GET':
response = requests.get(url, headers=headers, timeout=timeout, verify=False)
else:
response = requests.post(url, headers=headers, data=data, timeout=timeout, verify=False)
return response
except Exception as e:
self.log(f"网络请求失败: {url}, 错误: {str(e)}")
return None
# 注册爬虫
if __name__ == '__main__':
from base.spider import Spider as BaseSpider
BaseSpider.register(Spider())
+186
View File
@@ -0,0 +1,186 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import string
import sys
import time
from base64 import b64decode
from Crypto.Cipher import AES
from Crypto.Hash import MD5
from Crypto.Util.Padding import unpad
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.did = self.getdid()
self.token,self.phost,self.host = self.gettoken()
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
hs = ['fhoumpjjih', 'dyfcbkggxn', 'rggwiyhqtg', 'bpbbmplfxc']
def homeContent(self, filter):
data = self.fetch(f'{self.host}/api/video/queryClassifyList?mark=4', headers=self.headers()).json()['encData']
data1 = self.aes(data)
result = {}
classes = []
for k in data1['data']:
classes.append({'type_name': k['classifyTitle'], 'type_id': k['classifyId']})
result['class'] = classes
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
path=f'/api/short/video/getShortVideos?classifyId={tid}&videoMark=4&page={pg}&pageSize=20'
result = {}
videos = []
data=self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData']
vdata=self.aes(data)
for k in vdata['data']:
videos.append({"vod_id": k['videoId'], 'vod_name': k.get('title'), 'vod_pic': self.getProxyUrl() + '&url=' + k['coverImg'],
'vod_remarks': self.dtim(k.get('playTime')),'style': {"type": "rect", "ratio": 1.33}})
result["list"] = videos
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
path = f'/api/video/getVideoById?videoId={ids[0]}'
data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData']
v = self.aes(data)
d=f'{v["title"]}$auth_key={v["authKey"]}&path={v["videoUrl"]}'
vod = {'vod_name': v["title"], 'type_name': ''.join(v.get('tagTitles',[])),'vod_play_from': v.get('nickName') or "小红书官方", 'vod_play_url': d}
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg='1'):
pass
def playerContent(self, flag, id, vipFlags):
h=self.headers()
h['Authorization'] = h.pop('aut')
del h['deviceid']
result = {"parse": 0, "url": f"{self.host}/api/m3u8/decode/authPath?{id}", "header": h}
return result
def localProxy(self, param):
return self.action(param)
def md5(self, text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()
def aes(self, word):
key = b64decode("SmhiR2NpT2lKSVV6STFOaQ==")
iv = key
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher.decrypt(b64decode(word)), AES.block_size)
return json.loads(decrypted.decode('utf-8'))
def dtim(self, seconds):
try:
seconds = int(seconds)
hours = seconds // 3600
remaining_seconds = seconds % 3600
minutes = remaining_seconds // 60
remaining_seconds = remaining_seconds % 60
formatted_minutes = str(minutes).zfill(2)
formatted_seconds = str(remaining_seconds).zfill(2)
if hours > 0:
formatted_hours = str(hours).zfill(2)
return f"{formatted_hours}:{formatted_minutes}:{formatted_seconds}"
else:
return f"{formatted_minutes}:{formatted_seconds}"
except:
return ''
def getdid(self):
did = self.getCache('did')
if not did:
t = str(int(time.time()))
did = self.md5(t)
self.setCache('did', did)
return did
def getsign(self):
t=str(int(time.time() * 1000))
return self.md5(t[3:8]),t
def gettoken(self, i=0, max_attempts=10):
if i >= len(self.hs) or i >= max_attempts:
return ''
current_domain = f"https://{''.join(random.choices(string.ascii_lowercase + string.digits, k=random.randint(5, 10)))}.{self.hs[i]}.work"
try:
sign,t=self.getsign()
url = f'{current_domain}/api/user/traveler'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/xhs/ver=1.2.6',
'deviceid': self.did, 't': t, 's': sign, }
data = {'deviceId': self.did, 'tt': 'U', 'code': '', 'chCode': 'dafe13'}
data1 = self.post(url, json=data, headers=headers)
data1.raise_for_status()
data2 = data1.json()['data']
return data2['token'], data2['imgDomain'],current_domain
except:
return self.gettoken(i+1, max_attempts)
def headers(self):
sign,t=self.getsign()
henda = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/xhs/ver=1.2.6',
'deviceid': self.did, 't': t, 's': sign, 'aut': self.token}
return henda
def action(self, param):
headers = {
'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}
data = self.fetch(f'{self.phost}{param["url"]}', headers=headers)
type=data.headers.get('Content-Type').split(';')[0]
base64_data = self.img(data.content, 100, '2020-zq3-888')
return [200, type, base64_data]
def img(self, data: bytes, length: int, key: str):
GIF = b'\x47\x49\x46'
JPG = b'\xFF\xD8\xFF'
PNG = b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A'
def is_dont_need_decode_for_gif(data):
return len(data) > 2 and data[:3] == GIF
def is_dont_need_decode_for_jpg(data):
return len(data) > 7 and data[:3] == JPG
def is_dont_need_decode_for_png(data):
return len(data) > 7 and data[1:8] == PNG[1:8]
if is_dont_need_decode_for_png(data):
return data
elif is_dont_need_decode_for_gif(data):
return data
elif is_dont_need_decode_for_jpg(data):
return data
else:
key_bytes = key.encode('utf-8')
result = bytearray(data)
for i in range(length):
result[i] ^= key_bytes[i % len(key_bytes)]
return bytes(result)
+246
View File
@@ -0,0 +1,246 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import string
import sys
import time
from base64 import b64decode
from urllib.parse import quote
from Crypto.Cipher import AES
from Crypto.Hash import MD5
from Crypto.Util.Padding import unpad
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.did = self.getdid()
self.token,self.phost,self.host = self.gettoken()
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
hs=['wcyfhknomg','pdcqllfomw','alxhzjvean','bqeaaxzplt','hfbtpixjso']
ua='Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/twitter/ver=1.4.4'
def homeContent(self, filter):
data = self.fetch(f'{self.host}/api/video/classifyList', headers=self.headers()).json()['encData']
data1 = self.aes(data)
result = {'filters': {"1": [{"key": "fl", "name": "分类",
"value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}], "2": [{"key": "fl", "name": "分类",
"value": [
{"n": "最近更新", "v": "1"},
{"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}],
"3": [{"key": "fl", "name": "分类",
"value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}], "4": [{"key": "fl", "name": "分类",
"value": [
{"n": "最近更新", "v": "1"},
{"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}],
"5": [{"key": "fl", "name": "分类",
"value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}], "6": [{"key": "fl", "name": "分类",
"value": [
{"n": "最近更新", "v": "1"},
{"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}],
"7": [{"key": "fl", "name": "分类",
"value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"},
{"n": "好评榜", "v": "3"}]}], "jx": [{"key": "type", "name": "精选",
"value": [{"n": "日榜", "v": "1"},
{"n": "周榜", "v": "2"},
{"n": "月榜", "v": "3"},
{"n": "总榜",
"v": "4"}]}]}}
classes = [{'type_name': "精选", 'type_id': "jx"}]
for k in data1['data']:
classes.append({'type_name': k['classifyTitle'], 'type_id': k['classifyId']})
result['class'] = classes
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
path = f'/api/video/queryVideoByClassifyId?pageSize=20&page={pg}&classifyId={tid}&sortType={extend.get("fl", "1")}'
if 'click' in tid:
path = f'/api/video/queryPersonVideoByType?pageSize=20&page={pg}&userId={tid.replace("click", "")}'
if tid == 'jx':
path = f'/api/video/getRankVideos?pageSize=20&page={pg}&type={extend.get("type", "1")}'
data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData']
data1 = self.aes(data)['data']
result = {}
videos = []
for k in data1:
id = f'{k.get("videoId")}?{k.get("userId")}?{k.get("nickName")}'
if 'click' in tid:
id = id + 'click'
videos.append({"vod_id": id, 'vod_name': k.get('title'), 'vod_pic': self.getProxyUrl() + f"&url={k.get('coverImg')[0]}",
'vod_remarks': self.dtim(k.get('playTime')),'style': {"type": "rect", "ratio": 1.33}})
result["list"] = videos
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
vid = ids[0].replace('click', '').split('?')
path = f'/api/video/can/watch?videoId={vid[0]}'
data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData']
data1 = self.aes(data)['playPath']
clj = '[a=cr:' + json.dumps({'id': vid[1] + 'click', 'name': vid[2]}) + '/]' + vid[2] + '[/a]'
if 'click' in ids[0]:
clj = vid[2]
vod = {'vod_director': clj, 'vod_play_from': "推特", 'vod_play_url': vid[2] + "$" + data1}
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg='1'):
path = f'/api/search/keyWord?pageSize=20&page={pg}&searchWord={quote(key)}&searchType=1'
data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData']
data1 = self.aes(data)['videoList']
result = {}
videos = []
for k in data1:
id = f'{k.get("videoId")}?{k.get("userId")}?{k.get("nickName")}'
videos.append({"vod_id": id, 'vod_name': k.get('title'), 'vod_pic': self.getProxyUrl() + f"&url={k.get('coverImg')[0]}",
'vod_remarks': self.dtim(k.get('playTime')), 'style': {"type": "rect", "ratio": 1.33}})
result["list"] = videos
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def playerContent(self, flag, id, vipFlags):
return {"parse": 0, "url": id, "header": self.headers()}
def localProxy(self, param):
return self.imgs(param)
def getsign(self):
t = str(int(time.time() * 1000))
sign = self.md5(t)
return sign, t
def headers(self):
sign, t = self.getsign()
return {'User-Agent': self.ua,'deviceid': self.did, 't': t, 's': sign, 'aut': self.token}
def aes(self, word):
key = b64decode("SmhiR2NpT2lKSVV6STFOaQ==")
iv = key
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher.decrypt(b64decode(word)), AES.block_size)
return json.loads(decrypted.decode('utf-8'))
def dtim(self, seconds):
try:
seconds = int(seconds)
hours = seconds // 3600
remaining_seconds = seconds % 3600
minutes = remaining_seconds // 60
remaining_seconds = remaining_seconds % 60
formatted_minutes = str(minutes).zfill(2)
formatted_seconds = str(remaining_seconds).zfill(2)
if hours > 0:
formatted_hours = str(hours).zfill(2)
return f"{formatted_hours}:{formatted_minutes}:{formatted_seconds}"
else:
return f"{formatted_minutes}:{formatted_seconds}"
except:
return "666"
def gettoken(self, i=0, max_attempts=10):
if i >= len(self.hs) or i >= max_attempts:
return ''
current_domain = f"https://{''.join(random.choices(string.ascii_lowercase + string.digits, k=random.randint(5, 10)))}.{self.hs[i]}.work"
try:
url = f'{current_domain}/api/user/traveler'
sign, t = self.getsign()
headers = {
'User-Agent': self.ua,
'Accept': 'application/json',
'deviceid': self.did,
't': t,
's': sign,
}
data = {
'deviceId': self.did,
'tt': 'U',
'code': '##X-4m6Goo4zzPi1hF##',
'chCode': 'tt09'
}
response = self.post(url, json=data, headers=headers)
response.raise_for_status()
data1 = response.json()['data']
return data1['token'], data1['imgDomain'], current_domain
except Exception as e:
return self.gettoken(i + 1, max_attempts)
def getdid(self):
did = self.getCache('did')
if not did:
t = str(int(time.time()))
did = self.md5(t)
self.setCache('did', did)
return did
def md5(self, text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()
def imgs(self, param):
headers = {'User-Agent': self.ua}
url = param['url']
data = self.fetch(f"{self.phost}{url}",headers=headers)
bdata = self.img(data.content, 100, '2020-zq3-888')
return [200, data.headers.get('Content-Type'), bdata]
def img(self, data: bytes, length: int, key: str):
GIF = b'\x47\x49\x46'
JPG = b'\xFF\xD8\xFF'
PNG = b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A'
def is_dont_need_decode_for_gif(data):
return len(data) > 2 and data[:3] == GIF
def is_dont_need_decode_for_jpg(data):
return len(data) > 7 and data[:3] == JPG
def is_dont_need_decode_for_png(data):
return len(data) > 7 and data[1:8] == PNG[1:8]
if is_dont_need_decode_for_png(data):
return data
elif is_dont_need_decode_for_gif(data):
return data
elif is_dont_need_decode_for_jpg(data):
return data
else:
key_bytes = key.encode('utf-8')
result = bytearray(data)
for i in range(length):
result[i] ^= key_bytes[i % len(key_bytes)]
return bytes(result)
+98
View File
@@ -0,0 +1,98 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
/**
* 直播源
* authorLeospring
*/
let siteUrl = 'http://api.maiyoux.com:81/mf/';
let siteKey = '';
let siteType = 0;
let cateList = {};
async function request(reqUrl, postData, post) {
let res = await req(reqUrl, {
method: post ? 'post' : 'get',
data: postData || {},
postType: post ? 'form' : '',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
if (cfg.ext) {
siteUrl = cfg.ext;
}
cateList = JSON.parse(await request(siteUrl + 'json.txt'));
}
async function home(filter) {
let classes = [];
Object.keys(cateList).forEach(function(key) {
classes.push({
type_id: key,
type_name: key,
});
});
return JSON.stringify({
class: classes,
// filters: filterObj
});
}
async function category(tid, pg, filter, ext) {
let videos = _.map(cateList[tid], (item) => {
return {
vod_id: item['address'],
vod_name: item['title'],
vod_pic: item['xinimg'],
vod_remarks: item['Number']
}
})
return JSON.stringify({
list: videos,
page: pg,
pagecount: 1,
total: videos.length
});
}
async function detail(id) {
try {
const res = JSON.parse(await request(siteUrl + id))['zhubo'];
let playUrls = _.map(res, (vod) => {
return vod.title + '$' + vod.address;
}).join('#');
const video = {
vod_play_from: 'Leospring',
vod_play_url: playUrls,
vod_content: '作者:Leospring 公众号:蚂蚁科技杂谈',
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {
console.log('err', e);
}
return null;
}
async function play(flag, id, flags) {
let playUrl = id;
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
category: category,
detail: detail,
play: play,
};
}
+1
View File
@@ -0,0 +1 @@
const _0x3c0fe8=_0x38f3;(function(_0x187a6e,_0x56e928){const _0x230888=_0x38f3,_0x3a97a5=_0x187a6e();while(!![]){try{const _0x5ca0fe=-parseInt(_0x230888(0x13d))/0x1+parseInt(_0x230888(0x194))/0x2+parseInt(_0x230888(0x137))/0x3*(-parseInt(_0x230888(0x13a))/0x4)+-parseInt(_0x230888(0x1a2))/0x5*(parseInt(_0x230888(0x1aa))/0x6)+-parseInt(_0x230888(0x158))/0x7*(parseInt(_0x230888(0x12f))/0x8)+parseInt(_0x230888(0x13c))/0x9+-parseInt(_0x230888(0x18a))/0xa*(-parseInt(_0x230888(0x17a))/0xb);if(_0x5ca0fe===_0x56e928)break;else _0x3a97a5['push'](_0x3a97a5['shift']());}catch(_0x1dad60){_0x3a97a5['push'](_0x3a97a5['shift']());}}}(_0x8dec,0xc58a5));function m_decode(_0xc80413){const _0x36f09e=_0x38f3;var _0x3893e9=_0x36f09e(0x180),_0x2a04dd,_0x5bfb1a,_0x29b813,_0x46e6fc,_0x59d57c,_0x22eb7c,_0x92bc4,_0x166eb1,_0xade4c5=0x0,_0x542b56=0x0,_0x550948='',_0x4b1441=[];if(!_0xc80413)return _0xc80413;_0xc80413+='';do{_0x46e6fc=_0x3893e9[_0x36f09e(0x192)](_0xc80413['charAt'](_0xade4c5++)),_0x59d57c=_0x3893e9[_0x36f09e(0x192)](_0xc80413['charAt'](_0xade4c5++)),_0x22eb7c=_0x3893e9['indexOf'](_0xc80413[_0x36f09e(0x1a5)](_0xade4c5++)),_0x92bc4=_0x3893e9[_0x36f09e(0x192)](_0xc80413[_0x36f09e(0x1a5)](_0xade4c5++)),_0x166eb1=_0x46e6fc<<0x12|_0x59d57c<<0xc|_0x22eb7c<<0x6|_0x92bc4,_0x2a04dd=_0x166eb1>>0x10&0xff,_0x5bfb1a=_0x166eb1>>0x8&0xff,_0x29b813=_0x166eb1&0xff,_0x22eb7c==0x40?_0x4b1441[_0x542b56++]=String[_0x36f09e(0x181)](_0x2a04dd):_0x92bc4==0x40?_0x4b1441[_0x542b56++]=String[_0x36f09e(0x181)](_0x2a04dd,_0x5bfb1a):_0x4b1441[_0x542b56++]=String[_0x36f09e(0x181)](_0x2a04dd,_0x5bfb1a,_0x29b813);}while(_0xade4c5<_0xc80413[_0x36f09e(0x185)]);return _0x550948=_0x4b1441[_0x36f09e(0x16b)](''),_0x550948;}function startPlayer(_0x153d48,_0x350412,_0x202898,_0x4ff90f){const _0x587110=_0x38f3;function _0x5b0b60(_0x4799d2,_0x5a4395){const _0x3fc893=_0x38f3;let _0x15ee81=_0x49a283(_0x4799d2),_0x323e22=_0x5a4395[_0x3fc893(0x185)],_0x3bea7='';for(let _0x543067=0x0;_0x543067<_0x15ee81[_0x3fc893(0x185)];_0x543067++){let _0x1d8d78=_0x543067%_0x323e22;_0x3bea7+=String[_0x3fc893(0x181)](_0x15ee81[_0x3fc893(0x169)](_0x543067)^_0x5a4395[_0x3fc893(0x169)](_0x1d8d78));}let _0x514f2e=_0x49a283(_0x3bea7);return _0x514f2e;}function _0x49a283(_0x3b77a4){const _0x288ebe=_0x38f3;var _0x2029f2=_0x288ebe(0x180),_0x1d0508,_0xcaceb9,_0x19656b,_0x394f55,_0x160a54,_0xec8cfd,_0x535b0d,_0x1f00ce,_0x458dae=0x0,_0x504a47=0x0,_0x1928e5='',_0x460106=[];if(!_0x3b77a4)return _0x3b77a4;_0x3b77a4+='';do{_0x394f55=_0x2029f2[_0x288ebe(0x192)](_0x3b77a4[_0x288ebe(0x1a5)](_0x458dae++)),_0x160a54=_0x2029f2[_0x288ebe(0x192)](_0x3b77a4['charAt'](_0x458dae++)),_0xec8cfd=_0x2029f2[_0x288ebe(0x192)](_0x3b77a4[_0x288ebe(0x1a5)](_0x458dae++)),_0x535b0d=_0x2029f2[_0x288ebe(0x192)](_0x3b77a4[_0x288ebe(0x1a5)](_0x458dae++)),_0x1f00ce=_0x394f55<<0x12|_0x160a54<<0xc|_0xec8cfd<<0x6|_0x535b0d,_0x1d0508=_0x1f00ce>>0x10&0xff,_0xcaceb9=_0x1f00ce>>0x8&0xff,_0x19656b=_0x1f00ce&0xff;if(_0xec8cfd==0x40)_0x460106[_0x504a47++]=String['fromCharCode'](_0x1d0508);else _0x535b0d==0x40?_0x460106[_0x504a47++]=String[_0x288ebe(0x181)](_0x1d0508,_0xcaceb9):_0x460106[_0x504a47++]=String[_0x288ebe(0x181)](_0x1d0508,_0xcaceb9,_0x19656b);}while(_0x458dae<_0x3b77a4[_0x288ebe(0x185)]);return _0x1928e5=_0x460106[_0x288ebe(0x16b)](''),_0x1928e5;}return _0x153d48=_0x153d48['split']('')['reverse']()[_0x587110(0x16b)](''),_0x153d48=_0x5b0b60(_0x153d48,_0x350412),_0x153d48=_0x153d48['replace'](_0x587110(0x146),_0x587110(0x150)+_0x4ff90f),_0x153d48=_0x153d48[_0x587110(0x14c)](_0x587110(0x150)+_0x202898,_0x587110(0x150)+_0x4ff90f),_0x153d48=_0x153d48[_0x587110(0x14c)](_0x350412,''),_0x153d48;}function m_parse_url(_0x2ee1ff){const _0x138182=_0x38f3;let _0x15d57f=_0x2ee1ff[_0x138182(0x188)]('&p=')[0x0],_0x2c70c9=_0x2ee1ff['split'](_0x138182(0x152))[0x1],_0x93058f=req(_0x15d57f,{'headers':config[_0x138182(0x149)]})[_0x138182(0x19d)],_0x146ee1=_0x1ba294[_0x138182(0x138)](_0x93058f);if(_0x2c70c9>=_0x146ee1(_0x138182(0x13b))[_0x138182(0x185)])return'';let _0x3d67f3=_0x146ee1(_0x138182(0x13b))['eq'](_0x2c70c9)[_0x138182(0x168)](),_0x1fe469=_0x93058f[_0x138182(0x167)](/<script>(.*?var string.*?)<\/script>/);eval(_0x1fe469[0x1][_0x138182(0x14c)](/$/gm,_0x138182(0x16e)));var _0x2b3b9d='iptv.com';m_js_1=m_decode(m_js_1);let _0x21c614=_0x2b3b9d[_0x138182(0x185)],_0x49af8a='';for(let _0x19f686=0x0;_0x19f686<m_js_1[_0x138182(0x185)];_0x19f686++){let _0x147112=_0x19f686%_0x21c614;_0x49af8a+=String[_0x138182(0x181)](m_js_1['charCodeAt'](_0x19f686)^_0x2b3b9d[_0x138182(0x169)](_0x147112));}var _0x933492=m_decode(_0x49af8a);_0x933492=unescape(_0x933492),_0x933492=_0x933492[_0x138182(0x167)](/<script>(var.*?)<\/script>/)[0x1],_0x933492=_0x933492['replace'](/$/gm,_0x138182(0x163)),eval(_0x933492);let _0x2d36f6=startPlayer(_0x3d67f3,m_hken,m_hkens,m_token);return _0x2d36f6;}function make_detail_videos(_0x4342df){const _0x56e70e=_0x38f3;let _0xd99efc=[],_0x2a2d28='',_0x454997='';for(let _0x3e6d27 in _0x4342df){_0x2a2d28=_0x2a2d28+_0x56e70e(0x165)+_0x3e6d27;}for(let _0x56d0cc in _0x4342df){_0x454997=_0x454997+_0x56e70e(0x165),_0x4342df[_0x56d0cc][_0x56e70e(0x129)](_0x48e810=>{_0x454997=_0x454997+_0x48e810['name']+'$'+_0x48e810['url']+'#';}),_0x454997=_0x454997[_0x56e70e(0x14c)](/#$/m,'');}return _0xd99efc[_0x56e70e(0x143)]=_0x2a2d28[_0x56e70e(0x14c)](/^\$\$\$/,''),_0xd99efc[_0x56e70e(0x196)]=_0x454997['replace'](/^\$\$\$/,''),_0xd99efc;}function computer_last_path(_0xe5614b,_0x3ce4c9){const _0x59c356=_0x38f3;let _0x50a4dc=_0x59c356(0x17d),_0x42b8ef=_0x3ce4c9[_0x59c356(0x173)](0x0,_0x3ce4c9['lastIndexOf']('/')+0x1);_0xe5614b[_0x59c356(0x167)](/^(\/)/)&&(_0x42b8ef=_0x50a4dc);let _0x1f69cc=_0xe5614b['split']('/')[_0x59c356(0x173)](0x0,-0x1),_0x934b6a=_0xe5614b[_0x59c356(0x188)]('/')[_0x59c356(0x16f)]();for(let _0x1be829=0x0;_0x1be829<_0x1f69cc[_0x59c356(0x185)];_0x1be829++){if(_0x1f69cc[_0x1be829]=='.'){}else{if(_0x1f69cc[_0x1be829]=='..')_0x42b8ef!=_0x50a4dc&&(_0x42b8ef=_0x42b8ef['replace'](/[^\/]*\/$/,''));else{if(_0x1f69cc[_0x1be829]==''){}else _0x42b8ef=_0x42b8ef+_0x1f69cc[_0x1be829]+'/';}}}return _0x42b8ef+_0x934b6a;}function _0x38f3(_0x29a6f9,_0x362b4e){const _0x8dec07=_0x8dec();return _0x38f3=function(_0x38f35b,_0x4acb2c){_0x38f35b=_0x38f35b-0x127;let _0x45b4ae=_0x8dec07[_0x38f35b];return _0x45b4ae;},_0x38f3(_0x29a6f9,_0x362b4e);}function parseSub(_0x2c5748){const _0x5252b4=_0x38f3,_0x1350e3=/^#([^#\n]*?)\n([^#\n]+)/gm;let _0x359580='',_0x52e597='',_0x282c24=req(_0x2c5748,{'headers':config[_0x5252b4(0x139)]})['content'];while((_0x359580=_0x1350e3[_0x5252b4(0x19c)](_0x282c24))!==null){_0x359580[_0x5252b4(0x136)]===_0x1350e3['lastIndex']&&_0x1350e3[_0x5252b4(0x12a)]++;if(_0x359580[0x1]==_0x5252b4(0x155))continue;if(_0x359580[0x1]==_0x5252b4(0x13f)||_0x359580[0x1]==_0x5252b4(0x134)){_0x359580[0x2]=='1'?config[_0x5252b4(0x128)]=!![]:config['iptv_flag']=![];continue;}let _0x1b57a1=_0x359580[0x1],_0x31731a=config[_0x5252b4(0x1a4)];if(_0x359580[0x1][_0x5252b4(0x192)]('(')!=-0x1){let _0x4c71ec=_0x359580[0x1][_0x5252b4(0x167)](/(.*?)\((.*?)\)/);_0x1b57a1=_0x4c71ec[0x1],_0x31731a[_0x5252b4(0x167)](/https?/)?_0x31731a=_0x4c71ec[0x2]:_0x31731a=computer_last_path(_0x4c71ec[0x2],_0x2c5748);}_0x359580[0x2][_0x5252b4(0x167)](/https?/)?_0x52e597=_0x359580[0x2]:_0x52e597=computer_last_path(_0x359580[0x2],_0x2c5748),config[_0x5252b4(0x182)][_0x52e597]=_0x31731a,config['pics'][_0x1b57a1]=_0x31731a,config['classes'][_0x5252b4(0x17e)]({'type_id':_0x52e597,'type_name':_0x1b57a1});}}function local_db(){const _0xe9c172=_0x38f3;config[_0xe9c172(0x175)]=![];let _0x5ec292=[],_0x401b5b=[],_0x3beffb='';for(let _0x1a63f0=0x0;_0x1a63f0<config[_0xe9c172(0x170)][_0xe9c172(0x185)];_0x1a63f0++){let _0x5877f8=config[_0xe9c172(0x170)][_0x1a63f0][_0xe9c172(0x14b)],_0x422c4=config[_0xe9c172(0x170)][_0x1a63f0]['type_name'],_0x335c0f=config[_0xe9c172(0x139)];_0x5877f8[_0xe9c172(0x167)](/gitcode.net\/ygbh66/)&&(_0x335c0f=config[_0xe9c172(0x149)]);let _0x370655=req(_0x5877f8,{'headers':_0x335c0f})[_0xe9c172(0x19d)];if(_0x370655[_0xe9c172(0x192)](_0xe9c172(0x14d))==0x0){let _0x57e9f0=/(.*),(.*)\s*?((?:http|rtmp|mitv)[^#\s]*)/gm;while((_0x5ec292=_0x57e9f0[_0xe9c172(0x19c)](_0x370655))!==null){_0x5ec292[_0xe9c172(0x136)]===_0x57e9f0[_0xe9c172(0x12a)]&&_0x57e9f0['lastIndex']++;let _0x170ca9=_0xe9c172(0x147);_0x170ca9=(_0x5ec292[0x1]['match'](/group-title="(.*?)"/)||[null,_0x170ca9])[0x1],_0x401b5b[_0xe9c172(0x192)](_0x170ca9)==-0x1&&(_0x401b5b[_0xe9c172(0x17e)](_0x170ca9),config[_0xe9c172(0x132)]['push']({'sname':_0x422c4,'surl':_0x5877f8,'gname':_0x170ca9})),!config[_0xe9c172(0x190)][_0x422c4+'-'+_0x170ca9]&&(config[_0xe9c172(0x190)][_0x422c4+'-'+_0x170ca9]={}),config[_0xe9c172(0x190)][_0x422c4+'-'+_0x170ca9][_0x5ec292[0x2]]?config[_0xe9c172(0x190)][_0x422c4+'-'+_0x170ca9][_0x5ec292[0x2]][_0xe9c172(0x17e)](_0x5ec292[0x3]):(config['channelDB'][_0x422c4+'-'+_0x170ca9][_0x5ec292[0x2]]=[],config['channelDB'][_0x422c4+'-'+_0x170ca9][_0x5ec292[0x2]][_0xe9c172(0x17e)](_0x5ec292[0x3]));}}else{let _0x3308ba=/()(?:\B\$c_start|\B#{1,2})?(.*?),?(##|头#|\$c_end|,?#genre#|(?:http|rtmp|mitv)[^\s]*)/gm;while((_0x5ec292=_0x3308ba[_0xe9c172(0x19c)](_0x370655))!==null){_0x5ec292[_0xe9c172(0x136)]===_0x3308ba[_0xe9c172(0x12a)]&&_0x3308ba['lastIndex']++,[_0xe9c172(0x174),'##','头#',_0xe9c172(0x13e)]['includes'](_0x5ec292[0x3])?(_0x3beffb=_0x5ec292[0x2],config[_0xe9c172(0x190)][_0x422c4+'-'+_0x3beffb]={},config[_0xe9c172(0x132)][_0xe9c172(0x17e)]({'sname':_0x422c4,'surl':_0x5877f8,'gname':_0x5ec292[0x2]})):config[_0xe9c172(0x190)][_0x422c4+'-'+_0x3beffb][_0x5ec292[0x2]]?config[_0xe9c172(0x190)][_0x422c4+'-'+_0x3beffb][_0x5ec292[0x2]]['push'](_0x5ec292[0x3]):(config[_0xe9c172(0x190)][_0x422c4+'-'+_0x3beffb][_0x5ec292[0x2]]=[],config[_0xe9c172(0x190)][_0x422c4+'-'+_0x3beffb][_0x5ec292[0x2]][_0xe9c172(0x17e)](_0x5ec292[0x3]));}}}}function local_db_gsearch(_0x6b91a8){const _0x25afcc=_0x38f3;let _0x572a37=[],_0x553e1a=new RegExp(_0x6b91a8,'i');for(let _0x4fbef2=0x0;_0x4fbef2<config['groupDB'][_0x25afcc(0x185)];_0x4fbef2++){config[_0x25afcc(0x132)][_0x4fbef2][_0x25afcc(0x186)]['match'](_0x553e1a)&&_0x572a37[_0x25afcc(0x17e)]({'vod_id':config['groupDB'][_0x4fbef2][_0x25afcc(0x186)]+_0x25afcc(0x165)+config['groupDB'][_0x4fbef2][_0x25afcc(0x197)],'vod_name':config['groupDB'][_0x4fbef2][_0x25afcc(0x186)],'vod_pic':config[_0x25afcc(0x182)][config[_0x25afcc(0x132)][_0x4fbef2][_0x25afcc(0x171)]],'vod_remarks':config[_0x25afcc(0x132)][_0x4fbef2][_0x25afcc(0x171)]});}return _0x572a37;}function local_db_csearch(_0x161166){const _0x277704=_0x38f3;let _0x36ec3c=[],_0x49a5b7=new RegExp(_0x161166,'i');for(let _0x49aa4e in config[_0x277704(0x190)]){for(let _0xfcf420 in config[_0x277704(0x190)][_0x49aa4e]){_0xfcf420[_0x277704(0x167)](_0x49a5b7)&&_0x36ec3c[_0x277704(0x17e)]({'vod_id':_0xfcf420+_0x277704(0x18e)+config[_0x277704(0x190)][_0x49aa4e][_0xfcf420][_0x277704(0x16b)](_0x277704(0x156)),'vod_name':_0xfcf420,'vod_pic':config['pics'][_0x49aa4e[_0x277704(0x188)]('-')[0x0]],'vod_remarks':_0x49aa4e});}}return _0x36ec3c;}function direct_play_youtube0(_0x3e55dd){const _0x3ac83a=_0x38f3;let _0x9bb79e='',_0x57ab86='',_0x1bf98f=req('https://deturl.com/?url='+_0x3e55dd,{'headers':config[_0x3ac83a(0x139)]})[_0x3ac83a(0x19d)],_0x3cb7b3=_0x1ba294['load'](_0x1bf98f),_0x56556e=_0x3cb7b3(_0x3ac83a(0x141));_0x56556e[_0x3ac83a(0x189)](function(_0x1c4f57){const _0x3aab95=_0x3ac83a;let _0x11f3b8=_0x3cb7b3(this,this)[_0x3aab95(0x17c)](_0x3aab95(0x127));_0x11f3b8[_0x3aab95(0x167)](_0x3aab95(0x19b))&&(_0x57ab86=_0x11f3b8[_0x3aab95(0x167)](/https:\/\/getyoutubehd.com\/v\/(.*)/m)[0x1]);});let _0x5607aa=_0x3ac83a(0x1ac)+_0x57ab86;_0x1bf98f=req(_0x5607aa,{'headers':config[_0x3ac83a(0x139)]})[_0x3ac83a(0x19d)],_0x56556e=JSON['parse'](_0x1bf98f),_0x56556e=_0x56556e[_0x3ac83a(0x15b)];for(let _0x58b75b=0x0;_0x58b75b<_0x56556e[_0x3ac83a(0x185)];_0x58b75b++){_0x56556e[_0x58b75b][_0x3ac83a(0x18b)]=='360p'&&(_0x9bb79e=_0x56556e[_0x58b75b][_0x3ac83a(0x187)]),_0x56556e[_0x58b75b][_0x3ac83a(0x18b)]==_0x3ac83a(0x1a9)&&(_0x9bb79e=_0x56556e[_0x58b75b][_0x3ac83a(0x187)]);}return _0x9bb79e;}function direct_play_youtube1(_0x51f614){const _0x156fa5=_0x38f3;let _0x436829=_0x51f614['slice'](0x0,_0x51f614['lastIndexOf']('/')),_0xfec2dc=_0x51f614[_0x156fa5(0x173)](_0x51f614[_0x156fa5(0x195)]('/')+0x1),_0x17dc0b='',_0x5638c6=config[_0x156fa5(0x139)];_0x436829['match'](/gitcode.net\/ygbh66/)&&(_0x5638c6=config['headers2']);let _0x1b505e=req(_0x436829,{'headers':_0x5638c6})['content'],_0x300109=_0x1ba294['load'](_0x1b505e),_0x53b127=JSON[_0x156fa5(0x15e)](_0x300109('body\x20script:eq(1)')[_0x156fa5(0x160)]()['replace']('var\x20ytInitialPlayerResponse\x20=\x20','')[_0x156fa5(0x14c)](/;$/,'')),_0x44010f=_0x53b127[_0x156fa5(0x183)][_0x156fa5(0x140)];return _0x44010f[_0x156fa5(0x129)](_0x588cd8=>{const _0x37390d=_0x156fa5;_0x588cd8[_0x37390d(0x184)]['match'](/video\/mp4/)&&(_0x588cd8['qualityLabel']==_0xfec2dc&&(_0x17dc0b=_0x588cd8['url']));}),console['log'](_0x156fa5(0x12b)+_0x17dc0b),_0x17dc0b;}function direct_play_youtube2(_0x3498d2){const _0x2437e7=_0x38f3;let _0x4112e6=_0x3498d2['slice'](0x0,_0x3498d2[_0x2437e7(0x195)]('/')),_0x1c8849=_0x3498d2[_0x2437e7(0x173)](_0x3498d2[_0x2437e7(0x195)]('/')+0x1),_0x3a1c04='',_0x1c9e5e=req(_0x2437e7(0x193)+_0x4112e6+'&lang=en&type=video',{'headers':config[_0x2437e7(0x139)]})['content'],_0x1fa19c=_0x1ba294[_0x2437e7(0x138)](_0x1c9e5e),_0x3e9c74=_0x1fa19c(_0x2437e7(0x159))['map'](function(){const _0x4099f8=_0x2437e7;return{'title':_0x1fa19c('.downloadBtn',this)[_0x4099f8(0x17c)](_0x4099f8(0x1a3)),'resolution':_0x1fa19c('td:eq(0)',this)['text'](),'url':_0x1fa19c(_0x4099f8(0x164),this)['attr']('href')};})['toArray']();for(let _0x4481ef=0x0;_0x4481ef<_0x3e9c74[_0x2437e7(0x185)];_0x4481ef++){if(_0x3e9c74[_0x4481ef][_0x2437e7(0x1ab)]==_0x1c8849){_0x3a1c04=_0x3e9c74[_0x4481ef][_0x2437e7(0x187)];break;}}return _0x3a1c04=_0x3a1c04[_0x2437e7(0x14c)](/&title=.*/,''),_0x3a1c04;}function direct_play_youtube3(_0x585965){const _0x3d621e=_0x38f3;let _0x18ca6b=_0x585965[_0x3d621e(0x173)](0x0,_0x585965[_0x3d621e(0x195)]('/')),_0x1ceb61=_0x585965[_0x3d621e(0x173)](_0x585965['lastIndexOf']('/')+0x1),_0x8aa761=_0x18ca6b[_0x3d621e(0x167)](/v=(.*?)(&|$)/m)[0x1],_0x22a1bf='',_0x211b9d={},_0x562ccc='',_0x5eb8d4=req(_0x3d621e(0x14f),{'headers':{'Content-Type':'application/x-www-form-urlencoded','user-agent':'okhttp/3.12.10'},'method':_0x3d621e(0x131),'body':_0x3d621e(0x15a)+_0x18ca6b+_0x3d621e(0x142)})[_0x3d621e(0x19d)];_0x5eb8d4=JSON[_0x3d621e(0x15e)](_0x5eb8d4),_0x211b9d=_0x5eb8d4[_0x3d621e(0x1a6)][_0x3d621e(0x18c)],_0x22a1bf='';for(let _0xe84851 in _0x211b9d){if(_0x1ceb61==_0x211b9d[_0xe84851]['q']){_0x22a1bf=_0x211b9d[_0xe84851]['k'];break;}}return _0x5eb8d4=req(_0x3d621e(0x16c),{'headers':{'Content-Type':_0x3d621e(0x199),'user-agent':_0x3d621e(0x16a)},'method':_0x3d621e(0x131),'body':'vid='+_0x8aa761+_0x3d621e(0x177)+_0x22a1bf})['content'],_0x5eb8d4=JSON[_0x3d621e(0x15e)](_0x5eb8d4),_0x562ccc=_0x5eb8d4['dlink'],console['log'](_0x562ccc),_0x562ccc;}import _0x1ba294 from'assets://js/lib/cheerio.min.js';function _0x8dec(){const _0x2454e5=['length','gname','url','split','each','17299780uUgkdo','format_note','mp4','线路2','$$$[epwdr]','myIPTV','channelDB','IPTV_','indexOf','https://10downloader.com/download?v=','2248844dZKrlt','lastIndexOf','vod_play_url','surl','[epwdr]','application/x-www-form-urlencoded','$1,$2/1080p\x0a$1,$2/720p\x0a$1,$2/480p\x0a$1,$2/360p','getyoutubehd.com','exec','content','.table-container\x20tbody\x20tr','epgtw_flag','ul[data-role=\x22listview\x22]\x20li','td:eq(4)\x20a','595QykUXo','download','defaultPicUrl','charAt','links','concat','线路4','720p','6474aXpXdh','resolution','https://getyoutubehd.com/api/info?v=','href','iptv_flag','forEach','lastIndex','url:\x20','\x5c[epwdr\x5c]','td\x20a','http://m.iptv807.com/','7816ptSDRs','$$$https://epg.pw','POST','groupDB','filter','iptv','480p','index','1515kbceyM','load','headers','11332EpFFCW','select\x20option','7317855WxoLsV','470808unpjUc','$c_end','IPTV','adaptiveFormats','.download\x20.line:eq(0)\x20a','&k_page=home&hl=en&q_auto=0','vod_play_from','iptv807','$$$线路','token=123','未分组','360p','headers2','section:eq(2)\x20a','type_id','replace','#EXTM3U','epg.pw','https://www.y2mate.com/mates/analyzeV2/ajax','token=','section\x20tbody\x20tr','&p=','http://m.iptv807.com/?act=home','路飞开始调试了!!!','订阅名','###','stringify','5936bYKDLB','.downloadsTable:eq(0)\x20tbody\x20tr','k_query=','formats','class','http://www.fish2018.ip-ddns.com/imgs','parse','$1,$2\x0a$3/1080p\x0a$1,$2\x0a$3/720p\x0a$1,$2\x0a$3/480p\x0a$1,$2\x0a$3/360p','text','www.histar.tv','log','m_hken=gghken;m_hkens=gghkens;m_token=ggtoken;','.downloadBtn','$$$','https://epg.pw/search/channel/?lang=zh-hant','match','val','charCodeAt','okhttp/3.12.10','join','https://www.y2mate.com/mates/convertV2/index','csrfmiddlewaretoke=pUq0NQiiWg7EpSuU0w1Fif4q8bo0RnPe&channel_search=',';m_js_1=string;','pop','classes','sname','1080p','slice','#genre#','search_flag','蜂蜜当前版本不支持异步!请更新到最新版本!','&k=','Web_EPG','youtube.com','11AaUKoh','includes','attr','http://127.0.0.1:9978/file/','push','线路1','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=','fromCharCode','pics','streamingData','mimeType'];_0x8dec=function(){return _0x2454e5;};return _0x8dec();}import'assets://js/lib/crypto-js.js';var m_js_1='',m_hken='',m_hkens='',m_token='';const config={'iptv_flag':!![],'epgtw_flag':![],'search_flag':!![],'groupDB':[],'channelDB':{},'defaultPicUrl':_0x3c0fe8(0x15d),'pics':{},'classes':[],'headers':{'user-agent':_0x3c0fe8(0x16a)},'headers2':{'user-agent':'Mozilla/5.0\x20(iPhone;\x20CPU\x20iPhone\x20OS\x209_2\x20like\x20Mac\x20OS\x20X)\x20AppleWebKit/601.1\x20(KHTML,\x20like\x20Gecko)\x20CriOS/47.0.2526.107\x20Mobile/13C75\x20Safari/601.1.46'},'player':{},'filter':{}};function init(_0x2ac96e){const _0x592ae2=_0x3c0fe8;console[_0x592ae2(0x162)](_0x592ae2(0x154)),parseSub(_0x2ac96e);try{setTimeout(()=>{local_db();},0x1f40);}catch(_0x4bdc87){console[_0x592ae2(0x162)](_0x592ae2(0x176));}}function home(_0x5ac87b){const _0x469927=_0x3c0fe8;let _0x735762={};return _0x5ac87b&&(_0x735762['filters']=config[_0x469927(0x133)]),_0x735762[_0x469927(0x15c)]=config[_0x469927(0x170)],JSON[_0x469927(0x157)](_0x735762);}function homeVod(){const _0x51c2ee=_0x3c0fe8;let _0x5b97bc={},_0x3312c3=[];if(config[_0x51c2ee(0x128)]){let _0x25e7e6=req(_0x51c2ee(0x153),{'headers':config[_0x51c2ee(0x149)]})[_0x51c2ee(0x19d)],_0xe1db0c=_0x1ba294['load'](_0x25e7e6),_0x26eb5a=_0xe1db0c(_0x51c2ee(0x1a0));_0x26eb5a[_0x51c2ee(0x189)](function(_0x5cafbc){const _0x2db515=_0x51c2ee;_0xe1db0c('a',this)['text']()!=''&&_0x3312c3['push']({'vod_id':_0x2db515(0x191)+_0xe1db0c('a',this)[_0x2db515(0x160)]()+_0x2db515(0x165)+_0xe1db0c('a',this)[_0x2db515(0x17c)]('href'),'vod_name':_0xe1db0c('a',this)[_0x2db515(0x160)](),'vod_pic':config[_0x2db515(0x1a4)],'vod_remarks':''});}),_0x5b97bc={'list':_0x3312c3};}return JSON['stringify'](_0x5b97bc);}function category(_0x35b42e,_0x18cf42,_0x2f8e7f,_0x15931b){const _0xfe43f9=_0x3c0fe8;let _0x1d70a9={},_0x27d66b=[],_0x3177c4='',_0x5f1132=[],_0x5464ee=[];_0x18cf42=parseInt(_0x18cf42);if(_0x18cf42>=0x2)return JSON[_0xfe43f9(0x157)]({});if(_0x35b42e==_0xfe43f9(0x161)){}else{if(_0x35b42e==_0xfe43f9(0x18f)){}else{let _0xe5cb38=config['headers'];_0x35b42e[_0xfe43f9(0x167)](/gitcode.net\/ygbh66/)&&(_0xe5cb38=config[_0xfe43f9(0x149)]);let _0x28a7e0=req(_0x35b42e,{'headers':_0xe5cb38})[_0xfe43f9(0x19d)];if(_0x28a7e0[_0xfe43f9(0x192)]('#EXTM3U')==0x0){let _0x3a0151=/(.*),(.*)\s*?((?:http|rtmp|mitv)[^#\s]*)/gm;while((_0x5464ee=_0x3a0151[_0xfe43f9(0x19c)](_0x28a7e0))!==null){_0x5464ee['index']===_0x3a0151[_0xfe43f9(0x12a)]&&_0x3a0151[_0xfe43f9(0x12a)]++;let _0x367b6a=_0xfe43f9(0x147);_0x367b6a=(_0x5464ee[0x1][_0xfe43f9(0x167)](/group-title="(.*?)"/)||[null,_0x367b6a])[0x1],_0x5f1132[_0xfe43f9(0x192)](_0x367b6a)==-0x1&&(_0x5f1132[_0xfe43f9(0x17e)](_0x367b6a),_0x27d66b[_0xfe43f9(0x17e)]({'vod_id':_0x367b6a+_0xfe43f9(0x165)+_0x35b42e,'vod_name':_0x367b6a,'vod_pic':config[_0xfe43f9(0x182)][_0x35b42e],'vod_remarks':''}));}}else{let _0x582cda=/()(?:\B\$c_start|\B#{1,2})?(.*?),?(##|头#|\$c_end|,?#genre#|(?:http|rtmp|mitv)[^\s]*)/gm;while((_0x5464ee=_0x582cda[_0xfe43f9(0x19c)](_0x28a7e0))!==null){_0x5464ee[_0xfe43f9(0x136)]===_0x582cda[_0xfe43f9(0x12a)]&&_0x582cda[_0xfe43f9(0x12a)]++;if([_0xfe43f9(0x174),'##','头#',_0xfe43f9(0x13e)][_0xfe43f9(0x17b)](_0x5464ee[0x3])){let _0x15965c=_0x5464ee[0x2];_0x5f1132[_0xfe43f9(0x192)](_0x15965c)==-0x1&&(_0x5f1132['push'](_0x15965c),_0x27d66b[_0xfe43f9(0x17e)]({'vod_id':_0x15965c+_0xfe43f9(0x165)+_0x35b42e,'vod_name':_0x15965c,'vod_pic':config[_0xfe43f9(0x182)][_0x35b42e],'vod_remarks':''}));}}}}}return _0x1d70a9={'list':_0x27d66b,'page':_0x18cf42,'pagecount':0x1,'limit':0x64,'total':0x3e7},JSON['stringify'](_0x1d70a9);}function search(_0x5f1c6c,_0x5be792){const _0x57b8fb=_0x3c0fe8;let _0xc0c821={},_0x21d4af=[];config[_0x57b8fb(0x175)]&&local_db();if(config[_0x57b8fb(0x19f)]){let _0x5340af=req(_0x57b8fb(0x166),{'headers':{'Content-Type':_0x57b8fb(0x199),'user-agent':_0x57b8fb(0x16a)},'method':'POST','body':_0x57b8fb(0x16d)+_0x5f1c6c+'&search_type=c'})[_0x57b8fb(0x19d)],_0x131567=_0x1ba294[_0x57b8fb(0x138)](_0x5340af),_0x526ebd=_0x131567(_0x57b8fb(0x14a));if(_0x526ebd[_0x57b8fb(0x185)]===0x0){let _0x1a17fd=req(_0x57b8fb(0x166),{'headers':{'Content-Type':'application/x-www-form-urlencoded','user-agent':_0x57b8fb(0x16a)},'method':'POST','body':'csrfmiddlewaretoke=pUq0NQiiWg7EpSuU0w1Fif4q8bo0RnPe&channel_search='+_0x5f1c6c+'&search_type=s'})[_0x57b8fb(0x19d)],_0x50a87f=_0x1ba294[_0x57b8fb(0x138)](_0x1a17fd),_0x143dc8=_0x50a87f(_0x57b8fb(0x19e)),_0x2a251d={};_0x143dc8[_0x57b8fb(0x189)](function(_0x598013){const _0x1af380=_0x57b8fb;let _0x3ef4ab=_0x50a87f('td',this)['eq'](0x0)['text']()[_0x1af380(0x14c)](/@@\d+$/,'')[_0x1af380(0x14c)]('台','')['replace']('衛視','卫视');_0x2a251d[_0x3ef4ab]?_0x2a251d[_0x3ef4ab][_0x1af380(0x17e)](_0x50a87f(_0x1af380(0x1a1),this)[_0x1af380(0x17c)]('href')):_0x2a251d[_0x3ef4ab]=[_0x50a87f('td:eq(4)\x20a',this)[_0x1af380(0x17c)](_0x1af380(0x127))];});for(let _0x41f751 in _0x2a251d){_0x21d4af[_0x57b8fb(0x17e)]({'vod_id':_0x41f751+_0x57b8fb(0x18e)+_0x2a251d[_0x41f751][_0x57b8fb(0x16b)]('###'),'vod_name':_0x41f751,'vod_pic':config['defaultPicUrl'],'vod_remarks':_0x57b8fb(0x178)});}}else _0x526ebd[_0x57b8fb(0x189)](function(_0x22d36b){const _0x3b76eb=_0x57b8fb;_0x21d4af[_0x3b76eb(0x17e)]({'vod_id':_0x131567(this,this)['text']()+_0x3b76eb(0x130)+_0x131567(this,this)[_0x3b76eb(0x17c)]('href'),'vod_name':_0x131567(this,this)[_0x3b76eb(0x160)](),'vod_pic':config[_0x3b76eb(0x1a4)],'vod_remarks':_0x3b76eb(0x178)});});}return _0x21d4af=_0x21d4af[_0x57b8fb(0x1a7)](local_db_gsearch(_0x5f1c6c)),_0x21d4af=_0x21d4af[_0x57b8fb(0x1a7)](local_db_csearch(_0x5f1c6c)),_0xc0c821={'list':_0x21d4af},JSON[_0x57b8fb(0x157)](_0xc0c821);}function detail(_0x2f4473){const _0x1cb169=_0x3c0fe8;let _0x210125={},_0x486fc9={},_0x27bd24=[],_0x3633a5=_0x2f4473[_0x1cb169(0x188)](_0x1cb169(0x165))[0x1];_0x2f4473=_0x2f4473[_0x1cb169(0x188)](_0x1cb169(0x165))[0x0];let _0x561b42={'vod_id':_0x2f4473,'vod_name':_0x2f4473,'vod_pic':config[_0x1cb169(0x182)][_0x3633a5],'type_name':'','vod_year':'','vod_area':'','vod_remarks':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':'','vod_play_url':''};if(_0x3633a5['match'](_0x1cb169(0x12c))){let _0x59ea75='',_0x3dfd22='';_0x3633a5=_0x3633a5[_0x1cb169(0x14c)](_0x1cb169(0x198),''),_0x3633a5=_0x3633a5['split'](_0x1cb169(0x156));for(let _0x107c4b=0x0;_0x107c4b<_0x3633a5[_0x1cb169(0x185)];_0x107c4b++){_0x59ea75=_0x59ea75+_0x1cb169(0x145)+_0x107c4b,_0x3dfd22=_0x3dfd22+_0x1cb169(0x165)+_0x2f4473+'$'+_0x3633a5[_0x107c4b];}_0x561b42[_0x1cb169(0x143)]=_0x59ea75[_0x1cb169(0x14c)](/^\$\$\$/,''),_0x561b42[_0x1cb169(0x196)]=_0x3dfd22[_0x1cb169(0x14c)](/^\$\$\$/,'');}else{if(_0x3633a5[_0x1cb169(0x167)](_0x1cb169(0x14e))){let _0x58bac6='',_0x5e5594='',_0x2c233f=0x0,_0x57870c=req(_0x3633a5,{'headers':config[_0x1cb169(0x139)]})[_0x1cb169(0x19d)],_0x578de1=_0x1ba294['load'](_0x57870c),_0x79e469=_0x578de1(_0x1cb169(0x151));_0x79e469[_0x1cb169(0x189)](function(_0x427162){const _0x349650=_0x1cb169;_0x58bac6=_0x58bac6+_0x349650(0x145)+_0x2c233f,_0x5e5594=_0x5e5594+_0x349650(0x165)+_0x2f4473+'$'+_0x578de1(_0x349650(0x12d),this)['eq'](0x0)[_0x349650(0x17c)](_0x349650(0x127)),_0x2c233f++;}),_0x561b42[_0x1cb169(0x143)]=_0x58bac6[_0x1cb169(0x14c)](/^\$\$\$/,''),_0x561b42['vod_play_url']=_0x5e5594[_0x1cb169(0x14c)](/^\$\$\$/,'');}else{if(_0x3633a5==_0x1cb169(0x161)){}else{if(_0x2f4473['startsWith'](_0x1cb169(0x13f))){let _0x28bdf1='',_0x5c28d5='';_0x3633a5=_0x1cb169(0x12e)+_0x3633a5;let _0x5796f6=req(_0x3633a5,{'headers':config[_0x1cb169(0x149)]})['content'],_0x355f51=_0x1ba294[_0x1cb169(0x138)](_0x5796f6),_0x57cf01=_0x355f51(_0x1cb169(0x1a0));for(let _0x36f0d3=0x1;_0x36f0d3<0xb;_0x36f0d3++){_0x28bdf1=_0x28bdf1+_0x1cb169(0x165)+'线路'+_0x36f0d3,_0x57cf01[_0x1cb169(0x189)](function(_0x23ad52){const _0x4bb4c1=_0x1cb169;_0x355f51('a',this)['text']()!=''&&(_0x5c28d5=_0x5c28d5+'#'+_0x355f51('a',this)['text']()+'$'+_0x4bb4c1(0x12e)+_0x355f51('a',this)[_0x4bb4c1(0x17c)](_0x4bb4c1(0x127))+'&p='+(_0x36f0d3-0x1));}),_0x5c28d5=_0x5c28d5[_0x1cb169(0x14c)](/^#/,''),_0x5c28d5=_0x5c28d5+'$$$';}_0x561b42[_0x1cb169(0x143)]=_0x28bdf1[_0x1cb169(0x14c)](/^\$\$\$/,''),_0x561b42[_0x1cb169(0x196)]=_0x5c28d5[_0x1cb169(0x14c)](/\$\$\$#/g,'$$$$$$');}else{let _0x1e74ce=config[_0x1cb169(0x139)];_0x3633a5[_0x1cb169(0x167)](/gitcode.net\/ygbh66/)&&(_0x1e74ce=config[_0x1cb169(0x149)]);let _0x581ad5=req(_0x3633a5,{'headers':_0x1e74ce})[_0x1cb169(0x19d)];_0x581ad5=_0x581ad5[_0x1cb169(0x14c)](/^(.*),(.*youtube\.com.*)$/gm,_0x1cb169(0x19a)),_0x581ad5=_0x581ad5[_0x1cb169(0x14c)](/(.*),(.*)\n((?:http|rtmp|mitv)[^#\s]*youtube\.com[^#\s]*)/gm,_0x1cb169(0x15f));if(_0x581ad5[_0x1cb169(0x192)](_0x1cb169(0x14d))==0x0){let _0x193d5e=/(.*),(.*)\s*?((?:http|rtmp|mitv)[^#\s]*)/gm;while((_0x27bd24=_0x193d5e[_0x1cb169(0x19c)](_0x581ad5))!==null){_0x27bd24[_0x1cb169(0x136)]===_0x193d5e[_0x1cb169(0x12a)]&&_0x193d5e['lastIndex']++;let _0x341afb=_0x1cb169(0x147);_0x341afb=(_0x27bd24[0x1][_0x1cb169(0x167)](/group-title="(.*?)"/)||[null,_0x341afb])[0x1];if(_0x341afb==_0x2f4473){if(_0x486fc9[_0x27bd24[0x2]]){let _0x214b3a='线路'+(_0x486fc9[_0x27bd24[0x2]][_0x1cb169(0x185)]+0x1);_0x486fc9[_0x27bd24[0x2]]['push']({'name':_0x214b3a,'url':_0x27bd24[0x3]});}else _0x486fc9[_0x27bd24[0x2]]=[],_0x486fc9[_0x27bd24[0x2]][_0x1cb169(0x17e)]({'name':_0x1cb169(0x17f),'url':_0x27bd24[0x3]});}}}else{let _0x480789=/()(?:\B\$c_start|\B#{1,2})?(.*?),?(##|头#|\$c_end|,?#genre#|(?:http|rtmp|mitv)[^\s]*)/gm,_0x5d0270=!![];while((_0x27bd24=_0x480789[_0x1cb169(0x19c)](_0x581ad5))!==null){_0x27bd24[_0x1cb169(0x136)]===_0x480789['lastIndex']&&_0x480789[_0x1cb169(0x12a)]++;if(['#genre#','##','头#',_0x1cb169(0x13e)][_0x1cb169(0x17b)](_0x27bd24[0x3])){if(_0x27bd24[0x2]==_0x2f4473){_0x5d0270=![];continue;}else{if(!_0x5d0270)break;}}if(_0x5d0270)continue;if(_0x486fc9[_0x27bd24[0x2]]){let _0xfbf398='线路'+(_0x486fc9[_0x27bd24[0x2]]['length']+0x1);_0x486fc9[_0x27bd24[0x2]][_0x1cb169(0x17e)]({'name':_0xfbf398,'url':_0x27bd24[0x3]});}else _0x486fc9[_0x27bd24[0x2]]=[],_0x486fc9[_0x27bd24[0x2]][_0x1cb169(0x17e)]({'name':_0x1cb169(0x17f),'url':_0x27bd24[0x3]});}}let _0x29d681=0x0;for(let _0xd53186 in _0x486fc9){_0x486fc9[_0xd53186]['length']>_0x29d681&&(_0x29d681=_0x486fc9[_0xd53186][_0x1cb169(0x185)]);}let _0x7aedd4={};for(let _0x49938c=0x1;_0x49938c<=_0x29d681;_0x49938c++){_0x7aedd4['线路'+_0x49938c]=[];for(let _0x35ee18 in _0x486fc9){let _0x37451b='';_0x49938c<=_0x486fc9[_0x35ee18][_0x1cb169(0x185)]?_0x37451b=_0x486fc9[_0x35ee18][_0x49938c-0x1][_0x1cb169(0x187)]:_0x37451b=_0x486fc9[_0x35ee18][_0x486fc9[_0x35ee18]['length']-0x1][_0x1cb169(0x187)],_0x7aedd4['线路'+_0x49938c]['push']({'name':_0x35ee18,'url':_0x37451b});}}let _0x278f6f=make_detail_videos(_0x7aedd4);_0x561b42[_0x1cb169(0x143)]=_0x278f6f[_0x1cb169(0x143)],_0x561b42[_0x1cb169(0x196)]=_0x278f6f[_0x1cb169(0x196)];}}}}let _0x3fd8aa=!![],_0x1d842a=_0x561b42['vod_play_url'][_0x1cb169(0x167)](/(https:\/\/.*?)(#|\$\$\$|$)/gm);if(_0x561b42[_0x1cb169(0x143)][_0x1cb169(0x188)](_0x1cb169(0x165))['length']!=0x4)_0x3fd8aa=![];else for(let _0x525d42=0x0;_0x525d42<_0x1d842a['length'];_0x525d42++){if(_0x1d842a[_0x525d42][_0x1cb169(0x192)](_0x1cb169(0x179))==-0x1){_0x3fd8aa=![];break;}}return _0x3fd8aa&&(_0x561b42[_0x1cb169(0x143)]=_0x561b42['vod_play_from']['replace'](_0x1cb169(0x17f),_0x1cb169(0x172)),_0x561b42[_0x1cb169(0x143)]=_0x561b42['vod_play_from'][_0x1cb169(0x14c)](_0x1cb169(0x18d),_0x1cb169(0x1a9)),_0x561b42[_0x1cb169(0x143)]=_0x561b42[_0x1cb169(0x143)][_0x1cb169(0x14c)]('线路3',_0x1cb169(0x135)),_0x561b42[_0x1cb169(0x143)]=_0x561b42[_0x1cb169(0x143)][_0x1cb169(0x14c)](_0x1cb169(0x1a8),_0x1cb169(0x148))),_0x210125={'list':[_0x561b42]},JSON[_0x1cb169(0x157)](_0x210125);}function play(_0x5ac9a9,_0x426fb7,_0x542a27){const _0xeca50=_0x3c0fe8;let _0x40a002={};return _0x426fb7[_0xeca50(0x192)](_0xeca50(0x144))!=-0x1&&(_0x426fb7=m_parse_url(_0x426fb7)),_0x426fb7[_0xeca50(0x167)](/youtube\.com/m)&&(_0x426fb7=direct_play_youtube3(_0x426fb7)),_0x40a002={'parse':'0','jx':'0','headers':'','playUrl':'','url':_0x426fb7},JSON[_0xeca50(0x157)](_0x40a002);}__JS_SPIDER__={'init':init,'home':home,'homeVod':homeVod,'category':category,'detail':detail,'play':play,'search':search};
+176
View File
@@ -0,0 +1,176 @@
{
//apple24.cc
//回家地址 → https://av6k.com/数字改
//https://av6k.com/
"规则名": "av6k-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://av6k.com",
"首页列表数组规则": ".newVideo",
"首页片单列表数组规则": ".listAC",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "a&&title",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "'📅'+.video-added&&Text+'👁️'+.video-views&&Text",
"首页片单链接加前缀": "https://av6k.com",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://hscangku.com/vodshow/{cateId}-{catePg}/",
"分类链接": "https://av6k.com{cateId}_{catePg}.html",
"分类名称": "日韩无码&日韩有码&中文字幕&国产AV&FC2无码&自拍偷拍&欧美无码&成人动漫",
"分类名称替换词": "/rihanwuma/2&/rihanyouma/3&/jxny/11&/chinese-av-porn/17&/fc2/8&/surenzipai/4&/oumeiwuma/1&/chengrendongman/5",
"分类截取模式": "1",
"分类列表数组规则": ".newVideo&&.listAC",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": "'📅'+.video-added&&Text+'👁️'+.video-views&&Text",
"分类片单链接加前缀": "https://av6k.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://av6k.com/search/{wd}.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".newVideo&&.listAC",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": ".listAC&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "'📅'+.video-added&&Text+'👁️'+.video-views&&Text",
"搜索片单链接加前缀": "https://av6k.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"0",
"类型详情": "<p>類型:&&</p>",
"年代详情": "<p>更新:&&</p>",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": ".play-btn-group&&.line",
"线路标题": "'📽️'+a&&Text+'📺'",
"播放列表数组规则": ".line",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://av6k.com",
"选集链接加后缀": "",
"筛选数据":{
"/vodshow/1":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/vodshow/1","n":"全部"},
{"v":"/vodshow/6","n":"国产自拍"},
{"v":"/vodshow/7","n":"主播大秀"},
{"v":"/vodshow/8","n":"探花约啪"},
{"v":"/vodshow/9","n":"国产番号"},
{"v":"/vodshow/10","n":"网红少女"},
{"v":"/vodshow/11","n":"偷窥偷拍"}]},
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/2":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/vodshow/2","n":"全部"},
{"v":"/vodshow/13","n":"日本无码"},
{"v":"/vodshow/14","n":"中文字幕"},
{"v":"/vodshow/15","n":"日韩有码"},
{"v":"/vodshow/16","n":"AV解说"}]},
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/21":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/3":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/4":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/5":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/20":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/22":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
]
},
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "baidu.com"
}
+247
View File
@@ -0,0 +1,247 @@
{
"规则名": "BAD-XYQHiker",
"规则作者": "飞鱼",
"请求头参数":"手机",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据": "0",
//首页推荐数据获取链接
"首页推荐链接": "https://bad.news/search/q-学生",
//首页推荐列表数组截取。
"首页列表数组规则": "#item-container",
//首页推荐片单列表数组定位。
"首页片单列表数组规则": "table",
//首页推荐片单信息jsoup与正则截取写法切换,只作用于html网页,1为jsoup写法(默认),0为正则截取写法
"首页片单是否Jsoup写法":"1",
//下面这六个首页数据如果不填将调用分类那截取的配置(片单写法需一致且取值也得一致)。
//首页片单标题
"首页片单标题": "h3&&a&&Text",
//首页推荐片单链接
"首页片单链接": "h3&&a&&href",
//首页推荐片单图片,支持自定义图片链接
"首页片单图片": ".my-videos&&poster",
//首页推荐片单副标题
"首页片单副标题":".ct-time&&Text",
//首页推荐片单链接补前缀
"首页片单链接加前缀": "https://bad.news",
//首页推荐片单链接补后缀
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://www.l0l.tv/index.php/vod/show/id/{cateId}/page/{catePg}.html",
"分类链接": "https://bad.news{cateId}{by}/page-{catePg}",
"分类名称": "热门&无码&中字&周榜&月榜&主题分类&短视频&长视频&动漫",
"分类名称替换词": "/av&/av/search/type-tags/q-無碼流出&/av/search/q-中文字幕/via-log&/av/rank-week&/av/rank-month&/av/search/type-tags/q-黑丝&/tag/porn&/tag/long-porn&/dm",
//"筛选数据":{},
"分类截取模式": "1",
"分类列表数组规则": ".stui-vodlist.clearfix||#item-container&&table:not(:contains(ActivityPub))||li:not(:contains(ActivityPub))",
"分类片单是否Jsoup写法":"1",
"分类片单标题": "h3||h4&&a&&Text",
"分类片单链接": "h3||h4&&a&&href",
"分类片单图片": ".my-videos||a&&poster||data-echo-background",
"分类片单副标题":".ct-time&&Text",
"分类片单链接加前缀":"https://bad.news",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$手机",
"搜索链接": "https://bad.news/search/q-{wd}",
"POST请求数据":"0",
"搜索截取模式": "1",
"搜索列表数组规则": "#item-container&&table",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": ".my-videos&&poster",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题":".ct-time&&Text",
"搜索片单链接加前缀": "https://bad.news",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"1",
"类型详情": ".detail-content&&p:has(:contains(标签))&&Text!标签:",
"年代详情": "",
"地区详情": "",
"演员详情": ".detail-content&&a,0&&title",
"简介详情": ".detail-content&&.desc.margin-0&&Text",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": ".col-lg-12.clearfix||.coverimg",
"选集列表数组规则": "video",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "'播放'",
"选集链接": "video&&data-source",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"0",
"手动嗅探视频链接关键词":".mp4#.m3u8#.flv",
"手动嗅探视频链接过滤词":".html#=http",
"筛选数据":{
"/av/search/type-tags/q-黑丝":[
{"key":"cateId","name":"分类","value":[
{"v":"/av/search/type-tags/q-黑丝","n":"黑丝"},
{"v":"/av/search/type-tags/q-过膝袜","n":"过膝袜"},
{"v":"/av/search/type-tags/q-运动裝","n":"运动裝"},
{"v":"/av/search/type-tags/q-肉丝","n":"肉丝"},
{"v":"/av/search/type-tags/q-丝袜","n":"丝袜"},
{"v":"/av/search/type-tags/q-眼镜娘","n":"眼镜娘"},
{"v":"/av/search/type-tags/q-兽耳","n":"兽耳"},
{"v":"/av/search/type-tags/q-渔网","n":"渔网"},
{"v":"/av/search/type-tags/q-水着","n":"水着"},
{"v":"/av/search/type-tags/q-校服","n":"校服"},
{"v":"/av/search/type-tags/q-旗袍","n":"旗袍"},
{"v":"/av/search/type-tags/q-婚纱","n":"婚纱"},
{"v":"/av/search/type-tags/q-女仆","n":"女仆"},
{"v":"/av/search/type-tags/q-和服","n":"和服"},
{"v":"/av/search/type-tags/q-吊带袜","n":"吊带袜"},
{"v":"/av/search/type-tags/q-兔女郎","n":"兔女郎"},
{"v":"/av/search/type-tags/q-Cosplay","n":"Cosplay"},
{"v":"/av/search/type-tags/q-黑肉","n":"黑肉"},
{"v":"/av/search/type-tags/q-长身","n":"长身"},
{"v":"/av/search/type-tags/q-软体","n":"软体"},
{"v":"/av/search/type-tags/q-贫乳","n":"贫乳"},
{"v":"/av/search/type-tags/q-萝莉","n":"萝莉"},
{"v":"/av/search/type-tags/q-美腿","n":"美腿"},
{"v":"/av/search/type-tags/q-美尻","n":"美尻"},
{"v":"/av/search/type-tags/q-纹身","n":"纹身"},
{"v":"/av/search/type-tags/q-短发","n":"短发"},
{"v":"/av/search/type-tags/q-白虎","n":"白虎"},
{"v":"/av/search/type-tags/q-熟女","n":"熟女"},
{"v":"/av/search/type-tags/q-巨乳","n":"巨乳"},
{"v":"/av/search/type-tags/q-少女","n":"少女"},
{"v":"/av/search/type-tags/q-颜射","n":"颜射"},
{"v":"/av/search/type-tags/q-脚交","n":"脚交"},
{"v":"/av/search/type-tags/q-肛交","n":"肛交"},
{"v":"/av/search/type-tags/q-痉挛","n":"痉挛"},
{"v":"/av/search/type-tags/q-潮吹","n":"潮吹"},
{"v":"/av/search/type-tags/q-深喉","n":"深喉"},
{"v":"/av/search/type-tags/q-接吻","n":"接吻"},
{"v":"/av/search/type-tags/q-口爆","n":"口爆"},
{"v":"/av/search/type-tags/q-口交","n":"口交"},
{"v":"/av/search/type-tags/q-乳交","n":"乳交"},
{"v":"/av/search/type-tags/q-中出","n":"中出"},
{"v":"/av/search/type-tags/q-露出","n":"露出"},
{"v":"/av/search/type-tags/q-轮奸","n":"轮奸"},
{"v":"/av/search/type-tags/q-调教","n":"调教"},
{"v":"/av/search/type-tags/q-捆绑","n":"捆绑"},
{"v":"/av/search/type-tags/q-瞬间插入","n":"瞬间插入"},
{"v":"/av/search/type-tags/q-痴汉","n":"痴汉"},
{"v":"/av/search/type-tags/q-痴女","n":"痴女"},
{"v":"/av/search/type-tags/q-男M","n":"男M"},
{"v":"/av/search/type-tags/q-泥醉","n":"泥醉"},
{"v":"/av/search/type-tags/q-泡姬","n":"泡姬"},
{"v":"/av/search/type-tags/q-母乳","n":"母乳"},
{"v":"/av/search/type-tags/q-放尿","n":"放尿"},
{"v":"/av/search/type-tags/q-按摩","n":"按摩"},
{"v":"/av/search/type-tags/q-强奸","n":"强奸"},
{"v":"/av/search/type-tags/q-多P","n":"多P"},
{"v":"/av/search/type-tags/q-刑具","n":"刑具"},
{"v":"/av/search/type-tags/q-凌辱","n":"凌辱"},
{"v":"/av/search/type-tags/q-一日十回","n":"一日十回"},
{"v":"/av/search/type-tags/q-3P","n":"3P"},
{"v":"/av/search/type-tags/q-黑人","n":"黑人"},
{"v":"/av/search/type-tags/q-丑男","n":"丑男"},
{"v":"/av/search/type-tags/q-诱惑","n":"诱惑"},
{"v":"/av/search/type-tags/q-童贞","n":"童贞"},
{"v":"/av/search/type-tags/q-时间停止","n":"时间停止"},
{"v":"/av/search/type-tags/q-复仇","n":"复仇"},
{"v":"/av/search/type-tags/q-年龄差","n":"年龄差"},
{"v":"/av/search/type-tags/q-巨汉","n":"巨汉"},
{"v":"/av/search/type-tags/q-媚药","n":"媚药"},
{"v":"/av/search/type-tags/q-夫目前犯","n":"夫目前犯"},
{"v":"/av/search/type-tags/q-出轨","n":"出轨"},
{"v":"/av/search/type-tags/q-催眠","n":"催眠"},
{"v":"/av/search/type-tags/q-偷拍","n":"偷拍"},
{"v":"/av/search/type-tags/q-不伦","n":"不伦"},
{"v":"/av/search/type-tags/q-下雨天","n":"下雨天"},
{"v":"/av/search/type-tags/q-NTR","n":"NTR"},
{"v":"/av/search/type-tags/q-风俗娘","n":"风俗娘"},
{"v":"/av/search/type-tags/q-医生","n":"医生"},
{"v":"/av/search/type-tags/q-逃犯","n":"逃犯"},
{"v":"/av/search/type-tags/q-护士","n":"护士"},
{"v":"/av/search/type-tags/q-老师","n":"老师"},
{"v":"/av/search/type-tags/q-空姐","n":"空姐"},
{"v":"/av/search/type-tags/q-球队经理","n":"球队经理"},
{"v":"/av/search/type-tags/q-未亡人","n":"未亡人"},
{"v":"/av/search/type-tags/q-搜查官","n":"搜查官"},
{"v":"/av/search/type-tags/q-情侣","n":"情侣"},
{"v":"/av/search/type-tags/q-家政妇","n":"家政妇"},
{"v":"/av/search/type-tags/q-家庭教師","n":"家庭教師"},
{"v":"/av/search/type-tags/q-偶像","n":"偶像"},
{"v":"/av/search/type-tags/q-人妻","n":"人妻"},
{"v":"/av/search/type-tags/q-主播","n":"主播"},
{"v":"/av/search/type-tags/q-OL","n":"OL"},
{"v":"/av/search/type-tags/q-魔镜号","n":"魔镜号"},
{"v":"/av/search/type-tags/q-电车","n":"电车"},
{"v":"/av/search/type-tags/q-处女","n":"处女"},
{"v":"/av/search/type-tags/q-监狱","n":"监狱"},
{"v":"/av/search/type-tags/q-温泉","n":"温泉"},
{"v":"/av/search/type-tags/q-洗浴场","n":"洗浴场"},
{"v":"/av/search/type-tags/q-泳池","n":"泳池"},
{"v":"/av/search/type-tags/q-汽车","n":"汽车"},
{"v":"/av/search/type-tags/q-厕所","n":"厕所"},
{"v":"/av/search/type-tags/q-学校","n":"学校"},
{"v":"/av/search/type-tags/q-图书馆","n":"图书馆"},
{"v":"/av/search/type-tags/q-健身房","n":"健身房"},
{"v":"/av/search/type-tags/q-便利店","n":"便利店"},
{"v":"/av/search/type-tags/q-录像","n":"录像"},
{"v":"/av/search/type-tags/q-处女作/引退作","n":"处女作/引退作"},
{"v":"/av/search/type-tags/q-综艺","n":"综艺"},
{"v":"/av/search/type-tags/q-节日主题","n":"节日主题"},
{"v":"/av/search/type-tags/q-感谢祭","n":"感谢祭"},
{"v":"/av/search/type-tags/q-4小时以上","n":"4小时以上"}
]
}
],
"/dm":[
{"key":"cateId","name":"分类","value":[
{"v":"/dm","n":"动漫"},
{"v":"/dm/type/q-3D","n":"3d动漫"},
{"v":"/dm/type/q-%E5%90%8C%E4%BA%BA","n":"同人作品"},
{"v":"/dm/type/q-Cosplay","n":"Cosplay"}
]
}],
"sort/id/295":[
{"key":"cateId","name":"分类","value":[
{"v":"sort/id/295","n":"无码专区"},
{"v":"sort/id/297","n":"制服诱惑"},
{"v":"sort/id/298","n":"三级伦理"},
{"v":"sort/id/299","n":"AI换脸"},
{"v":"sort/id/300","n":"中文字幕"},
{"v":"sort/id/301","n":"卡通动漫"},
{"v":"sort/id/302","n":"欧美系列"},
{"v":"sort/id/303","n":"美女主播"},
{"v":"sort/id/304","n":"国产自拍"},
{"v":"sort/id/305","n":"熟女人妻"},
{"v":"sort/id/306","n":"萝莉少女"},
{"v":"sort/id/307","n":"女同性爱"},
{"v":"sort/id/308","n":"多人群交"},
{"v":"sort/id/309","n":"美乳巨乳"},
{"v":"sort/id/310","n":"强奸乱伦"},
{"v":"sort/id/311","n":"抖阴视频"},
{"v":"sort/id/312","n":"韩国主播"},
{"v":"sort/id/313","n":"网红头条"},
{"v":"sort/id/314","n":"网爆黑料"},
{"v":"sort/id/315","n":"欧美无码"},
{"v":"sort/id/316","n":"女优明星"},
{"v":"sort/id/317","n":"SM调教"},
{"v":"sort/id/326","n":"AV解说"}
]}],
"/tag/porn":[
{"key":"by",
"name":"排序",
"value":[
{"v":"/sort-new","n":"最新"},
{"v":"/sort-hot","n":"热门"},
{"v":"/sort-score","n":"最高分"},
{"v":"/sort-better","n":"精选"}]}
]}
}
+248
View File
@@ -0,0 +1,248 @@
{
"规则名": "BAD.news搜索1-XYQHiker",
"规则作者": "飞鱼",
"请求头参数":"手机",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据": "0",
//首页推荐数据获取链接
"首页推荐链接": "https://bad.news/search/q-学生",
//首页推荐列表数组截取。
"首页列表数组规则": "#item-container",
//首页推荐片单列表数组定位。
"首页片单列表数组规则": "table",
//首页推荐片单信息jsoup与正则截取写法切换,只作用于html网页,1为jsoup写法(默认),0为正则截取写法
"首页片单是否Jsoup写法":"1",
//下面这六个首页数据如果不填将调用分类那截取的配置(片单写法需一致且取值也得一致)。
//首页片单标题
"首页片单标题": "h3&&a&&Text",
//首页推荐片单链接
"首页片单链接": "h3&&a&&href",
//首页推荐片单图片,支持自定义图片链接
"首页片单图片": ".my-videos&&poster",
//首页推荐片单副标题
"首页片单副标题":".ct-time&&Text",
//首页推荐片单链接补前缀
"首页片单链接加前缀": "https://bad.news",
//首页推荐片单链接补后缀
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://www.l0l.tv/index.php/vod/show/id/{cateId}/page/{catePg}.html",
"分类链接": "https://bad.news{cateId}{by}/page-{catePg}",
"分类名称": "热门&无码&中字&周榜&月榜&主题分类&短视频&长视频&动漫",
"分类名称替换词": "/av&/av/search/type-tags/q-無碼流出&/av/search/q-中文字幕/via-log&/av/rank-week&/av/rank-month&/av/search/type-tags/q-黑丝&/tag/porn&/tag/long-porn&/dm",
//"筛选数据":{},
"分类截取模式": "1",
"分类列表数组规则": ".stui-vodlist.clearfix||#item-container&&table:not(:contains(ActivityPub))||li:not(:contains(ActivityPub))",
"分类片单是否Jsoup写法":"1",
"分类片单标题": "h3||h4&&a&&Text",
"分类片单链接": "h3||h4&&a&&href",
"分类片单图片": ".my-videos||a&&poster||data-echo-background",
"分类片单副标题":".ct-time&&Text",
"分类片单链接加前缀":"https://bad.news",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$手机",
"搜索链接": "https://bad.news/av/search/q-{wd}",
"POST请求数据":"0",
"搜索截取模式": "1",
"搜索列表数组规则": "#item-container&&table",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": ".my-videos&&poster",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题":".ct-time&&Text",
"搜索片单链接加前缀": "https://bad.news",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"1",
"类型详情": ".detail-content&&p:has(:contains(标签))&&Text!标签:",
"年代详情": "",
"地区详情": "",
"演员详情": ".detail-content&&a,0&&title",
"简介详情": ".detail-content&&.desc.margin-0&&Text",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": ".col-lg-12.clearfix||.coverimg",
"选集列表数组规则": "video",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "'播放'",
"选集链接": "video&&data-source",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"0",
"手动嗅探视频链接关键词":".mp4#.m3u8#.flv",
"手动嗅探视频链接过滤词":".html#=http",
"筛选数据":{
"/av/search/type-tags/q-黑丝":[
{"key":"cateId","name":"分类","value":[
{"v":"/av/search/type-tags/q-黑丝","n":"黑丝"},
{"v":"/av/search/type-tags/q-过膝袜","n":"过膝袜"},
{"v":"/av/search/type-tags/q-运动裝","n":"运动裝"},
{"v":"/av/search/type-tags/q-肉丝","n":"肉丝"},
{"v":"/av/search/type-tags/q-丝袜","n":"丝袜"},
{"v":"/av/search/type-tags/q-眼镜娘","n":"眼镜娘"},
{"v":"/av/search/type-tags/q-兽耳","n":"兽耳"},
{"v":"/av/search/type-tags/q-渔网","n":"渔网"},
{"v":"/av/search/type-tags/q-水着","n":"水着"},
{"v":"/av/search/type-tags/q-校服","n":"校服"},
{"v":"/av/search/type-tags/q-旗袍","n":"旗袍"},
{"v":"/av/search/type-tags/q-婚纱","n":"婚纱"},
{"v":"/av/search/type-tags/q-女仆","n":"女仆"},
{"v":"/av/search/type-tags/q-和服","n":"和服"},
{"v":"/av/search/type-tags/q-吊带袜","n":"吊带袜"},
{"v":"/av/search/type-tags/q-兔女郎","n":"兔女郎"},
{"v":"/av/search/type-tags/q-Cosplay","n":"Cosplay"},
{"v":"/av/search/type-tags/q-黑肉","n":"黑肉"},
{"v":"/av/search/type-tags/q-长身","n":"长身"},
{"v":"/av/search/type-tags/q-软体","n":"软体"},
{"v":"/av/search/type-tags/q-贫乳","n":"贫乳"},
{"v":"/av/search/type-tags/q-萝莉","n":"萝莉"},
{"v":"/av/search/type-tags/q-美腿","n":"美腿"},
{"v":"/av/search/type-tags/q-美尻","n":"美尻"},
{"v":"/av/search/type-tags/q-纹身","n":"纹身"},
{"v":"/av/search/type-tags/q-短发","n":"短发"},
{"v":"/av/search/type-tags/q-白虎","n":"白虎"},
{"v":"/av/search/type-tags/q-熟女","n":"熟女"},
{"v":"/av/search/type-tags/q-巨乳","n":"巨乳"},
{"v":"/av/search/type-tags/q-少女","n":"少女"},
{"v":"/av/search/type-tags/q-颜射","n":"颜射"},
{"v":"/av/search/type-tags/q-脚交","n":"脚交"},
{"v":"/av/search/type-tags/q-肛交","n":"肛交"},
{"v":"/av/search/type-tags/q-痉挛","n":"痉挛"},
{"v":"/av/search/type-tags/q-潮吹","n":"潮吹"},
{"v":"/av/search/type-tags/q-深喉","n":"深喉"},
{"v":"/av/search/type-tags/q-接吻","n":"接吻"},
{"v":"/av/search/type-tags/q-口爆","n":"口爆"},
{"v":"/av/search/type-tags/q-口交","n":"口交"},
{"v":"/av/search/type-tags/q-乳交","n":"乳交"},
{"v":"/av/search/type-tags/q-中出","n":"中出"},
{"v":"/av/search/type-tags/q-露出","n":"露出"},
{"v":"/av/search/type-tags/q-轮奸","n":"轮奸"},
{"v":"/av/search/type-tags/q-调教","n":"调教"},
{"v":"/av/search/type-tags/q-捆绑","n":"捆绑"},
{"v":"/av/search/type-tags/q-瞬间插入","n":"瞬间插入"},
{"v":"/av/search/type-tags/q-痴汉","n":"痴汉"},
{"v":"/av/search/type-tags/q-痴女","n":"痴女"},
{"v":"/av/search/type-tags/q-男M","n":"男M"},
{"v":"/av/search/type-tags/q-泥醉","n":"泥醉"},
{"v":"/av/search/type-tags/q-泡姬","n":"泡姬"},
{"v":"/av/search/type-tags/q-母乳","n":"母乳"},
{"v":"/av/search/type-tags/q-放尿","n":"放尿"},
{"v":"/av/search/type-tags/q-按摩","n":"按摩"},
{"v":"/av/search/type-tags/q-强奸","n":"强奸"},
{"v":"/av/search/type-tags/q-多P","n":"多P"},
{"v":"/av/search/type-tags/q-刑具","n":"刑具"},
{"v":"/av/search/type-tags/q-凌辱","n":"凌辱"},
{"v":"/av/search/type-tags/q-一日十回","n":"一日十回"},
{"v":"/av/search/type-tags/q-3P","n":"3P"},
{"v":"/av/search/type-tags/q-黑人","n":"黑人"},
{"v":"/av/search/type-tags/q-丑男","n":"丑男"},
{"v":"/av/search/type-tags/q-诱惑","n":"诱惑"},
{"v":"/av/search/type-tags/q-童贞","n":"童贞"},
{"v":"/av/search/type-tags/q-时间停止","n":"时间停止"},
{"v":"/av/search/type-tags/q-复仇","n":"复仇"},
{"v":"/av/search/type-tags/q-年龄差","n":"年龄差"},
{"v":"/av/search/type-tags/q-巨汉","n":"巨汉"},
{"v":"/av/search/type-tags/q-媚药","n":"媚药"},
{"v":"/av/search/type-tags/q-夫目前犯","n":"夫目前犯"},
{"v":"/av/search/type-tags/q-出轨","n":"出轨"},
{"v":"/av/search/type-tags/q-催眠","n":"催眠"},
{"v":"/av/search/type-tags/q-偷拍","n":"偷拍"},
{"v":"/av/search/type-tags/q-不伦","n":"不伦"},
{"v":"/av/search/type-tags/q-下雨天","n":"下雨天"},
{"v":"/av/search/type-tags/q-NTR","n":"NTR"},
{"v":"/av/search/type-tags/q-风俗娘","n":"风俗娘"},
{"v":"/av/search/type-tags/q-医生","n":"医生"},
{"v":"/av/search/type-tags/q-逃犯","n":"逃犯"},
{"v":"/av/search/type-tags/q-护士","n":"护士"},
{"v":"/av/search/type-tags/q-老师","n":"老师"},
{"v":"/av/search/type-tags/q-空姐","n":"空姐"},
{"v":"/av/search/type-tags/q-球队经理","n":"球队经理"},
{"v":"/av/search/type-tags/q-未亡人","n":"未亡人"},
{"v":"/av/search/type-tags/q-搜查官","n":"搜查官"},
{"v":"/av/search/type-tags/q-情侣","n":"情侣"},
{"v":"/av/search/type-tags/q-家政妇","n":"家政妇"},
{"v":"/av/search/type-tags/q-家庭教師","n":"家庭教師"},
{"v":"/av/search/type-tags/q-偶像","n":"偶像"},
{"v":"/av/search/type-tags/q-人妻","n":"人妻"},
{"v":"/av/search/type-tags/q-主播","n":"主播"},
{"v":"/av/search/type-tags/q-OL","n":"OL"},
{"v":"/av/search/type-tags/q-魔镜号","n":"魔镜号"},
{"v":"/av/search/type-tags/q-电车","n":"电车"},
{"v":"/av/search/type-tags/q-处女","n":"处女"},
{"v":"/av/search/type-tags/q-监狱","n":"监狱"},
{"v":"/av/search/type-tags/q-温泉","n":"温泉"},
{"v":"/av/search/type-tags/q-洗浴场","n":"洗浴场"},
{"v":"/av/search/type-tags/q-泳池","n":"泳池"},
{"v":"/av/search/type-tags/q-汽车","n":"汽车"},
{"v":"/av/search/type-tags/q-厕所","n":"厕所"},
{"v":"/av/search/type-tags/q-学校","n":"学校"},
{"v":"/av/search/type-tags/q-图书馆","n":"图书馆"},
{"v":"/av/search/type-tags/q-健身房","n":"健身房"},
{"v":"/av/search/type-tags/q-便利店","n":"便利店"},
{"v":"/av/search/type-tags/q-录像","n":"录像"},
{"v":"/av/search/type-tags/q-处女作/引退作","n":"处女作/引退作"},
{"v":"/av/search/type-tags/q-综艺","n":"综艺"},
{"v":"/av/search/type-tags/q-节日主题","n":"节日主题"},
{"v":"/av/search/type-tags/q-感谢祭","n":"感谢祭"},
{"v":"/av/search/type-tags/q-4小时以上","n":"4小时以上"}
]
}
],
"/dm":[
{"key":"cateId","name":"分类","value":[
{"v":"/dm","n":"动漫"},
{"v":"/dm/type/q-3D","n":"3d动漫"},
{"v":"/dm/type/q-%E5%90%8C%E4%BA%BA","n":"同人作品"},
{"v":"/dm/type/q-Cosplay","n":"Cosplay"}
]
}],
"sort/id/295":[
{"key":"cateId","name":"分类","value":[
{"v":"sort/id/295","n":"无码专区"},
{"v":"sort/id/297","n":"制服诱惑"},
{"v":"sort/id/298","n":"三级伦理"},
{"v":"sort/id/299","n":"AI换脸"},
{"v":"sort/id/300","n":"中文字幕"},
{"v":"sort/id/301","n":"卡通动漫"},
{"v":"sort/id/302","n":"欧美系列"},
{"v":"sort/id/303","n":"美女主播"},
{"v":"sort/id/304","n":"国产自拍"},
{"v":"sort/id/305","n":"熟女人妻"},
{"v":"sort/id/306","n":"萝莉少女"},
{"v":"sort/id/307","n":"女同性爱"},
{"v":"sort/id/308","n":"多人群交"},
{"v":"sort/id/309","n":"美乳巨乳"},
{"v":"sort/id/310","n":"强奸乱伦"},
{"v":"sort/id/311","n":"抖阴视频"},
{"v":"sort/id/312","n":"韩国主播"},
{"v":"sort/id/313","n":"网红头条"},
{"v":"sort/id/314","n":"网爆黑料"},
{"v":"sort/id/315","n":"欧美无码"},
{"v":"sort/id/316","n":"女优明星"},
{"v":"sort/id/317","n":"SM调教"},
{"v":"sort/id/326","n":"AV解说"}
]}],
"/tag/porn":[
{"key":"by",
"name":"排序",
"value":[
{"v":"/sort-new","n":"最新"},
{"v":"/sort-hot","n":"热门"},
{"v":"/sort-score","n":"最高分"},
{"v":"/sort-better","n":"精选"}]}
]}
}
+1192
View File
@@ -0,0 +1,1192 @@
{
"hot_gaia": [
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "热度",
"v": "recommend"
},
{
"n": "最新",
"v": "time"
},
{
"n": "评分",
"v": "rank"
}
]
},
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "全部"
},
{
"n": "华语",
"v": "华语"
},
{
"n": "欧美",
"v": "欧美"
},
{
"n": "韩国",
"v": "韩国"
},
{
"n": "日本",
"v": "日本"
}
]
}
],
"tv_hot": [
{
"key": "type",
"name": "分类",
"value": [
{
"n": "综合",
"v": ""
},
{
"n": "国产剧",
"v": "国产剧"
},
{
"n": "欧美剧",
"v": "欧美"
},
{
"n": "港剧",
"v": "香港"
},
{
"n": "台剧",
"v": "台湾"
},
{
"n": "日剧",
"v": "日剧"
},
{
"n": "韩剧",
"v": "韩剧"
},
{
"n": "动画",
"v": "动画"
}
]
}
],
"show_hot": [
{
"key": "type",
"name": "分类",
"value": [
{
"n": "综合",
"v": ""
},
{
"n": "国内",
"v": "中国"
},
{
"n": "香港",
"v": "香港"
},
{
"n": "台湾",
"v": "台湾"
},
{
"n": "国外",
"v": "国外"
}
]
}
],
"movie": [
{
"key": "类型",
"name": "类型",
"value": [
{
"n": "全部类型",
"v": ""
},
{
"n": "喜剧",
"v": "喜剧"
},
{
"n": "爱情",
"v": "爱情"
},
{
"n": "动作",
"v": "动作"
},
{
"n": "科幻",
"v": "科幻"
},
{
"n": "动画",
"v": "动画"
},
{
"n": "悬疑",
"v": "悬疑"
},
{
"n": "犯罪",
"v": "犯罪"
},
{
"n": "惊悚",
"v": "惊悚"
},
{
"n": "冒险",
"v": "冒险"
},
{
"n": "音乐",
"v": "音乐"
},
{
"n": "历史",
"v": "历史"
},
{
"n": "奇幻",
"v": "奇幻"
},
{
"n": "恐怖",
"v": "恐怖"
},
{
"n": "战争",
"v": "战争"
},
{
"n": "传记",
"v": "传记"
},
{
"n": "歌舞",
"v": "歌舞"
},
{
"n": "武侠",
"v": "武侠"
},
{
"n": "情色",
"v": "情色"
},
{
"n": "灾难",
"v": "灾难"
},
{
"n": "西部",
"v": "西部"
},
{
"n": "纪录片",
"v": "纪录片"
},
{
"n": "短片",
"v": "短片"
}
]
},
{
"key": "地区",
"name": "地区",
"value": [
{
"n": "全部地区",
"v": ""
},
{
"n": "华语",
"v": "华语"
},
{
"n": "欧美",
"v": "欧美"
},
{
"n": "韩国",
"v": "韩国"
},
{
"n": "日本",
"v": "日本"
},
{
"n": "中国大陆",
"v": "中国大陆"
},
{
"n": "美国",
"v": "美国"
},
{
"n": "中国香港",
"v": "中国香港"
},
{
"n": "中国台湾",
"v": "中国台湾"
},
{
"n": "英国",
"v": "英国"
},
{
"n": "法国",
"v": "法国"
},
{
"n": "德国",
"v": "德国"
},
{
"n": "意大利",
"v": "意大利"
},
{
"n": "西班牙",
"v": "西班牙"
},
{
"n": "印度",
"v": "印度"
},
{
"n": "泰国",
"v": "泰国"
},
{
"n": "俄罗斯",
"v": "俄罗斯"
},
{
"n": "加拿大",
"v": "加拿大"
},
{
"n": "澳大利亚",
"v": "澳大利亚"
},
{
"n": "爱尔兰",
"v": "爱尔兰"
},
{
"n": "瑞典",
"v": "瑞典"
},
{
"n": "巴西",
"v": "巴西"
},
{
"n": "丹麦",
"v": "丹麦"
}
]
},
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "近期热度",
"v": "T"
},
{
"n": "首映时间",
"v": "R"
},
{
"n": "高分优先",
"v": "S"
}
]
},
{
"key": "年代",
"name": "年代",
"value": [
{
"n": "全部年代",
"v": ""
},
{
"n": "2025",
"v": "2025"
},
{
"n": "2024",
"v": "2024"
},
{
"n": "2023",
"v": "2023"
},
{
"n": "2022",
"v": "2022"
},
{
"n": "2021",
"v": "2021"
},
{
"n": "2020",
"v": "2020"
},
{
"n": "2019",
"v": "2019"
},
{
"n": "2010年代",
"v": "2010年代"
},
{
"n": "2000年代",
"v": "2000年代"
},
{
"n": "90年代",
"v": "90年代"
},
{
"n": "80年代",
"v": "80年代"
},
{
"n": "70年代",
"v": "70年代"
},
{
"n": "60年代",
"v": "60年代"
},
{
"n": "更早",
"v": "更早"
}
]
}
],
"tv": [
{
"key": "类型",
"name": "类型",
"value": [
{
"n": "不限",
"v": ""
},
{
"n": "电视剧",
"v": "电视剧"
},
{
"n": "综艺",
"v": "综艺"
}
]
},
{
"key": "电视剧形式",
"name": "电视剧形式",
"value": [
{
"n": "不限",
"v": ""
},
{
"n": "喜剧",
"v": "喜剧"
},
{
"n": "爱情",
"v": "爱情"
},
{
"n": "悬疑",
"v": "悬疑"
},
{
"n": "动画",
"v": "动画"
},
{
"n": "武侠",
"v": "武侠"
},
{
"n": "古装",
"v": "古装"
},
{
"n": "家庭",
"v": "家庭"
},
{
"n": "犯罪",
"v": "犯罪"
},
{
"n": "科幻",
"v": "科幻"
},
{
"n": "恐怖",
"v": "恐怖"
},
{
"n": "历史",
"v": "历史"
},
{
"n": "战争",
"v": "战争"
},
{
"n": "动作",
"v": "动作"
},
{
"n": "冒险",
"v": "冒险"
},
{
"n": "传记",
"v": "传记"
},
{
"n": "剧情",
"v": "剧情"
},
{
"n": "奇幻",
"v": "奇幻"
},
{
"n": "惊悚",
"v": "惊悚"
},
{
"n": "灾难",
"v": "灾难"
},
{
"n": "歌舞",
"v": "歌舞"
},
{
"n": "音乐",
"v": "音乐"
}
]
},
{
"key": "综艺形式",
"name": "综艺形式",
"value": [
{
"n": "不限",
"v": ""
},
{
"n": "真人秀",
"v": "真人秀"
},
{
"n": "脱口秀",
"v": "脱口秀"
},
{
"n": "音乐",
"v": "音乐"
},
{
"n": "歌舞",
"v": "歌舞"
}
]
},
{
"key": "地区",
"name": "地区",
"value": [
{
"n": "全部地区",
"v": ""
},
{
"n": "华语",
"v": "华语"
},
{
"n": "欧美",
"v": "欧美"
},
{
"n": "国外",
"v": "国外"
},
{
"n": "韩国",
"v": "韩国"
},
{
"n": "日本",
"v": "日本"
},
{
"n": "中国大陆",
"v": "中国大陆"
},
{
"n": "中国香港",
"v": "中国香港"
},
{
"n": "美国",
"v": "美国"
},
{
"n": "英国",
"v": "英国"
},
{
"n": "泰国",
"v": "泰国"
},
{
"n": "中国台湾",
"v": "中国台湾"
},
{
"n": "意大利",
"v": "意大利"
},
{
"n": "法国",
"v": "法国"
},
{
"n": "德国",
"v": "德国"
},
{
"n": "西班牙",
"v": "西班牙"
},
{
"n": "俄罗斯",
"v": "俄罗斯"
},
{
"n": "瑞典",
"v": "瑞典"
},
{
"n": "巴西",
"v": "巴西"
},
{
"n": "丹麦",
"v": "丹麦"
},
{
"n": "印度",
"v": "印度"
},
{
"n": "加拿大",
"v": "加拿大"
},
{
"n": "爱尔兰",
"v": "爱尔兰"
},
{
"n": "澳大利亚",
"v": "澳大利亚"
}
]
},
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "近期热度",
"v": "T"
},
{
"n": "首播时间",
"v": "R"
},
{
"n": "高分优先",
"v": "S"
}
]
},
{
"key": "年代",
"name": "年代",
"value": [
{
"n": "全部",
"v": ""
},
{
"n": "2025",
"v": "2025"
},
{
"n": "2024",
"v": "2024"
},
{
"n": "2023",
"v": "2023"
},
{
"n": "2022",
"v": "2022"
},
{
"n": "2021",
"v": "2021"
},
{
"n": "2020",
"v": "2020"
},
{
"n": "2019",
"v": "2019"
},
{
"n": "2010年代",
"v": "2010年代"
},
{
"n": "2000年代",
"v": "2000年代"
},
{
"n": "90年代",
"v": "90年代"
},
{
"n": "80年代",
"v": "80年代"
},
{
"n": "70年代",
"v": "70年代"
},
{
"n": "60年代",
"v": "60年代"
},
{
"n": "更早",
"v": "更早"
}
]
},
{
"key": "平台",
"name": "平台",
"value": [
{
"n": "全部",
"v": ""
},
{
"n": "腾讯视频",
"v": "腾讯视频"
},
{
"n": "爱奇艺",
"v": "爱奇艺"
},
{
"n": "优酷",
"v": "优酷"
},
{
"n": "湖南卫视",
"v": "湖南卫视"
},
{
"n": "Netflix",
"v": "Netflix"
},
{
"n": "HBO",
"v": "HBO"
},
{
"n": "BBC",
"v": "BBC"
},
{
"n": "NHK",
"v": "NHK"
},
{
"n": "CBS",
"v": "CBS"
},
{
"n": "NBC",
"v": "NBC"
},
{
"n": "tvN",
"v": "tvN"
}
]
}
],
"rank_list_movie": [
{
"key": "榜单",
"name": "榜单",
"value": [
{
"n": "实时热门电影",
"v": "movie_real_time_hotest"
},
{
"n": "一周口碑电影榜",
"v": "movie_weekly_best"
},
{
"n": "豆瓣电影Top250",
"v": "movie_top250"
}
]
}
],
"rank_list_tv": [
{
"key": "榜单",
"name": "榜单",
"value": [
{
"n": "实时热门电视",
"v": "tv_real_time_hotest"
},
{
"n": "华语口碑剧集榜",
"v": "tv_chinese_best_weekly"
},
{
"n": "全球口碑剧集榜",
"v": "tv_global_best_weekly"
},
{
"n": "国内口碑综艺榜",
"v": "show_chinese_best_weekly"
},
{
"n": "国外口碑综艺榜",
"v": "show_global_best_weekly"
}
]
}
],
"book_hot": [
{
"key": "type",
"name": "分类",
"value": [
{
"n": "综合",
"v": "book_hot"
},
{
"n": "豆瓣阅读TOP250",
"v": "book_top250"
},
{
"n": "一周热门图书榜",
"v": "EC645NBAI"
},
{
"n": "悬疑推理小说一周热门榜",
"v": "ECHU5PTUY"
},
{
"n": "科幻奇幻小说一周热门榜",
"v": "ECEA5SP5A"
},
{
"n": "绘本绘画一周热门榜",
"v": "EC5U5NVYQ"
},
{
"n": "商业经管图书一周热门榜",
"v": "ECE45ORCA"
},
{
"n": "影视戏剧图书一周热门榜",
"v": "ECWU5QFUI"
},
{
"n": "艺术设计图书一周热门榜",
"v": "ECI45ZBNY"
},
{
"n": "科学新知图书一周热门榜",
"v": "ECIM5L2YI"
},
{
"n": "社会纪实图书一周热门榜",
"v": "ECQU5U7HQ"
},
{
"n": "历史文化图书一周热门榜",
"v": "ECIE5S2IQ"
},
{
"n": "文学图书一周热门榜",
"v": "ECRM5OCGI"
},
{
"n": "小说一周热门榜",
"v": "ECF45REBQ"
}
]
}
],
"book": [
{
"key": "类型",
"name": "类型",
"value": [
{
"n": "类型",
"v": ""
},
{
"n": "文学",
"v": "文学"
},
{
"n": "流行",
"v": "流行"
},
{
"n": "文化",
"v": "文化"
},
{
"n": "生活",
"v": "生活"
},
{
"n": "经营",
"v": "经营"
},
{
"n": "科技",
"v": "科技"
}
]
},
{
"key": "文学",
"name": "文学",
"value": [
{
"n": "文学",
"v": "文学"
},
{
"n": "小说",
"v": "小说"
},
{
"n": "随笔",
"v": "随笔"
},
{
"n": "日本文学",
"v": "日本文学"
},
{
"n": "散文",
"v": "散文"
},
{
"n": "诗歌",
"v": "诗歌"
},
{
"n": "童话",
"v": "童话"
},
{
"n": "名著",
"v": "名著"
},
{
"n": "港台",
"v": "港台"
}
]
},
{
"key": "流行",
"name": "流行",
"value": [
{
"n": "流行",
"v": "流行"
},
{
"n": "漫画",
"v": "漫画"
},
{
"n": "推理",
"v": "推理"
},
{
"n": "绘本",
"v": "绘本"
},
{
"n": "科幻",
"v": "科幻"
},
{
"n": "青春",
"v": "青春"
},
{
"n": "言情",
"v": "言情"
},
{
"n": "奇幻",
"v": "奇幻"
},
{
"n": "武侠",
"v": "武侠"
}
]
},
{
"key": "文化",
"name": "文化",
"value": [
{
"n": "文化",
"v": "文化"
},
{
"n": "历史",
"v": "历史"
},
{
"n": "哲学",
"v": "哲学"
},
{
"n": "传记",
"v": "传记"
},
{
"n": "设计",
"v": "设计"
},
{
"n": "电影",
"v": "电影"
},
{
"n": "建筑",
"v": "建筑"
},
{
"n": "回忆录",
"v": "回忆录"
},
{
"n": "音乐",
"v": "音乐"
}
]
},
{
"key": "生活",
"name": "生活",
"value": [
{
"n": "生活",
"v": "生活"
},
{
"n": "旅行",
"v": "旅行"
},
{
"n": "励志",
"v": "励志"
},
{
"n": "教育",
"v": "教育"
},
{
"n": "职场",
"v": "职场"
},
{
"n": "美食",
"v": "美食"
},
{
"n": "灵修",
"v": "灵修"
},
{
"n": "健康",
"v": "健康"
},
{
"n": "家居",
"v": "家居"
}
]
},
{
"key": "经营",
"name": "经营",
"value": [
{
"n": "经营",
"v": "经营"
},
{
"n": "经济学",
"v": "经济学"
},
{
"n": "管理",
"v": "管理"
},
{
"n": "商业",
"v": "商业"
},
{
"n": "金融",
"v": "金融"
},
{
"n": "营销",
"v": "营销"
},
{
"n": "理财",
"v": "理财"
},
{
"n": "股票",
"v": "股票"
},
{
"n": "企业史",
"v": "企业史"
}
]
},
{
"key": "科技",
"name": "科技",
"value": [
{
"n": "科技",
"v": "科技"
},
{
"n": "科普",
"v": "科普"
},
{
"n": "互联网",
"v": "互联网"
},
{
"n": "编程",
"v": "编程"
},
{
"n": "交互设计",
"v": "交互设计"
},
{
"n": "算法",
"v": "算法"
},
{
"n": "通信",
"v": "通信"
},
{
"n": "神经网络",
"v": "神经网络"
}
]
},
{
"key": "sort",
"name": "排序",
"value": [
{
"n": "近期热度",
"v": "T"
},
{
"n": "首播时间",
"v": "R"
},
{
"n": "高分优先",
"v": "S"
}
]
}
]
}
+138
View File
@@ -0,0 +1,138 @@
{
//
//回家地址 → https://ggjav.com/数字改
//https://ggjav.com/
"规则名": "ggjav-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://ggjav.com",
"首页列表数组规则": "body",
"首页片单列表数组规则": ".large-3:has(img)",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".item_title&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "'❤️'+.float-right&&Text+'👁️'+.float-left&&Text",
"首页片单链接加前缀": "https://ggjav.com",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://hscangku.com/vodshow/{cateId}-{catePg}/",
"分类链接": "https://ggjav.com/main/{cateId}?{by}&page={catePg}",
"分类名称": "有碼AV&無碼AV&素人AV&中文字幕&歐美&動漫",
"分类名称替换词": "censored&uncensored&amateur&chinese&europe&cartoon",
"分类截取模式": "1",
"分类列表数组规则": "body&&.large-3:has(img)",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".item_title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": "'❤️'+.float-right&&Text+'👁️'+.float-left&&Text",
"分类片单链接加前缀": "https://ggjav.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$PC_UA",
"搜索链接": "https://ggjav.com/main/search?string={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "body&&.large-3:has(img)",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": ".item_title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "'❤️'+.float-right&&Text+'👁️'+.float-left&&Text",
"搜索片单链接加前缀": "https://ggjav.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"0",
"类型详情": "<p>類型:&&</p>",
"年代详情": "<p>更新:&&</p>",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": ".play-btn-group&&.line",
"线路标题": "'📽️'+a&&Text+'📺'",
"播放列表数组规则": ".line",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://ggjav.com",
"选集链接加后缀": "",
"筛选数据":{
"censored":[
{"key":"by",
"name":"排序",
"value":[
{"v":"order=recommended","n":"推荐"},
{"v":"order=pub_date","n":"发布时间"},
{"v":"order=views","n":"观看次数"},
{"v":"order=likes","n":"点赞👍"}
]}
],
"uncensored":[
{"key":"by",
"name":"排序",
"value":[
{"v":"order=recommended","n":"推荐"},
{"v":"order=pub_date","n":"发布时间"},
{"v":"order=views","n":"观看次数"},
{"v":"order=likes","n":"点赞👍"}
]}
],
"amateur":[
{"key":"by",
"name":"排序",
"value":[
{"v":"order=recommended","n":"推荐"},
{"v":"order=pub_date","n":"发布时间"},
{"v":"order=views","n":"观看次数"},
{"v":"order=likes","n":"点赞👍"}
]}
],
"chinese":[
{"key":"by",
"name":"排序",
"value":[
{"v":"order=recommended","n":"推荐"},
{"v":"order=pub_date","n":"发布时间"},
{"v":"order=views","n":"观看次数"},
{"v":"order=likes","n":"点赞👍"}
]}
],
"europe":[
{"key":"by",
"name":"排序",
"value":[
{"v":"order=recommended","n":"推荐"},
{"v":"order=pub_date","n":"发布时间"},
{"v":"order=views","n":"观看次数"},
{"v":"order=likes","n":"点赞👍"}
]}
],
"cartoon":[
{"key":"by",
"name":"排序",
"value":[
{"v":"order=recommended","n":"推荐"},
{"v":"order=pub_date","n":"发布时间"},
{"v":"order=views","n":"观看次数"},
{"v":"order=likes","n":"点赞👍"}
]}
]
},
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "edge-hls#baidu.com"
}
+178
View File
@@ -0,0 +1,178 @@
{
//
//回家地址 → https://hohoj.tv/数字改
//https://hohoj.tv/
"规则名": "hohoj-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://hohoj.tv",
"首页列表数组规则": ".video-list",
"首页片单列表数组规则": ".video-item",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".video-item-title&&Text",
"首页片单链接": "a&&href",
"首页片单图片": ".img-placeholder&&src",
"首页片单副标题": ".video-item-badge&&Text+'👁️'+.video-item-rating&&.me-2&&Text+'❤️'+span,1&&Text",
"首页片单链接加前缀": "https://hohoj.tv",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://hscangku.com/vodshow/{cateId}-{catePg}/",
"分类链接": "https://hohoj.tv/search?type={cateId}&order={by}&p={catePg}",
//https://hohoj.tv/main_ctg?id=8&name=亂倫&p=2
//https://hohoj.tv/main_ctg?id=8&name=%E4%BA%82%E5%80%AB&p=2&type=censored&order=latest
"分类名称": "全部&无码&有码&中文字幕&欧美",
"分类名称替换词": "all&uncensored&censored&chinese&europe",
"分类截取模式": "1",
"分类列表数组规则": ".video-list&&.video-item",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".video-item-title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": ".video-item-badge&&Text+'👁️'+.video-item-rating&&.me-2&&Text+'❤️'+span,1&&Text",
"分类片单链接加前缀": "https://hohoj.tv",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://hohoj.tv/search?text={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".video-list&&.video-item",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": ".video-item-title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".video-item-badge&&Text+'👁️'+.video-item-rating&&.me-2&&Text+'❤️'+span,1&&Text",
"搜索片单链接加前缀": "https://hohoj.tv",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"0",
"类型详情": "<p>類型:&&</p>",
"年代详情": "<p>更新:&&</p>",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": ".play-btn-group&&.line",
"线路标题": "'📽️'+a&&Text+'📺'",
"播放列表数组规则": ".line",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://hohoj.tv",
"选集链接加后缀": "",
"筛选数据":{
"/vodshow/1":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/vodshow/1","n":"全部"},
{"v":"/vodshow/6","n":"国产自拍"},
{"v":"/vodshow/7","n":"主播大秀"},
{"v":"/vodshow/8","n":"探花约啪"},
{"v":"/vodshow/9","n":"国产番号"},
{"v":"/vodshow/10","n":"网红少女"},
{"v":"/vodshow/11","n":"偷窥偷拍"}]},
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"/vodshow/2":[
{"key":"cateId",
"name":"分类",
"value":[
{"v":"/vodshow/2","n":"全部"},
{"v":"/vodshow/13","n":"日本无码"},
{"v":"/vodshow/14","n":"中文字幕"},
{"v":"/vodshow/15","n":"日韩有码"},
{"v":"/vodshow/16","n":"AV解说"}]},
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
],
"all":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"popular","n":"热门"},
{"v":"views","n":"最多观看"},
{"v":"likes","n":"最多点赞"}
]}
],
"uncensored":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"popular","n":"热门"},
{"v":"views","n":"最多观看"},
{"v":"likes","n":"最多点赞"}
]}
],
"censored":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"popular","n":"热门"},
{"v":"views","n":"最多观看"},
{"v":"likes","n":"最多点赞"}
]}
],
"chinese":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"popular","n":"热门"},
{"v":"views","n":"最多观看"},
{"v":"likes","n":"最多点赞"}
]}
],
"europe":[
{"key":"by",
"name":"排序",
"value":[
{"v":"latest","n":"最新"},
{"v":"popular","n":"热门"},
{"v":"views","n":"最多观看"},
{"v":"likes","n":"最多点赞"}
]}
],
"/vodshow/22":[
{"key":"by",
"name":"排序",
"value":[
{"v":"","n":"最新"},
{"v":"hits","n":"热门"},
{"v":"up","n":"点赞"},
{"v":"score","n":"评分"}
]}
]
},
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8#.mp4",
"手动嗅探视频链接过滤词": "baidu.com"
}
+15
View File
@@ -0,0 +1,15 @@
{
"数组二次截取": "models\":[&&]",
"数组": "{&&}",
"图片": "previewUrlThumbBig:\"https+://static-cdn.strpst.com/+https://static-cdn.strpst.com/&&\"",
"标题": "username\":\"&&\"",
"副标题": "id\":\"&&\"",
"链接": "hlsPlaylist\":\"&&_+_480p.m3u8",
"分类url": "https://zh.18insta.com/api/front/models?primaryTag=girls&sortBy=viewersRating&userRole=guest&groupId=6&limit=20&filterGroupTags=[[\"{cateId}\"]]&offset=0;;m",
"直接播放": 1,
"播放请求头": "手机",
"分类": "女主播&情侣&男主播&变性人",
"分类值": "girls&couples&men&trans",
"筛选": "1",
"剧情": "乌克兰$tagLanguageUkrainian#中文$tagLanguageChinese#推荐$recommended#少女18+$ageTeen#熟女$ageMilf#成熟$ageMature#瘦$bodyTypePetite#运动型$bodyTypeAthletic#中$bodyTypeMedium#丰满$bodyTypeCurvy#大号$bodyTypeBBW#可录制私人表演$autoTagRecordablePrivate#偷窥$autoTagSpy#视频通话直播$autoTagP2P#互动玩具$autoTagInteractiveToy#手机$mobile#潮吹$doSquirt#新主播$autoTagNew#小胸部$specificSmallTits#自慰$doMasturbation#办公室$doOffice#假阳具$doDildoOrVibrator#恋足$doFootFetish#瑜伽$doYoga#高潮$doOrgasm#体内射精$doCreamPie#vr摄像头$autoTagVr#调情$autoTagNonNude#虐恋$subcultureBdsm#鲜嫩青年$ageYoung#亚洲人$ethnicityAsian#白人$ethnicityWhite#金发$hairColorBlonde#棕发小妞$hairColorBlack#群交$tagGroupSex#巨乳$specificsBigTits#阴部多毛$specificsHairy#户外$doPublicPlace#肛交$doAnal#大屁股$specificsBigAss#孕妇$specificPregnant#女同性恋$specificLesbians#粗暴$doHardcore#口交$doBlowjob"
}
+251
View File
@@ -0,0 +1,251 @@
{
//永久地址https://jable.tv/zh
// 发布页https://alldayj.com/
//发布页https://github.com/aj23koby4495612/aj23koby4495612
"规则名": "jable-XYQHiker",
"规则作者": "飞鱼",
"请求头参数":"PC_UA",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据":"1",
//首页推荐数据获取链接
"首页推荐链接": "https://fs1.app/new-release/",
//首页推荐列表数组截取。
"首页列表数组规则": ".pb-e-lg-40",
//首页推荐片单列表数组定位。
"首页片单列表数组规则": ".col-6",
//首页推荐片单信息jsoup与正则截取写法切换,只作用于html网页,1为jsoup写法(默认),0为正则截取写法
"首页片单是否Jsoup写法":"1",
//下面这六个首页数据如果不填将调用分类那截取的配置(片单写法需一致且取值也得一致)。
//首页片单标题
"首页片单标题": ".detail&&a&&Text",
//首页推荐片单链接
"首页片单链接": "a&&href",
//首页推荐片单图片,支持自定义图片链接
"首页片单图片": "img&&data-src",
//首页推荐片单副标题
"首页片单副标题":".label&&Text",
//首页推荐片单链接补前缀
"首页片单链接加前缀": "",
//首页推荐片单链接补后缀
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://www.l0l.tv/index.php/vod/show/id/{cateId}/page/{catePg}.html",
"分类链接": "https://fs1.app/{cateId}/{catePg}/",
"分类名称": "最新影片&热门🔥&主题分类&衣着&身材&交合&玩法&剧情&角色&地点&杂项",
"分类名称替换词": "latest-updates&hot&categories/bdsm/&tags/black-pantyhose/&tags/suntan/&tags/facial/&tags/outdoor/&tags/black/&tags/club-hostess-and-sex-worker/&tags/magic-mirror/&tags/debut-retires/",
//"筛选数据":{},
"分类截取模式": "1",
"分类列表数组规则": ".pb-e-lg-40&&.col-6",
"分类片单是否Jsoup写法":"1",
"分类片单标题": ".detail&&a&&Text",
"分类片单链接": "a&&href",//替换规则
"分类片单图片": "img&&data-src",
"分类片单副标题":".label&&Text",
"分类片单链接加前缀": "",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$PC_UA",
"搜索链接": "https://fs1.app/search/{wd}/",
"POST请求数据":"0",
"搜索截取模式": "1",
"搜索列表数组规则": ".pb-e-lg-40&&.col-6",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": "img&&data-src",
"搜索片单标题": ".detail&&a&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题":".label&&Text",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
//--------
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
//-------
"详情是否Jsoup写法":"1",
"类型详情": ".content&&.detail-item&&.genre&&Text",
"年代详情": ".content&&.detail-item&&span,3&&Text",
"地区详情": "",
"演员详情": ".content&&.detail-item&&span,7&&Text",
"简介详情": ".mr-3&&h1&&Text",
"线路列表数组规则": ".dropdown-menu",
"线路标题": "a&&Text",
"播放列表数组规则": ".dropdown-menu",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法":"1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"1",
"手动嗅探视频链接关键词":"m3u8#.m3u8",
"手动嗅探视频链接过滤词":".html#=http",
"筛选数据":{
"categories/bdsm/":[
{"key":"cateId","name":"分类","value":[
{"v":"categories/bdsm/","n":"主奴调教"},
{"v":"categories/sex-only/","n":"直接开啪"},
{"v":"categories/chinese-subtitle/","n":"中文字幕"},
{"v":"categories/rape/","n":"凌辱强暴"},
{"v":"categories/uniform/","n":"制服诱惑"},
{"v":"categories/roleplay/","n":"角色剧情"},
{"v":"categories/hidden-cam/","n":"盗摄偷拍"},
{"v":"categories/uncensored/","n":"无码解放"},
{"v":"categories/pov/","n":"男友视角"},
{"v":"categories/groupsex/","n":"多P群交"},
{"v":"categories/pantyhose/","n":"丝袜美腿"},
{"v":"categories/lesbian/","n":"女同欢愉"}
]
}],
"tags/black-pantyhose/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/black-pantyhose/","n":"黑丝"},
{"v":"tags/knee-socks/","n":"过膝袜"},
{"v":"tags/sportswear/","n":"运动装"},
{"v":"tags/flesh-toned-pantyhose/","n":"肉丝"},
{"v":"tags/pantyhose/","n":"丝袜"},
{"v":"tags/glasses/","n":"眼镜娘"},
{"v":"tags/kemonomimi/","n":"兽耳"},
{"v":"tags/fishnets/","n":"渔网"},
{"v":"tags/swimsuit/","n":"水着"},
{"v":"tags/school-uniform/","n":"校服"},
{"v":"tags/cheongsam/","n":"旗袍"},
{"v":"tags/wedding-dress/","n":"婚纱"},
{"v":"tags/maid/","n":"女僕"},
{"v":"tags/kimono/","n":"和服"},
{"v":"tags/stockings/","n":"吊带袜"},
{"v":"tags/bunny-girl/","n":"兔女郎"},
{"v":"tags/Cosplay/","n":"Cosplay"}
]}],
"tags/suntan/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/suntan/","n":"黑肉"},
{"v":"tags/tall/","n":"长身"},
{"v":"tags/flexible-body/","n":"软体"},
{"v":"tags/small-tits/","n":"贫乳"},
{"v":"tags/loli/","n":"萝莉"},
{"v":"tags/beautiful-leg/","n":"美腿"},
{"v":"tags/beautiful-butt/","n":"美尻"},
{"v":"tags/tattoo/","n":"纹身"},
{"v":"tags/short-hair/","n":"短髮"},
{"v":"tags/hairless-pussy/","n":"白虎"},
{"v":"tags/mature-woman/","n":"熟女"},
{"v":"tags/big-tits/","n":"巨乳"},
{"v":"tags/girl/","n":"少女"}
]}],
"tags/facial/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/facial/","n":"颜射"},
{"v":"tags/footjob/","n":"脚交"},
{"v":"tags/anal-sex/","n":"肛交"},
{"v":"tags/spasms/","n":"痉挛"},
{"v":"tags/squirting/","n":"潮吹"},
{"v":"tags/deep-throat/","n":"深喉"},
{"v":"tags/kiss/","n":"接吻"},
{"v":"tags/cum-in-mouth/","n":"口爆"},
{"v":"tags/blowjob/","n":"口交"},
{"v":"tags/tit-wank/","n":"乳交"},
{"v":"tags/creampie/","n":"中出"}
]}],
"tags/outdoor/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/outdoor/","n":"露出"},
{"v":"tags/gang-rape/","n":"轮姦"},
{"v":"tags/tune/","n":"调教"},
{"v":"tags/bondage/","n":"綑绑"},
{"v":"tags/quickie/","n":"瞬间插入"},
{"v":"tags/chikan/","n":"痴汉"},
{"v":"tags/chizyo/","n":"痴女"},
{"v":"tags/masochism-guy/","n":"男M"},
{"v":"tags/crapulence/","n":"泥醉"},
{"v":"tags/soapland/","n":"泡姬"},
{"v":"tags/breast-milk/","n":"母乳"},
{"v":"tags/piss/","n":"放尿"},
{"v":"tags/massage/","n":"按摩"},
{"v":"tags/rape/","n":"强姦"},
{"v":"tags/gangbang/","n":"多P"},
{"v":"tags/torture/","n":"刑具"},
{"v":"tags/insult/","n":"凌辱"},
{"v":"tags/10-times-a-day/","n":"一日十回"},
{"v":"tags/3p/","n":"3P"}
]}]
,
"tags/black/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/black/","n":"黑人"},
{"v":"tags/ugly-man/","n":"丑男"},
{"v":"tags/temptation/","n":"诱惑"},
{"v":"tags/virginity/","n":"童贞"},
{"v":"tags/time-stop/","n":"时间停止"},
{"v":"tags/avenge/","n":"复仇"},
{"v":"tags/age-difference/","n":"年龄差"},
{"v":"tags/giant/","n":"巨汉"},
{"v":"tags/love-potion/","n":"媚药"},
{"v":"tags/sex-beside-husband/","n":"夫目前犯"},
{"v":"tags/affair/","n":"出轨"},
{"v":"tags/hypnosis/","n":"催眠"},
{"v":"tags/hidden-cam/","n":"偷拍"},
{"v":"tags/incest/","n":"不伦"},
{"v":"tags/rainy-day/","n":"下雨天"},
{"v":"tags/ntr/","n":"NTR"}
]}],
"tags/club-hostess-and-sex-worker/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/club-hostess-and-sex-worker/","n":"风俗娘"},
{"v":"tags/doctor/","n":"医生"},
{"v":"tags/fugitive/","n":"逃犯"},
{"v":"tags/nurse/","n":"护士"},
{"v":"tags/teacher/","n":"老师"},
{"v":"tags/flight-attendant/","n":"空姐"},
{"v":"tags/team-manager/","n":"球队经理"},
{"v":"tags/widow/","n":"未亡人"},
{"v":"tags/detective/","n":"搜查官"},
{"v":"tags/couple/","n":"情侣"},
{"v":"tags/housewife/","n":"家政妇"},
{"v":"tags/private-teacher/","n":"家庭教师"},
{"v":"tags/idol/","n":"偶像"},
{"v":"tags/wife/","n":"人妻"},
{"v":"tags/female-anchor/","n":"主播"},
{"v":"tags/ol/","n":"OL"}
]}],
"tags/magic-mirror/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/magic-mirror/","n":"魔镜号"},
{"v":"tags/tram/","n":"电车"},
{"v":"tags/first-night/","n":"处女"},
{"v":"tags/prison/","n":"监狱"},
{"v":"tags/hot-spring/","n":"温泉"},
{"v":"tags/bathing-place/","n":"洗浴场"},
{"v":"tags/swimming-pool/","n":"泳池"},
{"v":"tags/car/","n":"汽车"},
{"v":"tags/toilet/","n":"厕所"},
{"v":"tags/school/","n":"学校"},
{"v":"tags/library/","n":"图书馆"},
{"v":"tags/gym-room/","n":"健身房"},
{"v":"tags/store/","n":"便利店"}
]}]
,
"tags/debut-retires/":[
{"key":"cateId","name":"分类","value":[
{"v":"tags/video-recording/","n":"录像"},
{"v":"tags/debut-retires/","n":"处女作/引退作"},
{"v":"tags/variety-show/","n":"综艺"},
{"v":"tags/festival/","n":"节日主题"},
{"v":"tags/thanksgiving/","n":"感谢祭"},
{"v":"tags/more-than-4-hours/","n":"4小时以上"}
]}]
}
}
+35
View File
@@ -0,0 +1,35 @@
{
"作者": "黑哥传媒",
"站名": "",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://javday.app/",
"首页": "120",
"起始页": "1",
"分类url": "https://javday.app/fiter/by/{by}/id/{cateId}/page/{catePg}/;;mrcd0",
"分类": "新作上市$new-release#有碼$censored#國產AV$chinese-av#無碼流出$uncensored-leaked#糖心VLOG$txvlog#蘿莉社$luolisheus#HongKongDoll$hongkongdoll#國產AV廠商$groups#藏经阁$topic",
"二次截取": "",
"数组": "lazy loaded\">&&</a>",
"标题": "title\">&&<",
"图片": "url(&&)",
"副标题": "黑哥传媒+number\">&&<",
"链接": "href=\"&&\"",
"影片年代": "上傳時間:&&</p>",
"影片地区": "地区:&&</li>",
"影片类型": "class/*>&&</p>",
"状态": "",
"导演": "jpnum\">&&</p>",
"主演": "/actor/*>&&</p>",
"简介": "👶黑哥传媒倾情打造:+class=\"video-title\">&&</h1>",
"线路二次截取": "",
"解析": "",
"直接播放": "1",
"播放请求头": "",
"嗅探词": "",
"过滤词": "",
"跳转播放链接": "",
"跳转解析": "",
"搜索请求头": "User-Agent$MOBILE_UA",
"搜索url": "https://javday.app/search/page/{pg}/wd/{wd}/"
}
+238
View File
@@ -0,0 +1,238 @@
{
//发布页https://6.hao2028.com/
//地址发邮箱自动回复[email protected]
//http://170.178.166.170/
//https://www.haozzzz.com/
"规则名": "好看视频-XYQHiker",
"规则作者": "飞鱼",
"请求头参数":"手机",
"网页编码格式":"UTF-8",
"图片是否需要代理":"0",
"是否开启获取首页数据": "1",
//首页推荐数据获取链接
"首页推荐链接": "https://javday.tv/label/new/",
//首页推荐列表数组截取。
"首页列表数组规则": "#app",
//首页推荐片单列表数组定位。
"首页片单列表数组规则": ".lazy",
//首页推荐片单信息jsoup与正则截取写法切换,只作用于html网页,1为jsoup写法(默认),0为正则截取写法
"首页片单是否Jsoup写法":"1",
//下面这六个首页数据如果不填将调用分类那截取的配置(片单写法需一致且取值也得一致)。
//首页片单标题
"首页片单标题": ".title&&Text",
//首页推荐片单链接
"首页片单链接": "a&&href",
//首页推荐片单图片,支持自定义图片链接
"首页片单图片": ".videoBox-cover&&style",
//首页推荐片单副标题
"首页片单副标题":"'👀'+.views&&Text+'❤️'+.likes&&Text",
//首页推荐片单链接补前缀
"首页片单链接加前缀": "https://javday.tv",
//首页推荐片单链接补后缀
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://www.l0l.tv/index.php/vod/show/id/{cateId}/page/{catePg}.html",
"分类链接": "https://javday.tv/{cateId}/page/{catePg}/",
"分类名称": "最近更新&人氣系列&新作上市&有碼&國產AV&無碼流出&糖心VLOG&蘿莉社&HongKongDoll&國產AV廠商",
"分类名称替换词": "label/new&label/hot&category/new-release&category/censored&category/chinese-av&category/uncensored-leaked&category/txvlog&category/luolisheus&category/hongkongdoll&category/madou",
//"筛选数据":{},
"分类截取模式": "1",
"分类列表数组规则": "#app&&.lazy",
"分类片单是否Jsoup写法":"1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": ".videoBox-cover&&style",
"分类片单副标题":"'👀'+.views&&Text+'❤️'+.likes&&Text",
"分类片单链接加前缀":"https://javday.tv",
"分类片单链接加后缀": "",
"搜索请求头参数":"User-Agent$手机",
"搜索链接": "https://javday.tv/search/?wd={wd}",
"POST请求数据":"0",
"搜索截取模式": "1",
"搜索列表数组规则": "#app&&.lazy",
"搜索片单是否Jsoup写法":"1",
"搜索片单图片": ".videoBox-cover&&style",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题":"'👀'+.views&&Text+'❤️'+.likes&&Text",
"搜索片单链接加前缀": "https://javday.tv",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法":"1",
"类型详情": ".detail-content&&p:has(:contains(标签))&&Text!标签:",
"年代详情": ".tag&&Text",
"地区详情": "",
"演员详情": ".vod_actor&&Text",
"简介详情": ".jpnum&&Text",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": "#video-section&&.videoContent",
"选集列表数组规则": ".vcontainer",
"选集标题链接是否Jsoup写法":"0",
"选集标题": "",
"选集链接": "url: \'&&\',",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer":"0",
"是否开启手动嗅探":"0",
"手动嗅探视频链接关键词":".mp4#.m3u8#.flv",
"手动嗅探视频链接过滤词":".html#=http",
//筛选数据多余
"筛选数据":{
"category/madou":[
{"key":"cateId","name":"分类","value":[
{"v":"category/madou","n":"麻豆傳媒映畫"},
{"v":"category/timi","n":"天美傳媒"},
{"v":"category/91zhipianchang","n":"果凍傳媒"},
{"v":"category/xingkong","n":"星空無限傳媒"},
{"v":"category/royalasianstudio","n":"皇家華人"},
{"v":"category/mtgw","n":"蜜桃影像傳媒"},
{"v":"category/jdav","n":"精東影業"},
{"v":"category/twav","n":"TWAV"},
{"v":"category/psychoporn-tw","n":"Psychoporn-TW"},
{"v":"category/jvid","n":"JVID"}
]
}
],
"/dm":[
{"key":"cateId","name":"分类","value":[
{"v":"/dm","n":"动漫"},
{"v":"/dm/type/q-3D","n":"3d动漫"},
{"v":"/dm/type/q-%E5%90%8C%E4%BA%BA","n":"同人作品"},
{"v":"/dm/type/q-Cosplay","n":"Cosplay"}
]
}],
"sort/id/295":[
{"key":"cateId","name":"分类","value":[
{"v":"sort/id/295","n":"无码专区"},
{"v":"sort/id/297","n":"制服诱惑"},
{"v":"sort/id/298","n":"三级伦理"},
{"v":"sort/id/299","n":"AI换脸"},
{"v":"sort/id/300","n":"中文字幕"},
{"v":"sort/id/301","n":"卡通动漫"},
{"v":"sort/id/302","n":"欧美系列"},
{"v":"sort/id/303","n":"美女主播"},
{"v":"sort/id/304","n":"国产自拍"},
{"v":"sort/id/305","n":"熟女人妻"},
{"v":"sort/id/306","n":"萝莉少女"},
{"v":"sort/id/307","n":"女同性爱"},
{"v":"sort/id/308","n":"多人群交"},
{"v":"sort/id/309","n":"美乳巨乳"},
{"v":"sort/id/310","n":"强奸乱伦"},
{"v":"sort/id/311","n":"抖阴视频"},
{"v":"sort/id/312","n":"韩国主播"},
{"v":"sort/id/313","n":"网红头条"},
{"v":"sort/id/314","n":"网爆黑料"},
{"v":"sort/id/315","n":"欧美无码"},
{"v":"sort/id/316","n":"女优明星"},
{"v":"sort/id/317","n":"SM调教"},
{"v":"sort/id/326","n":"AV解说"}
]}],
"1":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"2":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"3":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"4":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"5":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"6":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"7":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"8":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"9":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"10":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"11":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"12":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"13":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
],
"14":[
{"key":"by","name":"排序","value":[
{"v":"time","n":"最新"},
{"v":"hits","n":"最多观看"},
{"v":"up","n":"最热好评"}]}
]
}
}
+83
View File
@@ -0,0 +1,83 @@
{
"规则名": "javffm-XYQHiker",
"规则作者": "飞鱼",
"请求头参数": "PC_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.javffm.com/tvtype/chinese-subtitles/",
"首页列表数组规则": ".items",
"首页片单列表数组规则": "article",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "h3&&a&&Text",
"首页片单链接": "h3&&a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "",
"首页片单链接加前缀": "",
"首页片单链接加后缀": "",
"分类起始页码": "1",
//"分类链接": "https://hscangku.com/vodtype/{cateId}-{catePg}/",
"分类链接": "https://www.javffm.com/drama/page/{catePg}/?orderby={by}&tvtype={cateId}",
"分类名称": "全部&自拍&无码&欧美&动画&国产&伦理&中文字幕",
"分类名称替换词": "&6&7&porn-2&5&chinese-av-porn&porn&chinese-subtitles",
"分类截取模式": "1",
"分类列表数组规则": "#archive-content&&article",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h3&&a&&Text",
"分类片单链接": "h3&&a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": "",
"分类片单链接加前缀": "",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://www.javffm.com/?s={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".result-item&&article",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": "img&&alt",
"搜索片单链接": "a&&href",
"搜索片单副标题": "",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".m3u8",
"手动嗅探视频链接过滤词": "baidu.com",
"筛选数据":{
"":[
{
"key":"by",
"name":"排序",
"value":[
{"n":"时间","v":"date"},
{"n":"人气","v":"view"}
]
}
],
"6":[
{
"key":"by",
"name":"排序",
"value":[
{"n":"时间","v":"date"},
{"n":"人气","v":"view"}
]
}
]
}
}