Compare commits

...

5 Commits

Author SHA1 Message Date
qist 31111d5e7e 删除没用的路径
1 day ago
qist 68666ec603 fix
1 day ago
qist 72d7499b09 fix
1 day ago
github-actions[bot] f5df84cd9a 更新源 202602030246
1 day ago
qist d95555f1b1 更新源
1 day ago

@ -31,16 +31,17 @@ jobs:
cd tools/ cd tools/
pip install demjson3 --break-system-packages pip install demjson3 --break-system-packages
python fty.py python fty.py
python hebing.py dianshi.json tvbox_cleaned.json python xiao.py ../xiaosa/api.json dianshi.json
python hebing.py jsm.json tvbox_cleaned.json python xiao.py ../xiaosa/api.json jsm.json
python xiao.py ../xiaosa/api.json dianshi_merged.json \cp -pdr tvbox_cleaned.json ../fty.json
python xiao.py ../xiaosa/api.json jsm_merged.json \cp -pdr dianshi_with_app_sites.json ../dianshi.json
\cp -pdr dianshi_merged_with_app_sites.json ../dianshi.json \cp -pdr jsm_with_app_sites.json ../jsm.json
\cp -pdr jsm_merged_with_app_sites.json ../jsm.json
\cp -pdr fan.txt ../jar/fan.txt \cp -pdr fan.txt ../jar/fan.txt
\cp -pdr ../xiaosa/spider.jar ../jar/spider.jar
git clone --depth=1 --recursive https://github.com/fantaiying7/EXT.git git clone --depth=1 --recursive https://github.com/fantaiying7/EXT.git
\cp -pdr EXT/* ../FTY/ \cp -pdr EXT/* ../FTY/
rm -rf dianshi_merged_with_app_sites.json jsm_merged_with_app_sites.json dianshi_merged.json jsm_merged.json tvbox_cleaned.json fan.txt EXT python copy_xbpq.py dianshi_with_app_sites.json
rm -rf dianshi_with_app_sites.json jsm_with_app_sites.json tvbox_cleaned.json fan.txt EXT
cd ../ cd ../
shell: bash shell: bash
- name: Git push assets to "release" branch - name: Git push assets to "release" branch

4
.gitignore vendored

@ -2,8 +2,8 @@ tv.txt
.vscode/ .vscode/
qiyiguo.js qiyiguo.js
mytvsuper.m3u mytvsuper.m3u
dianshi_merged_with_app_sites.json dianshi_with_app_sites.json
jsm_merged_with_app_sites.json jsm_with_app_sites.json
dianshi_merged.json dianshi_merged.json
jsm_merged.json jsm_merged.json
tvbox_cleaned.json tvbox_cleaned.json

@ -81,7 +81,7 @@ V1.1.2版本以下
4摸鱼儿http://我不是.摸鱼儿.top 4摸鱼儿http://我不是.摸鱼儿.top
5霜辉月明pyhttps://999740.xyz/raw.githubusercontent.com/lm317379829/PyramidStore/pyramid/py.json 5霜辉月明pyhttps://raw.githubusercontent.com/lm317379829/PyramidStore/pyramid/py.json
6小米小爆脾气http://xhww.fun/小米/DEMO.json 6小米小爆脾气http://xhww.fun/小米/DEMO.json
@ -95,15 +95,17 @@ V1.1.2版本以下
11俊于http://home.jundie.top:81/top98.json 11俊于http://home.jundie.top:81/top98.json
12橘子柚https://mirror.ghproxy.com/https://raw.githubusercontent.com/hackyjso/box/main/jzy.txt 12橘子柚https://raw.githubusercontent.com/hackyjso/box/main/jzy.txt
13电视自用 <https://github.moeyy.xyz/raw.githubusercontent.com/qist/tvbox/master/jsm.json> 13电视自用 <https://raw.githubusercontent.com/qist/tvbox/master/jsm.json>
14github代理地址 `https://github.moeyy.xyz https://mirror.ghproxy.com/ https://gh-proxy.com https://ghproxy.net` 选择一个速度快使用 14github代理地址 `https://github.moeyy.xyz https://mirror.ghproxy.com/ https://gh-proxy.com https://ghproxy.net` 选择一个速度快使用
15 还可以使用域名: `https://qist.wyfc.qzz.io/jsm.json` cloudflare Pages 构建 15 还可以使用域名: `https://qist.wyfc.qzz.io/jsm.json` cloudflare Pages 构建
16 添加潇洒 接口: https://raw.githubusercontent.com/qist/tvbox/refs/heads/master/xiaosa/api.json 或者 https://qist.wyfc.qzz.io/xiaosa/api.json 16 添加潇洒 接口: https://raw.githubusercontent.com/qist/tvbox/master/xiaosa/api.json 或者 https://qist.wyfc.qzz.io/xiaosa/api.json
17添加饭太硬 接口 https://raw.githubusercontent.com/qist/tvbox/master/fty.json 或者 https://qist.wyfc.qzz.io/fty.json
1. token.json格式说明 1. token.json格式说明

@ -0,0 +1,17 @@
{
"首页": "0",
// "播放链接前缀": "https://www.gyf.lol",
"数组": "data\":{\"tit&&s_log",
"图片": "https://p0.ssl.cdn.btime.com/+ssl.cdn.btime.com/&&\"",
"副标题": "le\":\"&&\"",
"标题": "text\":\"&&\"",
"链接": "item.btime.com/&&\"",
"链接前缀": "https://app.api.btime.com/video/play?callback=jQuery36009651202523243325_1747927554988&id=",
// "线路标题": "</i>&&<span",
"播放数组": "video_streams&&audio_streams",
"播放列表": "stream&&duration",
"播放标题": "stream_vbt\":\"&&\"",
"播放链接": "url\":\"&&\"",
"分类url": "https://pc.api.btime.com/btimeweb/infoFlow?callback=jQuery36002244958011106073_1747920210579&list_id={cateId}&refresh={catePg}&count=2000&expands=pageinfo&_=1747920210580",
"分类": "2025$btv_08da67cea600bf3c78973427bfaba12d_s0_2025#2024$btv_08da67cea600bf3c78973427bfaba12d_s0_2024#2023$btv_08da67cea600bf3c78973427bfaba12d_s0_2023#2022$btv_08da67cea600bf3c78973427bfaba12d_s0_2022#2021$btv_08da67cea600bf3c78973427bfaba12d_s0_2021#2020$btv_08da67cea600bf3c78973427bfaba12d_s0_2020#2019$btv_08da67cea600bf3c78973427bfaba12d_s0_2019#2018$btv_08da67cea600bf3c78973427bfaba12d_s0_2018"
}

@ -0,0 +1,18 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://dora.xiaoxinbk.com/",
"数组": "class=\"card-img-bili\"&&</a>",
"标题": "alt=\"&&\"",
"图片": "data-url=\"&&\"",
"链接": "href=\"&&\"",
"线路标题": "mt-0\">&&</h3>",
"播放数组": "class=\"card-body button-list\"&&</div>",
"播放列表": "<a&&a>",
"播放链接": "href=\"&&\"",
"播放标题": ">&&</",
"分类url": "https://www.dora-video.cn/search/sy/?niandai={year}&cat={class}&tag={cateId}&gaojijiansuo=1&zhuangtai={by}",
"分类": "全部$0#动画$20#剧场版$21#MV$22#预告片$23#直播$27#同人$25#民间$26#目录$28#中篇$30",
"剧情": "哆啦A梦新番$1#新哆啦A梦 台湾配音$2#哆啦A梦剧场版$3#最新预告片$6#剧场版集合$7#哆啦A梦MV$4#哆啦A梦七小子集合$11#生日特别篇$19#哆啦A梦生日特别篇$12#哆啦美生日特别篇$14#大雄生日特别篇$13#静香生日特别篇$15#胖虎生日特别篇$16#小夫生日特别篇$17#24小时直播$24#哆啦A梦中篇附映$29#哆啦A梦大山版 - 哆啦a梦1979版国语旧版 - 旧版$31#哆啦A梦大山修复&补档区$32#藤子·F·不二雄【其它动画】$33",
"排序": "全部$0#完结$2#连载$1#待定$-1"
}

@ -0,0 +1,6 @@
{
"线路数组": "<a data-toggle=\"tab\"&&/a>",
"线路标题": ">&&<",
"分类url": "http://dyxz.tv/list/{cateId}_{catePg}.html",
"分类": "电影$1#电视剧$2#动漫$3#综艺$4"
}

@ -0,0 +1,9 @@
{
"简介": "jianjie\">&&</p>",
"副标题": "zhuangtai\">&&</div>",
"数组": "u-movie\">&&</article>",
"线路标题": "ctitle\">&&在线播放",
"播放数组": "vlink&&</div>",
"分类url": "https://www.yinghuadongman.com.cn/sxvodshow/{cateId}-{year}/page/{catePg}/;;d0",
"分类": "国漫$2#日漫$1#美漫$3"
}

@ -0,0 +1,7 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4",
"类型": "动作片$6#喜剧片$7#爱情片$8#科幻片$9#奇幻片$10#恐怖片$11#剧情片$12#战争片$20#动画片$26#悬疑片$22#冒险片$23#犯罪片$24#惊悚片$45#歌舞片$46#灾难片$47#网络片$48||国产剧$13#港台剧$14#日剧$15#韩剧$33#欧美剧$16#泰剧$34#新马剧$35#其他剧$25||内地综艺$27#港台综艺$28#日本综艺$29#韩国综艺$36#欧美综艺$30#新马泰综艺$37#其他综艺$38||国产动漫$31#日本动漫$32#韩国动漫$39#港台动漫$40#新马泰动漫$41#欧美动漫$42#其他动漫$43",
"分类url": "https://www.ylys.tv/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html"
}

@ -0,0 +1,27 @@
{
"站名": "雪花",
"主页url": "https://n3300.com/",
"分类url": "https://n3300.com/ekOtxEBafND5Chtml/{cateId}/list_{catePg}.html",
"分类": "喜剧片$xiju#爱情片$aiqing#科幻片$kehuan#剧情片$juqing#悬疑片$xuannian#战争片$zhanzheng#恐怖片$kongbu#灾难片$zainan#连续剧$lianxuju#动漫$dongman#综艺片$zongyijiemu",
"二次截取": "",
"数组": "默认--pic\">&&</li>||首页--col-sm&&</li>",
"图片": "src=\"&&\"",
"标题": "FF0000'>&&<",
"链接": "href=\"&&\"",
"副标题": "4K",
"影片年代": "年  代&&<br>",
"影片地区": "产  地&&<br>",
"影片类型": "类  别&&<br>",
"状态": "片  长 &&<br>",
"导演": "导  演&&<br>",
"主演": "主  演&&<br>",
"简介": "简  介&&</div>",
"线路数组": "下载地址列表&&<h3>",
"线路标题": "磁力",
"播放二次截取": "本站专用电影&&</body",
"播放数组": "<ul>&&</div>",
"播放列表": "<a&&/a>",
"播放链接": "href=\"&&\\&",
"播放标题": "dn=&&<",
"搜索url": "https://n3300.com/plus/search.php?kwtype=0&keyword={wd}"
}

@ -0,0 +1,7 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类url": "https://v.aiwule.com/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html",
"分类": "电影$20#电视剧$21#动漫$23#综艺$22#短剧$47",
"简介": "简介:&&"
}

@ -0,0 +1,47 @@
{
"作者": "摄氏零度",
"站名": "XBPQ影视",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"嗅探词": ".mp4#.m3u8#.flv",
"过滤词": "",
"主页url": "https://www.hanjukankan.com/",
"首页": "120",
"起始页": "1",
"分类url": "https://www.hanjukankan.com/xvs{cateId}xat{area}xbt{by}xct{class}xdt{lang}xet{letter}xftxgtxht{catePg}atbtct{year}.html;;mrc",
"分类": "韩国剧集$1#韩国电影$2#韩国综艺$3",
"数组": "/xvd&&</a>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "module-item-note\">&&</",
"链接": "/xvd+&&\"",
"线路数组": "module-tab-item&&</div>",
"线路标题": ">&&</",
"播放数组": "module-play-list-content&&</div>",
"影片年代": ".html\">&&</a>",
"影片地区": "*xbtxctxdtxetxftxgtxhtatbtct.html\">&&</a>",
"影片类型": "*xdtxetxftxgtxhtatbtct.html\">&&</a><span",
"状态": "状态:&&</div>",
"导演": "导演:&&</div>",
"主演": "主演:&&</div>",
"简介": "<p>&&</p>",
"倒序": "0",
"播放列表": "<a&&/a>",
"播放标题": ">&&</",
"播放链接": "href=\"&&\"",
"跳转播放链接": "var player_*\"url\":\"&&\"",
"跳转解析": "",
"搜索请求头": "User-Agent@Mozilla/5.0 (Linux Android 13 22081212C Build/TKQ1.220829.002 wv) AppleWebKit/537.36",
"搜索模式": "1",
"搜索url": "https://www.hanjukankan.com/xvse{wd}abcdefghig{pg}klm.html",
"搜索后缀": "",
"搜索二次截取": "",
"搜索数组": "module-card-item-class&&</a>",
"搜索标题": "title=\"&&\"",
"搜索图片": "data-original=\"&&\"",
"搜索副标题": "module-item-note\">&&</",
"搜索链接": "href=\"&&\"",
"筛选": "1",
"剧情": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||古装&战争&青春偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&网剧&其他||空",
"剧情值": "*"
}

@ -0,0 +1,81 @@
{
"规则名": "动漫巴士",
"规则作者": "",
"请求头参数": "User-Agent$MOBILE_UA#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://dm84.net",
"首页列表数组规则": "body&&.v_list",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://dm84.net/list-{cateId}-{catePg}.html[firstPage=https://dm84.net/list-{cateId}.html]",
"分类名称": "国产动漫&日本动漫&欧美动漫&动漫电影",
"分类名称替换词": "1&2&3&4",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".v_list&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title!在线观看",
"分类片单链接": "a&&href",
"分类片单图片": ".lazy&&data-bg",
"分类片单副标题": ".desc&&Text",
"分类片单链接加前缀": "https://dm84.net",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
"搜索链接": "https://dm84.net/s-{wd}---------{SearchPg}.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".v_list&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazy&&data-bg",
"搜索片单标题": "a&&title!在线观看",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".desc&&Text",
"搜索片单链接加前缀": "https://dm84.net",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".intro&&-p&&Text",
"线路列表数组规则": ".play_from&&li",
"线路标题": "Text",
"播放列表数组规则": ".tab_content&&.play_list",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "1",
"选集链接加前缀": "https://dm84.net",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

@ -0,0 +1,131 @@
//xpathjsoup2022917
//jsoupjs
//
{
//
"title": "电影港",
//
"author": "香雅情",
//UA,$#okhttp/3.12.11MOBILE_UAPC_UA使UA
//"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok",#
//UAPCUA
"Headers":"PC_UA",
//UTF-8UTF-8GBKGB2312
"Coding_format":"gb2312",
//
"PicNeedProxy":"0",
//01
"homeContent":"0",
//,
"firstpage": "1",
//,{cateId}{catePg}, [firstPage=]
"class_url": "https://www.dygang.tv/{cateId}/index_{catePg}.htm[firstPage=https://www.dygang.cc/{cateId}/index.htm]",
//1&2&3
"class_name": "最新电影&经典高清&国配电影&经典港片&国剧&日韩剧&美剧&综艺&动漫&纪录片&高清原盘&4K高清区&3D电影&电影专题",
//1&2&3&id=0&id=1
"class_value": "ys&bd&gy&gp&dsj&dsj1&yx&zy&dmq&jilupian&1080p&4K&3d&dyzt",
//jsonxpath
"filterdata":{},
//0json
"cat_mode": "1",
//3
"cat_arr_rule": "body&&table[width=388]",
//jsoupxbhtml1jsoup()0xb
"cat_is_jsoup":"1",
//
"cat_title": "img&&alt",
//
"cat_url": "a&&href",
//
"cat_pic": "img&&src",
//
"cat_subtitle":"[align=center]&&Text",
//
"cat_prefix": "https://www.dygang.tv",
//
"cat_suffix": "",
//,okhttp/3.12.11MOBILE_UAPC_UA使UA
//$#"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok"
"SHeaders":"User-Agent$PC_UA#Content-Type$charset=gb2312",
//{wd}post;post
//POST http://www.lezhutv.com/index.php?m=vod-search;post
"search_url": "https://www.dygang.tv/e/search/index123.php;post",
//POSTbodysearchwordwdPOST
"sea_PtBody":"keyboard={wd}&submit=搜+索&show=title,smalltext&tempid=1&tbname=article",
//,0jsonlist
"search_mode": "1",
//list3
"sea_arr_rule": "body&&table[width=388]",
//jsoupxbhtml1jsoup()0xb
"sea_is_jsoup":"1",
//
"sea_pic": "img&&src",
//
"sea_title": "img&&alt",
//
"sea_url": "a&&href",
//
"sea_subtitle":"",
//
"search_prefix": "https://www.dygang.tv",
//json
"search_suffix": "",
//012
//3
"force_play": "0",
//
"play_prefix": "",
//#isVideo=true#
"play_suffix": "",
//#
"play_header": "",
//jsoupxb1jsoup()0xb
"proj_is_jsoup":"0",
//&&
"proj_cate": "",
//&&
"proj_year": "",
//&&
"proj_area": "",
//&&
"proj_actor": "演  员&&</",
//&&
"proj_plot": "简  介&&</",
//线tab_titletab_arr_rule
//线
"tab_arr_rule": "#dede_content",
//线&&
"tab_title": "strong&&Text",
//
"list_arr_rule": "#dede_content",
//
"epi_arr_rule": "table&&[href*=magnet]",
//&&
"epi_title": "a&&Text",
//&&
"epi_url": "a&&href",
//
"epi_reverse": "0",
//
"epiurl_prefix": "",
//
"epiurl_suffix": "",
//
//<script type="text/javascript">var player_aaaa={"flag":"play","encrypt
//0
"Anal_MacPlayer":"0",
//01
"ManualSniffer":"0",
//#
"VideoFormat":".mp4#.m3u8#.flv",
//,#
"VideoFilter":".html#=http"
}

@ -1,5 +1,5 @@
{ {
"spider": "./jar/fan.txt;md5;58149e856fa117ba01d13b0b5de47bd4", "spider": "./jar/spider.jar;md5;193469ed28b7571e529729a9c756f77a",
"lives": [ "lives": [
{"name": "live","boot": false,"type": 0,"url": "./tv.txt","playerType": 2,"ua": "okhttp/3.8.1","timeout": 20,"epg": "https://epg.112114.xyz/?ch={name}&date={date}","logo": "https://logo.wyfc.qzz.io/{name}.png"} {"name": "live","boot": false,"type": 0,"url": "./tv.txt","playerType": 2,"ua": "okhttp/3.8.1","timeout": 20,"epg": "https://epg.112114.xyz/?ch={name}&date={date}","logo": "https://logo.wyfc.qzz.io/{name}.png"}
], ],
@ -7,86 +7,152 @@
"sites": [ "sites": [
{"key": "drpy_js_豆瓣","name": "搜索 | 豆瓣[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/drpy.js","searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "drpy_js_豆瓣","name": "搜索 | 豆瓣[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/drpy.js","searchable": 1,"quickSearch": 0,"changeable": 0},
{"key": "drpy_js_TVB云播","name": "影视 | TVB云播[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/TVB云播.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key": "drpy_js_TVB云播","name": "影视 | TVB云播[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/TVB云播.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "新闪雷","name": "新闪雷┃MP4","type": 3,"api": "./FTY/drpy2.min.js","ext": "./js/新闪雷.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key": "新闪雷","name": "新闪雷┃MP4","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/新闪雷.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "闪雷","name": "闪雷┃MP4","type": 3,"api": "./FTY/drpy2.min.js","ext": "./js/678.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key": "闪雷","name": "闪雷┃MP4","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/678.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "fyyy","name": "飞宇影院","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$1#电视剧$2#综艺$3#动漫$4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key": "fyyy","name": "飞宇影院","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$1#电视剧$2#综艺$3#动漫$4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "cbh","name": "茶杯狐","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "https://www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key": "cbh","name": "茶杯狐","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "https://www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "MDrive","name": "🗂我的云盘┃我配置","type": 3,"api": "csp_MyDriveGuard","changeable": 0,"indexs": 0,"searchable": 1,"style": {"type": "oval"},"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "配置中心","name": "配置|中心","type": 3,"api": "csp_Config","searchable": 0,"changeable": 0,"indexs": 0,"style": {"type": "rect","ratio": 1.597}},
{"key": "热播影视","name": "热播APP","type": 3,"api": "csp_AppRJ","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": {"url": "http://v.rbotv.cn"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "本地","name": "本地|视频","type": 3,"api": "csp_LocalFile"},
{"key": "木瓜","name": "木瓜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://www.yezitv.top/dtym.json","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "预告","name": "新片|预告","type": 3,"api": "csp_YGP","searchable": 0},
{"key": "花柳","name": "花柳APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://nico.oiio.fun","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "热播影视","name": "热播APP","type": 3,"api": "csp_AppRJ","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": {"url": "http://v.rbotv.cn"}},
{"key": "麒麟","name": "麒麟APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "https://qh.70qh.top","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "木瓜","name": "木瓜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://www.yezitv.top/dtym.json","ver": 2}},
{"key": "粉象","name": "粉象APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://host1.sopython.top/host.json","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "花柳","name": "花柳APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://nico.oiio.fun","ver": 2}},
{"key": "搜搜","name": "搜搜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": "https://www.zjcvod.com","jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "麒麟","name": "麒麟APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "https://qh.70qh.top","ver": 2}},
{"key": "火花","name": "火花APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://huohua.itcxo.cn"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "粉象","name": "粉象APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://host1.sopython.top/host.json","ver": 2}},
{"key": "顾我","name": "顾我APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://daen-1256234123.cos.ap-shanghai.myqcloud.com/MuQi/pgqj.json","dataKey": "kj37zs29q22jk96t","dataIv": "kj37zs29q22jk96t","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "搜搜","name": "搜搜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": "https://www.zjcvod.com"},
{"key": "爱盈","name": "爱盈APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://rxysyyds.oss-cn-chengdu.aliyuncs.com/qiji.txt","dataKey": "sjvlwnhk6h9znl61","dataIv": "sjvlwnhk6h9znl61","version": "305","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "火花","name": "火花APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://huohua.itcxo.cn"}},
{"key": "金牌","name": "金牌APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://dtqj.ggtvb.cc/dtjp.txt","dataKey": "eecbio48dsq131ee","dataIv": "eecbio48dsq131ee","search": "searchList4","version": "305","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "顾我","name": "顾我APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://daen-1256234123.cos.ap-shanghai.myqcloud.com/MuQi/pgqj.json","dataKey": "kj37zs29q22jk96t","dataIv": "kj37zs29q22jk96t","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "小猪","name": "小猪APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://tiantangwulu.oss-cn-shanghai.aliyuncs.com/zhuzhuxia.txt","dataKey": "j8sr6d93yp49db3p","dataIv": "j8sr6d93yp49db3p","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "爱盈","name": "爱盈APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://rxysyyds.oss-cn-chengdu.aliyuncs.com/qiji.txt","dataKey": "sjvlwnhk6h9znl61","dataIv": "sjvlwnhk6h9znl61","version": "305","ua": "okhttp/3.10.0"}},
{"key": "奇奇","name": "奇奇APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"url": "http://110.42.67.221:8007","dataKey": "123456789abcdefg","dataIv": "123456789abcdefg","search": "searchList7","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "金牌","name": "金牌APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://dtqj.ggtvb.cc/dtjp.txt","dataKey": "eecbio48dsq131ee","dataIv": "eecbio48dsq131ee","search": "searchList4","version": "305","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "鲸鱼","name": "鲸鱼APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/juyu3.json","dataKey": "AAdgrdghjfgsABC1","dataIv": "AAdgrdghjfgsABC1","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "小猪","name": "小猪APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://tiantangwulu.oss-cn-shanghai.aliyuncs.com/zhuzhuxia.txt","dataKey": "j8sr6d93yp49db3p","dataIv": "j8sr6d93yp49db3p","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "芬奇","name": "芬奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://wsapi.dafenqi.mom/yuming.txt","dataKey": "bH5mI8iK0tK7aQ5x","dataIv": "bH5mI8iK0tK7aQ5x"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "奇奇","name": "奇奇APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"url": "http://110.42.67.221:8007","dataKey": "123456789abcdefg","dataIv": "123456789abcdefg","search": "searchList7","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "火狐","name": "火狐APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://122.114.171.79:568/huohushipin.txt","dataKey": "huohushipingetap","dataIv": "huohushipingetap"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "鲸鱼","name": "鲸鱼APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/juyu3.json","dataKey": "AAdgrdghjfgsABC1","dataIv": "AAdgrdghjfgsABC1","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "看呗","name": "看呗APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://www.winter1.fun","dataKey": "abcdefghigklmn11","dataIv": "abcdefghigklmn11"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "芬奇","name": "芬奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://wsapi.dafenqi.mom/yuming.txt","dataKey": "bH5mI8iK0tK7aQ5x","dataIv": "bH5mI8iK0tK7aQ5x"}},
{"key": "优兔","name": "优兔APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://uututv-1319209748.cos.ap-shanghai.myqcloud.com/uutuv4.txt","dataKey": "UrWKPnmQWJA8AQzd","dataIv": "UrWKPnmQWJA8AQzd"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "火狐","name": "火狐APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://122.114.171.79:568/huohushipin.txt","dataKey": "huohushipingetap","dataIv": "huohushipingetap"}},
{"key": "汤圆","name": "汤圆APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","filterable": 1,"ext": {"url": "http://tangyuanapp.top","dataKey": "j519MYJAt3kk9XVA","dataIv": "j519MYJAt3kk9XVA"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "看呗","name": "看呗APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://www.winter1.fun","dataKey": "abcdefghigklmn11","dataIv": "abcdefghigklmn11"}},
{"key": "缘梦","name": "缘梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://165.99.42.137:5432","dataKey": "1234567890987654","dataIv": "1234567890987654"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "优兔","name": "优兔APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://uututv-1319209748.cos.ap-shanghai.myqcloud.com/uutuv4.txt","dataKey": "UrWKPnmQWJA8AQzd","dataIv": "UrWKPnmQWJA8AQzd"}},
{"key": "王子","name": "王子APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://app.95112475.xyz","dataKey": "5a9w6x58dsq6z3a6","dataIv": "5a9w6x58dsq6z3a6"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "汤圆","name": "汤圆APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","filterable": 1,"ext": {"url": "http://tangyuanapp.top","dataKey": "j519MYJAt3kk9XVA","dataIv": "j519MYJAt3kk9XVA"}},
{"key": "小猫","name": "小猫APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt","dataKey": "xmyxmyxywlkjxywl","dataIv": "xmyxmyxywlkjxywl"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "缘梦","name": "缘梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://165.99.42.137:5432","dataKey": "1234567890987654","dataIv": "1234567890987654"}},
{"key": "小白","name": "小白APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://uutu.efjhl.cn","dataKey": "uXVVRRuaPnjEfsX5","dataIv": "uXVVRRuaPnjEfsX5"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "王子","name": "王子APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://app.95112475.xyz","dataKey": "5a9w6x58dsq6z3a6","dataIv": "5a9w6x58dsq6z3a6"}},
{"key": "火锅","name": "火锅APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://ios.hgyx.vip","dataKey": "062dec75d039980e","dataIv": "062dec75d039980e","ua": "Dart/3.5 (dart:io)"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "小猫","name": "小猫APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt","dataKey": "xmyxmyxywlkjxywl","dataIv": "xmyxmyxywlkjxywl"}},
{"key": "气球","name": "气球APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://vv.229d.cn","dataKey": "8888888888888888","dataIv": "8888888888888888"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "小白","name": "小白APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://uutu.efjhl.cn","dataKey": "uXVVRRuaPnjEfsX5","dataIv": "uXVVRRuaPnjEfsX5"}},
{"key": "白鸽","name": "白鸽APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://cy.baige.asia","dataKey": "599D0FE5178642FD","dataIv": "599D0FE5178642FD"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "火锅","name": "火锅APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://ios.hgyx.vip","dataKey": "062dec75d039980e","dataIv": "062dec75d039980e","ua": "Dart/3.5 (dart:io)"}},
{"key": "剧梦","name": "剧梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://www.jumengwu.com","dataKey": "1f0a873caf2550a5","dataIv": "1f0a873caf2550a5"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "气球","name": "气球APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://vv.229d.cn","dataKey": "8888888888888888","dataIv": "8888888888888888"}},
{"key": "魔方","name": "魔方APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://snysw.xyz/mf4kzs327.txt","dataKey": "1234567887654321","dataIv": "1234567887654321"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "白鸽","name": "白鸽APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://cy.baige.asia","dataKey": "599D0FE5178642FD","dataIv": "599D0FE5178642FD"}},
{"key": "瑞奇","name": "瑞奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://rqxk.gdata.fun","dataKey": "yangruiqiYsapp00","dataIv": "yangruiqiYsapp00"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "剧梦","name": "剧梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://www.jumengwu.com","dataKey": "1f0a873caf2550a5","dataIv": "1f0a873caf2550a5"}},
{"key": "茉莉","name": "茉莉APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt","dataKey": "88689667dce61725","dataIv": "88689667dce61725"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "魔方","name": "魔方APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://snysw.xyz/mf4kzs327.txt","dataKey": "1234567887654321","dataIv": "1234567887654321"}},
{"key": "驿站","name": "驿站丨APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt","dataKey": "dyyztvapiappyyds","dataIv": "dyyztvapiappyyds"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "瑞奇","name": "瑞奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://rqxk.gdata.fun","dataKey": "yangruiqiYsapp00","dataIv": "yangruiqiYsapp00"}},
{"key": "灵虎","name": "灵虎APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://bind.315999.xyz/89.txt","dataKey": "#getapp@TMD@2025","dataIv": "#getapp@TMD@2025","version": "120"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "茉莉","name": "茉莉APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt","dataKey": "88689667dce61725","dataIv": "88689667dce61725"}},
{"key": "电影港","name": "电影港|磁力","type": 3,"api": "csp_XYQHiker","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./xiaosa/XYQHiker/电影港.json","jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "驿站","name": "驿站丨APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt","dataKey": "dyyztvapiappyyds","dataIv": "dyyztvapiappyyds"}},
{"key": "玩偶","name": "👽玩偶哥哥┃4K弹幕","type": 3,"api": "csp_WoGGGuard","timeout": 30,"searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "灵虎","name": "灵虎APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://bind.315999.xyz/89.txt","dataKey": "#getapp@TMD@2025","dataIv": "#getapp@TMD@2025","version": "120"}},
{"key": "YGP","name": "🚀叨观荐影┃预告片","type": 3,"api": "csp_YGPGuard","searchable": 0,"quickSearch": 0,"changeable": 0}, {"key": "哔哩视频","name": "哔哩|视频","type": 3,"api": "csp_BiliYS","searchable": 1,"quickSearch": 0,"filterable": 0,"changeable": 0,"style": {"type": "rect","ratio": 1.433},"ext": {"json": "./json/哔哩视频.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"}},
{"key": "MTV1","name": "🎙️易听音乐┃带歌词","type": 3,"api": "csp_MusicGuard","style": {"type": "rect","ratio": 1},"playerType": 2,"searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "玩偶","name": "玩偶4K","type": 3,"api": "csp_Wogg","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://www.wogg.one","https://wogg.333232.xyz","https://woggpan.888484.xyz"]}},
{"key": "seed","name": "💡聚剧剧┃三盘","type": 3,"api": "csp_SeedhubGuard","ext": "5++kwLhNYm9UrO9wh7Dl7eKamTee4s/5","searchable": 1,"quickSearch": 1,"changeable": 0,"indexs": 0,"style": {"type": "list"}}, {"key": "快映","name": "快映4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["http://xsayang.fun:12512","http://154.201.83.50:12512"]}},
{"key": "ZPan","name": "🎈聚盘搜┃三盘","type": 3,"api": "csp_S_zpsGuard","searchable": 1,"quickSearch": 0,"changeable": 0,"ext": {"siteUrl": "http://38.55.131.86:82/"},"indexs": 0,"style": {"type": "list"}}, {"key": "木偶","name": "木偶4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://123.666291.xyz","https://666.666291.xyz","https://www.muou.site","https://www.muou.asia"]}},
{"key": "立播","name": "🌟立播┃秒播","type": 3,"api": "csp_LibvioGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "蜡笔","name": "蜡笔4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://www.labi88.sbs","https://feimao666.fun","http://feimao888.fun"]}},
{"key": "奶酪","name": "🧀奶酪┃秒播","type": 3,"api": "csp_T4Guard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "rfOIzPkSUkANv6AT2prC8en3+TzKx9TnlT8vaY37HhtYfAQe6C5xqrVuJPhQwYV6r3eRdMBGm3Qm6Th+BushR86B6KqJGXDsHazHw7alBG/7zUxkN1tK/NypRxnpBNoeUtpw4jcCGhytI75yO4g4zG6SOPA0RSwhksM0IF2friAkrHCWoW3v+0mdw6sjz4t4XB1Df7yL/R5cfaA/5LQYq3I8OkvMrJMU9Q1P7JXwx7NSF2zTyH/ANVmZ4u5m567DW1KVG7OuQjXPjZiOXTYk0+wjpfBRTf19yIq6q/C76k2Fs80joAMPw0ueDR+QHxtuDcTom2rmHkI1Fonkzi6BotbpUcbSi4PiIgmfdbvVwhG6Z+i4nvt+IYa48l5aLA7PLgDiERpuOs31aHaXlgFswT87XyTb8QaF4CuzKWJuXptwNTjvXAS9KHdxH49Ay+hfBAB2bCvUf4CMoldF2wZUv0mI2qY966erFpOFg+FOc7t88EUH8j8ACXQtHJiKC9RQ+SaLIF0="}, {"key": "至臻","name": "至臻4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://mihdr.top","https://www.miqk.cc","https://xiaomiai.site","https://xiaomi666.fun","https://www.mihdr.top","https://www.zhizhenpan.fun"]}},
{"key": "厂长","name": "📔厂长┃秒播","type": 3,"api": "csp_NewCzGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "多多","name": "多多4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://tv.yydsys.top","https://tv.yydsys.cc","https://tv.214521.xyz"]}},
{"key": "文采","name": "💮文采┃秒播","type": 3,"api": "csp_JpysGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "欧哥","name": "欧哥4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://woog.nxog.eu.org","https://woog.nxog.fun","https://woog.nxog.eu.org","https://woog.430520.xyz"]}},
{"key": "原创","name": "☀原创┃秒播","type": 3,"api": "csp_YCyzGuard","timeout": 15,"playerType": 1,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "二小","name": "二小4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://xhww.net","https://erxiaofn.site","https://erxiaofn.click","https://www.xhww.net"]}},
{"key": "比特","name": "🍄比特┃秒播","type": 3,"api": "csp_BttwooGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "虎斑","name": "虎斑4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["http://xhban.xyz:20720","http://154.222.27.33:20720"]}},
{"key": "苹果","name": "🍎苹果┃秒播","type": 3,"api": "csp_LiteAppleGuard","timeout": 15,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "闪电","name": "闪电4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://sd.sduc.site"]}},
{"key": "热播","name": "📺热播┃多线","type": 3,"api": "csp_AppTTGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "uqGL1bNENExT7/hGxpSE5qU="}, {"key": "夸克","name": "夸克4K","type": 3,"api": "csp_PanWebShareCloudKK","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://www.quarktv.cc"]}},
{"key": "剧圈","name": "🐻剧圈┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+S3T18333j8hL4ryEFdPZxse8yYwoKFyJOlU2M9/q2OcL8NQxT0k5GV9Quw0AIzUurGBVyPqCLrdirfpAz+n0Qh7PVBWo8uxWhO1Bs1MCYA1oiM="}, {"key": "清影","name": "清影4K","type": 3,"api": "csp_PanWebShareCloudQY","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["http://www.revohd.com"]}},
{"key": "下饭","name": "🍙下饭┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwtCFsub1+mmfmIi0nGlgK8i7X0oYLxBVvSwnsuM5MLkOhoI/4z/TJMVFz2ow52AyXL42Edzeou/SGHg="}, {"key": "雷鲸","name": "雷鲸4K","type": 3,"api": "csp_PanWebShareCloudLJ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["https://www.leijing.xyz","https://www.leijing1.com","https://leijing.xyz","https://leijing1.com"]}},
{"key": "极狐","name": "🦊极狐┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+S/Cz8j6xik9ZIrwCw8aZkEOtiQw5qNif+ZRw904uGiCZNFRz3ln6nh5Q+wpBsGA6aydW3fmWrXH1ve0HjKxzV5kNEdcrI7mT1i2DMtcTIh17XhLS0D2Cr6rghboDg=="}, {"key": "海绵","name": "海绵4K","type": 3,"api": "csp_PanWebShareCloudHM","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["http://haimian.eu.org","https://www.hmxz.org","https://www.haimianxz.com"]}},
{"key": "猫猫","name": "🐟猫猫┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwpmIsuSspW+fnt3j0Gkxas3qVQ5bZRBVvSwnsuM5MOJ0isFT7Xq5Kctln34euXsyXL42Edzeou/SGHg="}, {"key": "夸父","name": "夸父4K","type": 3,"api": "csp_PanWebShareCloudKF","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["https://www.kfjwzz.com"],"cookie": "bbs_sid=bi7dpnm6vp31s38rjqlqq8vq84; bbs_token=TWiR3YUrGoVpbdTkjAJ0xMe_2B_2FiaFvd84V3_2FEZJRRSKU_3D"}},
{"key": "橘子","name": "🍊橘子┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwpmIsuS/sSCZwM/jwik9Zoy3AAlFMxpf9CY77fshJ+II0I4x7mOKd5IWnT40uC1p"}, {"key": "盘它","name": "盘它4K","type": 3,"api": "csp_PanWebShareCloudPT","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list"}},
{"key": "鲸鱼","name": "👀鲸鱼┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+TXC3NH30m85MMiyVkwSIgNArXpwrLZwJOlInMRrq2qCb88RxXck6mdnBfx+E9mVr+/WQHKnXOuf1rT3CHH2zSEDJ0lM/ZH/GF+kFMAPQfAluHgdCEy1QqmjhV0="}, {"key": "123","name": "1234K","type": 3,"api": "csp_PanWebShareCloud123","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["https://123panfx.com","https://pan1.me"]}},
{"key": "糯米","name": "🍓糯米┃多线","type": 3,"api": "csp_NmyswvGuard","timeout": 15,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "人人","name": "人人4K","type": 3,"api": "csp_RenRen"},
{"key": "奥特","name": "🏝奥特┃多线","type": 3,"api": "csp_AueteGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "即刻","name": "即刻4K","type": 3,"api": "csp_Jike","style": {"type": "list"}},
{"key": "荐片","name": "🐭荐片┃P2P","type": 3,"api": "csp_JPJGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 0}, {"key": "双星","name": "双星4K","type": 3,"api": "csp_ShuangXing","style": {"type": "list"}},
{"key": "新6V","name": "🧲新6V┃磁力","type": 3,"api": "csp_SixVGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "https://www.xb6v.com/"}, {"key": "甜圈短剧","name": "甜圈|短剧","type": 3,"api": "csp_TianquanDJ","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "Dm84","name": "🚌巴士┃动漫","type": 3,"api": "csp_Dm84Guard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "锦鲤短剧","name": "锦鲤|短剧","type": 3,"api": "csp_JinliDJ","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "Anime1","name": "🐾日本┃动漫","type": 3,"api": "csp_Anime1Guard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "星阁短剧","name": "星阁|短剧","type": 3,"api": "csp_XinggeDJ","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "88","name": "⚽88┃看球","type": 3,"api": "csp_Sir88Guard","timeout": 10,"searchable": 0,"changeable": 0,"style": {"type": "list"}}, {"key": "星芽短剧","name": "星芽|短剧","type": 3,"api": "./py/星芽短剧.py","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "超全","name": "⚽超全┃看球","type": 3,"api": "csp_ZbzGuard","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "list"},"ext": "uqGL1fpJNAUf8fdTwZCE5qSp+Q=="}, {"key": "剧王短剧","name": "剧王|短剧","type": 3,"api": "./py/剧王短剧.py","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "看球","name": "⚽手机┃看球","type": 3,"api": "csp_KanqiuGuard","timeout": 10,"searchable": 0,"changeable": 0,"style": {"type": "list"}}, {"key": "木兮影视","name": "木兮|影视","type": 3,"api": "csp_Symx","ext": "https://film.symx.club"},
{"key": "MTV","name": "🎶明星┃MV","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/5af5fbe12a88b7c45aa1c21e6551826c.txt"}}, {"key": "零度影视","name": "零度|影视","type": 3,"api": "csp_Lingdu","searchable": 1,"filterable": 1},
{"key": "有声小说","name": "🎧有声┃小说","type": 3,"api": "csp_Tingshu275Guard","style": {"type": "rect","ratio": 1},"searchable": 0,"quickSearch": 0,"changeable": 0}, {"key": "厂长影视","name": "厂长|影视","type": 3,"api": "csp_Czsapp","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "https://www.czzymovie.com"},
{"key": "Aid","name": "🚑急救┃教学","type": 3,"api": "csp_FirstAidGuard","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "rect","ratio": 3.8}}, {"key": "金牌影视","name": "金牌|影视","type": 3,"api": "csp_Jpys","ext": "https://m.610pkea.com,https://y2s52n7.com,https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn"},
{"key": "虎牙js","name": "🐯虎牙┃直播","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/虎牙.js","style": {"type": "rect","ratio": 1.755},"timeout": 10,"playerType": "2","searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "云播影视","name": "云播|影视","type": 3,"api": "csp_Tvyb","ext": "http://www.viptv05.com"},
{"key": "斗鱼js","name": "🐟斗鱼┃直播","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/斗鱼直播.js","style": {"type": "rect","ratio": 1.755},"timeout": 10,"playerType": "2","searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "苹果影视","name": "苹果|影视","type": 3,"api": "csp_LiteApple"},
{"key": "抠搜","name": "🍄抠抠┃搜搜","type": 3,"api": "csp_KkSsGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "饺子影视","name": "饺子|影视","type": 3,"api": "csp_Jiaozi"},
{"key": "UC","name": "🌈优汐┃搜搜","type": 3,"api": "csp_UuSsGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "瓜子影视","name": "瓜子|影视","type": 3,"api": "csp_Gz360"},
{"key": "push_agent","name": "🛴手机┃推送","type": 3,"api": "csp_PushGuard","searchable": 0,"quickSearch": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "骚火影视","name": "骚火|影视","type": 3,"api": "csp_SaoHuo","ext": "https://shdy5.us"},
{"key": "Bili","name": "🅱哔哔合集┃弹幕","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 1,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/0075389dca9afadd4614e9713765ff17.txt"}}, {"key": "农民影视","name": "农民|影视","type": 3,"api": "csp_Wwys","ext": "https://vip.wwgz.cn:5200"},
{"key": "Biliych","name": "🅱哔哔演唱会┃弹幕","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/6496356286589c68f52c2f99c0c674c7.txt"}}, {"key": "爱看机器人","name": "爱看|影视","type": 3,"api": "csp_Ikanbot","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "dr_兔小贝","name": "📚儿童┃启蒙","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/%E5%85%94%E5%B0%8F%E8%B4%9D.js","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0}, {"key": "韩剧看看","name": "韩剧|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/韩剧看看.json"},
{"key": "少儿教育","name": "📚少儿┃教育","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/89370c8ddf36b5e1beb4d71adb921bda.txt"}}, {"key": "小镇影视","name": "小镇|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/小镇影视.json"},
{"key": "小学课堂","name": "📚小学┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/d7a21cf34ede56f5c686ecfba5fc7e3f.txt"}}, {"key": "面包影视","name": "面包|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/面包影视.json"},
{"key": "初中课堂","name": "📚初中┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/8f55d520f8d70056695740ef151744a7.txt"}}, {"key": "永乐影视","name": "永乐|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/永乐影视.json"},
{"key": "高中教育","name": "📚高中┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/c66a4b5356141c49fd45ec51568017b4.txt"}}, {"key": "采集之王","name": "采集|合集","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/采集之王.js?type=url&params=../json/采集静态.json$1$1"},
{"key": "1905","name": "1905影视","type": 3,"api": "csp_Web1905","searchable": 1,"quickSearch": 0,"filterable": 0},
{"key": "哆啦新番社","name": "哆啦|新番社","type": 3,"api": "csp_XBPQ","style": {"type": "list"},"ext": "./XBPQ/哆啦新番社.json"},
{"key": "Anime1","name": "A1动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/Anime1.js"},
{"key": "NT动漫","name": "NT动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/NT动漫.js"},
{"key": "漫国动漫","name": "漫国丨动漫","type": 3,"searchable": 1,"api": "csp_AppSy","ext": {"site": "https://dm-1255775577.cos.ap-guangzhou.myqcloud.com/dmg/api.txt","siteKey": "rectangleadsadxa","listKey": "aassddwwxxllsx1x","parsesKey": "aassddwwxxllsx1x"}},
{"key": "云屋动漫","name": "云屋|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://www.yunwuee.icu","dataKey": "ygcnb9bdcmb8aeiw","dataIv": "ygcnb9bdcmb8aeiw"}},
{"key": "卡卡动漫","name": "卡卡|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://154.201.90.53:8002","dataKey": "123456789abcdefg","dataIv": "123456789abcdefg"}},
{"key": "丫丫动漫","name": "丫丫|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://tv.yy-fun.cc","dataKey": "qkxnwkfjwpcnwycl","dataIv": "qkxnwkfjwpcnwycl"}},
{"key": "冬日动漫","name": "冬日丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://www.drdm.fun","dataKey": "qE2nD0rL1lH4uP9r","dataIv": "qE2nD0rL1lH4uP9r"}},
{"key": "方舟动漫","name": "方舟丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://www.cyfz.vip","dataKey": "e72cdfd629e8895d","dataIv": "e72cdfd629e8895d"}},
{"key": "元咲动漫","name": "元咲丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://cic.aicg.fun","dataKey": "2c4h36abd96se10u","dataIv": "2c4h36abd96se10u"}},
{"key": "番薯动漫","name": "番薯丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://new.app.bytegooty.com","dataKey": "N4yj7l7xKxHF4*gz","dataIv": "N4yj7l7xKxHF4*gz"}},
{"key": "曼波动漫","name": "曼波|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://app.omofun1.top","dataKey": "66dc309cbeeca454","dataIv": "66dc309cbeeca454"}},
{"key": "咕咕动漫","name": "咕咕|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://www.gugu3.com","dataKey": "nKfZ8KX6JTNWRzTD","dataIv": "nKfZ8KX6JTNWRzTD"}},
{"key": "米饭动漫","name": "米饭|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://get.mymifun.com","dataKey": "GETMIFUNGEIMIFUN","dataIv": "GETMIFUNGEIMIFUN"}},
{"key": "樱花动漫","name": "樱花|动漫","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/樱花动漫.json"},
{"key": "巴士动漫","name": "巴士|动漫","type": 3,"api": "csp_XYQHiker","ext": "./XYQHiker/巴士动漫.json"},
{"key": "花子动漫","name": "花子|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/花子动漫.js"},
{"key": "爱动漫","name": "爱动漫|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/爱动漫.js"},
{"key": "路漫漫","name": "路漫漫|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/路漫漫.js"},
{"key": "去看吧","name": "去看吧|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/去看吧.js"},
{"key": "荐片","name": "荐片|磁力","api": "csp_JianPian","type": 3},
{"key": "修罗","name": "修罗|磁力","api": "csp_Xlys","type": 3,"ext": "https://xl01.com.de"},
{"key": "七味","name": "七味|磁力","type": 3,"api": "csp_QnMp4","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": {"url": "https://www.pkmp4.xyz,https://www.qwnull.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qnmp4.com,https://www.qnnull.com,https://www.qnhot.com"}},
{"key": "雪花","name": "雪花|磁力","type": 3,"api": "csp_XBPQ","changeable": 1,"searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./XBPQ/雪花.json"},
{"key": "80S","name": "80S磁力","type": 3,"api": "csp_BLSGod","playerType": 1,"searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "New6v","name": "New6V磁力","type": 3,"api": "csp_New6v","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "https://www.xb6v.com"},
{"key": "美剧迷","name": "美剧迷|磁力","type": 3,"api": "csp_MeijuMi","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "迅雷吧","name": "迅雷吧|磁力","type": 3,"api": "csp_Xunlei8","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "电影港","name": "电影港|磁力","type": 3,"api": "csp_XYQHiker","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./XYQHiker/电影港.json"},
{"key": "电影天堂","name": "电影天堂|磁力","type": 3,"api": "csp_DyGod","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "阿里云盘","name": "我的|阿里","type": 3,"api": "csp_PanAli","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433},"ext": "./json/aliShare.json"},
{"key": "夸克云盘","name": "我的|夸克","type": 3,"api": "csp_PanQuark","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433},"ext": "./json/quarkShare.json"},
{"key": "UC云盘","name": "我的UC","type": 3,"api": "csp_PanUc","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433},"ext": "./json/ucShare.json"},
{"key": "百度云盘","name": "我的|百度","type": 3,"api": "csp_PanBaiDu","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433}},
{"key": "盘搜","name": "盘搜|搜索","type": 3,"api": "csp_PanSou","searchable": 1,"quickSearch": 0,"filterable": 0},
{"key": "糖果","name": "糖果|搜索","type": 3,"api": "csp_TGSou","searchable": 1,"quickSearch": 0,"filterable": 0},
{"key": "百酷","name": "百酷|搜索","type": 3,"api": "csp_Baiku"},
{"key": "米搜","name": "米搜|搜索","type": 3,"api": "csp_MiSou"},
{"key": "酷乐","name": "酷乐|搜索","type": 3,"api": "csp_KuLe"},
{"key": "鬼鬼","name": "鬼鬼|搜索","type": 3,"api": "csp_GuiGui"},
{"key": "混合","name": "混合|搜索","type": 3,"api": "csp_HunHePan"},
{"key": "兄弟","name": "兄弟|搜索","type": 3,"api": "csp_XiongDiPan"},
{"key": "天翼","name": "天翼|搜索","type": 3,"api": "csp_TianYiSo"},
{"key": "趣盘","name": "趣盘|搜索","type": 3,"api": "csp_QuPanSo"},
{"key": "AList","name": "AList合集","type": 3,"api": "csp_Alist","searchable": 1,"filterable": 1,"changeable": 0,"style": {"type": "list"},"ext": "./json/alist.json"},
{"key": "88看球","name": "88看球","type": 3,"api": "csp_Kanqiu","gridview": 3,"style": {"type": "list"}},
{"key": "爱听音乐","name": "爱听|音乐","type": 3,"api": "./py/爱听音乐.py"},
{"key": "六月听书","name": "六月|听书","type": 3,"api": "csp_TingBook","style": {"type": "list"}},
{"key": "呦呦DJ","name": "呦呦DJ","type": 3,"api": "csp_Djuu","style": {"type": "list"}},
{"key": "戏曲多多","name": "戏曲|多多","type": 3,"api": "csp_AppLY","style": {"type": "list"}},
{"key": "网络直播","name": "网络|直播","type": 3,"api": "./py/网络直播.py"},
{"key": "哔哩直播","name": "哔哩|直播","type": 3,"api": "./py/哔哩直播.py"},
{"key": "哔哩合集","name": "哔哩|合集","type": 3,"api": "csp_Bili","searchable": 1,"quickSearch": 0,"filterable": 0,"changeable": 0,"style": {"type": "rect","ratio": 1.433},"ext": {"json": "./json/哔哩合集.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"}},
{"key": "哔哩哔哩演唱会","name": "哔哩|音乐","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩演唱会.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩听书","name": "哔哩|听书","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩听书.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩相声","name": "哔哩|相声","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩相声.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩小品","name": "哔哩|小品","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩小品.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩戏曲","name": "哔哩|戏曲","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩戏曲.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "少儿教育","name": "少儿|教育","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/少儿教育.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "小学课堂","name": "小学|课堂","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/小学课堂.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "初中课堂","name": "初中|课堂","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/初中课堂.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "高中课堂","name": "高中|课堂","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/高中课堂.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "急救教学","name": "急救|教学","type": 3,"api": "csp_FirstAid","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "rect","ratio": 3.8},"gridview": "0-0-4.1"},
{"key": "养生堂","name": "养生|知识","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/养生堂.json","style": {"type": "rect","ratio": 1.597}},
{"key": "push_agent","name": "手机|推送","type": 3,"api": "csp_Push","searchable": 0,"filterable": 0,"changeable": 0},
{"key": "奇优","name": "影视 | ️奇优[直连]","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"}, {"key": "奇优","name": "影视 | ️奇优[直连]","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"},
{"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2}, {"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2},
{"key": "天涯采集","name": "影视 | 天涯","type": 1,"api": "http://tyyszy.com/api.php/provide/vod","style": {"type": "rect","ratio": 1.33},"searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2}, {"key": "天涯采集","name": "影视 | 天涯","type": 1,"api": "http://tyyszy.com/api.php/provide/vod","style": {"type": "rect","ratio": 1.33},"searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2},

@ -0,0 +1,66 @@
{
"spider": "./jar/fan.txt;md5;46134f58a2d0e6c5824bf14d3ab882b3",
"wallpaper": "https://深色壁纸.xxooo.cf/",
"sites": [
{"key": "豆","name": "新增自动安装,新公众号【太太太硬了】","type": 3,"api": "csp_DouDouGuard","indexs": 1,"searchable": 0,"quickSearch": 0,"changeable": 0},
{"key": "MDrive","name": "🗂我的云盘┃我配置","type": 3,"api": "csp_MyDriveGuard","changeable": 0,"indexs": 0,"searchable": 1,"style": {"type": "oval"},"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "玩偶","name": "👽玩偶哥哥┃4K弹幕","type": 3,"api": "csp_WoGGGuard","timeout": 30,"searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "YGP","name": "🚀叨观荐影┃预告片","type": 3,"api": "csp_YGPGuard","searchable": 0,"quickSearch": 0,"changeable": 0},
{"key": "MTV1","name": "🎙️易听音乐┃带歌词","type": 3,"api": "csp_MusicGuard","style": {"type": "rect","ratio": 1},"playerType": 2,"searchable": 1,"quickSearch": 0,"changeable": 0},
{"key": "seed","name": "💡聚剧剧┃三盘","type": 3,"api": "csp_SeedhubGuard","ext": "5++kwLhNYm9UrO9wh7Dl7eKamTee4s/5","searchable": 1,"quickSearch": 1,"changeable": 0,"indexs": 0,"style": {"type": "list"}},
{"key": "ZPan","name": "🎈聚盘搜┃三盘","type": 3,"api": "csp_S_zpsGuard","searchable": 1,"quickSearch": 0,"changeable": 0,"ext": {"siteUrl": "http://38.55.131.86:82/"},"indexs": 0,"style": {"type": "list"}},
{"key": "立播","name": "🌟立播┃秒播","type": 3,"api": "csp_LibvioGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "奶酪","name": "🧀奶酪┃秒播","type": 3,"api": "csp_T4Guard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "rfOIzPkSUkANv6AT2prC8en3+TzKx9TnlT8vaY37HhtYfAQe6C5xqrVuJPhQwYV6r3eRdMBGm3Qm6Th+BushR86B6KqJGXDsHazHw7alBG/7zUxkN1tK/NypRxnpBNoeUtpw4jcCGhytI75yO4g4zG6SOPA0RSwhksM0IF2friAkrHCWoW3v+0mdw6sjz4t4XB1Df7yL/R5cfaA/5LQYq3I8OkvMrJMU9Q1P7JXwx7NSF2zTyH/ANVmZ4u5m567DW1KVG7OuQjXPjZiOXTYk0+wjpfBRTf19yIq6q/C76k2Fs80joAMPw0ueDR+QHxtuDcTom2rmHkI1Fonkzi6BotbpUcbSi4PiIgmfdbvVwhG6Z+i4nvt+IYa48l5aLA7PLgDiERpuOs31aHaXlgFswT87XyTb8QaF4CuzKWJuXptwNTjvXAS9KHdxH49Ay+hfBAB2bCvUf4CMoldF2wZUv0mI2qY966erFpOFg+FOc7t88EUH8j8ACXQtHJiKC9RQ+SaLIF0="},
{"key": "厂长","name": "📔厂长┃秒播","type": 3,"api": "csp_NewCzGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "文采","name": "💮文采┃秒播","type": 3,"api": "csp_JpysGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "原创","name": "☀原创┃秒播","type": 3,"api": "csp_YCyzGuard","timeout": 15,"playerType": 1,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "比特","name": "🍄比特┃秒播","type": 3,"api": "csp_BttwooGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "苹果","name": "🍎苹果┃秒播","type": 3,"api": "csp_LiteAppleGuard","timeout": 15,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "热播","name": "📺热播┃多线","type": 3,"api": "csp_AppTTGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "uqGL1bNENExT7/hGxpSE5qU="},
{"key": "剧圈","name": "🐻剧圈┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+S3T18333j8hL4ryEFdPZxse8yYwoKFyJOlU2M9/q2OcL8NQxT0k5GV9Quw0AIzUurGBVyPqCLrdirfpAz+n0Qh7PVBWo8uxWhO1Bs1MCYA1oiM="},
{"key": "下饭","name": "🍙下饭┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwtCFsub1+mmfmIi0nGlgK8i7X0oYLxBVvSwnsuM5MLkOhoI/4z/TJMVFz2ow52AyXL42Edzeou/SGHg="},
{"key": "极狐","name": "🦊极狐┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+S/Cz8j6xik9ZIrwCw8aZkEOtiQw5qNif+ZRw904uGiCZNFRz3ln6nh5Q+wpBsGA6aydW3fmWrXH1ve0HjKxzV5kNEdcrI7mT1i2DMtcTIh17XhLS0D2Cr6rghboDg=="},
{"key": "猫猫","name": "🐟猫猫┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwpmIsuSspW+fnt3j0Gkxas3qVQ5bZRBVvSwnsuM5MOJ0isFT7Xq5Kctln34euXsyXL42Edzeou/SGHg="},
{"key": "橘子","name": "🍊橘子┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwpmIsuS/sSCZwM/jwik9Zoy3AAlFMxpf9CY77fshJ+II0I4x7mOKd5IWnT40uC1p"},
{"key": "鲸鱼","name": "👀鲸鱼┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+TXC3NH30m85MMiyVkwSIgNArXpwrLZwJOlInMRrq2qCb88RxXck6mdnBfx+E9mVr+/WQHKnXOuf1rT3CHH2zSEDJ0lM/ZH/GF+kFMAPQfAluHgdCEy1QqmjhV0="},
{"key": "糯米","name": "🍓糯米┃多线","type": 3,"api": "csp_NmyswvGuard","timeout": 15,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "奥特","name": "🏝奥特┃多线","type": 3,"api": "csp_AueteGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "荐片","name": "🐭荐片┃P2P","type": 3,"api": "csp_JPJGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 0},
{"key": "新6V","name": "🧲新6V┃磁力","type": 3,"api": "csp_SixVGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "https://www.xb6v.com/"},
{"key": "Dm84","name": "🚌巴士┃动漫","type": 3,"api": "csp_Dm84Guard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "Anime1","name": "🐾日本┃动漫","type": 3,"api": "csp_Anime1Guard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1},
{"key": "88","name": "⚽88┃看球","type": 3,"api": "csp_Sir88Guard","timeout": 10,"searchable": 0,"changeable": 0,"style": {"type": "list"}},
{"key": "超全","name": "⚽超全┃看球","type": 3,"api": "csp_ZbzGuard","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "list"},"ext": "uqGL1fpJNAUf8fdTwZCE5qSp+Q=="},
{"key": "看球","name": "⚽手机┃看球","type": 3,"api": "csp_KanqiuGuard","timeout": 10,"searchable": 0,"changeable": 0,"style": {"type": "list"}},
{"key": "MTV","name": "🎶明星┃MV","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/5af5fbe12a88b7c45aa1c21e6551826c.txt"}},
{"key": "有声小说","name": "🎧有声┃小说","type": 3,"api": "csp_Tingshu275Guard","style": {"type": "rect","ratio": 1},"searchable": 0,"quickSearch": 0,"changeable": 0},
{"key": "Aid","name": "🚑急救┃教学","type": 3,"api": "csp_FirstAidGuard","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "rect","ratio": 3.8}},
{"key": "虎牙js","name": "🐯虎牙┃直播","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/虎牙.js","style": {"type": "rect","ratio": 1.755},"timeout": 10,"playerType": "2","searchable": 1,"quickSearch": 0,"changeable": 0},
{"key": "斗鱼js","name": "🐟斗鱼┃直播","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/斗鱼直播.js","style": {"type": "rect","ratio": 1.755},"timeout": 10,"playerType": "2","searchable": 1,"quickSearch": 0,"changeable": 0},
{"key": "抠搜","name": "🍄抠抠┃搜搜","type": 3,"api": "csp_KkSsGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "UC","name": "🌈优汐┃搜搜","type": 3,"api": "csp_UuSsGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "YiSo","name": "😹易搜┃三盘","type": 3,"api": "csp_YiSoGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt","yiSoCookie": "satoken=4437cb8c-a260-411b-9a0d-1fa622ab422f"}},
{"key": "米搜","name": "🦋米搜┃优夸","type": 3,"api": "csp_MIPanSoGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "YpanSo","name": "🐟盘她┃夸父","type": 3,"api": "csp_YpanSoGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "push_agent","name": "🛴手机┃推送","type": 3,"api": "csp_PushGuard","searchable": 0,"quickSearch": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}},
{"key": "Bili","name": "🅱哔哔合集┃弹幕","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 1,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/0075389dca9afadd4614e9713765ff17.txt"}},
{"key": "Biliych","name": "🅱哔哔演唱会┃弹幕","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/6496356286589c68f52c2f99c0c674c7.txt"}},
{"key": "dr_兔小贝","name": "📚儿童┃启蒙","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/%E5%85%94%E5%B0%8F%E8%B4%9D.js","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0},
{"key": "少儿教育","name": "📚少儿┃教育","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/89370c8ddf36b5e1beb4d71adb921bda.txt"}},
{"key": "小学课堂","name": "📚小学┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/d7a21cf34ede56f5c686ecfba5fc7e3f.txt"}},
{"key": "初中课堂","name": "📚初中┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/8f55d520f8d70056695740ef151744a7.txt"}},
{"key": "高中教育","name": "📚高中┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/c66a4b5356141c49fd45ec51568017b4.txt"}},
{"key": "fan","name": "导航 www.饭太硬.com","type": 3,"api": "csp_XPathGuard","searchable": 1,"quickSearch": 0,"changeable": 0},
{"key": "cc","name": "请勿相信视频中广告","type": 3,"api": "csp_XPathGuard","searchable": 1,"quickSearch": 0,"changeable": 0}
],
"logo": "https://bdcache1-f1.v3mh.com/image/25-12-16/6941612717007.gif",
"lives": [
{"name": "develop202","type": 0,"url": "https://gh.llkk.cc/http://raw.githubusercontent.com/develop202/migu_video/refs/heads/main/interface.txt","playerType": 2,"epg": "http://epg.51zmt.top:8000/api/diyp/?ch={name}&date={date}"},
{"name": "冰 茶","type": 0,"url": "https://bc.188766.xyz/?ip=&mishitong=true&mima=mianfeibuhuaqian&json=true","timeout": 10,"ua": "bingcha/1.1(mianfeifenxiang)"},
{"name": "范明明需开启V6网络","type": 0,"url": "https://nos.netease.com/ysf/3d75a78a0fc7ede372c03598d6d10367.m3u","playerType": 2},
{"name": "虎牙一起看","type": 0,"url": "https://sub.ottiptv.cc/huyayqk.m3u","playerType": 2,"timeout": 10,"ua": "okHttp/Mod-1.5.0.0"},
{"name": "斗鱼一起看","type": 0,"url": "https://sub.ottiptv.cc/douyuyqk.m3u","playerType": 2,"timeout": 10,"ua": "okHttp/Mod-1.5.0.0"},
{"name": "B站直播","type": 0,"url": "https://sub.ottiptv.cc/bililive.m3u","playerType": 2,"timeout": 10,"ua": "okHttp/Mod-1.5.0.0"},
{"name": "YY轮播","type": 0,"url": "https://sub.ottiptv.cc/yylunbo.m3u","playerType": 2,"timeout": 10,"ua": "okHttp/Mod-1.5.0.0"}
]
}

Binary file not shown.

Binary file not shown.

@ -0,0 +1,169 @@
// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版
// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版
// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版
// 3个set-Cookie
var rule = {
title:'Anime1动畫',
host:'https://anime1.me',
url: '/fyclass',
detailUrl:'/?cat=fyid',
searchUrl: '/page/fypage?s=**',
searchable:2,
quickSearch:0,
headers:{'User-Agent': 'PC_UA'},
timeout:5000,
class_name:'連載中&2025&2024&2023&2022&2021&2020&2019&2018&更早',
class_url:'連載中&2025&2024&2023&2022&2021&2020&2019&2018&2017',
play_parse:true,
lazy:`js:
var apiurl = 'https://v.anime1.me/api';
var html = request(apiurl, {
headers: {
'Referer': HOST,
},
body: 'd=' + input,
method: 'POST',
withHeaders: true
});
let json = JSON.parse(html);
print(json);
log(Object.keys(json));
let setCk = Object.keys(json).filter(it => it.toLowerCase() === "set-cookie");
let cookie = setCk ? json[setCk] : "";
// 3个set-Cookie
if (Array.isArray(cookie)) {
cookie = cookie.join(';');
}
cookie = cookie.split(';').filter(function(it) {
return ['e', 'p', 'h'].includes(it.split('=')[0])
}).join(';');
log(cookie);
var purl = JSON.parse(json.body).s[0].src;
if (purl.startsWith('/')) {
purl = 'https:' + purl
}
input = {
jx: 0,
url: purl,
parse: 0,
header: JSON.stringify({
'referer': HOST,
'Cookie': cookie,
'user-agent': PC_UA
}),
}
`,
limit:6,
推荐: `js:
var d = [];
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
var timestamp = new Date().getTime();
var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
var list = JSON.parse(json);
let playKeys = Object.values(list).filter(function(x) {
return x[2].includes('連載中');
});
playKeys.forEach(function(it) {
d.push({
title: stripHtmlTag(it[1]),
img: 'https://sta.anicdn.com/playerImg/8.jpg',
desc: it[2],
url: it[0],
});
});
setResult(d);
`,
一级: `js:
var d = [];
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
var timestamp = new Date().getTime();
var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
var list = JSON.parse(json);
let playKeys = Object.values(list).filter(function(x) {
if (MY_CATE === '連載中') return x[2].includes(MY_CATE);
else if (MY_CATE === '2017') return x[3] <= MY_CATE;
else return x[3] == MY_CATE;
});
playKeys.forEach(function(it) {
d.push({
title: stripHtmlTag(it[1]),
img: 'https://sta.anicdn.com/playerImg/8.jpg',
desc: it[2],
url: it[0],
});
});
setResult(d);
`,
二级: `js:
pdfh = jsp.pdfh; pdfa = jsp.pdfa; pd = jsp.pd;
var html = request(input);
var timestamp = new Date().getTime();
var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
var list = JSON.parse(json);
var vid = input.split('=')[1];
let playKeys = Object.values(list).find(function(x) {
return x[0] === parseInt(vid);
});
VOD = {
vod_pic: 'https://sta.anicdn.com/playerImg/8.jpg',
vod_id: playKeys[0],
vod_name: playKeys[1],
vod_content: playKeys[2],
vod_year: playKeys[3],
type_name: playKeys[4],
vod_actor: playKeys[5],
};
var pageurl = pd(html, '.cat-links&&a&&href');
var pagenum = 1;
let vod_tab_list = [];
let vlist = [];
for (let p = 1; p < parseInt(pagenum) + 1; p++) {
let phtml = request(pageurl + '/page/' + pagenum);
let new_vod_list = [];
let vodList = [];
vodList = pdfa(phtml, '.site-main&&article');
for (let i = 0; i < vodList.length; i++) {
let it = vodList[i];
let ptitle = pdfh(it, '.entry-title&&Text').replace(/\\[(.*)\\]/, '$1');
let purl = pd(it, '.video-js&&data-apireq');
new_vod_list.push(ptitle + '$' + purl);
}
vlist = vlist.concat(new_vod_list);
try {
pagenum = pd(phtml, '.nav-previous&&a&&href').split('/page/')[1];
} catch(e) {}
}
let vlist2 = vlist.reverse().join("#");
vod_tab_list.push(vlist2);
VOD.vod_play_from = '在线播放';
VOD.vod_play_url = vod_tab_list.join("$$$");
`,
搜索: `js:
var d = [];
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
var timestamp = new Date().getTime();
var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp);
var list = JSON.parse(json);
var wd = input.split('=')[1];
let playKeys = Object.values(list).filter(function(x) {
return x[1].includes(wd);
});
log(playKeys);
playKeys.forEach(function(it) {
d.push({
title: stripHtmlTag(it[1]),
img: 'https://sta.anicdn.com/playerImg/8.jpg',
desc: it[2],
url: it[0],
});
});
setResult(d);
`,
}

@ -8,9 +8,993 @@ var rule = {
filterable: 1, //是否启用分类筛选, filterable: 1, //是否启用分类筛选,
filter_url: '--{{fl.by}}-{{fl.class}}--{{fl.letter}}---fypage---{{fl.year}}', filter_url: '--{{fl.by}}-{{fl.class}}--{{fl.letter}}---fypage---{{fl.year}}',
filter: { filter: {
"riben": [{ "key": "year", "name": "年份:", "value": [{ "n": "全部", "v": "" }, { "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": "2018", "v": "2018" }, { "n": "2017", "v": "2017" }, { "n": "2016", "v": "2016" }, { "n": "2015", "v": "2015" }, { "n": "2014", "v": "2014" }, { "n": "2013", "v": "2013" }, { "n": "2012", "v": "2012" }, { "n": "2011", "v": "2011" }, { "n": "2010", "v": "2010" }, { "n": "2009", "v": "2009" }, { "n": "2008", "v": "2008" }, { "n": "2007", "v": "2007" }, { "n": "2006", "v": "2006" }, { "n": "2005", "v": "2005" }, { "n": "2004", "v": "2004" }, { "n": "2003", "v": "2003" }, { "n": "2002", "v": "2002" }, { "n": "2001", "v": "2001" }, { "n": "2000以前", "v": "2000以前" }] }, { "key": "class", "name": "类型:", "value": [{ "n": "全部", "v": "" }, { "n": "搞笑", "v": "搞笑" }, { "n": "运动", "v": "运动" }, { "n": "励志", "v": "励志" }, { "n": "热血", "v": "热血" }, { "n": "战斗", "v": "战斗" }, { "n": "竞技", "v": "竞技" }, { "n": "校园", "v": "校园" }, { "n": "青春", "v": "青春" }, { "n": "爱情", "v": "爱情" }, { "n": "冒险", "v": "冒险" }, { "n": "后宫", "v": "后宫" }, { "n": "百合", "v": "百合" }, { "n": "治愈", "v": "治愈" }, { "n": "萝莉", "v": "萝莉" }, { "n": "魔法", "v": "魔法" }, { "n": "悬疑", "v": "悬疑" }, { "n": "推理", "v": "推理" }, { "n": "奇幻", "v": "奇幻" }, { "n": "科幻", "v": "科幻" }, { "n": "游戏", "v": "游戏" }, { "n": "神魔", "v": "神魔" }, { "n": "恐怖", "v": "恐怖" }, { "n": "血腥", "v": "血腥" }, { "n": "机战", "v": "机战" }, { "n": "战争", "v": "战争" }, { "n": "犯罪", "v": "犯罪" }, { "n": "历史", "v": "历史" }, { "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": "letter", "name": "字母:", "value": [{ "n": "全部", "v": "" }, { "n": "A", "v": "A" }, { "n": "B", "v": "B" }, { "n": "C", "v": "C" }, { "n": "D", "v": "D" }, { "n": "E", "v": "E" }, { "n": "F", "v": "F" }, { "n": "G", "v": "G" }, { "n": "H", "v": "H" }, { "n": "I", "v": "I" }, { "n": "J", "v": "J" }, { "n": "K", "v": "K" }, { "n": "L", "v": "L" }, { "n": "M", "v": "M" }, { "n": "N", "v": "N" }, { "n": "O", "v": "O" }, { "n": "P", "v": "P" }, { "n": "Q", "v": "Q" }, { "n": "R", "v": "R" }, { "n": "S", "v": "S" }, { "n": "T", "v": "T" }, { "n": "U", "v": "U" }, { "n": "V", "v": "V" }, { "n": "W", "v": "W" }, { "n": "X", "v": "X" }, { "n": "Y", "v": "Y" }, { "n": "Z", "v": "Z" }, { "n": "0~9", "v": "0~9" }] }, { "key": "by", "name": "排序:", "value": [{ "n": "更新时间", "v": "time" }, { "n": "人气", "v": "hits" }, { "n": "评分", "v": "score" }] }], "riben": [{
"zhongguo": [{ "key": "year", "name": "年份:", "value": [{ "n": "全部", "v": "" }, { "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": "2018", "v": "2018" }, { "n": "2017", "v": "2017" }, { "n": "2016", "v": "2016" }, { "n": "2015", "v": "2015" }, { "n": "2014", "v": "2014" }, { "n": "2013", "v": "2013" }, { "n": "2012", "v": "2012" }, { "n": "2011", "v": "2011" }, { "n": "2010", "v": "2010" }, { "n": "2009", "v": "2009" }, { "n": "2008", "v": "2008" }, { "n": "2007", "v": "2007" }, { "n": "2006", "v": "2006" }, { "n": "2005", "v": "2005" }, { "n": "2004", "v": "2004" }, { "n": "2003", "v": "2003" }, { "n": "2002", "v": "2002" }, { "n": "2001", "v": "2001" }, { "n": "2000以前", "v": "2000以前" }] }, { "key": "class", "name": "类型:", "value": [{ "n": "全部", "v": "" }, { "n": "搞笑", "v": "搞笑" }, { "n": "运动", "v": "运动" }, { "n": "励志", "v": "励志" }, { "n": "热血", "v": "热血" }, { "n": "战斗", "v": "战斗" }, { "n": "竞技", "v": "竞技" }, { "n": "校园", "v": "校园" }, { "n": "青春", "v": "青春" }, { "n": "爱情", "v": "爱情" }, { "n": "冒险", "v": "冒险" }, { "n": "后宫", "v": "后宫" }, { "n": "百合", "v": "百合" }, { "n": "治愈", "v": "治愈" }, { "n": "萝莉", "v": "萝莉" }, { "n": "魔法", "v": "魔法" }, { "n": "悬疑", "v": "悬疑" }, { "n": "推理", "v": "推理" }, { "n": "奇幻", "v": "奇幻" }, { "n": "科幻", "v": "科幻" }, { "n": "游戏", "v": "游戏" }, { "n": "神魔", "v": "神魔" }, { "n": "恐怖", "v": "恐怖" }, { "n": "血腥", "v": "血腥" }, { "n": "机战", "v": "机战" }, { "n": "战争", "v": "战争" }, { "n": "犯罪", "v": "犯罪" }, { "n": "历史", "v": "历史" }, { "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": "letter", "name": "字母:", "value": [{ "n": "全部", "v": "" }, { "n": "A", "v": "A" }, { "n": "B", "v": "B" }, { "n": "C", "v": "C" }, { "n": "D", "v": "D" }, { "n": "E", "v": "E" }, { "n": "F", "v": "F" }, { "n": "G", "v": "G" }, { "n": "H", "v": "H" }, { "n": "I", "v": "I" }, { "n": "J", "v": "J" }, { "n": "K", "v": "K" }, { "n": "L", "v": "L" }, { "n": "M", "v": "M" }, { "n": "N", "v": "N" }, { "n": "O", "v": "O" }, { "n": "P", "v": "P" }, { "n": "Q", "v": "Q" }, { "n": "R", "v": "R" }, { "n": "S", "v": "S" }, { "n": "T", "v": "T" }, { "n": "U", "v": "U" }, { "n": "V", "v": "V" }, { "n": "W", "v": "W" }, { "n": "X", "v": "X" }, { "n": "Y", "v": "Y" }, { "n": "Z", "v": "Z" }, { "n": "0~9", "v": "0~9" }] }, { "key": "by", "name": "排序:", "value": [{ "n": "更新时间", "v": "time" }, { "n": "人气", "v": "hits" }, { "n": "评分", "v": "score" }] }], "key": "year",
"omei": [{ "key": "year", "name": "年份:", "value": [{ "n": "全部", "v": "" }, { "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": "2018", "v": "2018" }, { "n": "2017", "v": "2017" }, { "n": "2016", "v": "2016" }, { "n": "2015", "v": "2015" }, { "n": "2014", "v": "2014" }, { "n": "2013", "v": "2013" }, { "n": "2012", "v": "2012" }, { "n": "2011", "v": "2011" }, { "n": "2010", "v": "2010" }, { "n": "2009", "v": "2009" }, { "n": "2008", "v": "2008" }, { "n": "2007", "v": "2007" }, { "n": "2006", "v": "2006" }, { "n": "2005", "v": "2005" }, { "n": "2004", "v": "2004" }, { "n": "2003", "v": "2003" }, { "n": "2002", "v": "2002" }, { "n": "2001", "v": "2001" }, { "n": "2000以前", "v": "2000以前" }] }, { "key": "class", "name": "类型:", "value": [{ "n": "全部", "v": "" }, { "n": "搞笑", "v": "搞笑" }, { "n": "运动", "v": "运动" }, { "n": "励志", "v": "励志" }, { "n": "热血", "v": "热血" }, { "n": "战斗", "v": "战斗" }, { "n": "竞技", "v": "竞技" }, { "n": "校园", "v": "校园" }, { "n": "青春", "v": "青春" }, { "n": "爱情", "v": "爱情" }, { "n": "冒险", "v": "冒险" }, { "n": "后宫", "v": "后宫" }, { "n": "百合", "v": "百合" }, { "n": "治愈", "v": "治愈" }, { "n": "萝莉", "v": "萝莉" }, { "n": "魔法", "v": "魔法" }, { "n": "悬疑", "v": "悬疑" }, { "n": "推理", "v": "推理" }, { "n": "奇幻", "v": "奇幻" }, { "n": "科幻", "v": "科幻" }, { "n": "游戏", "v": "游戏" }, { "n": "神魔", "v": "神魔" }, { "n": "恐怖", "v": "恐怖" }, { "n": "血腥", "v": "血腥" }, { "n": "机战", "v": "机战" }, { "n": "战争", "v": "战争" }, { "n": "犯罪", "v": "犯罪" }, { "n": "历史", "v": "历史" }, { "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": "letter", "name": "字母:", "value": [{ "n": "全部", "v": "" }, { "n": "A", "v": "A" }, { "n": "B", "v": "B" }, { "n": "C", "v": "C" }, { "n": "D", "v": "D" }, { "n": "E", "v": "E" }, { "n": "F", "v": "F" }, { "n": "G", "v": "G" }, { "n": "H", "v": "H" }, { "n": "I", "v": "I" }, { "n": "J", "v": "J" }, { "n": "K", "v": "K" }, { "n": "L", "v": "L" }, { "n": "M", "v": "M" }, { "n": "N", "v": "N" }, { "n": "O", "v": "O" }, { "n": "P", "v": "P" }, { "n": "Q", "v": "Q" }, { "n": "R", "v": "R" }, { "n": "S", "v": "S" }, { "n": "T", "v": "T" }, { "n": "U", "v": "U" }, { "n": "V", "v": "V" }, { "n": "W", "v": "W" }, { "n": "X", "v": "X" }, { "n": "Y", "v": "Y" }, { "n": "Z", "v": "Z" }, { "n": "0~9", "v": "0~9" }] }, { "key": "by", "name": "排序:", "value": [{ "n": "更新时间", "v": "time" }, { "n": "人气", "v": "hits" }, { "n": "评分", "v": "score" }] }] "name": "年份:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000以前",
"v": "2000以前"
}]
}, {
"key": "class",
"name": "类型:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "搞笑",
"v": "搞笑"
}, {
"n": "运动",
"v": "运动"
}, {
"n": "励志",
"v": "励志"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "战斗",
"v": "战斗"
}, {
"n": "竞技",
"v": "竞技"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "青春",
"v": "青春"
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "治愈",
"v": "治愈"
}, {
"n": "萝莉",
"v": "萝莉"
}, {
"n": "魔法",
"v": "魔法"
}, {
"n": "悬疑",
"v": "悬疑"
}, {
"n": "推理",
"v": "推理"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "游戏",
"v": "游戏"
}, {
"n": "神魔",
"v": "神魔"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "血腥",
"v": "血腥"
}, {
"n": "机战",
"v": "机战"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "犯罪",
"v": "犯罪"
}, {
"n": "历史",
"v": "历史"
}, {
"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": "letter",
"name": "字母:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "A",
"v": "A"
}, {
"n": "B",
"v": "B"
}, {
"n": "C",
"v": "C"
}, {
"n": "D",
"v": "D"
}, {
"n": "E",
"v": "E"
}, {
"n": "F",
"v": "F"
}, {
"n": "G",
"v": "G"
}, {
"n": "H",
"v": "H"
}, {
"n": "I",
"v": "I"
}, {
"n": "J",
"v": "J"
}, {
"n": "K",
"v": "K"
}, {
"n": "L",
"v": "L"
}, {
"n": "M",
"v": "M"
}, {
"n": "N",
"v": "N"
}, {
"n": "O",
"v": "O"
}, {
"n": "P",
"v": "P"
}, {
"n": "Q",
"v": "Q"
}, {
"n": "R",
"v": "R"
}, {
"n": "S",
"v": "S"
}, {
"n": "T",
"v": "T"
}, {
"n": "U",
"v": "U"
}, {
"n": "V",
"v": "V"
}, {
"n": "W",
"v": "W"
}, {
"n": "X",
"v": "X"
}, {
"n": "Y",
"v": "Y"
}, {
"n": "Z",
"v": "Z"
}, {
"n": "0~9",
"v": "0~9"
}]
}, {
"key": "by",
"name": "排序:",
"value": [{
"n": "更新时间",
"v": "time"
}, {
"n": "人气",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"zhongguo": [{
"key": "year",
"name": "年份:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000以前",
"v": "2000以前"
}]
}, {
"key": "class",
"name": "类型:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "搞笑",
"v": "搞笑"
}, {
"n": "运动",
"v": "运动"
}, {
"n": "励志",
"v": "励志"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "战斗",
"v": "战斗"
}, {
"n": "竞技",
"v": "竞技"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "青春",
"v": "青春"
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "治愈",
"v": "治愈"
}, {
"n": "萝莉",
"v": "萝莉"
}, {
"n": "魔法",
"v": "魔法"
}, {
"n": "悬疑",
"v": "悬疑"
}, {
"n": "推理",
"v": "推理"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "游戏",
"v": "游戏"
}, {
"n": "神魔",
"v": "神魔"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "血腥",
"v": "血腥"
}, {
"n": "机战",
"v": "机战"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "犯罪",
"v": "犯罪"
}, {
"n": "历史",
"v": "历史"
}, {
"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": "letter",
"name": "字母:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "A",
"v": "A"
}, {
"n": "B",
"v": "B"
}, {
"n": "C",
"v": "C"
}, {
"n": "D",
"v": "D"
}, {
"n": "E",
"v": "E"
}, {
"n": "F",
"v": "F"
}, {
"n": "G",
"v": "G"
}, {
"n": "H",
"v": "H"
}, {
"n": "I",
"v": "I"
}, {
"n": "J",
"v": "J"
}, {
"n": "K",
"v": "K"
}, {
"n": "L",
"v": "L"
}, {
"n": "M",
"v": "M"
}, {
"n": "N",
"v": "N"
}, {
"n": "O",
"v": "O"
}, {
"n": "P",
"v": "P"
}, {
"n": "Q",
"v": "Q"
}, {
"n": "R",
"v": "R"
}, {
"n": "S",
"v": "S"
}, {
"n": "T",
"v": "T"
}, {
"n": "U",
"v": "U"
}, {
"n": "V",
"v": "V"
}, {
"n": "W",
"v": "W"
}, {
"n": "X",
"v": "X"
}, {
"n": "Y",
"v": "Y"
}, {
"n": "Z",
"v": "Z"
}, {
"n": "0~9",
"v": "0~9"
}]
}, {
"key": "by",
"name": "排序:",
"value": [{
"n": "更新时间",
"v": "time"
}, {
"n": "人气",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"omei": [{
"key": "year",
"name": "年份:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000以前",
"v": "2000以前"
}]
}, {
"key": "class",
"name": "类型:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "搞笑",
"v": "搞笑"
}, {
"n": "运动",
"v": "运动"
}, {
"n": "励志",
"v": "励志"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "战斗",
"v": "战斗"
}, {
"n": "竞技",
"v": "竞技"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "青春",
"v": "青春"
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "治愈",
"v": "治愈"
}, {
"n": "萝莉",
"v": "萝莉"
}, {
"n": "魔法",
"v": "魔法"
}, {
"n": "悬疑",
"v": "悬疑"
}, {
"n": "推理",
"v": "推理"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "游戏",
"v": "游戏"
}, {
"n": "神魔",
"v": "神魔"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "血腥",
"v": "血腥"
}, {
"n": "机战",
"v": "机战"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "犯罪",
"v": "犯罪"
}, {
"n": "历史",
"v": "历史"
}, {
"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": "letter",
"name": "字母:",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "A",
"v": "A"
}, {
"n": "B",
"v": "B"
}, {
"n": "C",
"v": "C"
}, {
"n": "D",
"v": "D"
}, {
"n": "E",
"v": "E"
}, {
"n": "F",
"v": "F"
}, {
"n": "G",
"v": "G"
}, {
"n": "H",
"v": "H"
}, {
"n": "I",
"v": "I"
}, {
"n": "J",
"v": "J"
}, {
"n": "K",
"v": "K"
}, {
"n": "L",
"v": "L"
}, {
"n": "M",
"v": "M"
}, {
"n": "N",
"v": "N"
}, {
"n": "O",
"v": "O"
}, {
"n": "P",
"v": "P"
}, {
"n": "Q",
"v": "Q"
}, {
"n": "R",
"v": "R"
}, {
"n": "S",
"v": "S"
}, {
"n": "T",
"v": "T"
}, {
"n": "U",
"v": "U"
}, {
"n": "V",
"v": "V"
}, {
"n": "W",
"v": "W"
}, {
"n": "X",
"v": "X"
}, {
"n": "Y",
"v": "Y"
}, {
"n": "Z",
"v": "Z"
}, {
"n": "0~9",
"v": "0~9"
}]
}, {
"key": "by",
"name": "排序:",
"value": [{
"n": "更新时间",
"v": "time"
}, {
"n": "人气",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}]
}, },
searchUrl: '/search/**----------fypage---.html', searchUrl: '/search/**----------fypage---.html',
searchable: 2, //是否启用全局搜索, searchable: 2, //是否启用全局搜索,

File diff suppressed because it is too large Load Diff

@ -0,0 +1,827 @@
muban.短视2.二级.img = '.detail-pic&&img&&data-src';
var rule = {
title: '爱弹幕',
模板: '短视2',
host: 'https://bgm.girigirilove.com',
homeUrl: '/map/',
// url:'/show/fyclass--------fypage---/'
url: '/show/fyclassfyfilter/',
filterable: 1, //是否启用分类筛选,
filter_url: '-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
filter: {
"2": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "喜剧",
"v": "喜剧"
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "动作",
"v": "动作"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "剧情",
"v": "剧情"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "悬疑",
"v": "悬疑"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "运动",
"v": "运动"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "乙女",
"v": "乙女"
}, {
"n": "机甲",
"v": "机甲"
}, {
"n": "日常",
"v": "日常"
}, {
"n": "魔法少女",
"v": "魔法少女"
}, {
"n": "异世界",
"v": "异世界"
}, {
"n": "爱抖露",
"v": "爱抖露"
}, {
"n": "音乐",
"v": "音乐"
}, {
"n": "萌",
"v": "萌"
}]
}, {
"key": "area",
"name": "地区",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "一月",
"v": "一月"
}, {
"n": "四月",
"v": "四月"
}, {
"n": "七月",
"v": "七月"
}, {
"n": "十月",
"v": "十月"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000",
"v": "2000"
}]
}, {
"key": "lang",
"name": "语言",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "日语",
"v": "日语"
}, {
"n": "国语",
"v": "国语"
}]
}, {
"key": "by",
"name": "排序",
"value": [{
"n": "最新",
"v": "time"
}, {
"n": "最热",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"3": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "搞笑",
"v": "搞笑"
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "动作",
"v": "动作"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "剧情",
"v": "剧情"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "悬疑",
"v": "悬疑"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "运动",
"v": "运动"
}]
}, {
"key": "area",
"name": "地区",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "内地",
"v": "内地"
}, {
"n": "港台",
"v": "港台"
}, {
"n": "日韩",
"v": "日韩"
}, {
"n": "欧美",
"v": "欧美"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}]
}, {
"key": "lang",
"name": "语言",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "国语",
"v": "国语"
}, {
"n": "英语",
"v": "英语"
}]
}, {
"key": "by",
"name": "排序",
"value": [{
"n": "最新",
"v": "time"
}, {
"n": "最热",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"21": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "喜剧",
"v": "喜剧"
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "动作",
"v": "动作"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "剧情",
"v": "剧情"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "悬疑",
"v": "悬疑"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "运动",
"v": "运动"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "耽美",
"v": "耽美"
}, {
"n": "机甲",
"v": "机甲"
}, {
"n": "日常",
"v": "日常"
}, {
"n": "魔法少女",
"v": "魔法少女"
}, {
"n": "异世界",
"v": "异世界"
}, {
"n": "爱抖露",
"v": "爱抖露"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}]
}, {
"key": "lang",
"name": "语言",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "日语",
"v": "日语"
}, {
"n": "中文",
"v": "中文"
}, {
"n": "英语",
"v": "英语"
}]
}, {
"key": "by",
"name": "排序",
"value": [{
"n": "最新",
"v": "time"
}, {
"n": "最热",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"20": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "爱情",
"v": "爱情"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "经典",
"v": "经典"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "剧情",
"v": "剧情"
}, {
"n": "动作",
"v": "动作"
}, {
"n": "同性",
"v": "同性"
}, {
"n": "喜剧",
"v": "喜剧"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "悬疑.惊悚",
"v": "悬疑.惊悚"
}, {
"n": "战争",
"v": "战争"
}, {
"n": "欧美",
"v": "欧美"
}, {
"n": "歌舞",
"v": "歌舞"
}, {
"n": "灾难",
"v": "灾难"
}, {
"n": "记录.泰剧",
"v": "记录.泰剧"
}, {
"n": "体育",
"v": "体育"
}, {
"n": "烧脑",
"v": "烧脑"
}]
}, {
"key": "area",
"name": "地区",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "日本",
"v": "日本"
}, {
"n": "欧美",
"v": "欧美"
}, {
"n": "泰国",
"v": "泰国"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004.2003",
"v": "2004.2003"
}]
}, {
"key": "lang",
"name": "语言",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "日语",
"v": "日语"
}, {
"n": "英语",
"v": "英语"
}, {
"n": "泰语",
"v": "泰语"
}]
}, {
"key": "by",
"name": "排序",
"value": [{
"n": "最新",
"v": "time"
}, {
"n": "最热",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"24": [{
"key": "by",
"name": "排序",
"value": [{
"n": "最新",
"v": "time"
}, {
"n": "最热",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}],
"26": [{
"key": "by",
"name": "排序",
"value": [{
"n": "最新",
"v": "time"
}, {
"n": "最热",
"v": "hits"
}, {
"n": "评分",
"v": "score"
}]
}]
},
searchUrl: '/search/**----------fypage---/',
class_name: '日番&美番&劇場版&真人番劇&BD副音軌&其他',
class_url: '2&3&21&20&24&26',
play_parse: true,
lazy: `js:
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
var url = html.url;
var from = html.from;
var next = html.link_next;
if (html.encrypt == '1') {
url = unescape(url)
} else if (html.encrypt == '2') {
url = unescape(base64Decode(url))
} else if (html.encrypt == '3') {
url = url.substring(8, url.length);
url = base64Decode(url);
url = url.substring(8, (url.length) - 8)
}
if (/\\.m3u8|\\.mp4/.test(url)) {
input = {
jx: 0,
url: url,
parse: 0
}
} else {
var paurl = request(HOST + '/static/player/' + from + '.js').match(/ src="(.*?)'/)[1];
if (/https/.test(paurl)) {
var purl = paurl + url + '&next=' + next + '&title=';
input = {
jx: 0,
url: purl,
parse: 1
}
}
}
`,
推荐: '.border-box&&.public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href',
double: false, // 推荐内容是否双层定位
一级: '.border-box .public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href',
搜索: '.row-right&&.search-box;.thumb-txt&&Text;.lazy&&data-src;.public-list-prb&&Text;a&&href',
}

@ -0,0 +1,979 @@
var rule = {
title: '花子动漫[漫]',
host: 'https://www.huazidm.com',
class_name: 'TV动漫&剧场&特摄',
class_url: '1&2&3',
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
searchUrl: '/vodsearch/**----------fypage---.html',
searchable: 2,
quickSearch: 0,
headers: {
'User-Agent': 'MOBILE_UA',
},
url: '/index.php/api/vod#type=fyclassfyfilter&page=fypage',
filterable: 0,
filter_url: '&class={{fl.class}}&year={{fl.year}}&letter={{fl.letter}}&by={{fl.by}}',
filter: {
"1": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "异世界",
"v": "异世界"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "纯爱",
"v": "纯爱"
}, {
"n": "穿越",
"v": "穿越"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "战斗",
"v": "战斗"
}, {
"n": "后宫",
"v": "后宫"
}, {
"n": "搞笑",
"v": "搞笑"
}, {
"n": "日常",
"v": "日常"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "治愈",
"v": "治愈"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "恋爱",
"v": "恋爱"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "推理",
"v": "推理"
}, {
"n": "机战",
"v": "机战"
}, {
"n": "音乐",
"v": "音乐"
}, {
"n": "萝莉",
"v": "萝莉"
}, {
"n": "恐怖",
"v": "恐怖"
}, {
"n": "惊悚",
"v": "惊悚"
}, {
"n": "泡面番",
"v": "泡面番"
}, {
"n": "游戏改",
"v": "游戏改"
}, {
"n": "小说改",
"v": "小说改"
}, {
"n": "漫画改",
"v": "漫画改"
}, {
"n": "腐",
"v": "腐"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000",
"v": "2000"
}, {
"n": "1999",
"v": "1999"
}, {
"n": "1998",
"v": "1998"
}, {
"n": "1997",
"v": "1997"
}, {
"n": "1996",
"v": "1996"
}, {
"n": "1995",
"v": "1995"
}, {
"n": "1994",
"v": "1994"
}, {
"n": "1993",
"v": "1993"
}, {
"n": "1992",
"v": "1992"
}, {
"n": "1991",
"v": "1991"
}, {
"n": "1990",
"v": "1990"
}, {
"n": "1989",
"v": "1989"
}, {
"n": "1988",
"v": "1988"
}, {
"n": "1987",
"v": "1987"
}, {
"n": "1986",
"v": "1986"
}, {
"n": "1985",
"v": "1985"
}, {
"n": "1984",
"v": "1984"
}, {
"n": "1983",
"v": "1983"
}, {
"n": "1982",
"v": "1982"
}, {
"n": "1981",
"v": "1981"
}, {
"n": "1980",
"v": "1980"
}]
}, {
"key": "letter",
"name": "字母",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "A",
"v": "A"
}, {
"n": "B",
"v": "B"
}, {
"n": "C",
"v": "C"
}, {
"n": "D",
"v": "D"
}, {
"n": "E",
"v": "E"
}, {
"n": "F",
"v": "F"
}, {
"n": "G",
"v": "G"
}, {
"n": "H",
"v": "H"
}, {
"n": "I",
"v": "I"
}, {
"n": "J",
"v": "J"
}, {
"n": "K",
"v": "K"
}, {
"n": "L",
"v": "L"
}, {
"n": "M",
"v": "M"
}, {
"n": "N",
"v": "N"
}, {
"n": "O",
"v": "O"
}, {
"n": "P",
"v": "P"
}, {
"n": "Q",
"v": "Q"
}, {
"n": "R",
"v": "R"
}, {
"n": "S",
"v": "S"
}, {
"n": "T",
"v": "T"
}, {
"n": "U",
"v": "U"
}, {
"n": "V",
"v": "V"
}, {
"n": "W",
"v": "W"
}, {
"n": "X",
"v": "X"
}, {
"n": "Y",
"v": "Y"
}, {
"n": "Z",
"v": "Z"
}, {
"n": "0-9",
"v": "0-9"
}]
}, {
"key": "by",
"name": "时间",
"value": [{
"n": "按最新",
"v": "time"
}, {
"n": "按最热",
"v": "hits"
}, {
"n": "按评分",
"v": "score"
}]
}],
"2": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "异世界",
"v": "异世界"
}, {
"n": "百合",
"v": "百合"
}, {
"n": "热血",
"v": "热血"
}, {
"n": "穿越",
"v": "穿越"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "战斗",
"v": "战斗"
}, {
"n": "搞笑",
"v": "搞笑"
}, {
"n": "日常",
"v": "日常"
}, {
"n": "科幻",
"v": "科幻"
}, {
"n": "治愈",
"v": "治愈"
}, {
"n": "校园",
"v": "校园"
}, {
"n": "恋爱",
"v": "恋爱"
}, {
"n": "冒险",
"v": "冒险"
}, {
"n": "机战",
"v": "机战"
}, {
"n": "音乐",
"v": "音乐"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000",
"v": "2000"
}, {
"n": "1999",
"v": "1999"
}, {
"n": "1998",
"v": "1998"
}, {
"n": "1997",
"v": "1997"
}, {
"n": "1996",
"v": "1996"
}, {
"n": "1995",
"v": "1995"
}, {
"n": "1994",
"v": "1994"
}, {
"n": "1993",
"v": "1993"
}, {
"n": "1992",
"v": "1992"
}, {
"n": "1991",
"v": "1991"
}, {
"n": "1990",
"v": "1990"
}, {
"n": "1989",
"v": "1989"
}, {
"n": "1988",
"v": "1988"
}, {
"n": "1987",
"v": "1987"
}, {
"n": "1986",
"v": "1986"
}, {
"n": "1985",
"v": "1985"
}, {
"n": "1984",
"v": "1984"
}, {
"n": "1983",
"v": "1983"
}, {
"n": "1982",
"v": "1982"
}, {
"n": "1981",
"v": "1981"
}, {
"n": "1980",
"v": "1980"
}]
}, {
"key": "letter",
"name": "字母",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "A",
"v": "A"
}, {
"n": "B",
"v": "B"
}, {
"n": "C",
"v": "C"
}, {
"n": "D",
"v": "D"
}, {
"n": "E",
"v": "E"
}, {
"n": "F",
"v": "F"
}, {
"n": "G",
"v": "G"
}, {
"n": "H",
"v": "H"
}, {
"n": "I",
"v": "I"
}, {
"n": "J",
"v": "J"
}, {
"n": "K",
"v": "K"
}, {
"n": "L",
"v": "L"
}, {
"n": "M",
"v": "M"
}, {
"n": "N",
"v": "N"
}, {
"n": "O",
"v": "O"
}, {
"n": "P",
"v": "P"
}, {
"n": "Q",
"v": "Q"
}, {
"n": "R",
"v": "R"
}, {
"n": "S",
"v": "S"
}, {
"n": "T",
"v": "T"
}, {
"n": "U",
"v": "U"
}, {
"n": "V",
"v": "V"
}, {
"n": "W",
"v": "W"
}, {
"n": "X",
"v": "X"
}, {
"n": "Y",
"v": "Y"
}, {
"n": "Z",
"v": "Z"
}, {
"n": "0-9",
"v": "0-9"
}]
}, {
"key": "by",
"name": "时间",
"value": [{
"n": "按最新",
"v": "time"
}, {
"n": "按最热",
"v": "hits"
}, {
"n": "按评分",
"v": "score"
}]
}],
"3": [{
"key": "class",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "动作",
"v": "动作"
}, {
"n": "奇幻",
"v": "奇幻"
}, {
"n": "科幻",
"v": "科幻"
}]
}, {
"key": "year",
"name": "年份",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "2026"
}, {
"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": "2018",
"v": "2018"
}, {
"n": "2017",
"v": "2017"
}, {
"n": "2016",
"v": "2016"
}, {
"n": "2015",
"v": "2015"
}, {
"n": "2014",
"v": "2014"
}, {
"n": "2013",
"v": "2013"
}, {
"n": "2012",
"v": "2012"
}, {
"n": "2011",
"v": "2011"
}, {
"n": "2010",
"v": "2010"
}, {
"n": "2009",
"v": "2009"
}, {
"n": "2008",
"v": "2008"
}, {
"n": "2007",
"v": "2007"
}, {
"n": "2006",
"v": "2006"
}, {
"n": "2005",
"v": "2005"
}, {
"n": "2004",
"v": "2004"
}, {
"n": "2003",
"v": "2003"
}, {
"n": "2002",
"v": "2002"
}, {
"n": "2001",
"v": "2001"
}, {
"n": "2000",
"v": "2000"
}, {
"n": "1999",
"v": "1999"
}, {
"n": "1998",
"v": "1998"
}, {
"n": "1997",
"v": "1997"
}, {
"n": "1996",
"v": "1996"
}, {
"n": "1995",
"v": "1995"
}, {
"n": "1994",
"v": "1994"
}, {
"n": "1993",
"v": "1993"
}, {
"n": "1992",
"v": "1992"
}, {
"n": "1991",
"v": "1991"
}, {
"n": "1990",
"v": "1990"
}, {
"n": "1989",
"v": "1989"
}, {
"n": "1988",
"v": "1988"
}, {
"n": "1987",
"v": "1987"
}, {
"n": "1986",
"v": "1986"
}, {
"n": "1985",
"v": "1985"
}, {
"n": "1984",
"v": "1984"
}, {
"n": "1983",
"v": "1983"
}, {
"n": "1982",
"v": "1982"
}, {
"n": "1981",
"v": "1981"
}, {
"n": "1980",
"v": "1980"
}]
}, {
"key": "letter",
"name": "字母",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "A",
"v": "A"
}, {
"n": "B",
"v": "B"
}, {
"n": "C",
"v": "C"
}, {
"n": "D",
"v": "D"
}, {
"n": "E",
"v": "E"
}, {
"n": "F",
"v": "F"
}, {
"n": "G",
"v": "G"
}, {
"n": "H",
"v": "H"
}, {
"n": "I",
"v": "I"
}, {
"n": "J",
"v": "J"
}, {
"n": "K",
"v": "K"
}, {
"n": "L",
"v": "L"
}, {
"n": "M",
"v": "M"
}, {
"n": "N",
"v": "N"
}, {
"n": "O",
"v": "O"
}, {
"n": "P",
"v": "P"
}, {
"n": "Q",
"v": "Q"
}, {
"n": "R",
"v": "R"
}, {
"n": "S",
"v": "S"
}, {
"n": "T",
"v": "T"
}, {
"n": "U",
"v": "U"
}, {
"n": "V",
"v": "V"
}, {
"n": "W",
"v": "W"
}, {
"n": "X",
"v": "X"
}, {
"n": "Y",
"v": "Y"
}, {
"n": "Z",
"v": "Z"
}, {
"n": "0-9",
"v": "0-9"
}]
}, {
"key": "by",
"name": "时间",
"value": [{
"n": "按最新",
"v": "time"
}, {
"n": "按最热",
"v": "hits"
}, {
"n": "按评分",
"v": "score"
}]
}]
},
filter_def: {},
detailUrl: '/voddetail/fyid.html',
play_parse: true,
sniffer: 1,
is_video: 'obj/tos|bd.xhscdn|/ugc/',
lazy: $js.toString(() => {
input = {
parse: 1,
url: input,
//js:'try{let urls=Array.from(document.querySelectorAll("iframe")).filter(x=>x.src.includes("?url="));if(urls){location.href=urls[0].src}}catch{}document.querySelector("button").click()',
js: 'try{location.href=document.querySelector("#playleft iframe").src}catch{}document.querySelector("button.swal-button--confirm").click()',
parse_extra: '&is_pc=1&custom_regex=' + rule.is_video,
}
}),
limit: 6,
推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
一级: $js.toString(() => {
let body = input.split("#")[1];
let t = Math.round(new Date / 1e3).toString();
let key = md5("DS" + t + "DCC147D11943AF75");
let url = input.split("#")[0];
body = body + "&time=" + t + "&key=" + key;
print(body);
fetch_params.body = body;
let html = post(url, fetch_params);
let data = JSON.parse(html);
VODS = data.list.map(function(it) {
it.vod_pic = urljoin2(input.split("/i")[0], it.vod_pic);
return it
});
}),
二级: {
title: '.slide-info-title&&Text;.slide-info:eq(3)--strong&&Text',
img: '.detail-pic&&data-original',
desc: '.fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text',
content: '#height_limit&&Text',
tabs: '.anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a',
tab_text: '.swiper-slide&&Text',
lists: '.anthology-list-box:eq(#id) li',
},
搜索: 'json:list;name;pic;;id',
搜索: $js.toString(() => {
let html = fetch(input);
let list = pdfa(html, ".public-list-box");
VODS = list.map(x => {
return {
vod_name: pdfh(x, ".thumb-txt&&Text"),
vod_pic: pdfh(x, ".lazy&&data-src"),
vod_remarks: pdfh(x, ".public-list-prb&&Text"),
vod_content: pdfh(x, ".thumb-blurb&&Text"),
vod_id: pdfh(x, "a&&href")
}
});
}),
图片替换: '&amp;=>&'
}

@ -1,47 +1,567 @@
var rule = { var rule = {
title: '路漫漫', title: "路漫漫",
// host:'https://www.96ba.com', host: "https://www.lmm50.com",
host: 'https://www.wzwt369.com', url: "/vod/show/id/fyclassfyfilter.html",
// url:'/vod/show/id/fyclass/page/fypage.html', searchUrl: '/vod/search/page/fypage/wd/**.html',
url: '/vod/show/id/fyclassfyfilter.html', searchable: 2,
filterable: 1,//是否启用分类筛选, quickSearch: 0,
filter_url: '{{fl.by}}/page/fypage{{fl.year}}', filterable: 1,
filter: { filter: {
"ribendongman": [{ "key": "year", "name": "年份", "value": [{ "n": "全部", "v": "" }, { "n": "2024", "v": "/year/2024" }, { "n": "2023", "v": "/year/2023" }, { "n": "2022", "v": "/year/2022" }, { "n": "2021", "v": "/year/2021" }, { "n": "2020", "v": "/year/2020" }, { "n": "2019", "v": "/year/2019" }, { "n": "2018", "v": "/year/2018" }, { "n": "2017", "v": "/year/2017" }, { "n": "2016", "v": "/year/2016" }, { "n": "2015", "v": "/year/2015" }, { "n": "2014", "v": "/year/2014" }, { "n": "更早", "v": "/year/2013-1980" }] }, { "key": "by", "name": "排序", "value": [{ "n": "更新", "v": "/by/time" }, { "n": "人气", "v": "/by/hits" }, { "n": "评分", "v": "/by/score" }, { "n": "点赞", "v": "/by/up" }] }], "3": [{
"guochandongman": [{ "key": "year", "name": "年份", "value": [{ "n": "全部", "v": "" }, { "n": "2024", "v": "/year/2024" }, { "n": "2023", "v": "/year/2023" }, { "n": "2022", "v": "/year/2022" }, { "n": "2021", "v": "/year/2021" }, { "n": "2020", "v": "/year/2020" }, { "n": "2019", "v": "/year/2019" }, { "n": "2018", "v": "/year/2018" }, { "n": "2017", "v": "/year/2017" }, { "n": "2016", "v": "/year/2016" }, { "n": "2015", "v": "/year/2015" }, { "n": "2014", "v": "/year/2014" }, { "n": "更早", "v": "/year/2013-1980" }] }, { "key": "by", "name": "排序", "value": [{ "n": "更新", "v": "/by/time" }, { "n": "人气", "v": "/by/hits" }, { "n": "评分", "v": "/by/score" }, { "n": "点赞", "v": "/by/up" }] }], "key": "年代",
"oumeidongman": [{ "key": "year", "name": "年份", "value": [{ "n": "全部", "v": "" }, { "n": "2024", "v": "/year/2024" }, { "n": "2023", "v": "/year/2023" }, { "n": "2022", "v": "/year/2022" }, { "n": "2021", "v": "/year/2021" }, { "n": "2020", "v": "/year/2020" }, { "n": "2019", "v": "/year/2019" }, { "n": "2018", "v": "/year/2018" }, { "n": "2017", "v": "/year/2017" }, { "n": "2016", "v": "/year/2016" }, { "n": "2015", "v": "/year/2015" }, { "n": "2014", "v": "/year/2014" }, { "n": "更早", "v": "/year/2013-1980" }] }, { "key": "by", "name": "排序", "value": [{ "n": "更新", "v": "/by/time" }, { "n": "人气", "v": "/by/hits" }, { "n": "评分", "v": "/by/score" }, { "n": "点赞", "v": "/by/up" }] }], "name": "年代",
"ribendonghuadianying": [{ "key": "year", "name": "年份", "value": [{ "n": "全部", "v": "" }, { "n": "2024", "v": "/year/2024" }, { "n": "2023", "v": "/year/2023" }, { "n": "2022", "v": "/year/2022" }, { "n": "2021", "v": "/year/2021" }, { "n": "2020", "v": "/year/2020" }, { "n": "2019", "v": "/year/2019" }, { "n": "2018", "v": "/year/2018" }, { "n": "2017", "v": "/year/2017" }, { "n": "2016", "v": "/year/2016" }, { "n": "2015", "v": "/year/2015" }, { "n": "2014", "v": "/year/2014" }, { "n": "更早", "v": "/year/2013-1980" }] }, { "key": "by", "name": "排序", "value": [{ "n": "更新", "v": "/by/time" }, { "n": "人气", "v": "/by/hits" }, { "n": "评分", "v": "/by/score" }, { "n": "点赞", "v": "/by/up" }] }], "value": [{
"guochandonghuadianying": [{ "key": "year", "name": "年份", "value": [{ "n": "全部", "v": "" }, { "n": "2024", "v": "/year/2024" }, { "n": "2023", "v": "/year/2023" }, { "n": "2022", "v": "/year/2022" }, { "n": "2021", "v": "/year/2021" }, { "n": "2020", "v": "/year/2020" }, { "n": "2019", "v": "/year/2019" }, { "n": "2018", "v": "/year/2018" }, { "n": "2017", "v": "/year/2017" }, { "n": "2016", "v": "/year/2016" }, { "n": "2015", "v": "/year/2015" }, { "n": "2014", "v": "/year/2014" }, { "n": "更早", "v": "/year/2013-1980" }] }, { "key": "by", "name": "排序", "value": [{ "n": "更新", "v": "/by/time" }, { "n": "人气", "v": "/by/hits" }, { "n": "评分", "v": "/by/score" }, { "n": "点赞", "v": "/by/up" }] }], "n": "全部",
"oumeidonghuadianying": [{ "key": "year", "name": "年份", "value": [{ "n": "全部", "v": "" }, { "n": "2024", "v": "/year/2024" }, { "n": "2023", "v": "/year/2023" }, { "n": "2022", "v": "/year/2022" }, { "n": "2021", "v": "/year/2021" }, { "n": "2020", "v": "/year/2020" }, { "n": "2019", "v": "/year/2019" }, { "n": "2018", "v": "/year/2018" }, { "n": "2017", "v": "/year/2017" }, { "n": "2016", "v": "/year/2016" }, { "n": "2015", "v": "/year/2015" }, { "n": "2014", "v": "/year/2014" }, { "n": "更早", "v": "/year/2013-1980" }] }, { "key": "by", "name": "排序", "value": [{ "n": "更新", "v": "/by/time" }, { "n": "人气", "v": "/by/hits" }, { "n": "评分", "v": "/by/score" }, { "n": "点赞", "v": "/by/up" }] }] "v": ""
}, {
"n": "2026",
"v": "/year/2026"
}, {
"n": "2025",
"v": "/year/2025"
}, {
"n": "2024",
"v": "/year/2024"
}, {
"n": "2023",
"v": "/year/2023"
}, {
"n": "2022",
"v": "/year/2022"
}, {
"n": "2021",
"v": "/year/2021"
}, {
"n": "2020",
"v": "/year/2020"
}, {
"n": "2019",
"v": "/year/2019"
}, {
"n": "2018",
"v": "/year/2018"
}, {
"n": "2017",
"v": "/year/2017"
}, {
"n": "2016",
"v": "/year/2016"
}, {
"n": "2015",
"v": "/year/2015"
}, {
"n": "更早",
"v": "/year/2014-1980"
}]
}, {
"key": "排序",
"name": "排序",
"value": [{
"n": "最近更新",
"v": "/by/time"
}, {
"n": "最高人气",
"v": "/by/hits"
}, {
"n": "最高评分",
"v": "/by/score"
}, {
"n": "最多点赞",
"v": "/by/up"
}]
}],
"4": [{
"key": "年代",
"name": "年代",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "/year/2026"
}, {
"n": "2025",
"v": "/year/2025"
}, {
"n": "2024",
"v": "/year/2024"
}, {
"n": "2023",
"v": "/year/2023"
}, {
"n": "2022",
"v": "/year/2022"
}, {
"n": "2021",
"v": "/year/2021"
}, {
"n": "2020",
"v": "/year/2020"
}, {
"n": "2019",
"v": "/year/2019"
}, {
"n": "2018",
"v": "/year/2018"
}, {
"n": "2017",
"v": "/year/2017"
}, {
"n": "2016",
"v": "/year/2016"
}, {
"n": "2015",
"v": "/year/2015"
}, {
"n": "更早",
"v": "/year/2014-1980"
}]
}, {
"key": "排序",
"name": "排序",
"value": [{
"n": "最近更新",
"v": "/by/time"
}, {
"n": "最高人气",
"v": "/by/hits"
}, {
"n": "最高评分",
"v": "/by/score"
}, {
"n": "最多点赞",
"v": "/by/up"
}]
}],
"5": [{
"key": "年代",
"name": "年代",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "/year/2026"
}, {
"n": "2025",
"v": "/year/2025"
}, {
"n": "2024",
"v": "/year/2024"
}, {
"n": "2023",
"v": "/year/2023"
}, {
"n": "2022",
"v": "/year/2022"
}, {
"n": "2021",
"v": "/year/2021"
}, {
"n": "2020",
"v": "/year/2020"
}, {
"n": "2019",
"v": "/year/2019"
}, {
"n": "2018",
"v": "/year/2018"
}, {
"n": "2017",
"v": "/year/2017"
}, {
"n": "2016",
"v": "/year/2016"
}, {
"n": "2015",
"v": "/year/2015"
}, {
"n": "更早",
"v": "/year/2014-1980"
}]
}, {
"key": "排序",
"name": "排序",
"value": [{
"n": "最近更新",
"v": "/by/time"
}, {
"n": "最高人气",
"v": "/by/hits"
}, {
"n": "最高评分",
"v": "/by/score"
}, {
"n": "最多点赞",
"v": "/by/up"
}]
}],
"6": [{
"key": "年代",
"name": "年代",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "/year/2026"
}, {
"n": "2025",
"v": "/year/2025"
}, {
"n": "2024",
"v": "/year/2024"
}, {
"n": "2023",
"v": "/year/2023"
}, {
"n": "2022",
"v": "/year/2022"
}, {
"n": "2021",
"v": "/year/2021"
}, {
"n": "2020",
"v": "/year/2020"
}, {
"n": "2019",
"v": "/year/2019"
}, {
"n": "2018",
"v": "/year/2018"
}, {
"n": "2017",
"v": "/year/2017"
}, {
"n": "2016",
"v": "/year/2016"
}, {
"n": "2015",
"v": "/year/2015"
}, {
"n": "更早",
"v": "/year/2014-1980"
}]
}, {
"key": "排序",
"name": "排序",
"value": [{
"n": "最近更新",
"v": "/by/time"
}, {
"n": "最高人气",
"v": "/by/hits"
}, {
"n": "最高评分",
"v": "/by/score"
}, {
"n": "最多点赞",
"v": "/by/up"
}]
}],
"7": [{
"key": "年代",
"name": "年代",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "/year/2026"
}, {
"n": "2025",
"v": "/year/2025"
}, {
"n": "2024",
"v": "/year/2024"
}, {
"n": "2023",
"v": "/year/2023"
}, {
"n": "2022",
"v": "/year/2022"
}, {
"n": "2021",
"v": "/year/2021"
}, {
"n": "2020",
"v": "/year/2020"
}, {
"n": "2019",
"v": "/year/2019"
}, {
"n": "2018",
"v": "/year/2018"
}, {
"n": "2017",
"v": "/year/2017"
}, {
"n": "2016",
"v": "/year/2016"
}, {
"n": "2015",
"v": "/year/2015"
}, {
"n": "更早",
"v": "/year/2014-1980"
}]
}, {
"key": "排序",
"name": "排序",
"value": [{
"n": "最近更新",
"v": "/by/time"
}, {
"n": "最高人气",
"v": "/by/hits"
}, {
"n": "最高评分",
"v": "/by/score"
}, {
"n": "最多点赞",
"v": "/by/up"
}]
}],
"8": [{
"key": "年代",
"name": "年代",
"value": [{
"n": "全部",
"v": ""
}, {
"n": "2026",
"v": "/year/2026"
}, {
"n": "2025",
"v": "/year/2025"
}, {
"n": "2024",
"v": "/year/2024"
}, {
"n": "2023",
"v": "/year/2023"
}, {
"n": "2022",
"v": "/year/2022"
}, {
"n": "2021",
"v": "/year/2021"
}, {
"n": "2020",
"v": "/year/2020"
}, {
"n": "2019",
"v": "/year/2019"
}, {
"n": "2018",
"v": "/year/2018"
}, {
"n": "2017",
"v": "/year/2017"
}, {
"n": "2016",
"v": "/year/2016"
}, {
"n": "2015",
"v": "/year/2015"
}, {
"n": "更早",
"v": "/year/2014-1980"
}]
}, {
"key": "排序",
"name": "排序",
"value": [{
"n": "最近更新",
"v": "/by/time"
}, {
"n": "最高人气",
"v": "/by/hits"
}, {
"n": "最高评分",
"v": "/by/score"
}, {
"n": "最多点赞",
"v": "/by/up"
}]
}]
}, },
searchUrl: '/vod/search/page/fypage/wd/**.html', filter_url: "{{fl.排序}}{{fl.年代}}/page/fypage",
searchable: 2,//是否启用全局搜索, filter_def: "",
quickSearch: 0,//是否启用快速搜索,
headers: { headers: {
'User-Agent': 'MOBILE_UA', "User-Agent": "MOBILE_UA"
}, },
class_parse: '.container&&.tag.text-light;a&&Text;a&&href;.*/(.*?).html', timeout: 5000,
class_name: "日本动漫&国产动漫&欧美动漫&日本动画电影&国产动画电影&欧美动画电影",
class_url: "6&7&8&3&4&5",
class_parse: "",
cate_exclude: "",
play_parse: true, play_parse: true,
lazy: `js: lazy: $js.toString(() => {
function getDAesString(token) {
eval(getCryptoJS());
var key = CryptoJS.enc.Utf8.parse("ejjooopppqqqrwww");
var iv = CryptoJS.enc.Utf8.parse("1348987635684651");
var token = CryptoJS.AES.decrypt(token, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
return token.toString(CryptoJS.enc.Utf8);
}
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]); var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
var url = html.url; var url = html.url;
var from = html.from; var from = html.from;
if (/m3u8/.test(url)) { if (html.encrypt == "1") {
input = url.split("&")[0] url = unescape(url);
} else if (html.encrypt == "2") {
url = unescape(base64Decode(url));
}
if (/\.mp4|\.m3u8|\.flv/.test(url)) {
input = {
parse: 0,
url: url.split("&")[0],
js: ''
};
} else {
var jsh = request(HOST + "/static/player/" + from + ".js", {
headers: {
Referer: input
},
}).match(/\.src\s*=\s*(.*?);/)[1];
//log(MY_HOME);
if (/type=/.test(jsh)) {
jsh = jsh
.replace(/[\+\s']/g, "")
.replace(/MacPlayer.Parse/, "")
.replace(/MacPlayer.PlayUrl/, url)
.replace(/window.location.href/, input);
var playht = fetch(jsh, {
headers: {
Referer: HOST
}
});
} else {
jsh = jsh
.replace(/[\+\s']/g, "")
.replace(/MacPlayer.Parse/, "")
.replace(/MacPlayer.PlayUrl/, url)
.replace(/window.location.href/, input);
jsh = JSON.parse(
fetch(jsh, {
headers: {
Referer: HOST
},
onlyHeaders: true
})
).url;
var playht = fetch(jsh, {
headers: {
Referer: HOST
}
});
}
var postapi = jsh.match(/^(.*?\/\/.*?\/.*?\/)/)[1];
var posturl = postapi + playht.match(/post\("(.*?)"/)[1];
if (/act\s*=/.test(playht)) {
var vid = playht.match(/vid\s*=\s*"(.*?)"/)[1];
var t = playht.match(/var\s*t\s*=\s*"(.*?)"/)[1];
var token = playht.match(/token\s*=\s*"(.*?)"/)[1];
var act = playht.match(/act\s*=\s*"(.*?)"/)[1];
var play = playht.match(/play\s*=\s*"(.*?)"/)[1];
token = getDAesString(token);
var data = JSON.parse(
post(posturl, {
headers: {
Referer: HOST
},
body: {
vid: vid,
t: t,
token: token,
act: act,
play: play,
},
timeout: 5000
})
);
input = {
parse: 0,
url: data.url,
js: ''
};
} else { } else {
input var key = "";
playht.match(/var (\w+)="(.*?)";/g).forEach(function(list) {
key += list.match(/"(.*?)"/)[1];
});
const bodys = JSON.parse(
playht
.match(/post\(.*?,(.*?),\n/)[1]
.replace(/"keyyy"\s*:\s*''.*?''/, '"keyyy" : "' + key + '"')
);
var data = JSON.parse(
post(posturl, {
headers: {
Referer: HOST
},
body: bodys
})
);
if (data.ext == "xgplayer") {
var dataurl =
"https://yun.366day.site/mp4hls/xgplayer.php?vid=" + data.url;
var video = fetch(dataurl, {
headers: {
Referer: jsh
}
}).match(
/"url": "(.*?)"/
)[1];
input = {
parse: 0,
url: video,
js: ''
};
} else if (data.ext == "hls" || data.ext == "hls_list") {
input = {
parse: 0,
url: decodeURIComponent(data.url),
js: ''
};
} else {
input = {
parse: 0,
url: data.url,
js: ''
};
} }
`, }
limit: 6, }
推荐: '.owl-theme-jable .item;*;*;*;*', }),
一级: '#mdym .col-6;h6&&Text;.lazyload&&data-src;.label&&Text;a&&href', double: false,
推荐: "*",
一级: ".video-img-box;h6.title&&Text;.lazyload&&data-src;.label&&Text;a&&href",
二级: { 二级: {
"title": "h1&&Text;.video-info-aux&&Text", title: ".page-title&&Text;.tag-link&&Text",
"img": ".url_img&&src", img: ".module-item-pic&&.lazyload&&src",
"desc": ".video-info-items--span:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text", desc: ".video-info-items:eq(3)&&Text;.video-info-items:eq(2)&&Text;;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text",
"content": ".content-text&&Text", content: ".video-info-content&&Text",
"tabs": ".module-tab-content .tab-item", tabs: ".module-tab-item.tab-item",
"lists": ".scroll-content:eq(#id) a" lists: ".module-player-list:eq(#id) a",
}, tab_text: "body&&Text",
搜索: '*', list_text: "body&&Text",
list_url: "a&&href"
},
detailUrl: "",
搜索: "*"
} }

