Sync all projects
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,54 @@
|
||||
2. 安卓手机
|
||||
2.1. termux
|
||||
2.1.1. 准备必要工具及软件
|
||||
如下载慢自行准备网络代理
|
||||
|
||||
TERMUX - 重要需要选择自己手机架构和安卓版本对应软件
|
||||
MT管理器
|
||||
2.1.2. 安装软件
|
||||
先安装MT管理器; 再安装termux
|
||||
利用MT管理器并添加本地存储termux, 可参考MT添加本地存储视频
|
||||
2.1.3. 安装项目
|
||||
2.1.2.1. 更新系统依赖并安装必要依赖
|
||||
|
||||
[1]更新termux软件包
|
||||
pkg upgrade
|
||||
[2]安装git
|
||||
pkg install git
|
||||
2.1.2.2. 克隆项目并安装项目依赖
|
||||
|
||||
[1]克隆drpy-node项目
|
||||
git clone https://github.com/hjdhnx/drpy-node.git
|
||||
[2]安装nodejs
|
||||
pkg install nodejs
|
||||
[3]进入drpy-node目录(自己确认目录)
|
||||
cd drpy-node
|
||||
[4]设置npm为淘宝镜像源([可选]网络快的可忽略)
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
[5]安装所需依赖
|
||||
npm install
|
||||
[6]安装pm2依赖([可选]如果需要用pm2管理项目)
|
||||
npm install pm2@latest -g
|
||||
2.1.2.3. 启动项目
|
||||
|
||||
[1]进入drpy-node目录([可选]自己确认目录, 如果已经在目录下可忽略)
|
||||
cd drpy-node
|
||||
[2]启动项目(根据自己需要选择启动方式)
|
||||
[2.1]普通
|
||||
- 启动: node index.js
|
||||
- 停止: ctrl+c
|
||||
[2.2]pm2管理
|
||||
- 启动(该步骤会产生进程id): pm2 start index.js
|
||||
- 进程id操作:
|
||||
- 查看进程id: pm2 list
|
||||
- 停止进程id: pm2 stop 进程id(查看进程id步骤的第一列序号)
|
||||
- 重启进程id: pm2 restart 进程id(查看进程id步骤的第一列序号)
|
||||
- 删除进程id: pm2 delete 进程id(查看进程id步骤的第一列序号, 该步骤操作后需要重新启动则需要使用第一部操作启动)
|
||||
2.2.4. 更新项目
|
||||
|
||||
[1]启动termux
|
||||
[2]进入项目目录([可选]自己确认目录, 如果已经在目录下可忽略)
|
||||
cd drpy-node
|
||||
[3]更新代码(网络不佳自己使用代理)
|
||||
git pull
|
||||
[4]重启服务, 参考`启动项目`步骤操作
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 877 KiB |
@@ -0,0 +1,7 @@
|
||||
#白盒tvbox
|
||||
新增简化去广告rules写法:
|
||||
{"name":"非凡","hosts":["vip.ffzy","hd.ffzy"],"regex":["6.666667","6.566667","2.966667","2.433333","-2.266667"]},
|
||||
(正数代表移除第一次出现的切片组,负数代表最后一次出现的切片组)
|
||||
|
||||
#原始正则(系列通用)
|
||||
{"name":"量子非凡广告","hosts":["lz","vip.lz","vip1.lz","v.cdnlz","hd.lz","ffzy","vip.ffzy","ffzy-play2","hd.ffzy"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:2\\.966667,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6.666667,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6\\.667,[\\s\\S]*?#EXT-X-DISCONTINUITY","#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6.600000,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},
|
||||
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
参数说明:
|
||||
fullText: 完整的文本内容。
|
||||
leftText: 左边文本,用于定位中间内容的起始位置。
|
||||
rightText: 右边文本,用于定位中间内容的结束位置。
|
||||
startPos: 起始查找位置,默认为 0,表示从文本的第一个字符开始查找。
|
||||
includeLeft: 是否在结果中包含左边文本,默认为 false。
|
||||
includeRight: 是否在结果中包含右边文本,默认为 false。
|
||||
*/
|
||||
@@ -0,0 +1,19 @@
|
||||
测试改为私仓
|
||||
|
||||
访问下面地址生成自己的token:
|
||||
|
||||
https://github.com/settings/tokens
|
||||
|
||||
拉取方式:
|
||||
|
||||
git config --global credential.helper store
|
||||
git pull
|
||||
|
||||
登陆成功后续拉库都不需要再输入账号密码
|
||||
|
||||
git clone https://username:[email protected]/hjdhnx/hipy-server.git
|
||||
|
||||
如果是已经 clone 的到源码目录执行 git remote set-url origin https://username:[email protected]/hjdhnx/hipy-server.git
|
||||
|
||||
文档教程:
|
||||
https://docs.github.com/zh/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
|
||||
@@ -0,0 +1,31 @@
|
||||
##★订阅链接★
|
||||
通用地址订阅链接:
|
||||
clan://localhost/tvbox/dr2.json
|
||||
|
||||
通用地址订阅链接2:
|
||||
clan://localhost/dr-master/dr2.json
|
||||
|
||||
通用仓库订阅链接:
|
||||
clan://localhost/tvbox/jk/ck2.json
|
||||
|
||||
通用仓库订阅链接2:
|
||||
clan://localhost/dr-master/jk/ck2.json
|
||||
|
||||
OK影视&FM影视专用地址订阅链接:
|
||||
file://tvbox/dr2.json
|
||||
|
||||
OK影视&FM影视专用地址订阅链接2:
|
||||
file://dr-master/dr2.json
|
||||
|
||||
OK影视&FM影视专用仓库订阅链接:
|
||||
file://tvbox/jk/ck2.json
|
||||
|
||||
OK影视&FM影视专用仓库订阅链接2:
|
||||
file://dr-master/jk/ck2.json
|
||||
|
||||
##★本地包在线更新方式★
|
||||
1、点击站源切换,选择“🔥接口更新🔥”
|
||||
2、点击“↓更新本地包↓”下面的图标后会自动下载解压
|
||||
3、更新完成后会有提示,手机版将自动复制好的仓库接口粘贴到“点播<请输入接口...>”,
|
||||
电视版进文件夹选择文件或记下上面仓库地址手动输入
|
||||
4、最后重启软件即可
|
||||
@@ -0,0 +1,31 @@
|
||||
★订阅链接★
|
||||
通用地址订阅链接:
|
||||
clan://localhost/tvbox/dr2.json
|
||||
|
||||
通用地址订阅链接2:
|
||||
clan://localhost/dr-master/dr2.json
|
||||
|
||||
通用仓库订阅链接:
|
||||
clan://localhost/tvbox/jk/ck2.json
|
||||
|
||||
通用仓库订阅链接2:
|
||||
clan://localhost/dr-master/jk/ck2.json
|
||||
|
||||
OK影视&FM影视专用地址订阅链接:
|
||||
file://tvbox/dr2.json
|
||||
|
||||
OK影视&FM影视专用地址订阅链接2:
|
||||
file://dr-master/dr2.json
|
||||
|
||||
OK影视&FM影视专用仓库订阅链接:
|
||||
file://tvbox/jk/ck2.json
|
||||
|
||||
OK影视&FM影视专用仓库订阅链接2:
|
||||
file://dr-master/jk/ck2.json
|
||||
|
||||
★本地包在线更新方式★
|
||||
1、点击站源切换,选择“🔥接口更新🔥”
|
||||
2、点击“↓更新本地包↓”下面的图标后会自动下载解压
|
||||
3、更新完成后会有提示,手机版将自动复制好的仓库接口粘贴到“点播<请输入接口...>”,
|
||||
电视版进文件夹选择文件或记下上面仓库地址手动输入
|
||||
4、最后重启软件即可
|
||||
@@ -0,0 +1,748 @@
|
||||
### 代码格式化压缩成一行教程
|
||||
npm install uglify-js -g
|
||||
uglifyjs xx.js -o xx.min.js
|
||||
|
||||
##配置webstorm
|
||||
where uglifyjs 得到路径比如:
|
||||
C:\Users\dashen\AppData\Roaming\npm\uglifyjs.cmd
|
||||
$FileName$ -o $FileNameWithoutExtension$.min.js
|
||||
$FileDir$
|
||||
|
||||
### 模板规则说明
|
||||
#所有相关属性说明:
|
||||
var rule = {
|
||||
类型:'影视',//影视|听书|漫画|小说
|
||||
title:'',//规则标题,没有实际作用,但是可以作为cms类名称依据
|
||||
编码:'',//不填就默认utf-8
|
||||
搜索编码:'',//不填则不编码,默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
|
||||
host:'',//网页的域名根,包含http头如 https://www,baidu.com
|
||||
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src = jsp.pdfh(html,"ul&&li&&a&&href");print(src);HOST=src.replace("/index.php","")',//网页域名根动态抓取js代码。通过HOST=赋值
|
||||
homeUrl:'/latest/',//网站的首页链接,可以是完整路径或者相对路径,用于分类获取和推荐获取 fyclass是分类标签 fypage是页数
|
||||
url:'/fyclass/fypage.html[/fyclass/]',//网站的分类页面链接
|
||||
detailUrl:'https://yanetflix.com/voddetail/fyid.html',//非必填,二级详情拼接链接,感觉没啥卵用
|
||||
searchUrl:'',//搜索链接 可以是完整路径或者相对路径,用于分类获取和推荐获取 **代表搜索词 fypage代表页数
|
||||
searchable:0,//是否启用全局搜索,
|
||||
quickSearch:0,//是否启用快速搜索,
|
||||
filterable:0,//是否启用筛选,
|
||||
filter:{},// 筛选条件字典
|
||||
// 默认筛选条件字典(不同分类可以指定同样筛选参数的不同默认值)
|
||||
filter_def:{
|
||||
douyu:{
|
||||
area:'一起看',
|
||||
other:'..'
|
||||
},
|
||||
huya:{
|
||||
area:'影音馆',
|
||||
other:'..'
|
||||
}
|
||||
},
|
||||
// 筛选网站传参,会自动传到分类链接下(本示例中的url参数)-url里参数为fyfilter,可参考蓝莓影视.js
|
||||
filter_url:'style={{fl.style}}&zone={{fl.zone}}&year={{fl.year}}&fee={{fl.fee}}&order={{fl.order}}',
|
||||
// 注意,由于猫有配置缓存,搜索配置没法热加载,修改了js不需要重启服务器
|
||||
// 但是需要tv_box进设置里换源使配置重新装载
|
||||
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent':'MOBILE_UA',
|
||||
"Cookie": "searchneed=ok"
|
||||
},
|
||||
timeout:5000,//网站的全局请求超时,默认是3000毫秒
|
||||
class_name:'电影&电视剧&动漫&综艺',//静态分类名称拼接
|
||||
class_url:'1&2&3&4',//静态分类标识拼接
|
||||
//动态分类获取 列表;标题;链接;正则提取 不需要正则的时候后面别加分号
|
||||
class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
|
||||
// 除开全局过滤之外还需要过滤哪些标题不视为分类
|
||||
cate_exclude:'',
|
||||
// 除开全局动态线路名过滤之外还需要过滤哪些线路名标题不视为线路
|
||||
tab_exclude:'',
|
||||
//移除某个线路及相关的选集|js1
|
||||
tab_remove:['tkm3u8'],
|
||||
//线路顺序,按里面的顺序优先,没写的依次排后面|js1
|
||||
tab_order:['lzm3u8','wjm3u8','1080zyk','zuidam3u8','snm3u8'],
|
||||
//线路名替换如:lzm3u8替换为量子资源|js1
|
||||
tab_rename:{'lzm3u8':'量子','1080zyk':'1080看','zuidam3u8':'最大资源','kuaikan':'快看',
|
||||
'bfzym3u8':'暴风','ffm3u8':'非凡','snm3u8':'索尼','tpm3u8':'淘片','tkm3u8':'天空',},
|
||||
|
||||
// 服务器解析播放
|
||||
play_parse:true,
|
||||
// play_json 传数组或者 类 true/false 比如 0,1 如果不传会内部默认处理 不传和传0可能效果不同
|
||||
// 效果等同说明: play_json:[{re:'*', json:{jx:0, parse:1}}], 等同于 play_json:0,
|
||||
play_json:[{
|
||||
re:'*',
|
||||
json:{
|
||||
jx:1,
|
||||
parse:1,
|
||||
},
|
||||
}],
|
||||
//控制不同分类栏目下的总页面,不填就是默认999.哔哩影视大部分分类无法翻页,都需要指定页数为 1
|
||||
pagecount:{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1},
|
||||
// 自定义免嗅
|
||||
lazy:'',
|
||||
// 首页推荐显示数量
|
||||
limit:6,
|
||||
double:true,//是否双层列表定位,默认false
|
||||
// 对图片加了referer验证的有效,海阔专用,普通规则请勿填写此键值
|
||||
图片来源:'@Referer=http://www.jianpianapp.com@User-Agent=jianpian-version350',
|
||||
// 替换所有图片链接 欲替换文本=>替换为文本
|
||||
图片替换:'https://www.keke6.app/=>https://vres.a357899.cn/',
|
||||
|
||||
// js写法,仅js模式1有效.可以用于代码动态获取全局cookie之类的
|
||||
// 可操作变量有 rule_fetch_params,rule,以及基础的网页访问request,post等操作
|
||||
预处理:'rule_fetch_params.headers.Cookie = "xxxx";',
|
||||
// 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
|
||||
// 如果是双层定位的话,推荐的第2段分号代码也是第2层定位列表代码
|
||||
推荐:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
|
||||
// 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
|
||||
一级:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
|
||||
//二级发起访问前进行js处理。解决特殊情况一级给出的链接非二级真实源码而是前端重定向链接的源码
|
||||
二级访问前:'log(MY_URL);let jump=request(MY_URL).match(/href="(.*?)"/)[1];log(jump);MY_URL=urljoin2(MY_URL,jump)',
|
||||
// 二级可以是*,表示规则无二级,直接拿一级的链接进行嗅探
|
||||
// 二级 title: 片名;类型
|
||||
// 二级 desc: 主要信息;年代;地区;演员;导演
|
||||
// 或者 {title:'',img:'',desc:'',content:'',tabs:'',lists:'',tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href'} 同海阔dr二级
|
||||
二级:'*',
|
||||
// 搜索可以是*,集成一级,或者跟一级一样的写法 列表;标题;图片;描述;链接;详情
|
||||
搜索:'*',
|
||||
// 本地代理规则,可用于修改m3u8文件文本去广告后返回代理文件地址,也可以代理加密图片
|
||||
proxy_rule:`js:
|
||||
log(input);
|
||||
input = [200,'text;plain','hello drpy']
|
||||
`,
|
||||
//是否启用辅助嗅探: 1,0
|
||||
sniffer:1,
|
||||
// 辅助嗅探规则
|
||||
isVideo:"http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)",
|
||||
// 辅助嗅探规则js写法
|
||||
isVideo:`js:
|
||||
log(input);
|
||||
if(/m3u8/.test(input)){
|
||||
input = true
|
||||
}else{
|
||||
input = false
|
||||
}
|
||||
`,
|
||||
}
|
||||
|
||||
##模板继承写法:
|
||||
var rule = Object.assign(muban.mxpro,{
|
||||
title:'鸭奈飞',
|
||||
host:'https://yanetflix.com',
|
||||
url:'/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||
class_parse:`.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html`,
|
||||
});
|
||||
|
||||
##模板继承写法(新):
|
||||
var rule = {
|
||||
title:'cokemv',
|
||||
模板:'mxpro',
|
||||
host:'https://cokemv.me',
|
||||
class_parse:`.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html`,
|
||||
}
|
||||
|
||||
##模板继承写法(自动匹配)
|
||||
#注意事项:自动匹配只支持能从HOST获取分类的cms模板站,采集1,短视2等api的模板无法匹配
|
||||
var rule = {
|
||||
模板: '自动',
|
||||
模板修改: $js.toString(() => {
|
||||
Object.assign(muban.自动.二级, {
|
||||
tab_text: 'div--small&&Text',
|
||||
});
|
||||
}),
|
||||
title: '剧圈圈[自动]',
|
||||
host: 'https://www.jqqzx.cc/',
|
||||
url: '/vodshow/id/fyclass/page/fypage.html',
|
||||
searchUrl: '/vodsearch**/page/fypage.html',
|
||||
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;.*/(.*?)\.html',
|
||||
cate_exclude: '今日更新|热榜',
|
||||
}
|
||||
|
||||
|
||||
##源正则写法说明:
|
||||
属性class_parse按;分隔后取[3]为分类的正则字符串。
|
||||
这里的正则跟js的/.*/这种写法相比,由于是字符串,需要实现字符串标准。
|
||||
比如想实现 /(\d+)/ 那么字符串写法为 (\\d+)
|
||||
原理是 new RegExp('(\\d+)') = /(\d+)/
|
||||
|
||||
支持js:的属性如果写法用$js.toString(()=>{}),则内部代码不存在正则转义问题。
|
||||
每个源的属性对应的值如果是字符串,可以用反引号``包含起来。
|
||||
避免内部出现单双引号混用等需\转义问题
|
||||
|
||||
|
||||
##js:内置变量
|
||||
input,html,VODS,VOD,TABS,LISTS,MY_CATE,MY_FL
|
||||
getProxyUrl(获取壳子本地代理地址返回 /proxy?do=js的完整链接)
|
||||
|
||||
##本地代理说明:
|
||||
proxy_rule参数input赋值格式为三元素列表[status,content-type,data]
|
||||
如: [200,'text/plain','hello drpy']
|
||||
input = [200,'application/vnd.apple.mpegurl',m3u8]
|
||||
|
||||
##rsa加解密说明:
|
||||
RSA.encode(data, key, option);
|
||||
RSA.decode(data, key, option);
|
||||
|
||||
### 其它类型源说明:
|
||||
默认drpy源都是为早期的tvbox而生的,因此只支持影视类型的源(听书也当影视用)。
|
||||
现在已三端支持,拥抱海阔视界和zyplayer生态。
|
||||
从2024年6月4日起,道长决定让drpy源写法放飞自我,支持更多源类型,不再局限于影视。
|
||||
实验特性:支持 类型:'影视',//影视|听书|漫画|小说
|
||||
影视和听书用法一致不需要调整。
|
||||
漫画需要在选集播放lazy处理后的url里返回 pics:// 协议,用法同海阔。参考源【第一韩漫】
|
||||
小说需要在选集播放lazy处理后的url里返回 novel:// 协议,内容为json文本。如 novel://{"title":"章节名称","content":"章节内容"}
|
||||
##
|
||||
###2024.11.4
|
||||
增加drpy新特性,可以规则内添加搜索验证标识,可以禁止某个源的搜索翻页。
|
||||
|
||||
##广告过滤写法:
|
||||
proxy_rule: `js:
|
||||
let url = input.url;
|
||||
let m3u8 = fixAdM3u8Ai(url);
|
||||
input = [200,'application/vnd.apple.mpegurl',m3u8]
|
||||
`
|
||||
|
||||
##筛选简述:
|
||||
###1.动漫巴士为例:
|
||||
{https://dm84.top/show-1--hits-奇幻--2024-2.html
|
||||
等于:
|
||||
https://dm84.top/show-fyclass--fyfilter-fypage.html}
|
||||
'hits-奇幻--2024'='{{fl.by}}-{{fl.class}}--{{fl.year}}'='fyfilter'
|
||||
###2.参考源内看看屋示例:
|
||||
部分代码:{
|
||||
title:'看看屋',
|
||||
模板:'mxpro',
|
||||
host:'https://www.kkw1200.com',
|
||||
// url:'/vodshow/fyclass--------fypage---.html',//不带筛选的url写法
|
||||
url:'/vodshow/fyfilter.html',//带筛选的url写法
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||
//filter_url:'{{fl.类型}}-{{fl.地区}}-{{fl.排序}}-{{fl.剧情}}-{{fl.语言}}-{{fl.字母}}---fypage---{{fl.年份}}',//filter_url第二种写法,对应地filter里的key也要写成中文
|
||||
//filter_url截取链接:https://www.kkw1200.com/vodshow/8-大陆-hits-喜剧-国语-A---2---2022.html
|
||||
filter: {
|
||||
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"战争片","v":"11"},{"n":"剧情片","v":"12"},{"n":"动画片","v":"34"},{"n":"歌舞片","v":"20"},{"n":"历史片","v":"21"},{"n":"谍战片","v":"22"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"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":"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"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"香港剧","v":"14"},{"n":"欧美剧","v":"15"},{"n":"日本剧","v":"16"},{"n":"海外剧","v":"23"},{"n":"台湾剧","v":"24"},{"n":"韩国剧","v":"25"},{"n":"泰国剧","v":"26"},{"n":"灾难片","v":"27"},{"n":"奇幻片","v":"28"},{"n":"冒险片","v":"29"},{"n":"犯罪片","v":"30"},{"n":"惊悚片","v":"31"},{"n":"传记片","v":"32"},{"n":"悬疑片","v":"33"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"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":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"选秀"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"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"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"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"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"5":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
1:{cateId:'1'},
|
||||
2:{cateId:'2'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'},
|
||||
5:{cateId:'5'}
|
||||
},
|
||||
|
||||
###系统安全验证写法:
|
||||
示例1:
|
||||
function verifyLogin(url) {
|
||||
let cnt = 0;
|
||||
let cookie = '';
|
||||
let r = Math.random();
|
||||
let yzm_url = getHome(url) + '/index.php/verify/index.html';
|
||||
log(`验证码链接:${yzm_url}`);
|
||||
let submit_url = getHome(url) + '/index.php/ajax/verify_check';
|
||||
log(`post登录链接:${submit_url}`);
|
||||
while (cnt < OCR_RETRY) {
|
||||
try {
|
||||
let {cookie, html} = reqCookie(yzm_url + '?r=' + r, {toBase64: true});
|
||||
let code = OcrApi.classification(html);
|
||||
log(`第${cnt + 1}次验证码识别结果:${code}`);
|
||||
html = post(submit_url, {
|
||||
headers: {Cookie: cookie},
|
||||
body: 'type=show&verify=' + code,
|
||||
});
|
||||
html = JSON.parse(html);
|
||||
|
||||
if (html.code === 1) {
|
||||
log(`第${cnt + 1}次验证码提交成功`);
|
||||
log(cookie);
|
||||
return cookie // 需要返回cookie
|
||||
} else if (html.code !== 1 && cnt + 1 >= OCR_RETRY) {
|
||||
cookie = ''; // 需要清空返回cookie
|
||||
}
|
||||
} catch (e) {
|
||||
log(`第${cnt + 1}次验证码提交失败:${e.message}`);
|
||||
if (cnt + 1 >= OCR_RETRY) {
|
||||
cookie = '';
|
||||
}
|
||||
}
|
||||
cnt += 1
|
||||
}
|
||||
return cookie
|
||||
}
|
||||
|
||||
globalThis.verifyLogin = verifyLogin;
|
||||
|
||||
示例2:
|
||||
|
||||
###自定义免嗅探:
|
||||
示例1:
|
||||
lazy: $js.toString(() => {
|
||||
let html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||
let url = html.url;
|
||||
if (html.encrypt == '1') {
|
||||
url = unescape(url)
|
||||
} else if (html.encrypt == '2') {
|
||||
url = unescape(base64Decode(url))
|
||||
}
|
||||
if (/\.m3u8|\.mp4/.test(url)) {
|
||||
input = {
|
||||
jx: 0,
|
||||
url: url,
|
||||
parse: 0
|
||||
}
|
||||
} else {
|
||||
input
|
||||
};
|
||||
const video = document.getElementById('myVideo');
|
||||
video.addEventListener('canplay', function () {
|
||||
video.currentTime = 10;
|
||||
});
|
||||
}),
|
||||
示例2:
|
||||
lazy : `js:
|
||||
if(/\\.(m3u8|mp4)/.test(input)){
|
||||
input = {parse:0,url:input}
|
||||
}else{
|
||||
if(rule.parse_url.startsWith('json:')){
|
||||
let purl = rule.parse_url.replace('json:','')+input;
|
||||
let html = request(purl);
|
||||
input = {parse:0,url:JSON.parse(html).url}
|
||||
}else{
|
||||
input= rule.parse_url+input;
|
||||
}
|
||||
`,
|
||||
示例3:
|
||||
lazy: $js.toString(() => {
|
||||
input = jxx(input);
|
||||
}),
|
||||
|
||||
示例4:
|
||||
lazy: $js.toString(() => {
|
||||
let ep = 1;
|
||||
let match = input.match(/ep=(.*?)$/);
|
||||
if (match) {
|
||||
ep = match[1];
|
||||
}
|
||||
//log(ep)
|
||||
let html = request(input);
|
||||
let jsonA = jsp.pdfh(html, "#__NEXT_DATA__&&Html");
|
||||
let data = JSON.parse(jsonA).props.pageProps.videoDetail.videoepisode.data;
|
||||
//log(data)
|
||||
let item = data.find(function(it) {
|
||||
return it.episode == ep;
|
||||
});
|
||||
let realUrl = item ? item.url : (data.length > 0 ? data[0].url : undefined);
|
||||
//log(realUrl)
|
||||
input = {
|
||||
url: realUrl,
|
||||
parse: 0
|
||||
};
|
||||
}),
|
||||
|
||||
示例5:
|
||||
lazy: $js.toString(() => {
|
||||
let html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||
let url = html.url;
|
||||
if (html.encrypt == '1') {
|
||||
url = unescape(url)
|
||||
} else if (html.encrypt == '2') {
|
||||
url = unescape(base64Decode(url))
|
||||
}
|
||||
if (/\.m3u8|\.mp4/.test(url)) {
|
||||
input = {
|
||||
jx: 0,
|
||||
url: url,
|
||||
parse: 0
|
||||
}
|
||||
} else {
|
||||
input
|
||||
}
|
||||
}),
|
||||
|
||||
###推荐&一级&二级&搜索写法:
|
||||
示例1:
|
||||
推荐: $js.toString(() => {
|
||||
let bdata = vodlist(0, 1);
|
||||
console.log(bdata);
|
||||
bdata.forEach(it => {
|
||||
d.push({
|
||||
url: it.vod_id,
|
||||
title: it.vod_name,
|
||||
img: it.vod_pic,
|
||||
desc: it.vod_remarks
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
一级: $js.toString(() => {
|
||||
let bdata = vodlist(input, MY_PAGE);
|
||||
console.log(bdata);
|
||||
bdata.forEach(it => {
|
||||
d.push({
|
||||
url: it.vod_id,
|
||||
title: it.vod_name,
|
||||
img: it.vod_pic,
|
||||
desc: it.vod_remarks
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
二级: $js.toString(() => {
|
||||
console.log("调试信息2" + input);
|
||||
let data = vodids(input);
|
||||
//console.log(data);
|
||||
VOD = (data);
|
||||
}),
|
||||
搜索: $js.toString(() => {
|
||||
let ddata = seach(input);
|
||||
ddata.forEach(it => {
|
||||
d.push({
|
||||
url: it.vod_id,
|
||||
title: it.vod_name,
|
||||
img: it.vod_pic,
|
||||
desc: it.vod_remarks
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
|
||||
示例2:
|
||||
一级二:'.ewave-vodlist&&li;.lazyload&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||
一级: $js.toString(() => {
|
||||
let cookie = getItem(RULE_CK, '');
|
||||
//log('储存的cookie:' + cookie);
|
||||
let ret = request(MY_URL, {
|
||||
headers: {
|
||||
Referer: encodeUrl(MY_URL),
|
||||
Cookie: cookie,
|
||||
}
|
||||
});
|
||||
if (/系统安全验证/.test(ret)) {
|
||||
//log(ret);
|
||||
cookie = verifyLogin(MY_URL);
|
||||
if (cookie) {
|
||||
log(`本次成功过验证,cookie:${cookie}`);
|
||||
setItem(RULE_CK, cookie);
|
||||
} else {
|
||||
log(`本次验证失败,cookie:${cookie}`);
|
||||
}
|
||||
ret = request(MY_URL, {
|
||||
headers: {
|
||||
Referer: encodeUrl(MY_URL),
|
||||
Cookie: cookie,
|
||||
}
|
||||
});
|
||||
}
|
||||
//log(ret);
|
||||
let d = [];
|
||||
let p = rule.一级二.split(';');
|
||||
let arr = pdfa(ret, p[0]);//列表
|
||||
arr.forEach(it => {
|
||||
d.push({
|
||||
title: pdfh(it, p[1]),//标题
|
||||
pic_url: pdfh(it, p[2]),//图片
|
||||
desc: pdfh(it, p[3]),//描述
|
||||
url: pdfh(it, p[4]),//链接
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
********
|
||||
搜索: `js:
|
||||
let cookie = getItem(RULE_CK,'');
|
||||
// let cookie = '';
|
||||
log('储存的cookie:'+cookie);
|
||||
let hhtml=request(input,{withHeaders:true,headers:{Cookie:cookie}});
|
||||
let json = JSON.parse(hhtml);
|
||||
let html = json.body;
|
||||
let setCk = Object.keys(json).find(it=>it.toLowerCase()==='set-cookie');
|
||||
cookie = setCk ? json[setCk] : cookie;
|
||||
// 3个set-Cookie
|
||||
if (Array.isArray(cookie)) {
|
||||
cookie = cookie.join(';');
|
||||
}
|
||||
cookie = cookie.split(';')[0];
|
||||
log('set-cookie:'+cookie);
|
||||
let code='';
|
||||
if(/erphp-search-captcha/.test(html)){
|
||||
code = jsp.pdfh(html,'.erphp-search-captcha--button&&Text');
|
||||
if(code.includes('=')){
|
||||
let a = code.replace('=','').replace(/ /g,'');
|
||||
code = eval(a);
|
||||
log('回答验证码:'+a+' 答案:'+code);
|
||||
}
|
||||
let key = jsp.pdfh(html,'.erphp-search-captcha&&input&&name');
|
||||
let body = key+'='+code;
|
||||
post(input,{body:body,headers:{Cookie:cookie}});
|
||||
setItem(RULE_CK,cookie);
|
||||
html = getHtml(input);
|
||||
}
|
||||
// log(html);
|
||||
VODS = [];
|
||||
let lis=pdfa(html,'.search_list&&ul&&li');
|
||||
log(lis.length);
|
||||
lis.forEach(function(it){
|
||||
VODS.push({
|
||||
vod_id: pd(it,'a&&href',input),
|
||||
vod_name: pdfh(it,'h3.dytit&&Text'),
|
||||
vod_pic: pd(it,'img.lazy&&data-original',input),
|
||||
vod_remarks: pdfh(html,'.jidi&&Text')
|
||||
});
|
||||
|
||||
});
|
||||
`,
|
||||
|
||||
示例3:
|
||||
一级: 'json:list;vod_name;vod_pic;vod_remarks;vod_id',
|
||||
二级: `js:
|
||||
let kdata = JSON.parse(request(input)).data;
|
||||
VOD = kdata;
|
||||
VOD.type_name = kdata.vod_class
|
||||
`,
|
||||
搜索: 'json:list;name;pic;;id',
|
||||
|
||||
示例4:
|
||||
搜索: $js.toString(() => {
|
||||
let html = post(input.split('?')[0], {body: input.split('?')[1]});
|
||||
let items = pdfa(html, 'rss&&item');
|
||||
// log(items);
|
||||
let d = [];
|
||||
items.forEach(it => {
|
||||
it = it.replace(/title|link|author|pubdate|description/g, 'p');
|
||||
let url = pdfh(it, 'p:eq(1)&&Text');
|
||||
d.push({
|
||||
title: pdfh(it, 'p&&Text'),
|
||||
url: url,
|
||||
desc: pdfh(it, 'p:eq(3)&&Text'),
|
||||
content: pdfh(it, 'p:eq(2)&&Text'),
|
||||
pic_url: "",
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
|
||||
示例5:
|
||||
推荐: $js.toString(() => {
|
||||
let html = fetch(input);
|
||||
let j = pdfh(html, "#__NEXT_DATA__&&Html");
|
||||
let json = JSON.parse(j);
|
||||
let list = json.props.pageProps;
|
||||
//let list = json.props.pageProps.recommendSectionData.list;
|
||||
list = JP.JSONPath("$.['columnSectionData'][*]['popular_list']['video_info'][*]", list);
|
||||
//log(JSON.stringify(list,null,2));
|
||||
//log(list)
|
||||
VODS = list.map(function(it) {
|
||||
it.vod_pic = it.cover;
|
||||
it.vod_remarks = it.tag;
|
||||
it.vod_name = it.name;
|
||||
it.vod_id = HOST + "/detail/" + it.id;
|
||||
return it
|
||||
});
|
||||
}),
|
||||
一级: $js.toString(() => {
|
||||
let html = fetch(input);
|
||||
let j = pdfh(html, "#__NEXT_DATA__&&Html");
|
||||
let json = JSON.parse(j);
|
||||
let list = json.props.pageProps.mediaData.data;
|
||||
//log(list)
|
||||
VODS = list.map(function(it) {
|
||||
it.vod_pic = it.cover;
|
||||
it.vod_remarks = it.tag;
|
||||
it.vod_name = it.name;
|
||||
it.vod_id = HOST + "/detail/" + it.id;
|
||||
return it
|
||||
});
|
||||
}),
|
||||
二级: {
|
||||
"title": "h1&&Text",
|
||||
"img": "img&&src",
|
||||
"desc": "video-desc-item&&Text;.video-desc-type-mb&&Text",
|
||||
"content": ".video-introduce&&p&&Text",
|
||||
"tabs": ".btn-play",
|
||||
lists: $js.toString(() => {
|
||||
LISTS = [];
|
||||
let j = pdfh(html, "#__NEXT_DATA__&&Html");
|
||||
let list = pdfa(html, ".play-list&&a");
|
||||
if (list.length == 0) {
|
||||
LISTS.push(["1$" + MY_URL.replace("detail", "player")])
|
||||
} else {
|
||||
list = list.map(it => pdfh(it, 'Text') + "$" + HOST + pdfh(it, 'a&&href'));
|
||||
LISTS.push(list)
|
||||
}
|
||||
//log(LISTS)
|
||||
}),
|
||||
},
|
||||
搜索: $js.toString(() => {
|
||||
let html = fetch(input);
|
||||
let j = pdfh(html, "#__NEXT_DATA__&&Html");
|
||||
let json = JSON.parse(j);
|
||||
let list = json.props.pageProps.searchMovieList.data;
|
||||
//log(list)
|
||||
VODS = list.map(function(it) {
|
||||
it.vod_pic = it.pic;
|
||||
it.vod_remarks = it.resolution;
|
||||
it.vod_name = it.name;
|
||||
it.vod_id = HOST + "/detail/" + it.id;
|
||||
return it
|
||||
});
|
||||
}),
|
||||
|
||||
示例6:
|
||||
一级:`js:
|
||||
var d = [];
|
||||
pdfh = jsp.pdfh;
|
||||
pdfa = jsp.pdfa;
|
||||
pd = jsp.pd;
|
||||
var html = request(input, {
|
||||
withHeaders: true
|
||||
});
|
||||
let json = JSON.parse(html);
|
||||
let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie");
|
||||
let cookie = setCk ? json[setCk].split(";")[0] : "";
|
||||
fetch_params.headers.Cookie = cookie;
|
||||
html = JSON.parse(html).body;
|
||||
if (/检测中/.test(html)) {
|
||||
html = request(input + "?btwaf" + html.match(/btwaf(.*?)\"/)[1], fetch_params)
|
||||
}
|
||||
let list = pdfa(html, "ul.stui-vodlist&&li");
|
||||
list.forEach(it => {
|
||||
d.push({
|
||||
title: pdfh(it, "a&&title"),
|
||||
desc: pdfh(it, ".pic-text&&Text"),
|
||||
pic_url: pd(it, ".lazyload&&data-original"),
|
||||
url: pd(it, "a&&href")
|
||||
})
|
||||
});
|
||||
setResult(d)
|
||||
`,
|
||||
二级:`js:
|
||||
pdfh = jsp.pdfh;
|
||||
pdfa = jsp.pdfa;
|
||||
pd = jsp.pd;
|
||||
VOD = {};
|
||||
var html = request(input, {
|
||||
withHeaders: true
|
||||
});
|
||||
let json = JSON.parse(html);
|
||||
let setCk = Object.keys(json).find((it) => it.toLowerCase() === "set-cookie");
|
||||
let cookie = setCk ? json[setCk].split(";")[0] : "";
|
||||
fetch_params.headers.Cookie = cookie;
|
||||
html = JSON.parse(html).body;
|
||||
if (/检测中/.test(html)) {
|
||||
html = request(input + "?btwaf" + html.match(/btwaf(.*?)\"/)[1], fetch_params)
|
||||
}
|
||||
VOD.vod_name = pdfh(html, ".stui-content__detail&&h1--span&&Text");
|
||||
VOD.type_name = pdfh(html, ".data--span:eq(0)&&Text");
|
||||
VOD.vod_pic = pd(html, ".stui-content__thumb&&img&&data-original");
|
||||
VOD.vod_remarks = pdfh(html, ".stui-content__thumb&&pic-text&&Text");
|
||||
VOD.vod_actor = pdfh(html, ".data--span:eq(1)&&Text");
|
||||
VOD.vod_director = pdfh(html, ".data--span:eq(2)&&Text");
|
||||
VOD.vod_content = pdfh(html, ".desc.hidden-xs--a&&Text");
|
||||
let playFrom = [];
|
||||
let vod_tab_list = [];
|
||||
let tabs = pdfa(html, "body .stui-pannel__head.bottom-line");
|
||||
tabs.forEach((it) => {
|
||||
playFrom.push(pdfh(it, "h3&&Text"))
|
||||
});
|
||||
for (let i = 0; i < playFrom.length; i++) {
|
||||
let p1 = ".stui-content__playlist:eq(#id)&&li".replaceAll("#id", i);
|
||||
let new_vod_list = [];
|
||||
let vodList = [];
|
||||
try {
|
||||
vodList = pdfa(html, p1)
|
||||
} catch (e) {}
|
||||
for (let i = 0; i < vodList.length; i++) {
|
||||
let it = vodList[i];
|
||||
new_vod_list.push(pdfh(it, "body&&Text").trim() + "$" + pd(it, "a&&href"))
|
||||
}
|
||||
let vlist = new_vod_list.join("#");
|
||||
vod_tab_list.push(vlist)
|
||||
}
|
||||
VOD.vod_play_from = playFrom.join("$$$");
|
||||
VOD.vod_play_url = vod_tab_list.join("$$$");
|
||||
`,
|
||||
搜索:`js:
|
||||
var d = [];
|
||||
pdfh = jsp.pdfh;
|
||||
pdfa = jsp.pdfa;
|
||||
pd = jsp.pd;
|
||||
var html = request(input, {
|
||||
withHeaders: true
|
||||
});
|
||||
let json = JSON.parse(html);
|
||||
let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie");
|
||||
let cookie = setCk ? json[setCk].split(";")[0] : "";
|
||||
fetch_params.headers.Cookie = cookie;
|
||||
html = JSON.parse(html).body;
|
||||
if (/检测中/.test(html)) {
|
||||
html = request(input + "?btwaf" + html.match(/btwaf(.*?)\"/)[1], fetch_params)
|
||||
}
|
||||
let list = pdfa(html, ".stui-vodlist__media&&li");
|
||||
list.forEach(it => {
|
||||
d.push({
|
||||
title: pdfh(it, "a&&title"),
|
||||
desc: pdfh(it, ".pic-text&&Text"),
|
||||
pic_url: pd(it, ".lazyload&&data-original"),
|
||||
url: pd(it, "a&&href")
|
||||
})
|
||||
});
|
||||
setResult(d)
|
||||
`,
|
||||
|
||||
示例7:
|
||||
推荐/一级/搜索: $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")
|
||||
}
|
||||
});
|
||||
}),
|
||||
|
||||
###zyfun抓取采集源方式代码(点击zy写源工具中'首页'抓取)
|
||||
var rule = {
|
||||
推荐: $js.toString(() => {
|
||||
let url = 'https://blog.ilol.top/p/zqgwes.html';
|
||||
let html = request(url);
|
||||
let tlist = pdfa(html, '.post-content&&h2');
|
||||
log(tlist)
|
||||
let alist = pdfa(html, '.post-content&&a:gt(0)');
|
||||
log(alist);
|
||||
|
||||
VODS = [];
|
||||
|
||||
for (let i in tlist) {
|
||||
VODS.push({
|
||||
name: pdfh(tlist[i], 'Text'),
|
||||
url: pdfh(alist[i], 'a&&href'),
|
||||
})
|
||||
}
|
||||
log(JSON.stringify(VODS))
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
###筛选分类获取:
|
||||
filter获取方法:`
|
||||
let value = [];
|
||||
$('ul').eq(2).find('li').each(function() {
|
||||
// console.log($(this).text());
|
||||
let n = $(this).text().trim();
|
||||
value.push({
|
||||
'n': n, 'v': n
|
||||
});
|
||||
});
|
||||
// 电影执行:
|
||||
let data = {'movie': [{'key': 'tag', 'name': '标签', 'value': value}]};
|
||||
console.log(JSON.stringify(data));
|
||||
|
||||
//剧集执行:
|
||||
let data = {'tv': [{'key': 'tag', 'name': '标签', 'value': value}]};
|
||||
console.log(JSON.stringify(data));
|
||||
`,
|
||||
@@ -0,0 +1,84 @@
|
||||
●多jar链接写法,根据app版本来:
|
||||
Pluto Player版本:
|
||||
{"key":"","name":"","api":"","type":3,"filterable":1,"quickSearch":1,"searchable":1,"plugin":"http:///.jar"},
|
||||
|
||||
这个:
|
||||
{"key":"","name":"","type":3,"api":"","searchable":1,"quickSearch":1,"filterable":1,"spider":"http:///.jar"},
|
||||
|
||||
俊佬版本多jar链接写法:
|
||||
{"key":"","name":"","type":3,"api":"***","searchable":1,"quickSearch":1,"filterable":1,"jar":"your_other_jar"},
|
||||
|
||||
|
||||
●json内资源格式参数介绍
|
||||
{"key":"key_〔资源名称〕",
|
||||
|
||||
"name":"资源名称",
|
||||
|
||||
"type":0,
|
||||
|
||||
"api":"csp_〔jar内文件名称〕",
|
||||
|
||||
"searchable":1,
|
||||
|
||||
"quickSearch":1,
|
||||
|
||||
"filterable":0,
|
||||
|
||||
"jar":"〔jar文件地址〕",
|
||||
|
||||
"ext":"〔txt json文件地址〕",
|
||||
|
||||
"playUrl": "〔播放解析地址〕",
|
||||
|
||||
"click": "ddys.tv;#vjsp > button"
|
||||
|
||||
"categories":["〔自定义资源列表〕",
|
||||
|
||||
"〔自定义资源列表〕"] }
|
||||
|
||||
|
||||
●jar包缝合教程:
|
||||
☆暴力缝合,非代码修改。
|
||||
①准备工作:MT管理器或者NP管理器,B包要用的包,A包要导出的包。
|
||||
②开始:A包中merge重命名,展开重命名的merge,选中需要导出的文件,导出。打开B包,导入刚才导出的重命名的merge文件,保存退出。B包就是缝合好的包。
|
||||
③多试几次,关键是找个好用的MT或者NP。不是你不会,是因为你的MT或着NP没那个功能。
|
||||
|
||||
●api解释:
|
||||
|
||||
csp_XPath 普通套娃
|
||||
|
||||
csp_XPathMac 直链套娃
|
||||
|
||||
csp_XPathFilter 普通套娃带筛选
|
||||
|
||||
csp_XPathMacFilter 直链套娃带筛选
|
||||
|
||||
csp_XPathEgg 蛋蛋赞自定义套娃
|
||||
|
||||
套娃依赖自定义爬虫jar,同样需要在自定义json中加入相应的配置,type=3, api为csp_XPath,套娃相关规则配置在ext字段中,注意:ext字段值只能是字符串
|
||||
|
||||
为控制配置文件容量,同时支持在ext字段中直接配置规则和拉取规则的网址。 2021.10.21 by 小黄瓜
|
||||
|
||||
接口指定播放器写法示例:
|
||||
|
||||
{
|
||||
|
||||
"key": "csp_key",
|
||||
|
||||
"name": "api(SP)",
|
||||
|
||||
"type": 3,
|
||||
|
||||
"api": "csp_api",
|
||||
|
||||
"playerType": 1, // 新增字段,用来为该爬虫指定播放器 0:system, 1:ijk, 2:exo, 10:mx,11:Reex,12:Kodi.默认-1为配置页面设置的播放器(app/src/main/java/com/github/tvbox/osc/util/PlayerHelper.java...161行)
|
||||
|
||||
"searchable": 1,
|
||||
|
||||
"quickSearch": 1,
|
||||
|
||||
"filterable": 1
|
||||
|
||||
},
|
||||
|
||||
exo会清晰点。exo不能播阿里系,小苹果。
|
||||
@@ -0,0 +1,267 @@
|
||||
🐝🐝🐝🐝🐝🐝🐝🐝🐝🐝🐝
|
||||
蜂蜜的影视APP功能与操作说明
|
||||
|
||||
# 通用(特殊)功能
|
||||
* 版本号 点按正式版更新 长按内测版更新
|
||||
* 单条点播站源或直播列表配置可指定播放器
|
||||
(添加"playerType": 0,1,2 0:系统播放器 1: IJK 2: EXO 不写则默认跟随接口设定)
|
||||
* 本地接口兼容TVB接口协议 自动转 file:// 协议
|
||||
(clan://localhost/ 和 clan://)
|
||||
* 本地接口配置可浏览模式直接选中接口文件
|
||||
* 支持多线路接口识别
|
||||
(请参考仓库范例)
|
||||
* EXO 支持带验证的地址
|
||||
* 支持油管直播点播解析
|
||||
(网址要包含www.youtube.com才会解
|
||||
大陆地区需要翻墙)
|
||||
* 支持缓存清理
|
||||
* 支持DOH
|
||||
(即dns服务 可接口写入)
|
||||
* EXO: 隧道模式 连线方式 ua模式
|
||||
( APP设置 播放器切换到EXO
|
||||
然后长按即可弹窗
|
||||
隧道模式即原音原画直通输出模式
|
||||
必须使用 SurfaceView 需要高级设备支持
|
||||
一般不需打开此功能)
|
||||
* IJK:ua模式
|
||||
(类同EXO操作)
|
||||
* 自动切换播放器
|
||||
* 支持荐片协议地址(jianpian://)
|
||||
|
||||
# 点播功能
|
||||
* 支持投屏
|
||||
(手机端投>TV端&接口一同投送和支持DLNA接收的设备)
|
||||
* 内置聚合解析
|
||||
* 支持语音搜索
|
||||
* 支持 HTTP/3&smb 协议
|
||||
* 支持略过广告切片/支持rules规则
|
||||
(20230518内测版起壳不再自动略过广告
|
||||
需写切片广告规则到接口配置食用
|
||||
注意:此规则配置暂不能兼容TVB等APP)
|
||||
* 支持邻近装置互动
|
||||
* 轨道切换自动记忆
|
||||
* 片头片尾快捷标记与微调(手机端无微调)
|
||||
(TV端方向上键+OK.以影片时间一半前后
|
||||
为标准设定片头/片尾 对焦后上下键微调)
|
||||
* 刷新、重播一键切换
|
||||
(TV端独有 长按切换 点按实现当前功能
|
||||
手机端详情页下拉刷新)
|
||||
* TV端支持分类刷新
|
||||
(焦点分类上键刷新 老版本 长按刷新)
|
||||
* 自动换线路,换站源
|
||||
(可配置设定关闭换源 添加"switchable": 0
|
||||
配置载入过久可返回也可APP设定关闭)
|
||||
* 收藏的影片可自动切换至该接口
|
||||
* 采用最新MD3和影魔IJK播放器支持软硬解
|
||||
* 支援调用idm+下载影片
|
||||
(手机版独有功能 详细页播放器窗口分享按钮 >选择idm+即可下载)
|
||||
* 全屏状态下支持选集播放
|
||||
(手机版详情页选集后面的"更多"按钮也可选择更多的片集)
|
||||
* 支持单集播放循环
|
||||
(需播放器菜单栏开启)
|
||||
* 支持列表模式显示
|
||||
(alist one等网盘和本地视频体验最佳)
|
||||
* 配置载入过久可返回
|
||||
* 搜索支持文件夹格式
|
||||
* 支持同步收藏和观看纪录
|
||||
(20230606版起覆盖同步 请无视下面规则)
|
||||
(需手机和电视更新到最新版 )
|
||||
同步规则(接口配置一同同步):
|
||||
1. 双向同步
|
||||
(手机 <—> 电视
|
||||
手机 <—> 手机
|
||||
电视 <XX>电视)
|
||||
2. 同一部片新的盖掉旧的
|
||||
(比如手机昨天放第二集
|
||||
今天电视播放第一集
|
||||
那么同步同为第一集)
|
||||
3. 不存在则新增纪录同步规则
|
||||
* 支持手动换源
|
||||
(手机版详情页长按片名复现)
|
||||
* 支持假熄屏
|
||||
(手机版独有:画中画模式可熄屏播放)
|
||||
* 支持js,py本地代理
|
||||
* js 支持外挂 jar
|
||||
* 支持【猫影视】js 格式
|
||||
* TV端支持站点观看记录无痕设置
|
||||
(设置 >小房子)
|
||||
* TV端站点支持多列显排设置
|
||||
(同上操作)
|
||||
* 搜索支持翻页
|
||||
(选择支持多页搜索的站源一目了然)
|
||||
* 支持站点无痕播放
|
||||
(接口站点配置可添加"recordable":0参数复现 也可APP设定)
|
||||
* 无播放记录时支持(线路)手动播放
|
||||
(设置栏播放器长按设置)
|
||||
* 播放音频支持显示广播封面
|
||||
* 支持多视图模式
|
||||
(站点添加"viewType": 0-5)
|
||||
0:默认,1:放大,2:圆形,
|
||||
3:海报,4:横向单列中图带片名,
|
||||
5:横向单列小图带片名
|
||||
(当图片无法加载时其他模式也显示该模式)
|
||||
|
||||
# 直播功能
|
||||
* 带密码分组隐藏
|
||||
(狂点收藏5次弹框输入密码后才能显示分组
|
||||
电视端1.7.8版起 配置添加"pass" : true
|
||||
可以直接显示密码分类
|
||||
已收藏的密码分类的频道也可显示食用)
|
||||
* 支持多条直播源列表(俗称直播接口)
|
||||
* 配置支持常规txt m3u格式和影视独有的jso途同归n格式直播列表
|
||||
(即配置"type": 0和1的区别)
|
||||
* 配置可设定 EPG 地址
|
||||
(节目信息和logo)
|
||||
* 配置可设定启动 App 进入直播
|
||||
(添加 "boot": true)
|
||||
* 支持 p2p~p9p、mitv、zlive、tvbus 等特殊协议
|
||||
(64位APP不支持)
|
||||
* 配置支持header/ua/referer
|
||||
(个别源需要添加此项一种或多钟方可正常播放)
|
||||
|
||||
# 推送功能
|
||||
* 内置直链推送服务
|
||||
(无接口配置直链也可推送播放)
|
||||
* 手机版支持粘贴板识别
|
||||
(也可自行选择粘贴板)
|
||||
* 手机版支持本地视频播放
|
||||
* 支持推送 迅雷全家桶链接和http种子
|
||||
|
||||
瞎操作说明:
|
||||
|
||||
解密链接☞ ?url=
|
||||
|
||||
加密链接(仅支持非图床和非pk密码接口)
|
||||
?jm=1&url=
|
||||
|
||||
格式如下:(多个格式链接 任选一)
|
||||
m=0 ☞ 图床(默认可不填)
|
||||
img=图片链接(默认可不填 下同)
|
||||
?jm=1&url=配置链接&m=0&img=图片链接
|
||||
?jm=1&url=配置链接&img=图片链接
|
||||
?jm=1&url=配置链接&m=0
|
||||
?jm=1&url=配置链接
|
||||
|
||||
m=1 ☞ pk密码模式 接口格式 地址;pk;密码
|
||||
秘钥字串位数不能大于16 (下同)
|
||||
?jm=1&url=配置链接&m=1&key=秘钥
|
||||
|
||||
m=2 ☞ 转2423
|
||||
偏移量字串位数不能大于13 (默认可不填 下同)
|
||||
?jm=1&url=配置链接&m=2&key=秘钥&iv=偏移量
|
||||
?jm=1&url=配置链接&m=2&key=秘钥
|
||||
|
||||
m=3 ☞ 转2423➕图床
|
||||
?jm=1&url=配置链接&m=3&key=秘钥&iv=偏移量&img=图片链接
|
||||
?jm=1&url=配置链接&m=3&key=秘钥&iv=偏移量
|
||||
?jm=1&url=配置链接&m=3&key=秘钥
|
||||
|
||||
接口合併链接(支持加密&jm=1)☞ ?sub=
|
||||
|
||||
影視TV版 影視手機/平板版
|
||||
官方發佈頻道 https://t.me/fongmi_release
|
||||
|
||||
官方交流群 https://t.me/fongmi_offical
|
||||
|
||||
官方開源倉庫 https://github.com/fongmi/tv
|
||||
|
||||
最新APP仓库下载 https://github.com/FongMi/TV/releases
|
||||
|
||||
官方爬虫仓库 https://github.com/FongMi/CatVodSpider
|
||||
|
||||
蜂蜜原裝接口
|
||||
可用 >https://raw.githubusercontent.com/FongMi/CatVodSpider/main/json/config.json
|
||||
|
||||
网友自制蜂蜜接口轉發
|
||||
(由於蜂蜜原裝接口沒有添加加速鏈 然而生之 每30分钟同步一次 國內專用)
|
||||
18+ >https://ts--ly23.repl.co/fm18
|
||||
http://大屌蜂蜜.eu.org
|
||||
|
||||
|
||||
正规 >https://ts--ly23.repl.co/fmtv
|
||||
http://蜂蜜.eu.org
|
||||
|
||||
|
||||
本APP是臺灣大佬蜂蜜(活雷鋒)一人始於2022.06.22基于猫影视制作而成,功能强大且完全免费无广告。更多功能与操作说明请點擊這裡查看!!!
|
||||
|
||||
|
||||
影視*最新版本更新详情与下载链接
|
||||
网页下載 如果不能下载 代表蜂蜜仓库删文件了 首頁三個版本下載默認推薦的正式版(国内) 需要更多版本和海外下载請點擊"更多"按鈕
|
||||
各设备版本推荐:
|
||||
手机:📱py-v7a/📱py-v8a
|
||||
平板:📱py-v7a
|
||||
5.1++电视:📺py-v7a
|
||||
4.1-4.4电视:4.1📺py-v7a
|
||||
|
||||
版本区别:py(python)版比js(java)版多支持月佬的py站源,v7a即32位,v8a即64位。32/64位是设备核心支持位数 如果不知道什么位和哪个版本就按照推荐下载啦
|
||||
原来所有链接一直有效 新增以下首页链接
|
||||
影视.eu.org 影視.eu.org ewwe.gq ly.100km.top
|
||||
由于网页部署在replit 它时常抽风 可能导致无法访问 请见谅
|
||||
其他影视代言人首页 100km.top www.0701.gq
|
||||
|
||||
网页底部有所有版本下载列表 中文下载对应国内 英文对应海外 首页那个更多按钮可以直达下载列表
|
||||
|
||||
本频道將已推送過的APP 定期轉存到(需要的請點) ->>這裡
|
||||
|
||||
TVB/影视接口(瞎操作说明) https://api.ys66.repl.co
|
||||
?url= >>加密(jm=1)&解密
|
||||
?sub= >>接口合并(需规则文件直链)(支持加密)
|
||||
|
||||
*###-----*------*------###*
|
||||
接口加密/解密 https://api.ys66.repl.co?url=
|
||||
|
||||
接口合并(可加密) https://api.ys66.repl.co?sub=
|
||||
|
||||
其他参数说明在文件内,但该文件是做合并接口实例的 ,谨记!谨记!最后最好删除所有注释,以防报错。
|
||||
飞机群
|
||||
讨论群发
|
||||
https://t.me/fongmi_offical
|
||||
频道
|
||||
https://t.me/fongmi_release
|
||||
|
||||
調整 viewType 改為 style
|
||||
|
||||
type 有 4 種模式
|
||||
rect、oval、full、list
|
||||
|
||||
ratio 為比例 寬/高
|
||||
預設為直向 3:4 = 0.75
|
||||
修改橫向 4:3 則是 1.33
|
||||
|
||||
範例:
|
||||
直式 "style":{ "type":"rect" }
|
||||
橫式 "style":{ "type":"rect", "ratio":1.33 }
|
||||
正方 "style":{ "type":"rect", "ratio":1 }
|
||||
正圓 "style":{ "type":"oval" }
|
||||
橢圓 "style":{ "type":"oval", "ratio":1.1 }
|
||||
|
||||
点播栏位
|
||||
|
||||
searchable:搜索 (0:關閉、1:啟用)
|
||||
changeable:換源 (0:關閉、1:啟用)
|
||||
playerType:播放器 (1:IJK、2:EXO)
|
||||
|
||||
直播栏位
|
||||
|
||||
ua:用戶代理
|
||||
referer:參照位址
|
||||
epg:節目網址
|
||||
logo:台標網址
|
||||
pass:是否免密碼
|
||||
boot:是否自動開啟
|
||||
playerType:播放器
|
||||
recordable = 0 不記憶
|
||||
配置范例
|
||||
|
||||
点播-线上
|
||||
https://gh-proxy.com/https://github.com/FongMi/TV/blob/dev/other/sample/vod/online.json
|
||||
点播-本地
|
||||
https://gh-proxy.com/https://github.com/FongMi/TV/blob/dev/other/sample/vod/offline.json
|
||||
直播-线上
|
||||
https://gh-proxy.com/https://github.com/FongMi/TV/blob/dev/other/sample/live/online.json
|
||||
直播-本地
|
||||
https://gh-proxy.com/https://github.com/FongMi/TV/blob/dev/other/sample/live/offline.json
|
||||
"User-Agent"
|
||||
爬蟲規則與上方一致
|
||||
已更新到我倉庫
|
||||
請合併 Vod.java
|
||||
Binary file not shown.
@@ -0,0 +1,213 @@
|
||||
# 影視
|
||||
|
||||
### 基於 CatVod 項目
|
||||
|
||||
https://github.com/CatVodTVOfficial/CatVodTVJarLoader
|
||||
|
||||
### 點播欄位
|
||||
|
||||
| 欄位名稱 | 預設值 | 說明 | 其他 |
|
||||
|------------|------|------|------------|
|
||||
| searchable | 1 | 是否搜索 | 0:關閉;1:啟用 |
|
||||
| changeable | 1 | 是否換源 | 0:關閉;1:啟用 |
|
||||
| quickserch | 1 | 是否快搜 | 0:關閉;1:啟用 |
|
||||
| indexs | 0 | 是否聚搜 | 0:關閉;1:啟用 |
|
||||
| hide | 0 | 是否隱藏 | 0:顯示;1:隱藏 |
|
||||
| timeout | 15 | 播放超時 | 單位:秒 |
|
||||
| header | none | 請求標頭 | 格式:json |
|
||||
| click | none | 點擊js | javascript |
|
||||
|
||||
### 直播欄位
|
||||
|
||||
| 欄位名稱 | 預設值 | 說明 | 其他 |
|
||||
|----------|-------|-------|------------|
|
||||
| ua | none | 用戶代理 | |
|
||||
| origin | none | 來源 | |
|
||||
| referer | none | 參照地址 | |
|
||||
| epg | none | 節目地址 | |
|
||||
| logo | none | 台標地址 | |
|
||||
| pass | false | 是否免密碼 | |
|
||||
| boot | false | 是否自啟動 | |
|
||||
| timeout | 15 | 播放超時 | 單位:秒 |
|
||||
| header | none | 請求標頭 | 格式:json |
|
||||
| click | none | 點擊js | javascript |
|
||||
| catchup | none | 回看參數 | |
|
||||
| timeZone | none | 時區 | |
|
||||
|
||||
### 樣式
|
||||
|
||||
| 欄位名稱 | 值 | 說明 |
|
||||
|-------|------|-----|
|
||||
| type | rect | 矩形 |
|
||||
| | oval | 橢圓 |
|
||||
| | list | 列表 |
|
||||
| ratio | 0.75 | 3:4 |
|
||||
| | 1.33 | 4:3 |
|
||||
|
||||
直式
|
||||
|
||||
```json
|
||||
{
|
||||
"style": {
|
||||
"type": "rect"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
橫式
|
||||
|
||||
```json
|
||||
{
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 1.33
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
正方
|
||||
|
||||
```json
|
||||
{
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
正圓
|
||||
|
||||
```json
|
||||
{
|
||||
"style": {
|
||||
"type": "oval"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
橢圓
|
||||
|
||||
```json
|
||||
{
|
||||
"style": {
|
||||
"type": "oval",
|
||||
"ratio": 1.1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### API
|
||||
|
||||
刷新詳情
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/action?do=refresh&type=detail
|
||||
```
|
||||
|
||||
刷新播放
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/action?do=refresh&type=player
|
||||
```
|
||||
|
||||
刷新直播
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/action?do=refresh&type=live
|
||||
```
|
||||
|
||||
推送字幕
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/action?do=refresh&type=subtitle&path=http://xxx
|
||||
```
|
||||
|
||||
推送彈幕
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/action?do=refresh&type=danmaku&path=http://xxx
|
||||
```
|
||||
|
||||
新增緩存字串
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/cache?do=set&key=xxx&value=xxx
|
||||
```
|
||||
|
||||
取得緩存字串
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/cache?do=get&key=xxx
|
||||
```
|
||||
|
||||
刪除緩存字串
|
||||
|
||||
```
|
||||
http://127.0.0.1:9978/cache?do=del&key=xxx
|
||||
```
|
||||
|
||||
### Proxy
|
||||
|
||||
scheme 支持 http, https, socks4, socks5
|
||||
|
||||
```
|
||||
scheme://username:password@host:port
|
||||
```
|
||||
|
||||
配置新增 proxy 判斷域名是否走代理
|
||||
全局只需要加上一條規則 ".*."
|
||||
|
||||
```json
|
||||
{
|
||||
"spider": "",
|
||||
"proxy": [
|
||||
"raw.githubusercontent.com",
|
||||
"googlevideo.com"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Hosts
|
||||
|
||||
```json
|
||||
{
|
||||
"spider": "",
|
||||
"hosts": [
|
||||
"cache.ott.*.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Headers
|
||||
|
||||
```json
|
||||
{
|
||||
"spider": "",
|
||||
"headers": [
|
||||
{
|
||||
"host": "gslbserv.itv.cmvideo.cn",
|
||||
"header": {
|
||||
"User-Agent": "okhttp/3.12.13",
|
||||
"Referer": "test"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 配置範例
|
||||
|
||||
[點播-線上](other/sample/vod/online.json)
|
||||
[點播-本地](other/sample/vod/offline.json)
|
||||
[直播-線上](other/sample/live/online.json)
|
||||
[直播-本地](other/sample/live/offline.json)
|
||||
|
||||
### 飛機群
|
||||
|
||||
[討論群組](https://t.me/fongmi_offical)
|
||||
[發布頻道](https://t.me/fongmi_release)
|
||||
|
||||
### 贊助
|
||||
|
||||

|
||||
Binary file not shown.
@@ -0,0 +1,17 @@
|
||||
1.tvbox文件夹放在手机或TV盒子存储根目录
|
||||
2.TVBox设置>配置地址路径:clan://localhost/tvbox/a.json
|
||||
3.影音壳子旧版设置>配置下的接口地址: clan://localhost/tvbox/a.json
|
||||
4.影音壳子新版设置>配置下的订阅管理>添加>订阅源名称:本地a;订阅源地址:clan://localhost/tvbox/a.json
|
||||
5.TVBox播放器>IJK播放器;IJK解码方式:硬解码;IJK解码兼容性更好,硬解码更省电,如遇不能播放再切换播放器
|
||||
6.影视版播放器用EXO更强大,本地仓库地址file://tvbox/jk/drck.json或http://127.0.0.1:9978/file/tvbox/jk/drck.json
|
||||
|
||||
//##本源为收集网络资源整理自用,切勿拿去商用
|
||||
//##1.tvbox文件夹放在手机或TV盒子根目录(盒子&TV可用应用管家操作)
|
||||
//##2.TVBox或影音壳子设定>配置地址路径:clan://localhost/tvbox/a.json;蜂蜜影视地址:file://tvbox/a.json;本地代理地址设定:http://127.0.0.1:9978/file/tvbox/a.json
|
||||
//##3.json的api和ext路径设定1:"api":"clan://tvbox/libs/drpy.min.js","ext":"clan://tvbox/js/豆瓣.js"
|
||||
//##4.json的api和ext路径设定2:"api":"file://tvbox/libs/drpy.min.js","ext":"file://tvbox/js/豆瓣.js"
|
||||
//##5.json的api和ext路径设定3:"api":"./libs/drpy2.min.js","ext":"./js/豆瓣.js"
|
||||
//##6.json的api和ext路径设定4:"api":"http://127.0.0.1:9978/file/tvbox/libs/drpy.min.js","ext":"http://127.0.0.1:9978/file/tvbox/js/豆瓣.js"
|
||||
//##7."playerType": 1, 为该爬虫指定播放器 0:system, 1:ijk, 2:exo, 10:mx,11:Reex,12:Kodi.默认1为配置页面设置的播放器
|
||||
//##8.影视&Q版本多jar链接写法:{"key":"","name":"","type":3,"api":"***","searchable":1,"quickSearch":1,"filterable":1,"jar":"your_other_jar"}
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
1、下载drpy-node,解压缩到手机存储,记住路径。
|
||||
2、打开海阔视界,选择nodejs小程序(L佬多任务版本),配置,新建,名称随便填,目录选drpy-node这个文件夹,索引选index.js,保存
|
||||
3、长按该配置,调试数据,复制ID
|
||||
4、打开小程序DrpyHiker,设置,更换配置,名称随便,路径填
|
||||
http://127.0.0.1:5757/config/1#nodejs ID=刚才复制的ID <确认>
|
||||
5、选择一个源愉快的玩耍吧
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
//jar爬虫代理
|
||||
"spider": "file://Download/custom_spider.jar",
|
||||
//壁纸
|
||||
"wallpaper":"./img/w2.png",
|
||||
//图标
|
||||
"logo":"./img/d6.gif",
|
||||
//点播站源
|
||||
"sites": [
|
||||
{
|
||||
"key": "one",
|
||||
"name": "One",
|
||||
"type": 3,
|
||||
"api": "csp_Csp",
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"ext": "file://Download/one.json"
|
||||
},
|
||||
{
|
||||
"key": "two",
|
||||
"name": "Two",
|
||||
"type": 3,
|
||||
"api": "csp_Csp",
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"ext": "file://Download/two.json"
|
||||
},
|
||||
{
|
||||
"key": "extend",
|
||||
"name": "Extend",
|
||||
"type": 3,
|
||||
"api": "csp_Csp",
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"ext": "file://Download/extend.json",
|
||||
"jar": "file://Download/extend.jar"
|
||||
}
|
||||
],
|
||||
//正则解析/广告过滤
|
||||
"rules":[
|
||||
{
|
||||
"name":"*",
|
||||
"hosts":["*"],
|
||||
"regex":["*"]}
|
||||
],
|
||||
//解析线路
|
||||
"parses": [
|
||||
{
|
||||
"name": "官方",
|
||||
"type": 1,
|
||||
"url": "https://google.com/api/?url="
|
||||
}
|
||||
],
|
||||
//doh代理
|
||||
"doh": [
|
||||
{
|
||||
"name": "Google",
|
||||
"url": "https://dns.google/dns-query",
|
||||
"ips": [
|
||||
"8.8.4.4",
|
||||
"8.8.8.8"
|
||||
]
|
||||
}
|
||||
],
|
||||
//网站请求头
|
||||
"headers": [
|
||||
{
|
||||
"host": "gslbserv.itv.cmvideo.cn",
|
||||
"header": {
|
||||
"User-Agent": "okhttp/3.12.13"
|
||||
}
|
||||
}
|
||||
],
|
||||
//直播源
|
||||
/**
|
||||
*直播源
|
||||
*原版需挂jar全局代理
|
||||
*"lives":[{"group": "redirect","channels": [{"name": "live","urls": ["proxy://do=live&type=txt&ext=./live/zb.txt"]}]}],
|
||||
*/
|
||||
"lives":[
|
||||
{"name":"m3u","type":0,"url":"https://*.m3u","ua":"okhttp/3.15","epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
||||
{"name":"txt","type":0,"url":"https://*.txt","ua":"okhttp/3.15","epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"}
|
||||
],
|
||||
//网站代理
|
||||
"proxy": [
|
||||
"raw.githubusercontent.com"
|
||||
],
|
||||
//host代理
|
||||
"hosts": [
|
||||
"cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com"
|
||||
],
|
||||
//线路标识
|
||||
"flags": [
|
||||
"qq"
|
||||
],
|
||||
//传统解析广告过滤
|
||||
"ads": [
|
||||
"static-mozai.4gtv.tv"
|
||||
]
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,17 @@
|
||||
1、https://www.jianguoyun.com/
|
||||
|
||||
自己注册
|
||||
|
||||
2、登录坚果云,点创建,个人同步文件夹,起个名字,比如叫cat。
|
||||
|
||||
3、上传猫文件。
|
||||
|
||||
4、右上角用户名-账户信息-安全选项-添加应用-输入文件夹名字(cat)-生成密码
|
||||
|
||||
5、官方格式:https://123486%40qq.com:[email protected]/dav/cat/config_open.json
|
||||
|
||||
6、上边格式说明:
|
||||
|
||||
123486%40qq.com %40是固定格式,照抄。123486是你注册的QQ号。88888888就是第4步获取的密码。
|
||||
|
||||
@dav.jianguoyun.com/dav固定格式。cat/config_open.json是你的文件路径。
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"lives": [
|
||||
{
|
||||
"name": "M3U",
|
||||
"url": "file://Download/live.m3u"
|
||||
},
|
||||
{
|
||||
"name": "TXT",
|
||||
"url": "file://Download/live.txt",
|
||||
"epg": "https://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "UA",
|
||||
"url": "file://Download/live.txt",
|
||||
"epg": "https://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "https://epg.112114.xyz/logo/{name}.png",
|
||||
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
|
||||
"referer": "https://github.com/"
|
||||
},
|
||||
{
|
||||
"name": "Custom",
|
||||
"boot": false,
|
||||
"pass": true,
|
||||
"url": "file://Download/live.txt",
|
||||
"epg": "https://epg.112114.xyz/?ch={name}&date={date}&serverTimeZone=Asia/Shanghai",
|
||||
"logo": "https://epg.112114.xyz/logo/{name}.png",
|
||||
"header": {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
|
||||
"Referer": "https://github.com/"
|
||||
},
|
||||
"catchup": {
|
||||
"days": "7",
|
||||
"type": "append",
|
||||
"regex": "/PLTV/",
|
||||
"replace": "/PLTV/,/TVOD/",
|
||||
"source": "?playseek=${(b)yyyyMMddHHmmss}-${(e)yyyyMMddHHmmss}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON",
|
||||
"type": 1,
|
||||
"url": "file://Download/live.json"
|
||||
},
|
||||
{
|
||||
"name": "Spider-JS",
|
||||
"type": 3,
|
||||
"api": "./live.js",
|
||||
"ext": ""
|
||||
},
|
||||
{
|
||||
"name": "Spider-Python",
|
||||
"type": 3,
|
||||
"api": "./live.py",
|
||||
"ext": ""
|
||||
}
|
||||
],
|
||||
"headers": [
|
||||
{
|
||||
"host": "gslbserv.itv.cmvideo.cn",
|
||||
"header": {
|
||||
"User-Agent": "okhttp/3.12.13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"proxy": [
|
||||
"raw.githubusercontent.com"
|
||||
],
|
||||
"hosts": [
|
||||
"cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com"
|
||||
],
|
||||
"ads": [
|
||||
"static-mozai.4gtv.tv"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user