@ -0,0 +1,378 @@
globalThis.getRandomItem = function(items) {
return items[Math.random() * items.length | 0];
}
var rule = {
title: '采集之王[合]',
author: '道长',
version: '20240706 beta17',
update_info: ``.trim(),
host: '',
homeTid: '',
homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
searchUrl: '/api.php/provide/vod/?wd=**&pg=#TruePage##page=fypage',
classUrl: '/api.php/provide/vod/',
url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyfilter',
filter_url: '{{fl.类型}}',
headers: {
'User-Agent': 'MOBILE_UA'
},
timeout: 5000,
limit: 20,
search_limit: 10,
searchable: 1,
quickSearch: 0,
filterable: 1,
play_parse: true,
parse_url: '',
search_match: false,
search_pic: true,
预处理: $js.toString(() => {
function getClasses(item) {
let classes = [];
if (item.class_name && item.class_url) {
if (!/&|电影|电视剧|综艺|动漫[\u4E00-\u9FA5]+/.test(item.class_name)) {
try {
item.class_name = ungzip(item.class_name)
} catch (e) {
log(`不识别的class_name导致gzip解码失败:${e}`)
return classes
}
}
let names = item.class_name.split('&');
let urls = item.class_url.split('&');
let cnt = Math.min(names.length, urls.length);
for (let i = 0; i < cnt; i++) {
classes.push({
'type_id': urls[i],
'type_name': names[i]
});
}
}
return classes
}
if (typeof(batchFetch) === 'function') {
rule.search_limit = 16;
log('当前程序支持批量请求[batchFetch],搜索限制已设置为16');
}
let _url = rule.params;
log(`传入参数:${_url}`);
if (_url && typeof(_url) === 'string' && /^(http|file)/.test(_url)) {
if (_url.includes('$')) {
let _url_params = _url.split('$');
_url = _url_params[0];
rule.search_match = !!(_url_params[1]);
if (_url_params.length > 2) {
rule.search_pic = !!(_url_params[2]);
}
}
let html = request(_url);
let json = JSON.parse(html);
let _classes = [];
rule.filter = {};
rule.filter_def = {};
json.forEach(it => {
let _obj = {
type_name: it.name,
type_id: it.url,
parse_url: it.parse_url || '',
searchable: it.searchable !== 0,
api: it.api || '',
cate_exclude: it.cate_exclude || '',
cate_excludes: it.cate_excludes || [],
};
_classes.push(_obj);
try {
let json1 = [];
if (it.class_name && it.class_url) {
json1 = getClasses(it);
} else {
json1 = JSON.parse(request(urljoin(_obj.type_id, _obj.api || rule.classUrl))).class;
}
if (_obj.cate_excludes && Array.isArray(_obj.cate_excludes) && _obj.cate_excludes.length > 0) {
json1 = json1.filter(cl => !_obj.cate_excludes.includes(cl.type_name));
} else if (_obj.cate_exclude) {
json1 = json1.filter(cl => !new RegExp(_obj.cate_exclude, 'i').test(cl.type_name));
}
rule.filter[_obj.type_id] = [{
"key": "类型",
"name": "类型",
"value": json1.map(i => {
return {
"n": i.type_name,
'v': i.type_id
}
})
}];
if (json1.length > 0) {
rule.filter_def[it.url] = {
"类型": json1[0].type_id
};
}
} catch (e) {
rule.filter[it.url] = [{
"key": "类型",
"name": "类型",
"value": [{
"n": "全部",
"v": ""
}]
}];
}
});
rule.classes = _classes;
}
}),
class_parse: $js.toString(() => {
input = rule.classes;
}),
推荐: $js.toString(() => {
VODS = [];
if (rule.classes) {
let randomClass = getRandomItem(rule.classes);
let _url = urljoin(randomClass.type_id, input);
if (randomClass.api) {
_url = _url.replace('/api.php/provide/vod/', randomClass.api)
}
try {
let html = request(_url, {
timeout: rule.timeout
});
let json = JSON.parse(html);
VODS = json.list;
VODS.forEach(it => {
it.vod_id = randomClass.type_id + '$' + it.vod_id;
it.vod_remarks = it.vod_remarks + '|' + randomClass.type_name;
});
} catch (e) {}
}
}),
一级: $js.toString(() => {
VODS = [];
if (rule.classes) {
let _url = urljoin(MY_CATE, input);
let current_vod = rule.classes.find(item => item.type_id === MY_CATE);
if (current_vod && current_vod.api) {
_url = _url.replace('/api.php/provide/vod/', current_vod.api)
}
let html = request(_url);
let json = JSON.parse(html);
VODS = json.list;
VODS.forEach(it => {
it.vod_id = MY_CATE + '$' + it.vod_id
});
}
}),
二级: $js.toString(() => {
VOD = {};
if (orId === 'update_info') {
VOD = {
vod_content: rule.update_info.trim(),
vod_name: '更新日志',
type_name: '更新日志',
vod_pic: 'https://resource-cdn.tuxiaobei.com/video/FtWhs2mewX_7nEuE51_k6zvg6awl.png',
vod_remarks: `版本:${rule.version}`,
vod_play_from: '道长在线',
vod_play_url: '随机小视频$http://api.yujn.cn/api/zzxjj.php',
};
} else {
if (rule.classes) {
let _url = urljoin(fyclass, input);
let current_vod = rule.classes.find(item => item.type_id === fyclass);
if (current_vod && current_vod.api) {
_url = _url.replace('/api.php/provide/vod/', current_vod.api)
}
let html = request(_url);
let json = JSON.parse(html);
let data = json.list;
VOD = data[0];
if (current_vod && current_vod.type_name) {
VOD.vod_play_from = VOD.vod_play_from.split('$$$').map(it => current_vod.type_name + '|' + it).join('$$$')
}
}
}
}),
搜索: $js.toString(() => {
VODS = [];
if (rule.classes) {
let canSearch = rule.classes.filter(it => it.searchable);
let page = Number(MY_PAGE);
page = (MY_PAGE - 1) % Math.ceil(canSearch.length / rule.search_limit) + 1;
let truePage = Math.ceil(MY_PAGE / Math.ceil(canSearch.length / rule.search_limit));
if (rule.search_limit) {
let start = (page - 1) * rule.search_limit;
let end = page * rule.search_limit;
let t1 = new Date().getTime();
let searchMode = typeof(batchFetch) === 'function' ? '批量' : '单个';
log('start:' + start);
log('end:' + end);
log('搜索模式:' + searchMode);
log('精准搜索:' + rule.search_match);
log('强制获取图片:' + rule.search_pic);
if (start < canSearch.length) {
let search_classes = canSearch.slice(start, end);
let urls = [];
search_classes.forEach(it => {
let _url = urljoin(it.type_id, input);
if (it.api) {
_url = _url.replace('/api.php/provide/vod/', it.api)
}
_url = _url.replace("#TruePage#", "" + truePage);
urls.push(_url);
});
let results_list = [];
let results = [];
if (typeof(batchFetch) === 'function') {
let reqUrls = urls.map(it => {
return {
url: it,
options: {
timeout: rule.timeout
}
}
});
let rets = batchFetch(reqUrls);
let detailUrls = [];
let detailUrlCount = 0;
rets.forEach((ret, idx) => {
let it = search_classes[idx];
if (ret) {
try {
let json = JSON.parse(ret);
let data = json.list;
data.forEach(i => {
i.site_name = it.type_name;
i.vod_id = it.type_id + '$' + i.vod_id;
i.vod_remarks = i.vod_remarks + '|' + it.type_name;
});
if (rule.search_match) {
data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
}
if (data.length > 0) {
if (rule.search_pic && !data[0].vod_pic) {
log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
detailUrls.push(detailUrl);
results_list.push({
data: data,
has_pic: false,
detailUrlCount: detailUrlCount
});
detailUrlCount++;
} else {
results_list.push({
data: data,
has_pic: true
});
}
}
} catch (e) {
log(`请求:${it.type_id}发生错误:${e.message}`)
}
}
});
let reqUrls2 = detailUrls.map(it => {
return {
url: it,
options: {
timeout: rule.timeout
}
}
});
let rets2 = reqUrls2.length > 0 ? batchFetch(reqUrls2) : [];
for (let k = 0; k < results_list.length; k++) {
let result_data = results_list[k].data;
if (!results_list[k].has_pic) {
try {
let detailJson = JSON.parse(rets2[results_list[k].detailUrlCount]);
log('二级数据列表元素数:' + detailJson.list.length);
result_data.forEach((d, _seq) => {
let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
if (detailVodPic) {
Object.assign(d, {
vod_pic: detailVodPic.vod_pic
});
}
});
} catch (e) {
log(`强制获取网站${result_data[0].site_name}的搜索图片失败:${e.message}`);
}
}
results = results.concat(result_data);
}
} else {
urls.forEach((_url, idx) => {
let it = search_classes[idx];
try {
let html = request(_url);
let json = JSON.parse(html);
let data = json.list;
data.forEach(i => {
i.vod_id = it.type_id + '$' + i.vod_id;
i.vod_remarks = i.vod_remarks + '|' + it.type_name;
});
if (rule.search_match) {
data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
}
if (data.length > 0) {
if (rule.search_pic && !data[0].vod_pic) {
log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
try {
let detailJson = JSON.parse(request(detailUrl));
log('二级数据列表元素数:' + detailJson.list.length);
data.forEach((d, _seq) => {
let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
if (detailVodPic) {
Object.assign(d, {
vod_pic: detailVodPic.vod_pic
});
}
});
} catch (e) {
log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
}
}
results = results.concat(data);
}
results = results.concat(data);
} catch (e) {
log(`请求:${it.type_id}发生错误:${e.message}`)
}
});
}
VODS = results;
let t2 = new Date().getTime();
log(`${searchMode}搜索:${urls.length}个站耗时:${(Number(t2) - Number(t1))}ms`)
}
}
}
}),
lazy: $js.toString(() => {
let parse_url = '';
if (flag && flag.includes('|')) {
let type_name = flag.split('|')[0];
let current_vod = rule.classes.find(item => item.type_name === type_name);
if (current_vod && current_vod.parse_url) {
parse_url = current_vod.parse_url
}
}
if (/\.(m3u8|mp4)/.test(input)) {
input = {
parse: 0,
url: input
}
} else {
if (parse_url.startsWith('json:')) {
let purl = parse_url.replace('json:', '') + input;
let html = request(purl);
input = {
parse: 0,
url: JSON.parse(html).url
}
} else {
input = parse_url + input;
}
}
}),
}

@ -1,5 +1,5 @@
{ {
"spider": "./jar/fan.txt;md5;58149e856fa117ba01d13b0b5de47bd4", "spider": "./jar/spider.jar;md5;193469ed28b7571e529729a9c756f77a",
"lives": [ "lives": [
{"name": "migu","type": 0,"url": "https://develop202.github.io/migu_video/interface.txt","playerType": 1,"ua": "okhttp/3.8.1","timeout": 20,"epg": "https://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"}, {"name": "migu","type": 0,"url": "https://develop202.github.io/migu_video/interface.txt","playerType": 1,"ua": "okhttp/3.8.1","timeout": 20,"epg": "https://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"},
{"name": "live","type": 0,"url": "https://epg.pw/test_channels.m3u","playerType": 1,"ua": "okhttp/3.8.1","timeout": 20,"epg": "https://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"}, {"name": "live","type": 0,"url": "https://epg.pw/test_channels.m3u","playerType": 1,"ua": "okhttp/3.8.1","timeout": 20,"epg": "https://epg.112114.xyz/?ch={name}&date={date}","logo": "https://epg.112114.xyz/logo/{name}.png"},
@ -9,85 +9,151 @@
"sites": [ "sites": [
{"key": "drpy_js_豆瓣","name": "搜索 | 豆瓣[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/drpy.js","searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "drpy_js_豆瓣","name": "搜索 | 豆瓣[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/drpy.js","searchable": 1,"quickSearch": 0,"changeable": 0},
{"key": "drpy_js_TVB云播","name": "影视 | TVB云播[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/TVB云播.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key": "drpy_js_TVB云播","name": "影视 | TVB云播[js]","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/TVB云播.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "新闪雷","name": "新闪雷┃MP4","type": 3,"api": "./FTY/drpy2.min.js","ext": "./js/新闪雷.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key": "新闪雷","name": "新闪雷┃MP4","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/新闪雷.js","header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "fyyy","name": "飞宇影院","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$1#电视剧$2#综艺$3#动漫$4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key": "fyyy","name": "飞宇影院","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$1#电视剧$2#综艺$3#动漫$4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "cbh","name": "茶杯狐","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key": "cbh","name": "茶杯狐","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"分类url": "www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类": "电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key": "MDrive","name": "🗂我的云盘┃我配置","type": 3,"api": "csp_MyDriveGuard","changeable": 0,"indexs": 0,"searchable": 1,"style": {"type": "oval"},"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "配置中心","name": "配置|中心","type": 3,"api": "csp_Config","searchable": 0,"changeable": 0,"indexs": 0,"style": {"type": "rect","ratio": 1.597}},
{"key": "热播影视","name": "热播APP","type": 3,"api": "csp_AppRJ","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": {"url": "http://v.rbotv.cn"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "本地","name": "本地|视频","type": 3,"api": "csp_LocalFile"},
{"key": "木瓜","name": "木瓜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://www.yezitv.top/dtym.json","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "预告","name": "新片|预告","type": 3,"api": "csp_YGP","searchable": 0},
{"key": "花柳","name": "花柳APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://nico.oiio.fun","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "热播影视","name": "热播APP","type": 3,"api": "csp_AppRJ","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": {"url": "http://v.rbotv.cn"}},
{"key": "麒麟","name": "麒麟APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "https://qh.70qh.top","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "木瓜","name": "木瓜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://www.yezitv.top/dtym.json","ver": 2}},
{"key": "粉象","name": "粉象APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://host1.sopython.top/host.json","ver": 2},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "花柳","name": "花柳APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://nico.oiio.fun","ver": 2}},
{"key": "搜搜","name": "搜搜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": "https://www.zjcvod.com","jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "麒麟","name": "麒麟APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "https://qh.70qh.top","ver": 2}},
{"key": "火花","name": "火花APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://huohua.itcxo.cn"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "粉象","name": "粉象APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://host1.sopython.top/host.json","ver": 2}},
{"key": "顾我","name": "顾我APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://daen-1256234123.cos.ap-shanghai.myqcloud.com/MuQi/pgqj.json","dataKey": "kj37zs29q22jk96t","dataIv": "kj37zs29q22jk96t","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "搜搜","name": "搜搜APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": "https://www.zjcvod.com"},
{"key": "爱盈","name": "爱盈APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://rxysyyds.oss-cn-chengdu.aliyuncs.com/qiji.txt","dataKey": "sjvlwnhk6h9znl61","dataIv": "sjvlwnhk6h9znl61","version": "305","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "火花","name": "火花APP","type": 3,"api": "csp_AppFox","searchable": 1,"changeable": 1,"ext": {"host": "http://huohua.itcxo.cn"}},
{"key": "金牌","name": "金牌APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://dtqj.ggtvb.cc/dtjp.txt","dataKey": "eecbio48dsq131ee","dataIv": "eecbio48dsq131ee","search": "searchList4","version": "305","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "顾我","name": "顾我APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://daen-1256234123.cos.ap-shanghai.myqcloud.com/MuQi/pgqj.json","dataKey": "kj37zs29q22jk96t","dataIv": "kj37zs29q22jk96t","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "小猪","name": "小猪APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://tiantangwulu.oss-cn-shanghai.aliyuncs.com/zhuzhuxia.txt","dataKey": "j8sr6d93yp49db3p","dataIv": "j8sr6d93yp49db3p","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "爱盈","name": "爱盈APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://rxysyyds.oss-cn-chengdu.aliyuncs.com/qiji.txt","dataKey": "sjvlwnhk6h9znl61","dataIv": "sjvlwnhk6h9znl61","version": "305","ua": "okhttp/3.10.0"}},
{"key": "奇奇","name": "奇奇APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"url": "http://110.42.67.221:8007","dataKey": "123456789abcdefg","dataIv": "123456789abcdefg","search": "searchList7","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "金牌","name": "金牌APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://dtqj.ggtvb.cc/dtjp.txt","dataKey": "eecbio48dsq131ee","dataIv": "eecbio48dsq131ee","search": "searchList4","version": "305","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "鲸鱼","name": "鲸鱼APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/juyu3.json","dataKey": "AAdgrdghjfgsABC1","dataIv": "AAdgrdghjfgsABC1","init": "initV122","ua": "okhttp/3.10.0"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "小猪","name": "小猪APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://tiantangwulu.oss-cn-shanghai.aliyuncs.com/zhuzhuxia.txt","dataKey": "j8sr6d93yp49db3p","dataIv": "j8sr6d93yp49db3p","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "芬奇","name": "芬奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://wsapi.dafenqi.mom/yuming.txt","dataKey": "bH5mI8iK0tK7aQ5x","dataIv": "bH5mI8iK0tK7aQ5x"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "奇奇","name": "奇奇APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"url": "http://110.42.67.221:8007","dataKey": "123456789abcdefg","dataIv": "123456789abcdefg","search": "searchList7","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "火狐","name": "火狐APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://122.114.171.79:568/huohushipin.txt","dataKey": "huohushipingetap","dataIv": "huohushipingetap"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "鲸鱼","name": "鲸鱼APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/juyu3.json","dataKey": "AAdgrdghjfgsABC1","dataIv": "AAdgrdghjfgsABC1","init": "initV122","ua": "okhttp/3.10.0"}},
{"key": "看呗","name": "看呗APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://www.winter1.fun","dataKey": "abcdefghigklmn11","dataIv": "abcdefghigklmn11"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "芬奇","name": "芬奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://wsapi.dafenqi.mom/yuming.txt","dataKey": "bH5mI8iK0tK7aQ5x","dataIv": "bH5mI8iK0tK7aQ5x"}},
{"key": "优兔","name": "优兔APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://uututv-1319209748.cos.ap-shanghai.myqcloud.com/uutuv4.txt","dataKey": "UrWKPnmQWJA8AQzd","dataIv": "UrWKPnmQWJA8AQzd"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "火狐","name": "火狐APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://122.114.171.79:568/huohushipin.txt","dataKey": "huohushipingetap","dataIv": "huohushipingetap"}},
{"key": "汤圆","name": "汤圆APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","filterable": 1,"ext": {"url": "http://tangyuanapp.top","dataKey": "j519MYJAt3kk9XVA","dataIv": "j519MYJAt3kk9XVA"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "看呗","name": "看呗APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://www.winter1.fun","dataKey": "abcdefghigklmn11","dataIv": "abcdefghigklmn11"}},
{"key": "缘梦","name": "缘梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://165.99.42.137:5432","dataKey": "1234567890987654","dataIv": "1234567890987654"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "优兔","name": "优兔APP","type": 3,"api": "csp_AppQi","searchable": 1,"changeable": 1,"ext": {"site": "https://uututv-1319209748.cos.ap-shanghai.myqcloud.com/uutuv4.txt","dataKey": "UrWKPnmQWJA8AQzd","dataIv": "UrWKPnmQWJA8AQzd"}},
{"key": "王子","name": "王子APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://app.95112475.xyz","dataKey": "5a9w6x58dsq6z3a6","dataIv": "5a9w6x58dsq6z3a6"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "汤圆","name": "汤圆APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","filterable": 1,"ext": {"url": "http://tangyuanapp.top","dataKey": "j519MYJAt3kk9XVA","dataIv": "j519MYJAt3kk9XVA"}},
{"key": "小猫","name": "小猫APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt","dataKey": "xmyxmyxywlkjxywl","dataIv": "xmyxmyxywlkjxywl"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "缘梦","name": "缘梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://165.99.42.137:5432","dataKey": "1234567890987654","dataIv": "1234567890987654"}},
{"key": "小白","name": "小白APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://uutu.efjhl.cn","dataKey": "uXVVRRuaPnjEfsX5","dataIv": "uXVVRRuaPnjEfsX5"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "王子","name": "王子APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://app.95112475.xyz","dataKey": "5a9w6x58dsq6z3a6","dataIv": "5a9w6x58dsq6z3a6"}},
{"key": "火锅","name": "火锅APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://ios.hgyx.vip","dataKey": "062dec75d039980e","dataIv": "062dec75d039980e","ua": "Dart/3.5 (dart:io)"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "小猫","name": "小猫APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "http://xywlkj.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2024/12/1.txt","dataKey": "xmyxmyxywlkjxywl","dataIv": "xmyxmyxywlkjxywl"}},
{"key": "气球","name": "气球APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://vv.229d.cn","dataKey": "8888888888888888","dataIv": "8888888888888888"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "小白","name": "小白APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://uutu.efjhl.cn","dataKey": "uXVVRRuaPnjEfsX5","dataIv": "uXVVRRuaPnjEfsX5"}},
{"key": "白鸽","name": "白鸽APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://cy.baige.asia","dataKey": "599D0FE5178642FD","dataIv": "599D0FE5178642FD"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "火锅","name": "火锅APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://ios.hgyx.vip","dataKey": "062dec75d039980e","dataIv": "062dec75d039980e","ua": "Dart/3.5 (dart:io)"}},
{"key": "剧梦","name": "剧梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://www.jumengwu.com","dataKey": "1f0a873caf2550a5","dataIv": "1f0a873caf2550a5"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "气球","name": "气球APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://vv.229d.cn","dataKey": "8888888888888888","dataIv": "8888888888888888"}},
{"key": "魔方","name": "魔方APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://snysw.xyz/mf4kzs327.txt","dataKey": "1234567887654321","dataIv": "1234567887654321"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "白鸽","name": "白鸽APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://cy.baige.asia","dataKey": "599D0FE5178642FD","dataIv": "599D0FE5178642FD"}},
{"key": "瑞奇","name": "瑞奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://rqxk.gdata.fun","dataKey": "yangruiqiYsapp00","dataIv": "yangruiqiYsapp00"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "剧梦","name": "剧梦APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "https://www.jumengwu.com","dataKey": "1f0a873caf2550a5","dataIv": "1f0a873caf2550a5"}},
{"key": "茉莉","name": "茉莉APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt","dataKey": "88689667dce61725","dataIv": "88689667dce61725"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "魔方","name": "魔方APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://snysw.xyz/mf4kzs327.txt","dataKey": "1234567887654321","dataIv": "1234567887654321"}},
{"key": "驿站","name": "驿站丨APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt","dataKey": "dyyztvapiappyyds","dataIv": "dyyztvapiappyyds"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "瑞奇","name": "瑞奇APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"url": "http://rqxk.gdata.fun","dataKey": "yangruiqiYsapp00","dataIv": "yangruiqiYsapp00"}},
{"key": "灵虎","name": "灵虎APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://bind.315999.xyz/89.txt","dataKey": "#getapp@TMD@2025","dataIv": "#getapp@TMD@2025","version": "120"},"jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "茉莉","name": "茉莉APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt","dataKey": "88689667dce61725","dataIv": "88689667dce61725"}},
{"key": "电影港","name": "电影港|磁力","type": 3,"api": "csp_XYQHiker","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./xiaosa/XYQHiker/电影港.json","jar": "./xiaosa/spider.jar;md5;47e51aff1b9d212ce3ea568a79eed7f7"}, {"key": "驿站","name": "驿站丨APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt","dataKey": "dyyztvapiappyyds","dataIv": "dyyztvapiappyyds"}},
{"key": "玩偶","name": "👽玩偶哥哥┃4K弹幕","type": 3,"api": "csp_WoGGGuard","timeout": 30,"searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "灵虎","name": "灵虎APP","type": 3,"searchable": 1,"changeable": 1,"api": "csp_AppGet","ext": {"site": "https://bind.315999.xyz/89.txt","dataKey": "#getapp@TMD@2025","dataIv": "#getapp@TMD@2025","version": "120"}},
{"key": "YGP","name": "🚀叨观荐影┃预告片","type": 3,"api": "csp_YGPGuard","searchable": 0,"quickSearch": 0,"changeable": 0}, {"key": "哔哩视频","name": "哔哩|视频","type": 3,"api": "csp_BiliYS","searchable": 1,"quickSearch": 0,"filterable": 0,"changeable": 0,"style": {"type": "rect","ratio": 1.433},"ext": {"json": "./json/哔哩视频.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"}},
{"key": "MTV1","name": "🎙️易听音乐┃带歌词","type": 3,"api": "csp_MusicGuard","style": {"type": "rect","ratio": 1},"playerType": 2,"searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "玩偶","name": "玩偶4K","type": 3,"api": "csp_Wogg","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://www.wogg.one","https://wogg.333232.xyz","https://woggpan.888484.xyz"]}},
{"key": "seed","name": "💡聚剧剧┃三盘","type": 3,"api": "csp_SeedhubGuard","ext": "5++kwLhNYm9UrO9wh7Dl7eKamTee4s/5","searchable": 1,"quickSearch": 1,"changeable": 0,"indexs": 0,"style": {"type": "list"}}, {"key": "快映","name": "快映4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["http://xsayang.fun:12512","http://154.201.83.50:12512"]}},
{"key": "ZPan","name": "🎈聚盘搜┃三盘","type": 3,"api": "csp_S_zpsGuard","searchable": 1,"quickSearch": 0,"changeable": 0,"ext": {"siteUrl": "http://38.55.131.86:82/"},"indexs": 0,"style": {"type": "list"}}, {"key": "木偶","name": "木偶4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://123.666291.xyz","https://666.666291.xyz","https://www.muou.site","https://www.muou.asia"]}},
{"key": "立播","name": "🌟立播┃秒播","type": 3,"api": "csp_LibvioGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "蜡笔","name": "蜡笔4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://www.labi88.sbs","https://feimao666.fun","http://feimao888.fun"]}},
{"key": "奶酪","name": "🧀奶酪┃秒播","type": 3,"api": "csp_T4Guard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "rfOIzPkSUkANv6AT2prC8en3+TzKx9TnlT8vaY37HhtYfAQe6C5xqrVuJPhQwYV6r3eRdMBGm3Qm6Th+BushR86B6KqJGXDsHazHw7alBG/7zUxkN1tK/NypRxnpBNoeUtpw4jcCGhytI75yO4g4zG6SOPA0RSwhksM0IF2friAkrHCWoW3v+0mdw6sjz4t4XB1Df7yL/R5cfaA/5LQYq3I8OkvMrJMU9Q1P7JXwx7NSF2zTyH/ANVmZ4u5m567DW1KVG7OuQjXPjZiOXTYk0+wjpfBRTf19yIq6q/C76k2Fs80joAMPw0ueDR+QHxtuDcTom2rmHkI1Fonkzi6BotbpUcbSi4PiIgmfdbvVwhG6Z+i4nvt+IYa48l5aLA7PLgDiERpuOs31aHaXlgFswT87XyTb8QaF4CuzKWJuXptwNTjvXAS9KHdxH49Ay+hfBAB2bCvUf4CMoldF2wZUv0mI2qY966erFpOFg+FOc7t88EUH8j8ACXQtHJiKC9RQ+SaLIF0="}, {"key": "至臻","name": "至臻4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://mihdr.top","https://www.miqk.cc","https://xiaomiai.site","https://xiaomi666.fun","https://www.mihdr.top","https://www.zhizhenpan.fun"]}},
{"key": "厂长","name": "📔厂长┃秒播","type": 3,"api": "csp_NewCzGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "多多","name": "多多4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://tv.yydsys.top","https://tv.yydsys.cc","https://tv.214521.xyz"]}},
{"key": "文采","name": "💮文采┃秒播","type": 3,"api": "csp_JpysGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "欧哥","name": "欧哥4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://woog.nxog.eu.org","https://woog.nxog.fun","https://woog.nxog.eu.org","https://woog.430520.xyz"]}},
{"key": "原创","name": "☀原创┃秒播","type": 3,"api": "csp_YCyzGuard","timeout": 15,"playerType": 1,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "二小","name": "二小4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://xhww.net","https://erxiaofn.site","https://erxiaofn.click","https://www.xhww.net"]}},
{"key": "比特","name": "🍄比特┃秒播","type": 3,"api": "csp_BttwooGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "虎斑","name": "虎斑4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["http://xhban.xyz:20720","http://154.222.27.33:20720"]}},
{"key": "苹果","name": "🍎苹果┃秒播","type": 3,"api": "csp_LiteAppleGuard","timeout": 15,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "闪电","name": "闪电4K","type": 3,"api": "csp_PanWebShare","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://sd.sduc.site"]}},
{"key": "热播","name": "📺热播┃多线","type": 3,"api": "csp_AppTTGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "uqGL1bNENExT7/hGxpSE5qU="}, {"key": "夸克","name": "夸克4K","type": 3,"api": "csp_PanWebShareCloudKK","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["https://www.quarktv.cc"]}},
{"key": "剧圈","name": "🐻剧圈┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+S3T18333j8hL4ryEFdPZxse8yYwoKFyJOlU2M9/q2OcL8NQxT0k5GV9Quw0AIzUurGBVyPqCLrdirfpAz+n0Qh7PVBWo8uxWhO1Bs1MCYA1oiM="}, {"key": "清影","name": "清影4K","type": 3,"api": "csp_PanWebShareCloudQY","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"ext": {"site": ["http://www.revohd.com"]}},
{"key": "下饭","name": "🍙下饭┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwtCFsub1+mmfmIi0nGlgK8i7X0oYLxBVvSwnsuM5MLkOhoI/4z/TJMVFz2ow52AyXL42Edzeou/SGHg="}, {"key": "雷鲸","name": "雷鲸4K","type": 3,"api": "csp_PanWebShareCloudLJ","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["https://www.leijing.xyz","https://www.leijing1.com","https://leijing.xyz","https://leijing1.com"]}},
{"key": "极狐","name": "🦊极狐┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+S/Cz8j6xik9ZIrwCw8aZkEOtiQw5qNif+ZRw904uGiCZNFRz3ln6nh5Q+wpBsGA6aydW3fmWrXH1ve0HjKxzV5kNEdcrI7mT1i2DMtcTIh17XhLS0D2Cr6rghboDg=="}, {"key": "海绵","name": "海绵4K","type": 3,"api": "csp_PanWebShareCloudHM","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["http://haimian.eu.org","https://www.hmxz.org","https://www.haimianxz.com"]}},
{"key": "猫猫","name": "🐟猫猫┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwpmIsuSspW+fnt3j0Gkxas3qVQ5bZRBVvSwnsuM5MOJ0isFT7Xq5Kctln34euXsyXL42Edzeou/SGHg="}, {"key": "夸父","name": "夸父4K","type": 3,"api": "csp_PanWebShareCloudKF","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["https://www.kfjwzz.com"],"cookie": "bbs_sid=bi7dpnm6vp31s38rjqlqq8vq84; bbs_token=TWiR3YUrGoVpbdTkjAJ0xMe_2B_2FiaFvd84V3_2FEZJRRSKU_3D"}},
{"key": "橘子","name": "🍊橘子┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOX1voDIQhH8epBwpmIsuS/sSCZwM/jwik9Zoy3AAlFMxpf9CY77fshJ+II0I4x7mOKd5IWnT40uC1p"}, {"key": "盘它","name": "盘它4K","type": 3,"api": "csp_PanWebShareCloudPT","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list"}},
{"key": "鲸鱼","name": "👀鲸鱼┃多线","type": 3,"api": "csp_AppSxGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1,"ext": "rfOb1uAWbkRHp7hdxprG9un3+TXC3NH30m85MMiyVkwSIgNArXpwrLZwJOlInMRrq2qCb88RxXck6mdnBfx+E9mVr+/WQHKnXOuf1rT3CHH2zSEDJ0lM/ZH/GF+kFMAPQfAluHgdCEy1QqmjhV0="}, {"key": "123","name": "1234K","type": 3,"api": "csp_PanWebShareCloud123","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"style": {"type": "list","ratio": 1.433},"ext": {"site": ["https://123panfx.com","https://pan1.me"]}},
{"key": "糯米","name": "🍓糯米┃多线","type": 3,"api": "csp_NmyswvGuard","timeout": 15,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "人人","name": "人人4K","type": 3,"api": "csp_RenRen"},
{"key": "奥特","name": "🏝奥特┃多线","type": 3,"api": "csp_AueteGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "即刻","name": "即刻4K","type": 3,"api": "csp_Jike","style": {"type": "list"}},
{"key": "荐片","name": "🐭荐片┃P2P","type": 3,"api": "csp_JPJGuard","timeout": 10,"playerType": 2,"searchable": 1,"quickSearch": 1,"changeable": 0}, {"key": "双星","name": "双星4K","type": 3,"api": "csp_ShuangXing","style": {"type": "list"}},
{"key": "新6V","name": "🧲新6V┃磁力","type": 3,"api": "csp_SixVGuard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 0,"ext": "https://www.xb6v.com/"}, {"key": "甜圈短剧","name": "甜圈|短剧","type": 3,"api": "csp_TianquanDJ","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "Dm84","name": "🚌巴士┃动漫","type": 3,"api": "csp_Dm84Guard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "锦鲤短剧","name": "锦鲤|短剧","type": 3,"api": "csp_JinliDJ","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "Anime1","name": "🐾日本┃动漫","type": 3,"api": "csp_Anime1Guard","timeout": 10,"searchable": 1,"quickSearch": 1,"changeable": 1}, {"key": "星阁短剧","name": "星阁|短剧","type": 3,"api": "csp_XinggeDJ","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "88","name": "⚽88┃看球","type": 3,"api": "csp_Sir88Guard","timeout": 10,"searchable": 0,"changeable": 0,"style": {"type": "list"}}, {"key": "星芽短剧","name": "星芽|短剧","type": 3,"api": "./py/星芽短剧.py","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "超全","name": "⚽超全┃看球","type": 3,"api": "csp_ZbzGuard","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "list"},"ext": "uqGL1fpJNAUf8fdTwZCE5qSp+Q=="}, {"key": "剧王短剧","name": "剧王|短剧","type": 3,"api": "./py/剧王短剧.py","searchable": 1,"changeable": 1,"quickSearch": 1,"filterable": 1},
{"key": "看球","name": "⚽手机┃看球","type": 3,"api": "csp_KanqiuGuard","timeout": 10,"searchable": 0,"changeable": 0,"style": {"type": "list"}}, {"key": "木兮影视","name": "木兮|影视","type": 3,"api": "csp_Symx","ext": "https://film.symx.club"},
{"key": "MTV","name": "🎶明星┃MV","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/5af5fbe12a88b7c45aa1c21e6551826c.txt"}}, {"key": "零度影视","name": "零度|影视","type": 3,"api": "csp_Lingdu","searchable": 1,"filterable": 1},
{"key": "有声小说","name": "🎧有声┃小说","type": 3,"api": "csp_Tingshu275Guard","style": {"type": "rect","ratio": 1},"searchable": 0,"quickSearch": 0,"changeable": 0}, {"key": "厂长影视","name": "厂长|影视","type": 3,"api": "csp_Czsapp","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "https://www.czzymovie.com"},
{"key": "Aid","name": "🚑急救┃教学","type": 3,"api": "csp_FirstAidGuard","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "rect","ratio": 3.8}}, {"key": "金牌影视","name": "金牌|影视","type": 3,"api": "csp_Jpys","ext": "https://m.610pkea.com,https://y2s52n7.com,https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn"},
{"key": "虎牙js","name": "🐯虎牙┃直播","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/虎牙.js","style": {"type": "rect","ratio": 1.755},"timeout": 10,"playerType": "2","searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "云播影视","name": "云播|影视","type": 3,"api": "csp_Tvyb","ext": "http://www.viptv05.com"},
{"key": "斗鱼js","name": "🐟斗鱼┃直播","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/斗鱼直播.js","style": {"type": "rect","ratio": 1.755},"timeout": 10,"playerType": "2","searchable": 1,"quickSearch": 0,"changeable": 0}, {"key": "苹果影视","name": "苹果|影视","type": 3,"api": "csp_LiteApple"},
{"key": "抠搜","name": "🍄抠抠┃搜搜","type": 3,"api": "csp_KkSsGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "饺子影视","name": "饺子|影视","type": 3,"api": "csp_Jiaozi"},
{"key": "UC","name": "🌈优汐┃搜搜","type": 3,"api": "csp_UuSsGuard","searchable": 1,"quickSearch": 1,"changeable": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "瓜子影视","name": "瓜子|影视","type": 3,"api": "csp_Gz360"},
{"key": "push_agent","name": "🛴手机┃推送","type": 3,"api": "csp_PushGuard","searchable": 0,"quickSearch": 0,"ext": {"Cloud-drive": "tvfan/Cloud-drive.txt"}}, {"key": "骚火影视","name": "骚火|影视","type": 3,"api": "csp_SaoHuo","ext": "https://shdy5.us"},
{"key": "Bili","name": "🅱哔哔合集┃弹幕","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 1,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/0075389dca9afadd4614e9713765ff17.txt"}}, {"key": "农民影视","name": "农民|影视","type": 3,"api": "csp_Wwys","ext": "https://vip.wwgz.cn:5200"},
{"key": "Biliych","name": "🅱哔哔演唱会┃弹幕","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/6496356286589c68f52c2f99c0c674c7.txt"}}, {"key": "爱看机器人","name": "爱看|影视","type": 3,"api": "csp_Ikanbot","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "dr_兔小贝","name": "📚儿童┃启蒙","type": 3,"api": "./FTY/drpy2.min.js","ext": "./FTY/%E5%85%94%E5%B0%8F%E8%B4%9D.js","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0}, {"key": "韩剧看看","name": "韩剧|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/韩剧看看.json"},
{"key": "少儿教育","name": "📚少儿┃教育","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/89370c8ddf36b5e1beb4d71adb921bda.txt"}}, {"key": "小镇影视","name": "小镇|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/小镇影视.json"},
{"key": "小学课堂","name": "📚小学┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/d7a21cf34ede56f5c686ecfba5fc7e3f.txt"}}, {"key": "面包影视","name": "面包|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/面包影视.json"},
{"key": "初中课堂","name": "📚初中┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/8f55d520f8d70056695740ef151744a7.txt"}}, {"key": "永乐影视","name": "永乐|影视","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/永乐影视.json"},
{"key": "高中教育","name": "📚高中┃课堂","type": 3,"api": "csp_BiliGuard","style": {"type": "rect","ratio": 1.597},"searchable": 0,"quickSearch": 0,"changeable": 0,"ext": {"json": "https://nos.netease.com/ysf/c66a4b5356141c49fd45ec51568017b4.txt"}}, {"key": "采集之王","name": "采集|合集","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/采集之王.js?type=url&params=../json/采集静态.json$1$1"},
{"key": "1905","name": "1905影视","type": 3,"api": "csp_Web1905","searchable": 1,"quickSearch": 0,"filterable": 0},
{"key": "哆啦新番社","name": "哆啦|新番社","type": 3,"api": "csp_XBPQ","style": {"type": "list"},"ext": "./XBPQ/哆啦新番社.json"},
{"key": "Anime1","name": "A1动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/Anime1.js"},
{"key": "NT动漫","name": "NT动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/NT动漫.js"},
{"key": "漫国动漫","name": "漫国丨动漫","type": 3,"searchable": 1,"api": "csp_AppSy","ext": {"site": "https://dm-1255775577.cos.ap-guangzhou.myqcloud.com/dmg/api.txt","siteKey": "rectangleadsadxa","listKey": "aassddwwxxllsx1x","parsesKey": "aassddwwxxllsx1x"}},
{"key": "云屋动漫","name": "云屋|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://www.yunwuee.icu","dataKey": "ygcnb9bdcmb8aeiw","dataIv": "ygcnb9bdcmb8aeiw"}},
{"key": "卡卡动漫","name": "卡卡|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://154.201.90.53:8002","dataKey": "123456789abcdefg","dataIv": "123456789abcdefg"}},
{"key": "丫丫动漫","name": "丫丫|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://tv.yy-fun.cc","dataKey": "qkxnwkfjwpcnwycl","dataIv": "qkxnwkfjwpcnwycl"}},
{"key": "冬日动漫","name": "冬日丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://www.drdm.fun","dataKey": "qE2nD0rL1lH4uP9r","dataIv": "qE2nD0rL1lH4uP9r"}},
{"key": "方舟动漫","name": "方舟丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://www.cyfz.vip","dataKey": "e72cdfd629e8895d","dataIv": "e72cdfd629e8895d"}},
{"key": "元咲动漫","name": "元咲丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "http://cic.aicg.fun","dataKey": "2c4h36abd96se10u","dataIv": "2c4h36abd96se10u"}},
{"key": "番薯动漫","name": "番薯丨动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://new.app.bytegooty.com","dataKey": "N4yj7l7xKxHF4*gz","dataIv": "N4yj7l7xKxHF4*gz"}},
{"key": "曼波动漫","name": "曼波|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://app.omofun1.top","dataKey": "66dc309cbeeca454","dataIv": "66dc309cbeeca454"}},
{"key": "咕咕动漫","name": "咕咕|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://www.gugu3.com","dataKey": "nKfZ8KX6JTNWRzTD","dataIv": "nKfZ8KX6JTNWRzTD"}},
{"key": "米饭动漫","name": "米饭|动漫","type": 3,"searchable": 1,"api": "csp_AppGet","ext": {"url": "https://get.mymifun.com","dataKey": "GETMIFUNGEIMIFUN","dataIv": "GETMIFUNGEIMIFUN"}},
{"key": "樱花动漫","name": "樱花|动漫","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/樱花动漫.json"},
{"key": "巴士动漫","name": "巴士|动漫","type": 3,"api": "csp_XYQHiker","ext": "./XYQHiker/巴士动漫.json"},
{"key": "花子动漫","name": "花子|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/花子动漫.js"},
{"key": "爱动漫","name": "爱动漫|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/爱动漫.js"},
{"key": "路漫漫","name": "路漫漫|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/路漫漫.js"},
{"key": "去看吧","name": "去看吧|动漫","type": 3,"api": "./lib/drpy2.min.js","ext": "./js/去看吧.js"},
{"key": "荐片","name": "荐片|磁力","api": "csp_JianPian","type": 3},
{"key": "修罗","name": "修罗|磁力","api": "csp_Xlys","type": 3,"ext": "https://xl01.com.de"},
{"key": "七味","name": "七味|磁力","type": 3,"api": "csp_QnMp4","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": {"url": "https://www.pkmp4.xyz,https://www.qwnull.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qnmp4.com,https://www.qnnull.com,https://www.qnhot.com"}},
{"key": "雪花","name": "雪花|磁力","type": 3,"api": "csp_XBPQ","changeable": 1,"searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./XBPQ/雪花.json"},
{"key": "80S","name": "80S磁力","type": 3,"api": "csp_BLSGod","playerType": 1,"searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "New6v","name": "New6V磁力","type": 3,"api": "csp_New6v","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "https://www.xb6v.com"},
{"key": "美剧迷","name": "美剧迷|磁力","type": 3,"api": "csp_MeijuMi","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "迅雷吧","name": "迅雷吧|磁力","type": 3,"api": "csp_Xunlei8","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "电影港","name": "电影港|磁力","type": 3,"api": "csp_XYQHiker","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./XYQHiker/电影港.json"},
{"key": "电影天堂","name": "电影天堂|磁力","type": 3,"api": "csp_DyGod","searchable": 1,"quickSearch": 1,"filterable": 1},
{"key": "阿里云盘","name": "我的|阿里","type": 3,"api": "csp_PanAli","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433},"ext": "./json/aliShare.json"},
{"key": "夸克云盘","name": "我的|夸克","type": 3,"api": "csp_PanQuark","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433},"ext": "./json/quarkShare.json"},
{"key": "UC云盘","name": "我的UC","type": 3,"api": "csp_PanUc","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433},"ext": "./json/ucShare.json"},
{"key": "百度云盘","name": "我的|百度","type": 3,"api": "csp_PanBaiDu","searchable": 0,"filterable": 0,"changeable": 0,"style": {"type": "list","ratio": 1.433}},
{"key": "盘搜","name": "盘搜|搜索","type": 3,"api": "csp_PanSou","searchable": 1,"quickSearch": 0,"filterable": 0},
{"key": "糖果","name": "糖果|搜索","type": 3,"api": "csp_TGSou","searchable": 1,"quickSearch": 0,"filterable": 0},
{"key": "百酷","name": "百酷|搜索","type": 3,"api": "csp_Baiku"},
{"key": "米搜","name": "米搜|搜索","type": 3,"api": "csp_MiSou"},
{"key": "酷乐","name": "酷乐|搜索","type": 3,"api": "csp_KuLe"},
{"key": "鬼鬼","name": "鬼鬼|搜索","type": 3,"api": "csp_GuiGui"},
{"key": "混合","name": "混合|搜索","type": 3,"api": "csp_HunHePan"},
{"key": "兄弟","name": "兄弟|搜索","type": 3,"api": "csp_XiongDiPan"},
{"key": "天翼","name": "天翼|搜索","type": 3,"api": "csp_TianYiSo"},
{"key": "趣盘","name": "趣盘|搜索","type": 3,"api": "csp_QuPanSo"},
{"key": "AList","name": "AList合集","type": 3,"api": "csp_Alist","searchable": 1,"filterable": 1,"changeable": 0,"style": {"type": "list"},"ext": "./json/alist.json"},
{"key": "88看球","name": "88看球","type": 3,"api": "csp_Kanqiu","gridview": 3,"style": {"type": "list"}},
{"key": "爱听音乐","name": "爱听|音乐","type": 3,"api": "./py/爱听音乐.py"},
{"key": "六月听书","name": "六月|听书","type": 3,"api": "csp_TingBook","style": {"type": "list"}},
{"key": "呦呦DJ","name": "呦呦DJ","type": 3,"api": "csp_Djuu","style": {"type": "list"}},
{"key": "戏曲多多","name": "戏曲|多多","type": 3,"api": "csp_AppLY","style": {"type": "list"}},
{"key": "网络直播","name": "网络|直播","type": 3,"api": "./py/网络直播.py"},
{"key": "哔哩直播","name": "哔哩|直播","type": 3,"api": "./py/哔哩直播.py"},
{"key": "哔哩合集","name": "哔哩|合集","type": 3,"api": "csp_Bili","searchable": 1,"quickSearch": 0,"filterable": 0,"changeable": 0,"style": {"type": "rect","ratio": 1.433},"ext": {"json": "./json/哔哩合集.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"}},
{"key": "哔哩哔哩演唱会","name": "哔哩|音乐","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩演唱会.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩听书","name": "哔哩|听书","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩听书.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩相声","name": "哔哩|相声","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩相声.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩小品","name": "哔哩|小品","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩小品.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "哔哩哔哩戏曲","name": "哔哩|戏曲","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 0,"ext": {"json": "./json/哔哩哔哩戏曲.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "少儿教育","name": "少儿|教育","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/少儿教育.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "小学课堂","name": "小学|课堂","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/小学课堂.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "初中课堂","name": "初中|课堂","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/初中课堂.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "高中课堂","name": "高中|课堂","type": 3,"api": "csp_Bili","searchable": 0,"quickSearch": 0,"filterable": 1,"ext": {"json": "./json/高中课堂.json","cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt"},"style": {"type": "rect","ratio": 1.597}},
{"key": "急救教学","name": "急救|教学","type": 3,"api": "csp_FirstAid","searchable": 0,"quickSearch": 0,"changeable": 0,"style": {"type": "rect","ratio": 3.8},"gridview": "0-0-4.1"},
{"key": "养生堂","name": "养生|知识","type": 3,"api": "csp_XBPQ","ext": "./XBPQ/养生堂.json","style": {"type": "rect","ratio": 1.597}},
{"key": "push_agent","name": "手机|推送","type": 3,"api": "csp_Push","searchable": 0,"filterable": 0,"changeable": 0},
{"key": "奇优","name": "影视 | ️奇优[直连]","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"}, {"key": "奇优","name": "影视 | ️奇优[直连]","type": 3,"api": "csp_XBPQ","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"},
{"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2}, {"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2},
{"key": "天涯采集","name": "影视 | 天涯","type": 1,"api": "http://tyyszy.com/api.php/provide/vod","style": {"type": "rect","ratio": 1.33},"searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2}, {"key": "天涯采集","name": "影视 | 天涯","type": 1,"api": "http://tyyszy.com/api.php/provide/vod","style": {"type": "rect","ratio": 1.33},"searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType": 2},

@ -0,0 +1,67 @@
[
{
"name": "我的网盘",
"folders": [
{
"shareId": "",
"folder": "root"
}
]
},
{
"name": "短剧合集",
"folders": [
{
"shareId": "Y5wMKfVDD6K",
"folder": "6616613853041ba53f2842918e02346943d980b4"
}
]
},
{
"name": "动漫合集",
"folders": [
{
"shareId": "LEaepiYfxcw",
"folder": "61019a966975bfef583449a39b36da512384b2d7"
}
]
},
{
"name": "电影合集",
"folders": [
{
"shareId": "ZHNChQfiPfk",
"folder": "root"
},
{
"shareId": "e27BPgDwxeA",
"folder": "root"
},
{
"shareId": "XUH7r6BZuML",
"folder": "root"
}
]
},
{
"name": "电视剧合集",
"folders": [
{
"shareId": "ftMhRaKUfYp",
"folder": "root"
},
{
"shareId": "8Fg4TNsd2A2",
"folder": "root"
},
{
"shareId": "ar8Kg9azw1S",
"folder": "root"
},
{
"shareId": "GMYSz3AHFaA",
"folder": "root"
}
]
}
]

@ -1,57 +1,21 @@
{ {
"vodPic": "https://x.imgs.ovh/x/2023/09/05/64f680bb030b4.png", "vodPic": "https://rogsoft.ddnsto.com/softcenter/softcenter/res/icon-alist.png",
"drives": [ "drives": [
{
"name": "弱水",
"server": "http://shicheng.wang:555/"
},
{
"name": "NICS",
"server": "https://nics.eu.org"
},
{
"name": "ECVE",
"server": "https://pan.ecve.cn"
},
{ {
"name": "小雅", "name": "小雅",
"server": "http://alist.xiaoya.pro" "server": "http://alist.xiaoya.pro"
}, },
{ {
"name": "觸光", "name": "触光",
"server": "https://pan.ichuguang.com" "server": "https://pan.ichuguang.com"
}, },
{ {
"name": "一只魚", "name": "魔都云",
"server": "https://vtok.pp.ua/" "server": "https://cdn.modupan.com"
}, },
{ {
"name": "七米", "name": "七米",
"server": "https://al.chirmyram.com" "server": "https://al.chirmyram.com"
},
{
"name": "神族九帝",
"server": "https://alist.shenzjd.com"
},
{
"name": "梓澪",
"server": "https://zi0.cc"
},
{
"name": "网盘1",
"server": "http://223.167.75.227:5678/"
},
{
"name": "网盘2",
"server": "http://123.249.94.196:5678/"
},
{
"name": "网盘3",
"server": "http://101.204.33.244:5678/"
},
{
"name": "网盘4",
"server": "http://175.152.57.102:5678/"
} }
] ]
} }

@ -0,0 +1,111 @@
[
{
"name": "我的网盘",
"folders": [
{
"shareId": "",
"folder": "0"
}
]
},
{
"name": "幼儿教育",
"folders": [
{
"shareId": "a08f66152533",
"folder": "0"
}
]
},
{
"name": "短剧合集",
"folders": [
{
"shareId": "885fd4ba2d92",
"folder": "0"
},
{
"shareId": "a1cda418984f",
"folder": "0"
}
]
},
{
"name": "电影合集",
"folders": [
{
"shareId": "49ab75d52e00",
"folder": "0"
},
{
"shareId": "a632967760cf",
"folder": "0"
},
{
"shareId": "2f59bb5d96b9",
"folder": "0"
},
{
"shareId": "50828c368def",
"folder": "0"
},
{
"shareId": "e07e26aecc08",
"folder": "0"
},
{
"shareId": "0536a38a356e",
"folder": "0"
},
{
"shareId": "e273ef697403",
"folder": "0"
},
{
"shareId": "c8ac6c88e5d8",
"folder": "0"
}
]
},
{
"name": "电视剧合集",
"folders": [
{
"shareId": "d19c4ebe1ff7",
"folder": "0"
},
{
"shareId": "cd4c5ac7e830",
"folder": "0"
},
{
"shareId": "e1b2ba8b6d6c",
"folder": "0"
},
{
"shareId": "166fa0a7ca6f",
"folder": "0"
},
{
"shareId": "37a92c0b7f10",
"folder": "0"
},
{
"shareId": "fb3386e42af2",
"folder": "0"
},
{
"shareId": "46ce214f4ed7",
"folder": "0"
},
{
"shareId": "fe4681d7fb43",
"folder": "0"
},
{
"shareId": "8d65e885b059",
"folder": "0"
}
]
}
]

@ -0,0 +1,47 @@
[
{
"name": "我的网盘",
"folders": [
{
"shareId": "",
"folder": "0"
}
]
},
{
"name": "豆瓣TOP250部",
"folders": [
{
"shareId": "c0503fdee6644",
"folder": "0"
}
]
},
{
"name": "日剧",
"folders": [
{
"shareId": "391b86c09cd24",
"folder": "9df4921d548841199e625765413f8bd6"
}
]
},
{
"name": "韩剧",
"folders": [
{
"shareId": "21f04a22052f4",
"folder": "950f5ca7d5e54d528c0dae1fddec5c78"
}
]
},
{
"name": "音乐",
"folders": [
{
"shareId": "369e30038dae4",
"folder": "1b8a55dc18a54fb7aea8ed2b6fd6ad53"
}
]
}
]

@ -0,0 +1,70 @@
[
{
"share_name": "优品阁",
"share_id": "uWa9gbM3RJ7"
},
{
"share_name": "阿里1T",
"share_id": "mxAfB6eRgY4"
},
{
"share_name": "平凡中的",
"share_id": "4ydLxf7VgH7"
},
{
"share_name": "tacit0924",
"share_id": "DNgnCudf4cD?pwd=6666"
},
{
"share_name": "黄妈",
"share_id": "4bGRVUdUtct"
},
{
"share_name": "YYDSVIP",
"share_id": "dieULBdYP3D"
},
{
"share_name": "优源阁",
"share_id": "RnjUi1urdb2"
},
{
"share_name": "风流动漫",
"share_id": "WdaaeX7HK44"
},
{
"share_name": "风流剧集",
"share_id": "kgxWjZsK6bq"
},
{
"share_name": "xiaaluo",
"share_id": "sg8CdGUwmUr"
},
{
"share_name": "4K影视",
"share_id": "wHPKUENKFsS"
},
{
"share_name": "诺兰全集",
"share_id": "gf2GebXnZHh"
},
{
"share_name": "纪录片",
"share_id": "fSNHaYST47s"
},
{
"share_name": "掌灯者|港",
"share_id": "wHPKUENKFsS"
},
{
"share_name": "掌灯者|一",
"share_id": "wHPKUENKFsS"
},
{
"share_name": "掌灯者|二",
"share_id": "wHPKUENKFsS"
},
{
"share_name": "掌灯者|三",
"share_id": "wHPKUENKFsS"
}
]

10945
lib/cheerio.min.js vendored

File diff suppressed because one or more lines are too long

3201
lib/cloud.min.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

3202
lib/drpy2.min.js vendored

File diff suppressed because one or more lines are too long

@ -36,6 +36,7 @@ export function gbkTool(){
G2Uhash[U2Ghash[key]] = key; G2Uhash[U2Ghash[key]] = key;
} }
}(data); }(data);
function isAscii(unicode) { function isAscii(unicode) {
return ((unicode == 0x20AC) || (unicode <= 0x007F && unicode >= 0x0000)); return ((unicode == 0x20AC) || (unicode <= 0x007F && unicode >= 0x0000));
} }

@ -0,0 +1,607 @@
/*!
* Jinja Templating for JavaScript v0.1.8
* https://github.com/sstur/jinja-js
*
* This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
*
* In the interest of simplicity, it deviates from Jinja2 as follows:
* - Line statements, cycle, super, macro tags and block nesting are not implemented
* - auto escapes html by default (the filter is "html" not "e")
* - Only "html" and "safe" filters are built in
* - Filters are not valid in expressions; `foo|length > 1` is not valid
* - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
*
* Notes:
* - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
* - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
* - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
* - `.2` is not a valid number literal; use `0.2`
*
*/
/*global require, exports, module, define */
(function(global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
})(this, (function(jinja) {
"use strict";
var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
var NUMBER = /^[+-]?\d+(\.\d+)?$/;
//non-primitive literals (array and object literals)
var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
//bare identifiers such as variables and in object literals: {foo: 'value'}
var IDENTIFIERS = /[$_a-z][$\w]*/ig;
var VARIABLES = /i(\.i|\[[@#i]\])*/g;
var ACCESSOR = /(\.i|\[[@#i]\])/g;
var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
//extended (english) operators
var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
var LEADING_SPACE = /^\s+/;
var TRAILING_SPACE = /\s+$/;
var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
var TAGS = {
'{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
'{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
'{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
'{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
};
var delimeters = {
'{%': 'directive',
'{{': 'output',
'{#': 'comment'
};
var operators = {
and: '&&',
or: '||',
not: '!',
is: '==',
isnot: '!='
};
var constants = {
'true': true,
'false': false,
'null': null
};
function Parser() {
this.nest = [];
this.compiled = [];
this.childBlocks = 0;
this.parentBlocks = 0;
this.isSilent = false;
}
Parser.prototype.push = function(line) {
if (!this.isSilent) {
this.compiled.push(line);
}
};
Parser.prototype.parse = function(src) {
this.tokenize(src);
return this.compiled;
};
Parser.prototype.tokenize = function(src) {
var lastEnd = 0,
parser = this,
trimLeading = false;
matchAll(src, START_TOKEN, function(open, index, src) {
//here we match the rest of the src against a regex for this tag
var match = src.slice(index + open.length).match(TAGS[open]);
match = (match ? match[0] : '');
//here we sub out strings so we don't get false matches
var simplified = match.replace(STRINGS, '@');
//if we don't have a close tag or there is a nested open tag
if (!match || ~simplified.indexOf(open)) {
return index + 1;
}
var inner = match.slice(0, 0 - open.length);
//check for white-space collapse syntax
if (inner.charAt(0) === '-') var wsCollapseLeft = true;
if (inner.slice(-1) === '-') var wsCollapseRight = true;
inner = inner.replace(/^-|-$/g, '').trim();
//if we're in raw mode and we are not looking at an "endraw" tag, move along
if (parser.rawMode && (open + inner) !== '{%endraw') {
return index + 1;
}
var text = src.slice(lastEnd, index);
lastEnd = index + open.length + match.length;
if (trimLeading) text = trimLeft(text);
if (wsCollapseLeft) text = trimRight(text);
if (wsCollapseRight) trimLeading = true;
if (open === '{{{') {
//liquid-style: make {{{x}}} => {{x|safe}}
open = '{{';
inner += '|safe';
}
parser.textHandler(text);
parser.tokenHandler(open, inner);
});
var text = src.slice(lastEnd);
if (trimLeading) text = trimLeft(text);
this.textHandler(text);
};
Parser.prototype.textHandler = function(text) {
this.push('write(' + JSON.stringify(text) + ');');
};
Parser.prototype.tokenHandler = function(open, inner) {
var type = delimeters[open];
if (type === 'directive') {
this.compileTag(inner);
} else if (type === 'output') {
var extracted = this.extractEnt(inner, STRINGS, '@');
//replace || operators with ~
extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
//put back || operators
extracted.src = extracted.src.map(function(part) {
return part.split('~').join('||');
});
var parts = this.injectEnt(extracted, '@');
if (parts.length > 1) {
var filters = parts.slice(1).map(this.parseFilter.bind(this));
this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
} else {
this.push('filter(' + this.parseExpr(parts[0]) + ');');
}
}
};
Parser.prototype.compileTag = function(str) {
var directive = str.split(' ')[0];
var handler = tagHandlers[directive];
if (!handler) {
throw new Error('Invalid tag: ' + str);
}
handler.call(this, str.slice(directive.length).trim());
};
Parser.prototype.parseFilter = function(src) {
src = src.trim();
var match = src.match(/[:(]/);
var i = match ? match.index : -1;
if (i < 0) return JSON.stringify([src]);
var name = src.slice(0, i);
var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
args = this.parseExpr(args, {
terms: true
});
return '[' + JSON.stringify(name) + ',' + args + ']';
};
Parser.prototype.extractEnt = function(src, regex, placeholder) {
var subs = [],
isFunc = typeof placeholder == 'function';
src = src.replace(regex, function(str) {
var replacement = isFunc ? placeholder(str) : placeholder;
if (replacement) {
subs.push(str);
return replacement;
}
return str;
});
return {
src: src,
subs: subs
};
};
Parser.prototype.injectEnt = function(extracted, placeholder) {
var src = extracted.src,
subs = extracted.subs,
isArr = Array.isArray(src);
var arr = (isArr) ? src : [src];
var re = new RegExp('[' + placeholder + ']', 'g'),
i = 0;
arr.forEach(function(src, index) {
arr[index] = src.replace(re, function() {
return subs[i++];
});
});
return isArr ? arr : arr[0];
};
//replace complex literals without mistaking subscript notation with array literals
Parser.prototype.replaceComplex = function(s) {
var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
return this.injectEnt(parsed, 'v');
};
//parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
//valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
Parser.prototype.parseExpr = function(src, opts) {
opts = opts || {};
//extract string literals -> @
var parsed1 = this.extractEnt(src, STRINGS, '@');
//note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
parsed1.src = parsed1.src.replace(EOPS, function(s, before, op, after) {
return (op in operators) ? before + operators[op] + after : s;
});
//sub out non-string literals (numbers/true/false/null) -> #
// the distinction is necessary because @ can be object identifiers, # cannot
var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function(s) {
return (s in constants || NUMBER.test(s)) ? '#' : null;
});
//sub out object/variable identifiers -> i
var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
//remove white-space
parsed3.src = parsed3.src.replace(/\s+/g, '');
//the rest of this is simply to boil the expression down and check validity
var simplified = parsed3.src;
//sub out complex literals (objects/arrays) -> ~
// the distinction is necessary because @ and # can be subscripts but ~ cannot
while (simplified !== (simplified = this.replaceComplex(simplified)));
//now @ represents strings, # represents other primitives and ~ represents non-primitives
//replace complex variables (those with dot/subscript accessors) -> v
while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v')));
//empty subscript or complex variables in subscript, are not permitted
simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
//sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
simplified = simplified.replace(/[@#~v]/g, 'i');
//sub out operators
simplified = simplified.replace(OPERATORS, '%');
//allow 'not' unary operator
simplified = simplified.replace(/!+[i]/g, 'i');
var terms = opts.terms ? simplified.split(',') : [simplified];
terms.forEach(function(term) {
//simplify logical grouping
while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i')));
if (!term.match(/^i(%i)*/)) {
throw new Error('Invalid expression: ' + src + " " + term);
}
});
parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
parsed2.src = this.injectEnt(parsed3, 'i');
parsed1.src = this.injectEnt(parsed2, '#');
return this.injectEnt(parsed1, '@');
};
Parser.prototype.parseVar = function(src) {
var args = Array.prototype.slice.call(arguments);
var str = args.pop(),
index = args.pop();
//quote bare object identifiers (might be a reserved word like {while: 1})
if (src === 'i' && str.charAt(index + 1) === ':') {
return '"i"';
}
var parts = ['"i"'];
src.replace(ACCESSOR, function(part) {
if (part === '.i') {
parts.push('"i"');
} else if (part === '[i]') {
parts.push('get("i")');
} else {
parts.push(part.slice(1, -1));
}
});
return 'get(' + parts.join(',') + ')';
};
//escapes a name to be used as a javascript identifier
Parser.prototype.escName = function(str) {
return str.replace(/\W/g, function(s) {
return '$' + s.charCodeAt(0).toString(16);
});
};
Parser.prototype.parseQuoted = function(str) {
if (str.charAt(0) === "'") {
str = str.slice(1, -1).replace(/\\.|"/, function(s) {
if (s === "\\'") return "'";
return s.charAt(0) === '\\' ? s : ('\\' + s);
});
str = '"' + str + '"';
}
//todo: try/catch or deal with invalid characters (linebreaks, control characters)
return JSON.parse(str);
};
//the context 'this' inside tagHandlers is the parser instance
var tagHandlers = {
'if': function(expr) {
this.push('if (' + this.parseExpr(expr) + ') {');
this.nest.unshift('if');
},
'else': function() {
if (this.nest[0] === 'for') {
this.push('}, function() {');
} else {
this.push('} else {');
}
},
'elseif': function(expr) {
this.push('} else if (' + this.parseExpr(expr) + ') {');
},
'endif': function() {
this.nest.shift();
this.push('}');
},
'for': function(str) {
var i = str.indexOf(' in ');
var name = str.slice(0, i).trim();
var expr = str.slice(i + 4).trim();
this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
this.nest.unshift('for');
},
'endfor': function() {
this.nest.shift();
this.push('});');
},
'raw': function() {
this.rawMode = true;
},
'endraw': function() {
this.rawMode = false;
},
'set': function(stmt) {
var i = stmt.indexOf('=');
var name = stmt.slice(0, i).trim();
var expr = stmt.slice(i + 1).trim();
this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
},
'block': function(name) {
if (this.isParent) {
++this.parentBlocks;
var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
} else if (this.hasParent) {
this.isSilent = false;
++this.childBlocks;
blockName = 'block_' + (this.escName(name) || this.childBlocks);
this.push('function ' + blockName + '() {');
}
this.nest.unshift('block');
},
'endblock': function() {
this.nest.shift();
if (this.isParent) {
this.push('});');
} else if (this.hasParent) {
this.push('}');
this.isSilent = true;
}
},
'extends': function(name) {
name = this.parseQuoted(name);
var parentSrc = this.readTemplateFile(name);
this.isParent = true;
this.tokenize(parentSrc);
this.isParent = false;
this.hasParent = true;
//silence output until we enter a child block
this.isSilent = true;
},
'include': function(name) {
name = this.parseQuoted(name);
var incSrc = this.readTemplateFile(name);
this.isInclude = true;
this.tokenize(incSrc);
this.isInclude = false;
}
};
//liquid style
tagHandlers.assign = tagHandlers.set;
//python/django style
tagHandlers.elif = tagHandlers.elseif;
var getRuntime = function runtime(data, opts) {
var defaults = {
autoEscape: 'toJson'
};
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
var getKeys = Object.keys || function(obj) {
var keys = [];
for (var n in obj)
if (_hasOwnProperty.call(obj, n)) keys.push(n);
return keys;
};
var isArray = Array.isArray || function(obj) {
return _toString.call(obj) === '[object Array]';
};
var create = Object.create || function(obj) {
function F() {}
F.prototype = obj;
return new F();
};
var toString = function(val) {
if (val == null) return '';
return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
};
var extend = function(dest, src) {
var keys = getKeys(src);
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i];
dest[key] = src[key];
}
return dest;
};
//get a value, lexically, starting in current context; a.b -> get("a","b")
var get = function() {
var val, n = arguments[0],
c = stack.length;
while (c--) {
val = stack[c][n];
if (typeof val != 'undefined') break;
}
for (var i = 1, len = arguments.length; i < len; i++) {
if (val == null) continue;
n = arguments[i];
val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
}
return (val == null) ? '' : val;
};
var set = function(n, val) {
stack[stack.length - 1][n] = val;
};
var push = function(ctx) {
stack.push(ctx || {});
};
var pop = function() {
stack.pop();
};
var write = function(str) {
output.push(str);
};
var filter = function(val) {
for (var i = 1, len = arguments.length; i < len; i++) {
var arr = arguments[i],
name = arr[0],
filter = filters[name];
if (filter) {
arr[0] = val;
//now arr looks like [val, arg1, arg2]
val = filter.apply(data, arr);
} else {
throw new Error('Invalid filter: ' + name);
}
}
if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
//auto escape if not explicitly safe or already escaped
val = filters[opts.autoEscape].call(data, val);
}
output.push(val);
};
var each = function(obj, loopvar, fn1, fn2) {
if (obj == null) return;
var arr = isArray(obj) ? obj : getKeys(obj),
len = arr.length;
var ctx = {
loop: {
length: len,
first: arr[0],
last: arr[len - 1]
}
};
push(ctx);
for (var i = 0; i < len; i++) {
extend(ctx.loop, {
index: i + 1,
index0: i
});
fn1(ctx[loopvar] = arr[i]);
}
if (len === 0 && fn2) fn2();
pop();
};
var block = function(fn) {
push();
fn();
pop();
};
var render = function() {
return output.join('');
};
data = data || {};
opts = extend(defaults, opts || {});
var filters = extend({
html: function(val) {
return toString(val)
.split('&').join('&amp;')
.split('<').join('&lt;')
.split('>').join('&gt;')
.split('"').join('&quot;');
},
safe: function(val) {
return val;
},
toJson: function(val) {
if (typeof val === 'object') {
return JSON.stringify(val);
}
return toString(val);
}
}, opts.filters || {});
var stack = [create(data || {})],
output = [];
return {
get: get,
set: set,
push: push,
pop: pop,
write: write,
filter: filter,
each: each,
block: block,
render: render
};
};
var runtime;
jinja.compile = function(markup, opts) {
opts = opts || {};
var parser = new Parser();
parser.readTemplateFile = this.readTemplateFile;
var code = [];
code.push('function render($) {');
code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
code.push.apply(code, parser.parse(markup));
code.push('return $.render();');
code.push('}');
code = code.join('\n');
if (opts.runtime === false) {
var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
} else {
runtime = runtime || (runtime = getRuntime.toString());
fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
}
return {
render: fn
};
};
jinja.render = function(markup, data, opts) {
var tmpl = jinja.compile(markup);
return tmpl.render(data, opts);
};
jinja.templateFiles = [];
jinja.readTemplateFile = function(name) {
var templateFiles = this.templateFiles || [];
var templateFile = templateFiles[name];
if (templateFile == null) {
throw new Error('Template file not found: ' + name);
}
return templateFile;
};
/*!
* Helpers
*/
function trimLeft(str) {
return str.replace(LEADING_SPACE, '');
}
function trimRight(str) {
return str.replace(TRAILING_SPACE, '');
}
function matchAll(str, reg, fn) {
//copy as global
reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
var match;
while ((match = reg.exec(str))) {
var result = fn(match[0], match.index, str);
if (typeof result == 'number') {
reg.lastIndex = result;
}
}
}
}));

504
lib/jinja.min.js vendored

@ -0,0 +1,504 @@
(function(global, factory) {
typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.jinja = {}))
})(this, function(jinja) {
"use strict";
var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
var NUMBER = /^[+-]?\d+(\.\d+)?$/;
var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
var IDENTIFIERS = /[$_a-z][$\w]*/gi;
var VARIABLES = /i(\.i|\[[@#i]\])*/g;
var ACCESSOR = /(\.i|\[[@#i]\])/g;
var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
var LEADING_SPACE = /^\s+/;
var TRAILING_SPACE = /\s+$/;
var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
var TAGS = {
"{{{": /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
"{{": /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
"{%": /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
"{#": /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
};
var delimeters = {
"{%": "directive",
"{{": "output",
"{#": "comment"
};
var operators = {
and: "&&",
or: "||",
not: "!",
is: "==",
isnot: "!="
};
var constants = {
true: true,
false: false,
null: null
};
function Parser() {
this.nest = [];
this.compiled = [];
this.childBlocks = 0;
this.parentBlocks = 0;
this.isSilent = false
}
Parser.prototype.push = function(line) {
if (!this.isSilent) {
this.compiled.push(line)
}
};
Parser.prototype.parse = function(src) {
this.tokenize(src);
return this.compiled
};
Parser.prototype.tokenize = function(src) {
var lastEnd = 0,
parser = this,
trimLeading = false;
matchAll(src, START_TOKEN, function(open, index, src) {
var match = src.slice(index + open.length).match(TAGS[open]);
match = match ? match[0] : "";
var simplified = match.replace(STRINGS, "@");
if (!match || ~simplified.indexOf(open)) {
return index + 1
}
var inner = match.slice(0, 0 - open.length);
if (inner.charAt(0) === "-") var wsCollapseLeft = true;
if (inner.slice(-1) === "-") var wsCollapseRight = true;
inner = inner.replace(/^-|-$/g, "").trim();
if (parser.rawMode && open + inner !== "{%endraw") {
return index + 1
}
var text = src.slice(lastEnd, index);
lastEnd = index + open.length + match.length;
if (trimLeading) text = trimLeft(text);
if (wsCollapseLeft) text = trimRight(text);
if (wsCollapseRight) trimLeading = true;
if (open === "{{{") {
open = "{{";
inner += "|safe"
}
parser.textHandler(text);
parser.tokenHandler(open, inner)
});
var text = src.slice(lastEnd);
if (trimLeading) text = trimLeft(text);
this.textHandler(text)
};
Parser.prototype.textHandler = function(text) {
this.push("write(" + JSON.stringify(text) + ");")
};
Parser.prototype.tokenHandler = function(open, inner) {
var type = delimeters[open];
if (type === "directive") {
this.compileTag(inner)
} else if (type === "output") {
var extracted = this.extractEnt(inner, STRINGS, "@");
extracted.src = extracted.src.replace(/\|\|/g, "~").split("|");
extracted.src = extracted.src.map(function(part) {
return part.split("~").join("||")
});
var parts = this.injectEnt(extracted, "@");
if (parts.length > 1) {
var filters = parts.slice(1).map(this.parseFilter.bind(this));
this.push("filter(" + this.parseExpr(parts[0]) + "," + filters.join(",") + ");")
} else {
this.push("filter(" + this.parseExpr(parts[0]) + ");")
}
}
};
Parser.prototype.compileTag = function(str) {
var directive = str.split(" ")[0];
var handler = tagHandlers[directive];
if (!handler) {
throw new Error("Invalid tag: " + str)
}
handler.call(this, str.slice(directive.length).trim())
};
Parser.prototype.parseFilter = function(src) {
src = src.trim();
var match = src.match(/[:(]/);
var i = match ? match.index : -1;
if (i < 0) return JSON.stringify([src]);
var name = src.slice(0, i);
var args = src.charAt(i) === ":" ? src.slice(i + 1) : src.slice(i + 1, -1);
args = this.parseExpr(args, {
terms: true
});
return "[" + JSON.stringify(name) + "," + args + "]"
};
Parser.prototype.extractEnt = function(src, regex, placeholder) {
var subs = [],
isFunc = typeof placeholder == "function";
src = src.replace(regex, function(str) {
var replacement = isFunc ? placeholder(str) : placeholder;
if (replacement) {
subs.push(str);
return replacement
}
return str
});
return {
src: src,
subs: subs
}
};
Parser.prototype.injectEnt = function(extracted, placeholder) {
var src = extracted.src,
subs = extracted.subs,
isArr = Array.isArray(src);
var arr = isArr ? src : [src];
var re = new RegExp("[" + placeholder + "]", "g"),
i = 0;
arr.forEach(function(src, index) {
arr[index] = src.replace(re, function() {
return subs[i++]
})
});
return isArr ? arr : arr[0]
};
Parser.prototype.replaceComplex = function(s) {
var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, "v");
parsed.src = parsed.src.replace(NON_PRIMITIVES, "~");
return this.injectEnt(parsed, "v")
};
Parser.prototype.parseExpr = function(src, opts) {
opts = opts || {};
var parsed1 = this.extractEnt(src, STRINGS, "@");
parsed1.src = parsed1.src.replace(EOPS, function(s, before, op, after) {
return op in operators ? before + operators[op] + after : s
});
var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function(s) {
return s in constants || NUMBER.test(s) ? "#" : null
});
var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, "i");
parsed3.src = parsed3.src.replace(/\s+/g, "");
var simplified = parsed3.src;
while (simplified !== (simplified = this.replaceComplex(simplified)));
while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, "v")));
simplified = simplified.replace(/[iv]\[v?\]/g, "x");
simplified = simplified.replace(/[@#~v]/g, "i");
simplified = simplified.replace(OPERATORS, "%");
simplified = simplified.replace(/!+[i]/g, "i");
var terms = opts.terms ? simplified.split(",") : [simplified];
terms.forEach(function(term) {
while (term !== (term = term.replace(/\(i(%i)*\)/g, "i")));
if (!term.match(/^i(%i)*/)) {
throw new Error("Invalid expression: " + src + " " + term)
}
});
parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
parsed2.src = this.injectEnt(parsed3, "i");
parsed1.src = this.injectEnt(parsed2, "#");
return this.injectEnt(parsed1, "@")
};
Parser.prototype.parseVar = function(src) {
var args = Array.prototype.slice.call(arguments);
var str = args.pop(),
index = args.pop();
if (src === "i" && str.charAt(index + 1) === ":") {
return '"i"'
}
var parts = ['"i"'];
src.replace(ACCESSOR, function(part) {
if (part === ".i") {
parts.push('"i"')
} else if (part === "[i]") {
parts.push('get("i")')
} else {
parts.push(part.slice(1, -1))
}
});
return "get(" + parts.join(",") + ")"
};
Parser.prototype.escName = function(str) {
return str.replace(/\W/g, function(s) {
return "$" + s.charCodeAt(0).toString(16)
})
};
Parser.prototype.parseQuoted = function(str) {
if (str.charAt(0) === "'") {
str = str.slice(1, -1).replace(/\\.|"/, function(s) {
if (s === "\\'") return "'";
return s.charAt(0) === "\\" ? s : "\\" + s
});
str = '"' + str + '"'
}
return JSON.parse(str)
};
var tagHandlers = {
if: function(expr) {
this.push("if (" + this.parseExpr(expr) + ") {");
this.nest.unshift("if")
},
else: function() {
if (this.nest[0] === "for") {
this.push("}, function() {")
} else {
this.push("} else {")
}
},
elseif: function(expr) {
this.push("} else if (" + this.parseExpr(expr) + ") {")
},
endif: function() {
this.nest.shift();
this.push("}")
},
for: function(str) {
var i = str.indexOf(" in ");
var name = str.slice(0, i).trim();
var expr = str.slice(i + 4).trim();
this.push("each(" + this.parseExpr(expr) + "," + JSON.stringify(name) + ",function() {");
this.nest.unshift("for")
},
endfor: function() {
this.nest.shift();
this.push("});")
},
raw: function() {
this.rawMode = true
},
endraw: function() {
this.rawMode = false
},
set: function(stmt) {
var i = stmt.indexOf("=");
var name = stmt.slice(0, i).trim();
var expr = stmt.slice(i + 1).trim();
this.push("set(" + JSON.stringify(name) + "," + this.parseExpr(expr) + ");")
},
block: function(name) {
if (this.isParent) {
++this.parentBlocks;
var blockName = "block_" + (this.escName(name) || this.parentBlocks);
this.push("block(typeof " + blockName + ' == "function" ? ' + blockName + " : function() {")
} else if (this.hasParent) {
this.isSilent = false;
++this.childBlocks;
blockName = "block_" + (this.escName(name) || this.childBlocks);
this.push("function " + blockName + "() {")
}
this.nest.unshift("block")
},
endblock: function() {
this.nest.shift();
if (this.isParent) {
this.push("});")
} else if (this.hasParent) {
this.push("}");
this.isSilent = true
}
},
extends: function(name) {
name = this.parseQuoted(name);
var parentSrc = this.readTemplateFile(name);
this.isParent = true;
this.tokenize(parentSrc);
this.isParent = false;
this.hasParent = true;
this.isSilent = true
},
include: function(name) {
name = this.parseQuoted(name);
var incSrc = this.readTemplateFile(name);
this.isInclude = true;
this.tokenize(incSrc);
this.isInclude = false
}
};
tagHandlers.assign = tagHandlers.set;
tagHandlers.elif = tagHandlers.elseif;
var getRuntime = function runtime(data, opts) {
var defaults = {
autoEscape: "toJson"
};
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
var getKeys = Object.keys || function(obj) {
var keys = [];
for (var n in obj)
if (_hasOwnProperty.call(obj, n)) keys.push(n);
return keys
};
var isArray = Array.isArray || function(obj) {
return _toString.call(obj) === "[object Array]"
};
var create = Object.create || function(obj) {
function F() {}
F.prototype = obj;
return new F
};
var toString = function(val) {
if (val == null) return "";
return typeof val.toString == "function" ? val.toString() : _toString.call(val)
};
var extend = function(dest, src) {
var keys = getKeys(src);
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i];
dest[key] = src[key]
}
return dest
};
var get = function() {
var val, n = arguments[0],
c = stack.length;
while (c--) {
val = stack[c][n];
if (typeof val != "undefined") break
}
for (var i = 1, len = arguments.length; i < len; i++) {
if (val == null) continue;
n = arguments[i];
val = _hasOwnProperty.call(val, n) ? val[n] : typeof val._get == "function" ? val[n] = val._get(n) : null
}
return val == null ? "" : val
};
var set = function(n, val) {
stack[stack.length - 1][n] = val
};
var push = function(ctx) {
stack.push(ctx || {})
};
var pop = function() {
stack.pop()
};
var write = function(str) {
output.push(str)
};
var filter = function(val) {
for (var i = 1, len = arguments.length; i < len; i++) {
var arr = arguments[i],
name = arr[0],
filter = filters[name];
if (filter) {
arr[0] = val;
val = filter.apply(data, arr)
} else {
throw new Error("Invalid filter: " + name)
}
}
if (opts.autoEscape && name !== opts.autoEscape && name !== "safe") {
val = filters[opts.autoEscape].call(data, val)
}
output.push(val)
};
var each = function(obj, loopvar, fn1, fn2) {
if (obj == null) return;
var arr = isArray(obj) ? obj : getKeys(obj),
len = arr.length;
var ctx = {
loop: {
length: len,
first: arr[0],
last: arr[len - 1]
}
};
push(ctx);
for (var i = 0; i < len; i++) {
extend(ctx.loop, {
index: i + 1,
index0: i
});
fn1(ctx[loopvar] = arr[i])
}
if (len === 0 && fn2) fn2();
pop()
};
var block = function(fn) {
push();
fn();
pop()
};
var render = function() {
return output.join("")
};
data = data || {};
opts = extend(defaults, opts || {});
var filters = extend({
html: function(val) {
return toString(val).split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;")
},
safe: function(val) {
return val
},
toJson: function(val) {
if (typeof val === "object") {
return JSON.stringify(val)
}
return toString(val)
}
}, opts.filters || {});
var stack = [create(data || {})],
output = [];
return {
get: get,
set: set,
push: push,
pop: pop,
write: write,
filter: filter,
each: each,
block: block,
render: render
}
};
var runtime;
jinja.compile = function(markup, opts) {
opts = opts || {};
var parser = new Parser;
parser.readTemplateFile = this.readTemplateFile;
var code = [];
code.push("function render($) {");
code.push("var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;");
code.push.apply(code, parser.parse(markup));
code.push("return $.render();");
code.push("}");
code = code.join("\n");
if (opts.runtime === false) {
var fn = new Function("data", "options", "return (" + code + ")(runtime(data, options))")
} else {
runtime = runtime || (runtime = getRuntime.toString());
fn = new Function("data", "options", "return (" + code + ")((" + runtime + ")(data, options))")
}
return {
render: fn
}
};
jinja.render = function(markup, data, opts) {
var tmpl = jinja.compile(markup);
return tmpl.render(data, opts)
};
jinja.templateFiles = [];
jinja.readTemplateFile = function(name) {
var templateFiles = this.templateFiles || [];
var templateFile = templateFiles[name];
if (templateFile == null) {
throw new Error("Template file not found: " + name)
}
return templateFile
};
function trimLeft(str) {
return str.replace(LEADING_SPACE, "")
}
function trimRight(str) {
return str.replace(TRAILING_SPACE, "")
}
function matchAll(str, reg, fn) {
reg = new RegExp(reg.source, "g" + (reg.ignoreCase ? "i" : "") + (reg.multiline ? "m" : ""));
var match;
while (match = reg.exec(str)) {
var result = fn(match[0], match.index, str);
if (typeof result == "number") {
reg.lastIndex = result
}
}
}
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1439
lib/pako.min.js vendored

File diff suppressed because it is too large Load Diff

3057
lib/quark.min.js vendored

File diff suppressed because it is too large Load Diff

1
lib/uri.min.js vendored

File diff suppressed because one or more lines are too long

@ -0,0 +1,329 @@
# coding=utf-8
# !/usr/bin/python
"""
作者 丢丢喵推荐 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容
====================Diudiumiao====================
"""
from Crypto.Util.Padding import unpad
from Crypto.Util.Padding import pad
from urllib.parse import unquote
from Crypto.Cipher import ARC4
from urllib.parse import quote
from base.spider import Spider
from Crypto.Cipher import AES
from datetime import datetime
from bs4 import BeautifulSoup
from base64 import b64decode
import urllib.request
import urllib.parse
import datetime
import binascii
import requests
import base64
import json
import time
import sys
import re
import os
sys.path.append('..')
xurl = "https://djw1.com"
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 extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''):
if pl == 3:
plx = []
while True:
start_index = text.find(start_str)
if start_index == -1:
break
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
break
middle_text = text[start_index + len(start_str):end_index]
plx.append(middle_text)
text = text.replace(start_str + middle_text + end_str, '')
if len(plx) > 0:
purl = ''
for i in range(len(plx)):
matches = re.findall(start_index1, plx[i])
output = ""
for match in matches:
match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1])
if match3:
number = match3.group(1)
else:
number = 0
if 'http' not in match[0]:
output += f"#{match[1]}${number}{xurl}{match[0]}"
else:
output += f"#{match[1]}${number}{match[0]}"
output = output[1:]
purl = purl + output + "$$$"
purl = purl[:-3]
return purl
else:
return ""
else:
start_index = text.find(start_str)
if start_index == -1:
return ""
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
return ""
if pl == 0:
middle_text = text[start_index + len(start_str):end_index]
return middle_text.replace("\\", "")
if pl == 1:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
jg = ' '.join(matches)
return jg
if pl == 2:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
new_list = [f'{item}' for item in matches]
jg = '$$$'.join(new_list)
return jg
def homeContent(self, filter):
result = {"class": []}
detail = requests.get(url=xurl + "/all/", headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('section', class_="container items")
for soup in soups:
vods = soup.find_all('li')
for vod in vods:
id = vod.find('a')['href']
name = vod.text.strip()
result["class"].append({"type_id": id, "type_name": "" + name})
return result
def homeVideoContent(self):
pass
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
url = f'{cid}page/{str(page)}/'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('section', class_="container items")
for soup in soups:
vods = soup.find_all('li')
for vod in vods:
name = vod.find('img')['alt']
ids = vod.find('a', class_="image-line")
id = ids['href']
pic = vod.find('img')['src']
remark = self.extract_middle_text(str(vod), 'class="remarks light">', '<', 0)
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": '▶️' + remark
}
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]
result = {}
videos = []
xianlu = ''
bofang = ''
if 'http' not in did:
did = xurl + did
res = requests.get(url=did, headers=headerx)
res.encoding = "utf-8"
res = res.text
doc = BeautifulSoup(res, "lxml")
url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt'
response = requests.get(url)
response.encoding = 'utf-8'
code = response.text
name = self.extract_middle_text(code, "s1='", "'", 0)
Jumps = self.extract_middle_text(code, "s2='", "'", 0)
content = self.extract_middle_text(res,'class="info-detail">','<', 0)
remarks = self.extract_middle_text(res, 'class="info-mark">', '<', 0)
year = self.extract_middle_text(res, 'class="info-addtime">', '<', 0)
if name not in content:
bofang = Jumps
xianlu = '1'
else:
soups = doc.find('div', class_="ep-list-items")
soup = soups.find_all('a')
for sou in soup:
id = sou['href']
name = sou.text.strip()
bofang = bofang + name + '$' + id + '#'
bofang = bofang[:-1]
xianlu = '专线'
videos.append({
"vod_id": did,
"vod_remarks": remarks,
"vod_year": year,
"vod_content": content,
"vod_play_from": xianlu,
"vod_play_url": bofang
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
res = requests.get(url=id, headers=headerx)
res.encoding = "utf-8"
res = res.text
url = self.extract_middle_text(res, '"wwm3u8":"', '"', 0).replace('\\', '')
result = {}
result["parse"] = 0
result["playUrl"] = ''
result["url"] = url
result["header"] = headerx
return result
def searchContentPage(self, key, quick, pg):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
url = f'{xurl}/search/{key}/page/{str(page)}/'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('section', class_="container items")
for soup in soups:
vods = soup.find_all('li')
for vod in vods:
name = vod.find('img')['alt']
ids = vod.find('a', class_="image-line")
id = ids['href']
pic = vod.find('img')['src']
remark = self.extract_middle_text(str(vod), 'class="remarks light">', '<', 0)
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": '▶️' + remark
}
videos.append(video)
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def searchContent(self, key, quick, pg="1"):
return self.searchContentPage(key, quick, '1')
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

@ -0,0 +1,314 @@
# coding=utf-8
# !/usr/bin/python
"""
作者 丢丢喵 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容
====================Diudiumiao====================
"""
from Crypto.Util.Padding import unpad
from Crypto.Util.Padding import pad
from urllib.parse import unquote
from Crypto.Cipher import ARC4
from urllib.parse import quote
from base.spider import Spider
from Crypto.Cipher import AES
from datetime import datetime
from bs4 import BeautifulSoup
from base64 import b64decode
import urllib.request
import urllib.parse
import datetime
import binascii
import requests
import base64
import json
import time
import sys
import re
import os
sys.path.append('..')
xurl = "https://search.bilibili.com"
xurl1 = "https://api.live.bilibili.com"
headerx = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
}
class Spider(Spider):
global xurl
global xurl1
global headerx
def getName(self):
return "首页"
def init(self, extend):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''):
if pl == 3:
plx = []
while True:
start_index = text.find(start_str)
if start_index == -1:
break
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
break
middle_text = text[start_index + len(start_str):end_index]
plx.append(middle_text)
text = text.replace(start_str + middle_text + end_str, '')
if len(plx) > 0:
purl = ''
for i in range(len(plx)):
matches = re.findall(start_index1, plx[i])
output = ""
for match in matches:
match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1])
if match3:
number = match3.group(1)
else:
number = 0
if 'http' not in match[0]:
output += f"#{match[1]}${number}{xurl}{match[0]}"
else:
output += f"#{match[1]}${number}{match[0]}"
output = output[1:]
purl = purl + output + "$$$"
purl = purl[:-3]
return purl
else:
return ""
else:
start_index = text.find(start_str)
if start_index == -1:
return ""
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
return ""
if pl == 0:
middle_text = text[start_index + len(start_str):end_index]
return middle_text.replace("\\", "")
if pl == 1:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
jg = ' '.join(matches)
return jg
if pl == 2:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
new_list = [f'{item}' for item in matches]
jg = '$$$'.join(new_list)
return jg
def homeContent(self, filter):
result = {}
result = {"class": [{"type_id": "", "type_name": "舞蹈"},
{"type_id": "音乐", "type_name": "音乐"},
{"type_id": "手游", "type_name": "手游"},
{"type_id": "网游", "type_name": "网游"},
{"type_id": "单机游戏", "type_name": "单机游戏"},
{"type_id": "虚拟主播", "type_name": "虚拟主播"},
{"type_id": "电台", "type_name": "电台"},
{"type_id": "体育", "type_name": "体育"},
{"type_id": "聊天", "type_name": "聊天"},
{"type_id": "娱乐", "type_name": "娱乐"},
{"type_id": "电影", "type_name": "影视"},
{"type_id": "新闻", "type_name": "新闻"}]
}
return result
def homeVideoContent(self):
pass
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
url = f'{xurl}/live?keyword={cid}&page={str(page)}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('div', class_="video-list-item")
for vod in soups:
names = vod.find('h3', class_="bili-live-card__info--tit")
name = names.text.strip().replace('直播中', '')
id = names.find('a')['href']
id = self.extract_middle_text(id, 'bilibili.com/', '?', 0)
pic = vod.find('img')['src']
if 'http' not in pic:
pic = "https:" + pic
remarks = vod.find('a', class_="bili-live-card__info--uname")
remark = remarks.text.strip()
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
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]
result = {}
videos = []
xianlu = ''
bofang = ''
url = f'{xurl1}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={did}&platform=web&protocol=0,1&format=0,1,2&codec=0,1'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
data = detail.json()
content = '欢迎观看哔哩直播'
setup = data['data']['playurl_info']['playurl']['stream']
nam = 0
for vod in setup:
try:
host = vod['format'][nam]['codec'][0]['url_info'][1]['host']
except (KeyError, IndexError):
continue
base = vod['format'][nam]['codec'][0]['base_url']
extra = vod['format'][nam]['codec'][0]['url_info'][1]['extra']
id = host + base + extra
nam = nam + 1
namc = f"{nam}号线路"
bofang = bofang + namc + '$' + id + '#'
bofang = bofang[:-1]
xianlu = '哔哩专线'
videos.append({
"vod_id": did,
"vod_content": content,
"vod_play_from": xianlu,
"vod_play_url": bofang
})
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 searchContentPage(self, key, quick, pg):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
url = f'{xurl}/live?keyword={key}&page={str(page)}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('div', class_="video-list-item")
for vod in soups:
names = vod.find('h3', class_="bili-live-card__info--tit")
name = names.text.strip().replace('直播中', '')
id = names.find('a')['href']
id = self.extract_middle_text(id, 'bilibili.com/', '?', 0)
pic = vod.find('img')['src']
if 'http' not in pic:
pic = "https:" + pic
remarks = vod.find('a', class_="bili-live-card__info--uname")
remark = remarks.text.strip()
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def searchContent(self, key, quick, pg="1"):
return self.searchContentPage(key, quick, '1')
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

@ -0,0 +1,343 @@
# coding = utf-8
# !/usr/bin/python
"""
"""
from Crypto.Util.Padding import unpad
from Crypto.Util.Padding import pad
from urllib.parse import unquote
from Crypto.Cipher import ARC4
from urllib.parse import quote
from base.spider import Spider
from Crypto.Cipher import AES
from bs4 import BeautifulSoup
from base64 import b64decode
import urllib.request
import urllib.parse
import binascii
import requests
import base64
import json
import time
import sys
import re
import os
sys.path.append('..')
xurl = "https://app.whjzjx.cn"
headers = {
'User-Agent': 'Linux; Android 12; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Mobile Safari/537.36'
}
headerf = {
"platform": "1",
"user_agent": "Mozilla/5.0 (Linux; Android 9; V1938T Build/PQ3A.190705.08211809; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Safari/537.36",
"content-type": "application/json; charset=utf-8"
}
times = int(time.time() * 1000)
data = {
"device": "2a50580e69d38388c94c93605241fb306",
"package_name": "com.jz.xydj",
"android_id": "ec1280db12795506",
"install_first_open": True,
"first_install_time": 1752505243345,
"last_update_time": 1752505243345,
"report_link_url": "",
"authorization": "",
"timestamp": times
}
plain_text = json.dumps(data, separators=(',', ':'), ensure_ascii=False)
key = "B@ecf920Od8A4df7"
key_bytes = key.encode('utf-8')
plain_bytes = plain_text.encode('utf-8')
cipher = AES.new(key_bytes, AES.MODE_ECB)
padded_data = pad(plain_bytes, AES.block_size)
ciphertext = cipher.encrypt(padded_data)
encrypted = base64.b64encode(ciphertext).decode('utf-8')
response = requests.post("https://u.shytkjgs.com/user/v3/account/login", headers=headerf, data=encrypted)
response_data = response.json()
Authorization = response_data['data']['token']
headerx = {
'authorization': Authorization,
'platform': '1',
'version_name': '3.8.3.1'
}
class Spider(Spider):
global xurl
global headerx
global headers
def getName(self):
return "首页"
def init(self, extend):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''):
if pl == 3:
plx = []
while True:
start_index = text.find(start_str)
if start_index == -1:
break
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
break
middle_text = text[start_index + len(start_str):end_index]
plx.append(middle_text)
text = text.replace(start_str + middle_text + end_str, '')
if len(plx) > 0:
purl = ''
for i in range(len(plx)):
matches = re.findall(start_index1, plx[i])
output = ""
for match in matches:
match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1])
if match3:
number = match3.group(1)
else:
number = 0
if 'http' not in match[0]:
output += f"#{match[1]}${number}{xurl}{match[0]}"
else:
output += f"#{match[1]}${number}{match[0]}"
output = output[1:]
purl = purl + output + "$$$"
purl = purl[:-3]
return purl
else:
return ""
else:
start_index = text.find(start_str)
if start_index == -1:
return ""
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
return ""
if pl == 0:
middle_text = text[start_index + len(start_str):end_index]
return middle_text.replace("\\", "")
if pl == 1:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
jg = ' '.join(matches)
return jg
if pl == 2:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
new_list = [f'{item}' for item in matches]
jg = '$$$'.join(new_list)
return jg
def homeContent(self, filter):
result = {}
result = {"class": [{"type_id": "1", "type_name": "剧场"},
{"type_id": "3", "type_name": "新剧"},
{"type_id": "2", "type_name": "热播"},
{"type_id": "7", "type_name": "星选"},
{"type_id": "5", "type_name": "阳光"}],
}
return result
def homeVideoContent(self):
videos = []
url= f'{xurl}/v1/theater/home_page?theater_class_id=1&class2_id=4&page_num=1&page_size=24'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
if detail.status_code == 200:
data = detail.json()
for vod in data['data']['list']:
name = vod['theater']['title']
id = vod['theater']['id']
pic = vod['theater']['cover_url']
remark = vod['theater']['play_amount_str']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result = {'list': videos}
return result
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
url = f'{xurl}/v1/theater/home_page?theater_class_id={cid}&page_num={pg}&page_size=24'
detail = requests.get(url=url,headers=headerx)
detail.encoding = "utf-8"
if detail.status_code == 200:
data = detail.json()
for vod in data['data']['list']:
name = vod['theater']['title']
id = vod['theater']['id']
pic = vod['theater']['cover_url']
remark = vod['theater']['theme']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
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]
result = {}
videos = []
xianlu = ''
bofang = ''
url = f'{xurl}/v2/theater_parent/detail?theater_parent_id={did}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
if detail.status_code == 200:
data = detail.json()
url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt'
response = requests.get(url)
response.encoding = 'utf-8'
code = response.text
name = self.extract_middle_text(code, "s1='", "'", 0)
Jumps = self.extract_middle_text(code, "s2='", "'", 0)
content = '剧情:' + data['data']['introduction']
area = data['data']['desc_tags'][0]
remarks = data['data']['filing']
# 修复剧集只有一集的问题 - 检查theaters数据是否存在且不为空
if 'theaters' in data['data'] and data['data']['theaters']:
for sou in data['data']['theaters']:
id = sou['son_video_url']
name = sou['num']
bofang = bofang + str(name) + '$' + id + '#'
bofang = bofang[:-1] if bofang.endswith('#') else bofang
xianlu = '星芽'
else:
# 如果没有theaters数据检查是否有单个视频URL
if 'video_url' in data['data'] and data['data']['video_url']:
bofang = '1$' + data['data']['video_url']
xianlu = '星芽'
else:
bofang = Jumps
xianlu = '1'
videos.append({
"vod_id": did,
"vod_content": content,
"vod_remarks": remarks,
"vod_area": area,
"vod_play_from": xianlu,
"vod_play_url": bofang
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
result["parse"] = 0
result["playUrl"] = ''
result["url"] = id
result["header"] = headers
return result
def searchContentPage(self, key, quick, page):
result = {}
videos = []
payload = {
"text": key
}
url = f"{xurl}/v3/search"
detail = requests.post(url=url, headers=headerx, json=payload)
if detail.status_code == 200:
detail.encoding = "utf-8"
data = detail.json()
for vod in data['data']['theater']['search_data']:
name = vod['title']
id = vod['id']
pic = vod['cover_url']
remark = vod['score_str']
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result['list'] = videos
result['page'] = page
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def searchContent(self, key, quick, pg="1"):
return self.searchContentPage(key, quick, '1')
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

@ -0,0 +1,240 @@
import re
import sys
from base64 import b64encode, b64decode
from urllib.parse import quote, unquote
from pyquery import PyQuery as pq
from requests import Session, adapters
from urllib3.util.retry import Retry
from concurrent.futures import ThreadPoolExecutor, as_completed
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.host = "https://www.22a5.com"
self.session = Session()
adapter = adapters.HTTPAdapter(max_retries=Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500, 502, 503, 504]), pool_connections=20, pool_maxsize=50)
self.session.mount("http://", adapter)
self.session.mount("https://", adapter)
self.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"}
self.session.headers.update(self.headers)
def getName(self): return "爱听音乐"
def isVideoFormat(self, url): return bool(re.search(r'\.(m3u8|mp4|mp3|m4a|flv)(\?|$)', url or "", re.I))
def manualVideoCheck(self): return False
def destroy(self): self.session.close()
def homeContent(self, filter):
classes = [{"type_name": n, "type_id": i} for n, i in [("歌手","/singerlist/index/index/index/index.html"), ("TOP榜单","/list/top.html"), ("新歌榜","/list/new.html"), ("电台","/radiolist/index.html"), ("高清MV","/mvlist/oumei.html"), ("专辑","/albumlist/index.html"), ("歌单","/playtype/index.html")]]
filters = {p: d for p in [c["type_id"] for c in classes if "singer" not in c["type_id"]] if (d := self._fetch_filters(p))}
if "/radiolist/index.html" not in filters:
filters["/radiolist/index.html"] = [{"key": "id", "name": "分类", "value": [{"n": n, "v": v} for n,v in zip(["最新","最热","有声小说","相声","音乐","情感","国漫","影视","脱口秀","历史","儿童","教育","八卦","推理","头条"], ["index","hot","novel","xiangyi","music","emotion","game","yingshi","talkshow","history","children","education","gossip","tuili","headline"])]}]
filters["/singerlist/index/index/index/index.html"] = [
{"key": "area", "name": "地区", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("华语","huayu"),("欧美","oumei"),("韩国","hanguo"),("日本","ribrn")]]},
{"key": "sex", "name": "性别", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("","male"),("","girl"),("组合","band")]]},
{"key": "genre", "name": "流派", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("流行","liuxing"),("电子","dianzi"),("摇滚","yaogun"),("嘻哈","xiha"),("R&B","rb"),("民谣","minyao"),("爵士","jueshi"),("古典","gudian")]]},
{"key": "char", "name": "字母", "value": [{"n": n, "v": v} for n,v in [("全部","index")] + [{"n": chr(i), "v": chr(i).lower()} for i in range(65, 91)]]}
]
return {"class": classes, "filters": filters, "list": []}
def homeVideoContent(self): return {"list": []}
def categoryContent(self, tid, pg, filter, extend):
pg = int(pg or 1)
url = tid
if "/singerlist/" in tid:
p = tid.split('/')
if len(p) >= 6:
url = "/".join(p[:2] + [extend.get(k, p[i]) for i, k in enumerate(["area", "sex", "genre"], 2)] + [f"{extend.get('char', 'index')}.html"])
elif "id" in extend and extend["id"] not in ["index", "top"]:
url = tid.replace("index.html", f"{extend['id']}.html").replace("top.html", f"{extend['id']}.html")
if url == tid: url = f"{tid.rsplit('/', 1)[0]}/{extend['id']}.html"
if pg > 1:
sep = "/" if any(x in url for x in ["/singerlist/", "/radiolist/", "/mvlist/", "/playtype/", "/list/"]) else "_"
url = re.sub(r'(_\d+|/\d+)?\.html$', f'{sep}{pg}.html', url)
doc = self.getpq(url)
return {"list": self._parse_list(doc(".play_list li, .video_list li, .pic_list li, .singer_list li, .ali li, .layui-row li, .base_l li"), tid), "page": pg, "pagecount": 9999, "limit": 90, "total": 999999}
def searchContent(self, key, quick, pg="1"):
return {"list": self._parse_list(self.getpq(f"/so/{quote(key)}/{pg}.html")(".base_l li, .play_list li"), "search"), "page": int(pg)}
def detailContent(self, ids):
url = self._abs(ids[0])
doc = self.getpq(url)
vod = {"vod_id": url, "vod_name": self._clean(doc("h1").text() or doc("title").text()), "vod_pic": self._abs(doc(".djpg img, .pic img, .djpic img").attr("src")), "vod_play_from": "爱听音乐", "vod_content": ""}
if any(x in url for x in ["/playlist/", "/album/", "/list/", "/singer/", "/special/", "/radio/", "/radiolist/"]):
eps = self._get_eps(doc)
page_urls = {self._abs(a.attr("href")) for a in doc(".page a, .dede_pages a, .pagelist a").items() if a.attr("href") and "javascript" not in a.attr("href")} - {url}
if page_urls:
with ThreadPoolExecutor(max_workers=5) as ex:
for r in as_completed([ex.submit(lambda u: self._get_eps(self.getpq(u)), u) for u in sorted(page_urls, key=lambda x: int(re.search(r'[_\/](\d+)\.html', x).group(1)) if re.search(r'[_\/](\d+)\.html', x) else 0)]):
eps.extend(r.result() or [])
if eps:
vod.update({"vod_play_from": "播放列表", "vod_play_url": "#".join(eps)})
return {"list": [vod]}
play_list = []
if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url):
lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}"
play_list = [f"播放${self.e64('0@@@@' + url + '|||' + lrc_url)}"]
elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url):
with ThreadPoolExecutor(max_workers=3) as ex:
fs = {ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}): n for n, q in [("蓝光", 1080), ("超清", 720), ("高清", 480)]}
play_list = [f"{fs[f]}${self.e64('0@@@@'+u)}" for f in as_completed(fs) if (u := f.result())]
play_list.sort(key=lambda x: {"":0, "":1, "":2}.get(x[0], 3))
vod["vod_play_url"] = "#".join(play_list) if play_list else f"解析失败${self.e64('1@@@@'+url)}"
return {"list": [vod]}
def playerContent(self, flag, id, vipFlags):
raw = self.d64(id).split("@@@@")[-1]
url, subt = raw.split("|||") if "|||" in raw else (raw, "")
url = url.replace(r"\/", "/")
if ".html" in url and not self.isVideoFormat(url):
if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url):
if r_url := self._api("/js/play.php", method="POST", data={"id": mid.group(2), "type": "music"}, headers={"Referer": url.replace("http://","https://"), "X-Requested-With": "XMLHttpRequest"}):
url = r_url if ".php" not in r_url else url
elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url):
with ThreadPoolExecutor(max_workers=3) as ex:
for f in as_completed([ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}) for q in [1080, 720, 480]]):
if v_url := f.result():
url = v_url; break
result = {"parse": 0, "url": url, "header": {"User-Agent": self.headers["User-Agent"]}}
if "22a5.com" in url: result["header"]["Referer"] = self.host + "/"
# OK影视3.6.5+支持LRC格式滚动歌词
if subt:
try:
r = self.session.get(subt, headers={"Referer": self.host + "/"}, timeout=5)
lrc_content = r.text
if lrc_content:
# 过滤广告内容
lrc_content = self._filter_lrc_ads(lrc_content)
result["lrc"] = lrc_content
except:
pass
return result
def _filter_lrc_ads(self, lrc_text):
"""过滤LRC歌词中的广告内容"""
lines = lrc_text.splitlines()
filtered_lines = []
# 广告关键词模式
ad_patterns = [
r'欢迎来访.*',
r'本站.*',
r'.*广告.*',
r'QQ群.*',
r'.*www\..*',
r'.*http.*',
r'.*\.com.*',
r'.*\.cn.*',
r'.*\.net.*',
r'.*音乐网.*',
r'.*提供.*',
r'.*下载.*',
]
for line in lines:
# 保留时间标签行,但过滤掉广告文本
if re.match(r'\[\d{2}:\d{2}', line):
# 检查是否包含广告
is_ad = False
for pattern in ad_patterns:
if re.search(pattern, line, re.IGNORECASE):
is_ad = True
break
if not is_ad:
filtered_lines.append(line)
else:
# 非时间标签行(可能是元数据),保留
filtered_lines.append(line)
return '\n'.join(filtered_lines)
def localProxy(self, param):
url = unquote(param.get("url", ""))
type_ = param.get("type")
if type_ == "img":
return [200, "image/jpeg", self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5).content, {}]
elif type_ == "lrc":
try:
r = self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5)
# 同时过滤代理中的广告
lrc_content = r.text
lrc_content = self._filter_lrc_ads(lrc_content)
return [200, "application/octet-stream", lrc_content.encode('utf-8'), {}]
except:
return [404, "text/plain", "Error", {}]
return None
def _parse_list(self, items, tid=""):
res = []
for li in items.items():
a = li("a").eq(0)
if not (href := a.attr("href")) or href == "/" or any(x in href for x in ["/user/", "/login/", "javascript"]): continue
if not (name := self._clean(li(".name").text() or a.attr("title") or a.text())): continue
pic = self._abs((li("img").attr("src") or "").replace('120', '500'))
res.append({"vod_id": self._abs(href), "vod_name": name, "vod_pic": f"{self.getProxyUrl()}&url={pic}&type=img" if pic else "", "style": {"type": "oval" if "/singer/" in href else ("list" if any(x in tid for x in ["/list/", "/playtype/", "/albumlist/"]) else "rect"), "ratio": 1 if "/singer/" in href else 1.33}})
return res
def _get_eps(self, doc):
eps = []
for li in doc(".play_list li, .song_list li, .music_list li").items():
if not (a := li("a").eq(0)).attr("href") or not re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', a.attr("href")): continue
full_url = self._abs(a.attr("href"))
lrc_part = ""
mid = re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', full_url)
if mid:
lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}"
lrc_part = f"|||{lrc_url}"
eps.append(f"{self._clean(a.text() or li('.name').text())}${self.e64('0@@@@' + full_url + lrc_part)}")
return eps
def _clean(self, text): return re.sub(r'(爱玩音乐网|视频下载说明|视频下载地址|www\.2t58\.com|MP3免费下载|LRC歌词下载|全部歌曲|\[第\d+页\]|刷新|每日推荐|最新|热门|推荐|MV|高清|无损)', '', text or "", flags=re.I).strip()
def _fetch_filters(self, url):
doc, filters = self.getpq(url), []
for i, group in enumerate([doc(s) for s in [".ilingku_fl", ".class_list", ".screen_list", ".box_list", ".nav_list"] if doc(s)]):
opts, seen = [{"n": "全部", "v": "top" if "top" in url else "index"}], set()
for a in group("a").items():
if (v := (a.attr("href") or "").split("?")[0].rstrip('/').split('/')[-1].replace('.html','')) and v not in seen:
opts.append({"n": a.text().strip(), "v": v}); seen.add(v)
if len(opts) > 1: filters.append({"key": f"id{i}" if i else "id", "name": "分类", "value": opts})
return filters
def _api(self, path, params=None, method="GET", headers=None, data=None):
try:
h = self.headers.copy()
if headers: h.update(headers)
r = (self.session.post if method == "POST" else self.session.get)(f"{self.host}{path}", params=params, data=data, headers=h, timeout=10, allow_redirects=False)
if loc := r.headers.get("Location"): return self._abs(loc.strip())
return self._abs(r.json().get("url", "").replace(r"\/", "/")) or (r.text.strip() if r.text.strip().startswith("http") else "")
except: return ""
def getpq(self, url):
import time
for _ in range(2):
try: return pq(self.session.get(self._abs(url), timeout=5).text)
except: time.sleep(0.1)
return pq("<html></html>")
def _abs(self, url): return url if url.startswith("http") else (f"{self.host}{'/' if not url.startswith('/') else ''}{url}" if url else "")
def e64(self, text): return b64encode(text.encode("utf-8")).decode("utf-8")
def d64(self, text): return b64decode(text.encode("utf-8")).decode("utf-8")

@ -0,0 +1,767 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import re
import sys
import time
from base64 import b64decode, b64encode
from urllib.parse import parse_qs
import requests
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
from concurrent.futures import ThreadPoolExecutor
class Spider(Spider):
def init(self, extend=""):
tid = 'douyin'
headers = self.gethr(0, tid)
response = requests.head(self.hosts[tid], headers=headers)
ttwid = response.cookies.get('ttwid')
headers.update({
'authority': self.hosts[tid].split('//')[-1],
'cookie': f'ttwid={ttwid}' if ttwid else ''
})
self.dyheaders = headers
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
headers = [
{
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
},
{
"User-Agent": "Dart/3.4 (dart:io)"
}
]
excepturl = 'https://www.baidu.com'
hosts = {
"huya": ["https://www.huya.com","https://mp.huya.com"],
"douyin": "https://live.douyin.com",
"douyu": "https://www.douyu.com",
"wangyi": "https://cc.163.com",
"bili": ["https://api.live.bilibili.com", "https://api.bilibili.com"]
}
referers = {
"huya": "https://live.cdn.huya.com",
"douyin": "https://live.douyin.com",
"douyu": "https://m.douyu.com",
"bili": "https://live.bilibili.com"
}
playheaders = {
"wangyi": {
"User-Agent": "ExoPlayer",
"Connection": "Keep-Alive",
"Icy-MetaData": "1"
},
"bili": {
'Accept': '*/*',
'Icy-MetaData': '1',
'referer': referers['bili'],
'user-agent': headers[0]['User-Agent']
},
'douyin': {
'User-Agent': 'libmpv',
'Icy-MetaData': '1'
},
'huya': {
'User-Agent': 'ExoPlayer',
'Connection': 'Keep-Alive',
'Icy-MetaData': '1'
},
'douyu': {
'User-Agent': 'libmpv',
'Icy-MetaData': '1'
}
}
def process_bili(self):
try:
self.blfdata = self.fetch(
f'{self.hosts["bili"][0]}/room/v1/Area/getList?need_entrance=1&parent_id=0',
headers=self.gethr(0, 'bili')
).json()
return ('bili', [{'key': 'cate', 'name': '分类',
'value': [{'n': i['name'], 'v': str(i['id'])}
for i in self.blfdata['data']]}])
except Exception as e:
print(f"bili处理错误: {e}")
return 'bili', None
def process_douyin(self):
try:
data = self.getpq(self.hosts['douyin'], headers=self.dyheaders)('script')
for i in data.items():
if 'categoryData' in i.text():
content = i.text()
start = content.find('{')
end = content.rfind('}') + 1
if start != -1 and end != -1:
json_str = content[start:end]
json_str = json_str.replace('\\"', '"')
try:
self.dyifdata = json.loads(json_str)
return ('douyin', [{'key': 'cate', 'name': '分类',
'value': [{'n': i['partition']['title'],
'v': f"{i['partition']['id_str']}@@{i['partition']['title']}"}
for i in self.dyifdata['categoryData']]}])
except json.JSONDecodeError as e:
print(f"douyin解析错误: {e}")
return 'douyin', None
except Exception as e:
print(f"douyin请求或处理错误: {e}")
return 'douyin', None
def process_douyu(self):
try:
self.dyufdata = self.fetch(
f'{self.referers["douyu"]}/api/cate/list',
headers=self.headers[1]
).json()
return ('douyu', [{'key': 'cate', 'name': '分类',
'value': [{'n': i['cate1Name'], 'v': str(i['cate1Id'])}
for i in self.dyufdata['data']['cate1Info']]}])
except Exception as e:
print(f"douyu错误: {e}")
return 'douyu', None
def homeContent(self, filter):
result = {}
cateManual = {
"虎牙": "huya",
"抖音": "douyin",
"斗鱼": "douyu",
"网易": "wangyi"
}
classes = []
filters = {
'huya': [{'key': 'cate', 'name': '分类',
'value': [{'n': '网游', 'v': '1'}, {'n': '单机', 'v': '2'},
{'n': '娱乐', 'v': '8'}, {'n': '手游', 'v': '3'}]}]
}
with ThreadPoolExecutor(max_workers=3) as executor:
futures = {
executor.submit(self.process_bili): 'bili',
executor.submit(self.process_douyin): 'douyin',
executor.submit(self.process_douyu): 'douyu'
}
for future in futures:
platform, filter_data = future.result()
if filter_data:
filters[platform] = filter_data
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
vdata = []
result = {}
pagecount = 9999
result['page'] = pg
result['limit'] = 90
result['total'] = 999999
if tid == 'wangyi':
vdata, pagecount = self.wyccContent(tid, pg, filter, extend, vdata)
elif 'bili' in tid:
vdata, pagecount = self.biliContent(tid, pg, filter, extend, vdata)
elif 'huya' in tid:
vdata, pagecount = self.huyaContent(tid, pg, filter, extend, vdata)
elif 'douyin' in tid:
vdata, pagecount = self.douyinContent(tid, pg, filter, extend, vdata)
elif 'douyu' in tid:
vdata, pagecount = self.douyuContent(tid, pg, filter, extend, vdata)
result['list'] = vdata
result['pagecount'] = pagecount
return result
def wyccContent(self, tid, pg, filter, extend, vdata):
params = {
'format': 'json',
'start': (int(pg) - 1) * 20,
'size': '20',
}
response = self.fetch(f'{self.hosts[tid]}/api/category/live/', params=params, headers=self.headers[0]).json()
for i in response['lives']:
if i.get('cuteid'):
bvdata = self.buildvod(
vod_id=f"{tid}@@{i['cuteid']}",
vod_name=i.get('title'),
vod_pic=i.get('cover'),
vod_remarks=i.get('nickname'),
style={"type": "rect", "ratio": 1.33}
)
vdata.append(bvdata)
return vdata, 9999
def biliContent(self, tid, pg, filter, extend, vdata):
if extend.get('cate') and pg == '1' and 'click' not in tid:
for i in self.blfdata['data']:
if str(i['id']) == extend['cate']:
for j in i['list']:
v = self.buildvod(
vod_id=f"click_{tid}@@{i['id']}@@{j['id']}",
vod_name=j.get('name'),
vod_pic=j.get('pic'),
vod_tag=1,
style={"type": "oval", "ratio": 1}
)
vdata.append(v)
return vdata, 1
else:
path = f'/xlive/web-interface/v1/second/getListByArea?platform=web&sort=online&page_size=30&page={pg}'
if 'click' in tid:
ids = tid.split('_')[1].split('@@')
tid = ids[0]
path = f'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id={ids[1]}&area_id={ids[-1]}&sort_type=&page={pg}'
data = self.fetch(f'{self.hosts[tid][0]}{path}', headers=self.gethr(0, tid)).json()
for i in data['data']['list']:
if i.get('roomid'):
data = self.buildvod(
f"{tid}@@{i['roomid']}",
i.get('title'),
i.get('cover'),
i.get('watched_show', {}).get('text_large'),
0,
i.get('uname'),
style={"type": "rect", "ratio": 1.33}
)
vdata.append(data)
return vdata, 9999
def huyaContent(self, tid, pg, filter, extend, vdata):
if extend.get('cate') and pg == '1' and 'click' not in tid:
id = extend.get('cate')
data = self.fetch(f'{self.referers[tid]}/liveconfig/game/bussLive?bussType={id}',
headers=self.headers[1]).json()
for i in data['data']:
v = self.buildvod(
vod_id=f"click_{tid}@@{int(i['gid'])}",
vod_name=i.get('gameFullName'),
vod_pic=f'https://huyaimg.msstatic.com/cdnimage/game/{int(i["gid"])}-MS.jpg',
vod_tag=1,
style={"type": "oval", "ratio": 1}
)
vdata.append(v)
return vdata, 1
else:
gid = ''
if 'click' in tid:
ids = tid.split('_')[1].split('@@')
tid = ids[0]
gid = f'&gameId={ids[1]}'
data = self.fetch(f'{self.hosts[tid][0]}/cache.php?m=LiveList&do=getLiveListByPage&tagAll=0{gid}&page={pg}',
headers=self.headers[1]).json()
for i in data['data']['datas']:
if i.get('profileRoom'):
v = self.buildvod(
f"{tid}@@{i['profileRoom']}",
i.get('introduction'),
i.get('screenshot'),
str(int(i.get('totalCount', '1')) / 10000) + '',
0,
i.get('nick'),
style={"type": "rect", "ratio": 1.33}
)
vdata.append(v)
return vdata, 9999
def douyinContent(self, tid, pg, filter, extend, vdata):
if extend.get('cate') and pg == '1' and 'click' not in tid:
ids = extend.get('cate').split('@@')
for i in self.dyifdata['categoryData']:
c = i['partition']
if c['id_str'] == ids[0] and c['title'] == ids[1]:
vlist = i['sub_partition'].copy()
vlist.insert(0, {'partition': c})
for j in vlist:
j = j['partition']
v = self.buildvod(
vod_id=f"click_{tid}@@{j['id_str']}@@{j['type']}",
vod_name=j.get('title'),
vod_pic='https://p3-pc-weboff.byteimg.com/tos-cn-i-9r5gewecjs/pwa_v3/512x512-1.png',
vod_tag=1,
style={"type": "oval", "ratio": 1}
)
vdata.append(v)
return vdata, 1
else:
path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition=720&partition_type=1'
if 'click' in tid:
ids = tid.split('_')[1].split('@@')
tid = ids[0]
path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition={ids[1]}&partition_type={ids[-1]}&req_from=2'
data = self.fetch(f'{self.hosts[tid]}{path}', headers=self.dyheaders).json()
for i in data['data']['data']:
v = self.buildvod(
vod_id=f"{tid}@@{i['web_rid']}",
vod_name=i['room'].get('title'),
vod_pic=i['room']['cover'].get('url_list')[0],
vod_year=i.get('user_count_str'),
vod_remarks=i['room']['owner'].get('nickname'),
style={"type": "rect", "ratio": 1.33}
)
vdata.append(v)
return vdata, 9999
def douyuContent(self, tid, pg, filter, extend, vdata):
if extend.get('cate') and pg == '1' and 'click' not in tid:
for i in self.dyufdata['data']['cate2Info']:
if str(i['cate1Id']) == extend['cate']:
v = self.buildvod(
vod_id=f"click_{tid}@@{i['cate2Id']}",
vod_name=i.get('cate2Name'),
vod_pic=i.get('icon'),
vod_remarks=i.get('count'),
vod_tag=1,
style={"type": "oval", "ratio": 1}
)
vdata.append(v)
return vdata, 1
else:
path = f'/japi/weblist/apinc/allpage/6/{pg}'
if 'click' in tid:
ids = tid.split('_')[1].split('@@')
tid = ids[0]
path = f'/gapi/rkc/directory/mixList/2_{ids[1]}/{pg}'
url = f'{self.hosts[tid]}{path}'
data = self.fetch(url, headers=self.headers[1]).json()
for i in data['data']['rl']:
v = self.buildvod(
vod_id=f"{tid}@@{i['rid']}",
vod_name=i.get('rn'),
vod_pic=i.get('rs16'),
vod_year=str(int(i.get('ol', 1)) / 10000) + '',
vod_remarks=i.get('nn'),
style={"type": "rect", "ratio": 1.33}
)
vdata.append(v)
return vdata, 9999
def detailContent(self, ids):
ids = ids[0].split('@@')
if ids[0] == 'wangyi':
vod = self.wyccDetail(ids)
elif ids[0] == 'bili':
vod = self.biliDetail(ids)
elif ids[0] == 'huya':
vod = self.huyaDetail(ids)
elif ids[0] == 'douyin':
vod = self.douyinDetail(ids)
elif ids[0] == 'douyu':
vod = self.douyuDetail(ids)
return {'list': [vod]}
def wyccDetail(self, ids):
try:
vdata = self.getpq(f'{self.hosts[ids[0]]}/{ids[1]}', self.headers[0])('script').eq(-1).text()
def get_quality_name(vbr):
if vbr <= 600:
return "标清"
elif vbr <= 1000:
return "高清"
elif vbr <= 2000:
return "超清"
else:
return "蓝光"
data = json.loads(vdata)['props']['pageProps']['roomInfoInitData']
name = data['live'].get('title', ids[0])
vod = self.buildvod(vod_name=data.get('keywords_suffix'), vod_remarks=data['live'].get('title'),
vod_content=data.get('description_suffix'))
resolution_data = data['live']['quickplay']['resolution']
all_streams = {}
sorted_qualities = sorted(resolution_data.items(),
key=lambda x: x[1]['vbr'],
reverse=True)
for quality, data in sorted_qualities:
vbr = data['vbr']
quality_name = get_quality_name(vbr)
for cdn_name, url in data['cdn'].items():
if cdn_name not in all_streams and type(url) == str and url.startswith('http'):
all_streams[cdn_name] = []
if isinstance(url, str) and url.startswith('http'):
all_streams[cdn_name].extend([quality_name, url])
plists = []
names = []
for i, (cdn_name, stream_list) in enumerate(all_streams.items(), 1):
names.append(f'线路{i}')
pstr = f"{name}${ids[0]}@@{self.e64(json.dumps(stream_list))}"
plists.append(pstr)
vod['vod_play_from'] = "$$$".join(names)
vod['vod_play_url'] = "$$$".join(plists)
return vod
except Exception as e:
return self.handle_exception(e)
def biliDetail(self, ids):
try:
vdata = self.fetch(
f'{self.hosts[ids[0]][0]}/xlive/web-room/v1/index/getInfoByRoom?room_id={ids[1]}&wts={int(time.time())}',
headers=self.gethr(0, ids[0])).json()
v = vdata['data']['room_info']
vod = self.buildvod(
vod_name=v.get('title'),
type_name=v.get('parent_area_name') + '/' + v.get('area_name'),
vod_remarks=v.get('tags'),
vod_play_from=v.get('title'),
)
data = self.fetch(
f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0%2C1&format=0%2C1%2C2&codec=0%2C1&platform=web',
headers=self.gethr(0, ids[0])).json()
vdnams = data['data']['playurl_info']['playurl']['g_qn_desc']
all_accept_qns = []
streams = data['data']['playurl_info']['playurl']['stream']
for stream in streams:
for format_item in stream['format']:
for codec in format_item['codec']:
if 'accept_qn' in codec:
all_accept_qns.append(codec['accept_qn'])
max_accept_qn = max(all_accept_qns, key=len) if all_accept_qns else []
quality_map = {
item['qn']: item['desc']
for item in vdnams
}
quality_names = [f"{quality_map.get(qn)}${ids[0]}@@{ids[1]}@@{qn}" for qn in max_accept_qn]
vod['vod_play_url'] = "#".join(quality_names)
return vod
except Exception as e:
return self.handle_exception(e)
def huyaDetail(self, ids):
try:
vdata = self.fetch(f'{self.hosts[ids[0]][1]}/cache.php?m=Live&do=profileRoom&roomid={ids[1]}',
headers=self.headers[0]).json()
v = vdata['data']['liveData']
vod = self.buildvod(
vod_name=v.get('introduction'),
type_name=v.get('gameFullName'),
vod_director=v.get('nick'),
vod_remarks=v.get('contentIntro'),
)
data = dict(reversed(list(vdata['data']['stream'].items())))
names = []
plist = []
for stream_type, stream_data in data.items():
if isinstance(stream_data, dict) and 'multiLine' in stream_data and 'rateArray' in stream_data:
names.append(f"线路{len(names) + 1}")
qualities = sorted(
stream_data['rateArray'],
key=lambda x: (x['iBitRate'], x['sDisplayName']),
reverse=True
)
cdn_urls = []
for cdn in stream_data['multiLine']:
quality_urls = []
for quality in qualities:
quality_name = quality['sDisplayName']
bit_rate = quality['iBitRate']
base_url = cdn['url']
if bit_rate > 0:
if '.m3u8' in base_url:
new_url = base_url.replace(
'ratio=2000',
f'ratio={bit_rate}'
)
else:
new_url = base_url.replace(
'imgplus.flv',
f'imgplus_{bit_rate}.flv'
)
else:
new_url = base_url
quality_urls.extend([quality_name, new_url])
encoded_urls = self.e64(json.dumps(quality_urls))
cdn_urls.append(f"{cdn['cdnType']}${ids[0]}@@{encoded_urls}")
if cdn_urls:
plist.append('#'.join(cdn_urls))
vod['vod_play_from'] = "$$$".join(names)
vod['vod_play_url'] = "$$$".join(plist)
return vod
except Exception as e:
return self.handle_exception(e)
def douyinDetail(self, ids):
url = f'{self.hosts[ids[0]]}/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&enter_from=web_live&web_rid={ids[1]}&room_id_str=&enter_source=&Room-Enter-User-Login-Ab=0&is_need_double_stream=false&cookie_enabled=true&screen_width=1980&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=125.0.0.0'
data = self.fetch(url, headers=self.dyheaders).json()
try:
vdata = data['data']['data'][0]
vod = self.buildvod(
vod_name=vdata['title'],
vod_remarks=vdata['user_count_str'],
)
resolution_data = vdata['stream_url']['live_core_sdk_data']['pull_data']['options']['qualities']
stream_json = vdata['stream_url']['live_core_sdk_data']['pull_data']['stream_data']
stream_json = json.loads(stream_json)
available_types = []
if any(sdk_key in stream_json['data'] and 'main' in stream_json['data'][sdk_key] for sdk_key in
stream_json['data']):
available_types.append('main')
if any(sdk_key in stream_json['data'] and 'backup' in stream_json['data'][sdk_key] for sdk_key in
stream_json['data']):
available_types.append('backup')
plist = []
for line_type in available_types:
format_arrays = {'flv': [], 'hls': [], 'lls': []}
qualities = sorted(resolution_data, key=lambda x: x['level'], reverse=True)
for quality in qualities:
sdk_key = quality['sdk_key']
if sdk_key in stream_json['data'] and line_type in stream_json['data'][sdk_key]:
stream_info = stream_json['data'][sdk_key][line_type]
if stream_info.get('flv'):
format_arrays['flv'].extend([quality['name'], stream_info['flv']])
if stream_info.get('hls'):
format_arrays['hls'].extend([quality['name'], stream_info['hls']])
if stream_info.get('lls'):
format_arrays['lls'].extend([quality['name'], stream_info['lls']])
format_urls = []
for format_name, url_array in format_arrays.items():
if url_array:
encoded_urls = self.e64(json.dumps(url_array))
format_urls.append(f"{format_name}${ids[0]}@@{encoded_urls}")
if format_urls:
plist.append('#'.join(format_urls))
names = ['线路1', '线路2'][:len(plist)]
vod['vod_play_from'] = "$$$".join(names)
vod['vod_play_url'] = "$$$".join(plist)
return vod
except Exception as e:
return self.handle_exception(e)
def douyuDetail(self, ids):
headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{ids[1]}')
try:
data = self.fetch(f'{self.hosts[ids[0]]}/betard/{ids[1]}', headers=headers).json()
vname = data['room']['room_name']
vod = self.buildvod(
vod_name=vname,
vod_remarks=data['room'].get('second_lvl_name'),
vod_director=data['room'].get('nickname'),
)
vdata = self.fetch(f'{self.hosts[ids[0]]}/swf_api/homeH5Enc?rids={ids[1]}', headers=headers).json()
json_body = vdata['data']
json_body = {"html": self.douyu_text(json_body[f'room{ids[1]}']), "rid": ids[1]}
sign = self.post('http://alive.nsapps.cn/api/AllLive/DouyuSign', json=json_body, headers=self.headers[1]).json()['data']
body = f'{sign}&cdn=&rate=-1&ver=Douyu_223061205&iar=1&ive=1&hevc=0&fa=0'
body=self.params_to_json(body)
nubdata = self.post(f'{self.hosts[ids[0]]}/lapi/live/getH5Play/{ids[1]}', data=body, headers=headers).json()
plist = []
names = []
for i,x in enumerate(nubdata['data']['cdnsWithName']):
names.append(f'线路{i+1}')
d = {'sign': sign, 'cdn': x['cdn'], 'id': ids[1]}
plist.append(
f'{vname}${ids[0]}@@{self.e64(json.dumps(d))}@@{self.e64(json.dumps(nubdata["data"]["multirates"]))}')
vod['vod_play_from'] = "$$$".join(names)
vod['vod_play_url'] = "$$$".join(plist)
return vod
except Exception as e:
return self.handle_exception(e)
def douyu_text(self, text):
function_positions = [m.start() for m in re.finditer('function', text)]
total_functions = len(function_positions)
if total_functions % 2 == 0:
target_index = total_functions // 2 + 1
else:
target_index = (total_functions - 1) // 2 + 1
if total_functions >= target_index:
cut_position = function_positions[target_index - 1]
ctext = text[4:cut_position]
return re.sub(r'eval\(strc\)\([\w\d,]+\)', 'strc', ctext)
return text
def searchContent(self, key, quick, pg="1"):
pass
def playerContent(self, flag, id, vipFlags):
try:
ids = id.split('@@')
p = 1
if ids[0] in ['wangyi', 'douyin','huya']:
p, url = 0, json.loads(self.d64(ids[1]))
elif ids[0] == 'bili':
p, url = self.biliplay(ids)
elif ids[0] == 'huya':
p, url = 0, json.loads(self.d64(ids[1]))
elif ids[0] == 'douyu':
p, url = self.douyuplay(ids)
return {'parse': p, 'url': url, 'header': self.playheaders[ids[0]]}
except Exception as e:
return {'parse': 1, 'url': self.excepturl, 'header': self.headers[0]}
def biliplay(self, ids):
try:
data = self.fetch(
f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0,1&format=0,2&codec=0&platform=web&qn={ids[2]}',
headers=self.gethr(0, ids[0])).json()
urls = []
line_index = 1
for stream in data['data']['playurl_info']['playurl']['stream']:
for format_item in stream['format']:
for codec in format_item['codec']:
for url_info in codec['url_info']:
full_url = f"{url_info['host']}/{codec['base_url'].lstrip('/')}{url_info['extra']}"
urls.extend([f"线路{line_index}", full_url])
line_index += 1
return 0, urls
except Exception as e:
return 1, self.excepturl
def douyuplay(self, ids):
try:
sdata = json.loads(self.d64(ids[1]))
headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{sdata["id"]}')
ldata = json.loads(self.d64(ids[2]))
result_obj = {}
with ThreadPoolExecutor(max_workers=len(ldata)) as executor:
futures = [
executor.submit(
self.douyufp,
sdata,
quality,
headers,
self.hosts[ids[0]],
result_obj
) for quality in ldata
]
for future in futures:
future.result()
result = []
for bit in sorted(result_obj.keys(), reverse=True):
result.extend(result_obj[bit])
if result:
return 0, result
return 1, self.excepturl
except Exception as e:
return 1, self.excepturl
def douyufp(self, sdata, quality, headers, host, result_obj):
try:
body = f'{sdata["sign"]}&cdn={sdata["cdn"]}&rate={quality["rate"]}'
body=self.params_to_json(body)
data = self.post(f'{host}/lapi/live/getH5Play/{sdata["id"]}',
data=body, headers=headers).json()
if data.get('data'):
play_url = data['data']['rtmp_url'] + '/' + data['data']['rtmp_live']
bit = quality.get('bit', 0)
if bit not in result_obj:
result_obj[bit] = []
result_obj[bit].extend([quality['name'], play_url])
except Exception as e:
print(f"Error fetching {quality['name']}: {str(e)}")
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 josn_to_params(self, params, skip_empty=False):
query = []
for k, v in params.items():
if skip_empty and not v:
continue
query.append(f"{k}={v}")
return "&".join(query)
def params_to_json(self, query_string):
parsed_data = parse_qs(query_string)
result = {key: value[0] for key, value in parsed_data.items()}
return result
def buildvod(self, vod_id='', vod_name='', vod_pic='', vod_year='', vod_tag='', vod_remarks='', style='',
type_name='', vod_area='', vod_actor='', vod_director='',
vod_content='', vod_play_from='', vod_play_url=''):
vod = {
'vod_id': vod_id,
'vod_name': vod_name,
'vod_pic': vod_pic,
'vod_year': vod_year,
'vod_tag': 'folder' if vod_tag else '',
'vod_remarks': vod_remarks,
'style': style,
'type_name': type_name,
'vod_area': vod_area,
'vod_actor': vod_actor,
'vod_director': vod_director,
'vod_content': vod_content,
'vod_play_from': vod_play_from,
'vod_play_url': vod_play_url
}
vod = {key: value for key, value in vod.items() if value}
return vod
def getpq(self, url, headers=None, cookies=None):
data = self.fetch(url, headers=headers, cookies=cookies).text
try:
return pq(data)
except Exception as e:
print(f"解析页面错误: {str(e)}")
return pq(data.encode('utf-8'))
def gethr(self, index, rf='', zr=''):
headers = self.headers[index]
if zr:
headers['referer'] = zr
else:
headers['referer'] = f"{self.referers[rf]}/"
return headers
def handle_exception(self, e):
print(f"报错: {str(e)}")
return {'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'翻车啦${self.excepturl}'}

@ -0,0 +1,107 @@
import json
import os
import shutil
import sys
def load_json(path):
with open(path, "r", encoding="utf-8") as f:
return json.load(f)
def find_index_by_key(sites, key):
for i, item in enumerate(sites):
if isinstance(item, dict) and item.get("key") == key:
return i
return -1
def extract_local_paths(value):
"""提取字符串中的本地路径(支持 ./ 和 ../),忽略 URL"""
if not isinstance(value, str):
return []
paths = []
# 先按 ? 切分,保留路径及查询参数里的路径
parts = value.split("?")
for part in parts:
# 再按常见分隔符切
for token in part.replace("&", " ").replace("$", " ").split():
token = token.strip()
if token.startswith("./") or token.startswith("../"):
# 去掉可能的尾部参数
token = token.split("&", 1)[0]
token = token.split("$", 1)[0]
paths.append(token)
return paths
def iter_paths_between(sites, start_key, end_key):
start_idx = find_index_by_key(sites, start_key)
end_idx = find_index_by_key(sites, end_key)
if start_idx == -1 or end_idx == -1 or start_idx >= end_idx:
return []
subset = sites[start_idx + 1 : end_idx]
all_paths = []
for item in subset:
if not isinstance(item, dict):
continue
# api 仅拷贝 .py
api_val = item.get("api")
if isinstance(api_val, str):
for p in extract_local_paths(api_val):
if p.endswith(".py"):
all_paths.append(p)
# ext 拷贝所有本地路径
ext_val = item.get("ext")
if isinstance(ext_val, str):
all_paths.extend(extract_local_paths(ext_val))
# 去重,保留顺序
seen = set()
deduped = []
for p in all_paths:
if p not in seen:
seen.add(p)
deduped.append(p)
return deduped
def main():
if len(sys.argv) < 2:
print("用法: python copy_xbpq.py <json路径>")
print("示例: python copy_xbpq.py jsm_with_app_sites.json")
sys.exit(1)
json_path = sys.argv[1]
data = load_json(json_path)
sites = data.get("sites", [])
paths = iter_paths_between(sites, "cbh", "push_agent")
if not paths:
print("⚠️ 未找到 cbh 到 push_agent 之间的 ./XBPQ/ 路径")
return
base_dir = os.path.dirname(os.path.abspath(__file__))
src_base = os.path.normpath(os.path.join(base_dir, "..", "xiaosa"))
dst_base = os.path.normpath(os.path.join(base_dir, ".."))
copied = 0
missing = 0
for path in paths:
rel_path = path.replace("./", "", 1)
rel_path = rel_path.replace("../", "", 1)
src = os.path.join(src_base, rel_path)
dst = os.path.join(dst_base, rel_path)
if not os.path.exists(src):
print(f"⚠️ 源文件不存在: {src}")
missing += 1
continue
os.makedirs(os.path.dirname(dst), exist_ok=True)
shutil.copy2(src, dst)
print(f"✅ 已覆盖: {dst}")
copied += 1
print(f"完成: 复制 {copied} 个,缺失 {missing}")
if __name__ == "__main__":
main()

@ -1,5 +1,5 @@
{ {
"spider":"./jar/fan.txt;md5;8432d174d72d5b608ae1bcd16d966847", "spider":"./jar/spider.jar;md5;8432d174d72d5b608ae1bcd16d966847",
"lives":[ "lives":[
{"name":"live","boot": false,"type":0,"url":"./tv.txt","playerType":2,"ua":"okhttp/3.8.1","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://logo.wyfc.qzz.io/{name}.png"} {"name":"live","boot": false,"type":0,"url":"./tv.txt","playerType":2,"ua":"okhttp/3.8.1","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://logo.wyfc.qzz.io/{name}.png"}
], ],
@ -7,10 +7,10 @@
"sites":[ "sites":[
{"key":"drpy_js_豆瓣","name":"搜索 | 豆瓣[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/drpy.js","searchable":1,"quickSearch":0,"changeable":0}, {"key":"drpy_js_豆瓣","name":"搜索 | 豆瓣[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/drpy.js","searchable":1,"quickSearch":0,"changeable":0},
{"key":"drpy_js_TVB云播","name":"影视 | TVB云播[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/TVB云播.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"drpy_js_TVB云播","name":"影视 | TVB云播[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/TVB云播.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"新闪雷","name":"新闪雷┃MP4","type":3,"api":"./FTY/drpy2.min.js","ext":"./js/新闪雷.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"新闪雷","name":"新闪雷┃MP4","type":3,"api":"./lib/drpy2.min.js","ext":"./js/新闪雷.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"闪雷","name":"闪雷┃MP4","type":3,"api":"./FTY/drpy2.min.js","ext":"./js/678.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"闪雷","name":"闪雷┃MP4","type":3,"api":"./lib/drpy2.min.js","ext":"./js/678.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"fyyy","name":"飞宇影院","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key":"fyyy","name":"飞宇影院","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"cbh","name":"茶杯狐","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"https://www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key":"cbh","name":"茶杯狐","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"https://www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"奇优","name":"影视 | ️奇优[直连]","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"}, {"key":"奇优","name":"影视 | ️奇优[直连]","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"},
{"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType":2}, {"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType":2},

@ -2,6 +2,7 @@ import requests
import re import re
import demjson3 as demjson import demjson3 as demjson
import json import json
import hashlib
# 创建全局 session 并设置浏览器 UA # 创建全局 session 并设置浏览器 UA
session = requests.Session() session = requests.Session()
@ -31,6 +32,14 @@ def extract_and_save_spider(json_text):
f.write(resp.content) f.write(resp.content)
print("✅ 已保存为 fan.txt") print("✅ 已保存为 fan.txt")
# 计算本地文件 MD5
def get_md5(filepath):
md5 = hashlib.md5()
with open(filepath, "rb") as f:
while chunk := f.read(8192):
md5.update(chunk)
return md5.hexdigest()
# 删除不需要的 sites 项 + 替换链接 # 删除不需要的 sites 项 + 替换链接
def clean_data(raw_text): def clean_data(raw_text):
# 统一把各种 GitHub 代理壳替换掉 # 统一把各种 GitHub 代理壳替换掉
@ -42,18 +51,18 @@ def clean_data(raw_text):
data = demjson.decode(raw_text) data = demjson.decode(raw_text)
keywords = [ # keywords = [
"", "饭太硬", "广告", "PanSso", "YpanSo", "xzso", "米搜", "夸搜", "Aliso", "YiSo" # "豆", "饭太硬", "广告", "PanSso", "YpanSo", "xzso", "米搜", "夸搜", "Aliso", "YiSo"
] # ]
original_count = len(data.get("sites", [])) # original_count = len(data.get("sites", []))
data["sites"] = [ # data["sites"] = [
s for s in data["sites"] # s for s in data["sites"]
if not any(kw in s.get("key", "") or kw in s.get("name", "") for kw in keywords) # if not any(kw in s.get("key", "") or kw in s.get("name", "") for kw in keywords)
] # ]
print(f"🧹 清理 {original_count - len(data['sites'])} 条 sites") # print(f"🧹 清理 {data - len(data['sites'])} 条 sites")
return data return data
# 格式美化保存 # 格式美化保存
@ -85,6 +94,10 @@ if __name__ == "__main__":
raw_text = fetch_raw_json() raw_text = fetch_raw_json()
extract_and_save_spider(raw_text) extract_and_save_spider(raw_text)
data = clean_data(raw_text) data = clean_data(raw_text)
# 更新 spider 为本地 fan.txt + 最新 MD5
md5_value = get_md5("fan.txt")
data["spider"] = f"./jar/fan.txt;md5;{md5_value}"
print(f"🔄 spider 已更新为: {data['spider']}")
save_json(data) save_json(data)
except Exception as e: except Exception as e:
print(f"❌ 错误: {e}") print(f"❌ 错误: {e}")

@ -1,5 +1,5 @@
{ {
"spider":"./jar/fan.txt;md5;8432d174d72d5b608ae1bcd16d966847", "spider":"./jar/spider.jar;md5;8432d174d72d5b608ae1bcd16d966847",
"lives":[ "lives":[
{"name":"migu","type":0,"url":"https://develop202.github.io/migu_video/interface.txt","playerType":1,"ua":"okhttp/3.8.1","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"}, {"name":"migu","type":0,"url":"https://develop202.github.io/migu_video/interface.txt","playerType":1,"ua":"okhttp/3.8.1","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
{"name":"live","type":0,"url":"https://epg.pw/test_channels.m3u","playerType":1,"ua":"okhttp/3.8.1","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"}, {"name":"live","type":0,"url":"https://epg.pw/test_channels.m3u","playerType":1,"ua":"okhttp/3.8.1","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
@ -9,9 +9,9 @@
"sites":[ "sites":[
{"key":"drpy_js_豆瓣","name":"搜索 | 豆瓣[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/drpy.js","searchable":1,"quickSearch":0,"changeable":0}, {"key":"drpy_js_豆瓣","name":"搜索 | 豆瓣[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/drpy.js","searchable":1,"quickSearch":0,"changeable":0},
{"key":"drpy_js_TVB云播","name":"影视 | TVB云播[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/TVB云播.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"drpy_js_TVB云播","name":"影视 | TVB云播[js]","type":3,"api":"./lib/drpy2.min.js","ext":"./js/TVB云播.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"新闪雷","name":"新闪雷┃MP4","type":3,"api":"./FTY/drpy2.min.js","ext":"./js/新闪雷.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}}, {"key":"新闪雷","name":"新闪雷┃MP4","type":3,"api":"./lib/drpy2.min.js","ext":"./js/新闪雷.js","header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"fyyy","name":"飞宇影院","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key":"fyyy","name":"飞宇影院","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"http://ntfeiyu.com/nt/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"cbh","name":"茶杯狐","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"},"jar": "./jar/sx.jar;md5;6186f490eadf878ba5de21a7fa29e594"}, {"key":"cbh","name":"茶杯狐","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"changeable":1,"ext":{"分类url":"www.cupfox7.com/cupfox/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/page/{catePg}/year/{year}.html","分类":"电影$fenlei1#电视剧$fenlei2#综艺$fenlei3#动漫$fenlei4"},"header":{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"}},
{"key":"奇优","name":"影视 | ️奇优[直连]","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"}, {"key":"奇优","name":"影视 | ️奇优[直连]","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/奇优.json","jar": "./jar/Yoursmile.jar;md5;97796a79a781055669f2d5442439dc5f"},
{"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType":2}, {"key": "电影天堂","name": "影视 | 电影天堂","type": 1,"api": "http://caiji.dyttzyapi.com/api.php/provide/vod","searchable": 1,"quickSearch": 1,"filterable": 1,"changeable": 1,"playerType":2},

@ -1,15 +1,14 @@
import json import json
import requests
import sys import sys
import hashlib import hashlib
import os import os
# 默认 jar 路径和下载 URL如需下载 # jar 路径(用于计算 md5
default_jar = "./xiaosa/spider.jar" primary_jar_path = "jar/spider.jar"
default_jar_url = "../xiaosa/spider.jar" fallback_jar_path = "../xiaosa/spider.jar"
# 需要删除的站点 key # 需要删除的站点 key(在此填写即可删除)
remove_keys = {"巴士动漫"} # 可以加多个,例如 {"巴士动漫", "电影牛"} remove_keys = {"版本信息","腾讯视频","优酷视频","芒果视频","爱奇艺","三六零","豆瓣"} # 可以加多个,例如 {"巴士动漫", "电影牛"}
# 保存 JSON 文件(折叠字典数组为单行,空数组和基础数组一行) # 保存 JSON 文件(折叠字典数组为单行,空数组和基础数组一行)
class CompactJSONEncoder(json.JSONEncoder): class CompactJSONEncoder(json.JSONEncoder):
@ -38,11 +37,6 @@ def fetch_json(path_or_url):
if os.path.exists(path_or_url): if os.path.exists(path_or_url):
with open(path_or_url, "r", encoding="utf-8") as f: with open(path_or_url, "r", encoding="utf-8") as f:
return json.load(f) return json.load(f)
elif path_or_url.startswith("http://") or path_or_url.startswith("https://"):
resp = requests.get(path_or_url)
resp.raise_for_status()
return resp.json()
else:
raise ValueError(f"无效路径或 URL{path_or_url}") raise ValueError(f"无效路径或 URL{path_or_url}")
@ -53,35 +47,22 @@ def get_md5(filepath):
md5.update(chunk) md5.update(chunk)
return md5.hexdigest() return md5.hexdigest()
def replace_drpy_path(site):
def ensure_jar_with_md5(site): """将 ./js/drpy2.min.js 替换为 ./lib/drpy2.min.js"""
if not isinstance(site, dict): if not isinstance(site, dict):
return return
jar_val = site.get("jar") for field in ("api", "ext"):
if jar_val and ";md5;" in jar_val: val = site.get(field)
return # 已包含 md5 if isinstance(val, str) and val == "./js/drpy2.min.js":
if not os.path.exists(default_jar_url): site[field] = "./lib/drpy2.min.js"
print(f"⚠️ 找不到本地 jar 文件:{default_jar_url}")
return
md5_val = get_md5(default_jar_url)
site["jar"] = f"{default_jar};md5;{md5_val}"
def ensure_xyqhiker_ext_and_jar(site):
"""修正所有 csp_XYQHiker 站点的 ext 路径,并加上 jar md5"""
if not isinstance(site, dict):
return
if site.get("api") == "csp_XYQHiker":
ext_val = site.get("ext", "")
if ext_val.startswith("./XYQHiker/"):
site["ext"] = ext_val.replace("./XYQHiker/", "./xiaosa/XYQHiker/")
ensure_jar_with_md5(site)
def insert_sites_at_key(base_sites, insert_sites, key_marker): def insert_sites_at_key(base_sites, insert_sites, key_marker):
for i, item in enumerate(base_sites): for i, item in enumerate(base_sites):
if item.get("key") == key_marker: if item.get("key") == key_marker:
return base_sites[:i] + insert_sites + base_sites[i:] return base_sites[:i + 1] + insert_sites + base_sites[i + 1:]
print(f"⚠️ 未找到 key 为 {key_marker} 的插入点,追加到末尾") print(f"⚠️ 未找到 key 为 {key_marker} 的插入点,追加到末尾")
return base_sites + insert_sites return base_sites + insert_sites
@ -91,10 +72,16 @@ def remove_sites(sites, keys_to_remove):
return [s for s in sites if s.get("key") not in keys_to_remove] return [s for s in sites if s.get("key") not in keys_to_remove]
def dedupe_by_name(base_sites, insert_sites):
"""按 name 去重:若重名,优先保留 base_sites 中的条目"""
base_names = {s.get("name") for s in base_sites if isinstance(s, dict)}
return [s for s in insert_sites if s.get("name") not in base_names]
if __name__ == "__main__": if __name__ == "__main__":
if len(sys.argv) < 3: if len(sys.argv) < 3:
print("用法: python script.py <远程json_url> <本地dianshi.json路径>") print("用法: python xiao.py <本地api.json路径> <本地dianshi.json路径>")
print("示例: python script.py https://raw.githubusercontent.com/qist/tvbox/master/xiaosa/api.json dianshi.json") print("示例: python xiao.py ../xiaosa/api.json dianshi.json")
sys.exit(1) sys.exit(1)
remote_url = sys.argv[1] remote_url = sys.argv[1]
@ -103,28 +90,33 @@ if __name__ == "__main__":
# 1. 下载远程 JSON # 1. 下载远程 JSON
data = fetch_json(remote_url) data = fetch_json(remote_url)
# 2. 筛选 sites只保留 name 含 APP # 2. 读取 sites不再筛选
sites = data.get("sites", []) sites = data.get("sites", [])
filtered_sites = [s for s in sites if isinstance(s, dict) and "name" in s and "APP" in s["name"]] filtered_sites = [s for s in sites if isinstance(s, dict)]
# 3. 为每个 APP site 添加 jar 字段和 md5 # 3. 不再单独追加 XYQHiker已包含在 sites 中)
for site in filtered_sites:
ensure_jar_with_md5(site)
# 3.1 处理所有 csp_XYQHiker # 3.1 不删除站点,仅移除每个站点的 jar 字段
for site in sites: before_count = len(filtered_sites)
if isinstance(site, dict) and site.get("api") == "csp_XYQHiker": removed_sites = []
ensure_xyqhiker_ext_and_jar(site) for site in filtered_sites:
filtered_sites.append(site) replace_drpy_path(site)
print(f"✅ 筛选并更新 {len(filtered_sites)} 个站点APP + XYQHiker含 jar+md5") if isinstance(site, dict) and "jar" in site:
site.pop("jar", None)
removed_count = before_count - len(filtered_sites)
print(f"✅ 更新 {len(filtered_sites)} 个站点")
# 4. 读取本地文件 # 4. 读取本地文件
with open(local_file, "r", encoding="utf-8") as f: with open(local_file, "r", encoding="utf-8") as f:
dianshi = json.load(f) dianshi = json.load(f)
# 5. 插入到 key="玩偶" 处 # 5. 插入到 key="cbh" 之后(按 name 去重,保留本地)
dianshi_sites = dianshi.get("sites", []) dianshi_sites = dianshi.get("sites", [])
dianshi["sites"] = insert_sites_at_key(dianshi_sites, filtered_sites, "玩偶") # 先按 key 删除来源站点
if remove_keys:
filtered_sites = [s for s in filtered_sites if s.get("key") not in remove_keys]
filtered_sites = dedupe_by_name(dianshi_sites, filtered_sites)
dianshi["sites"] = insert_sites_at_key(dianshi_sites, filtered_sites, "cbh")
# 6. 删除指定的站点 # 6. 删除指定的站点
before_count = len(dianshi["sites"]) before_count = len(dianshi["sites"])
@ -132,7 +124,16 @@ if __name__ == "__main__":
after_count = len(dianshi["sites"]) after_count = len(dianshi["sites"])
print(f"✅ 删除了 {before_count - after_count} 个指定站点: {', '.join(remove_keys)}") print(f"✅ 删除了 {before_count - after_count} 个指定站点: {', '.join(remove_keys)}")
# 7. 保存合并结果 # 7. 设置 spider 为 jar+md5统一在输出文件中
jar_path = primary_jar_path if os.path.exists(primary_jar_path) else fallback_jar_path
if os.path.exists(jar_path):
md5_val = get_md5(jar_path)
dianshi["spider"] = f"./jar/spider.jar;md5;{md5_val}"
print(f"🔄 spider 已更新为: {dianshi['spider']}")
else:
print(f"⚠️ 找不到 jar 文件,未更新 spider{primary_jar_path} / {fallback_jar_path}")
# 8. 保存合并结果(新文件)
output_file = f"{local_file.rsplit('.',1)[0]}_with_app_sites.json" output_file = f"{local_file.rsplit('.',1)[0]}_with_app_sites.json"
with open(output_file, "w", encoding="utf-8") as f: with open(output_file, "w", encoding="utf-8") as f:
json.dump(dianshi, f, ensure_ascii=False, indent=2, cls=CompactJSONEncoder) json.dump(dianshi, f, ensure_ascii=False, indent=2, cls=CompactJSONEncoder)

@ -1,6 +1,9 @@
{ {
"简介": "", "简介": "jianjie\">&&</p>",
"数组": "", "副标题": "zhuangtai\">&&</div>",
"分类url": "http://www.yinghuadm.cn/show_{cateId}--{by}-{class}-----{catePg}---{year}.html", "数组": "u-movie\">&&</article>",
"分类": "日本动漫$ribendongman#国产动漫$guochandongman#动漫电影$dongmandianying#欧美动漫$oumeidongman" "线路标题": "ctitle\">&&在线播放",
"播放数组": "vlink&&</div>",
"分类url": "https://www.yinghuadongman.com.cn/sxvodshow/{cateId}-{year}/page/{catePg}/;;d0",
"分类": "国漫$2#日漫$1#美漫$3"
} }

@ -1430,12 +1430,6 @@
"type": "list" "type": "list"
} }
}, },
{
"key": "酷狗",
"name": "酷狗|音乐",
"type": 3,
"api": "csp_Kugou"
},
{ {
"key": "爱听音乐", "key": "爱听音乐",
"name": "爱听|音乐", "name": "爱听|音乐",

Binary file not shown.
Loading…
Cancel
Save