写源教程总纲.json 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. ### 配置相关
  2. 直接复制对应的三种地址就行了,不需要生成本地文件(下面教程不要了)
  3. ~~本地地址 clan://localhost/pycms_local.json
  4. 推荐把文件放到 /storage/emulated/0/PlutoPlayer/pycms_local.json
  5. 并且pluto要自己切换路径为PlutoPlayer~~
  6. ### 相关教程
  7. [pyquery定位](https://blog.csdn.net/Arise007/article/details/79513094)
  8. ### 模板规则说明
  9. 所有相关属性说明
  10. ```javascript
  11. var rule = {
  12. title:'',//规则标题,没有实际作用,但是可以作为cms类名称依据
  13. 编码:'',//不填就默认utf-8
  14. 搜索编码:'',//不填则不编码,默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
  15. host:'',//网页的域名根,包含http头如 https://www,baidu.com
  16. 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=赋值
  17. homeUrl:'/latest/',//网站的首页链接,可以是完整路径或者相对路径,用于分类获取和推荐获取 fyclass是分类标签 fypage是页数
  18. url:'/fyclass/fypage.html[/fyclass/]',//网站的分类页面链接
  19. detailUrl:'https://yanetflix.com/voddetail/fyid.html',//非必填,二级详情拼接链接,感觉没啥卵用
  20. searchUrl:'',//搜索链接 可以是完整路径或者相对路径,用于分类获取和推荐获取 **代表搜索词 fypage代表页数
  21. searchable:0,//是否启用全局搜索,
  22. quickSearch:0,//是否启用快速搜索,
  23. filterable:0,//是否启用筛选,
  24. filter:{},// 筛选条件字典
  25. // 默认筛选条件字典(不同分类可以指定同样筛选参数的不同默认值)
  26. filter_def:{
  27. douyu:{
  28. area:'一起看',
  29. other:'..'
  30. },
  31. huya:{
  32. area:'影音馆',
  33. other:'..'
  34. }
  35. },
  36. // 筛选网站传参,会自动传到分类链接下(本示例中的url参数)-url里参数为fyfilter,可参考蓝莓影视.js
  37. filter_url:'style={{fl.style}}&zone={{fl.zone}}&year={{fl.year}}&fee={{fl.fee}}&order={{fl.order}}',
  38. // 注意,由于猫有配置缓存,搜索配置没法热加载,修改了js不需要重启服务器
  39. // 但是需要tv_box进设置里换源使配置重新装载
  40. headers:{//网站的请求头,完整支持所有的,常带ua和cookies
  41. 'User-Agent':'MOBILE_UA',
  42. "Cookie": "searchneed=ok"
  43. },
  44. timeout:5000,//网站的全局请求超时,默认是3000毫秒
  45. class_name:'电影&电视剧&动漫&综艺',//静态分类名称拼接
  46. class_url:'1&2&3&4',//静态分类标识拼接
  47. //动态分类获取 列表;标题;链接;正则提取 不需要正则的时候后面别加分号
  48. class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
  49. // 除开全局过滤之外还需要过滤哪些标题不视为分类
  50. cate_exclude:'',
  51. // 除开全局动态线路名过滤之外还需要过滤哪些线路名标题不视为线路
  52. tab_exclude:'',
  53. //移除某个线路及相关的选集|js1
  54. tab_remove:['tkm3u8'],
  55. //线路顺序,按里面的顺序优先,没写的依次排后面|js1
  56. tab_order:['lzm3u8','wjm3u8','1080zyk','zuidam3u8','snm3u8'],
  57. //线路名替换如:lzm3u8替换为量子资源|js1
  58. tab_rename:{'lzm3u8':'量子','1080zyk':'1080看','zuidam3u8':'最大资源','kuaikan':'快看',
  59. 'bfzym3u8':'暴风','ffm3u8':'非凡','snm3u8':'索尼','tpm3u8':'淘片','tkm3u8':'天空',},
  60. // 服务器解析播放
  61. play_parse:true,
  62. // play_json 传数组或者 类 true/false 比如 0,1 如果不传会内部默认处理 不传和传0可能效果不同
  63. // 效果等同说明: play_json:[{re:'*', json:{jx:0, parse:1}}], 等同于 play_json:0,
  64. play_json:[{
  65. re:'*',
  66. json:{
  67. jx:1,
  68. parse:1,
  69. },
  70. }],
  71. //控制不同分类栏目下的总页面,不填就是默认999.哔哩影视大部分分类无法翻页,都需要指定页数为 1
  72. pagecount:{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1},
  73. // 自定义免嗅
  74. lazy:'',
  75. // 首页推荐显示数量
  76. limit:6,
  77. double:true,//是否双层列表定位,默认false
  78. // 对图片加了referer验证的有效,海阔专用,普通规则请勿填写此键值
  79. 图片来源:'@Referer=http://www.jianpianapp.com@User-Agent=jianpian-version350',
  80. // 替换所有图片链接 欲替换文本=>替换为文本
  81. 图片替换:'https://www.keke6.app/=>https://vres.a357899.cn/',
  82. // js写法,仅js模式1有效.可以用于代码动态获取全局cookie之类的
  83. // 可操作变量有 rule_fetch_params,rule,以及基础的网页访问request,post等操作
  84. 预处理:'rule_fetch_params.headers.Cookie = "xxxx";',
  85. // 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
  86. // 如果是双层定位的话,推荐的第2段分号代码也是第2层定位列表代码
  87. 推荐:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
  88. // 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
  89. 一级:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
  90. //二级发起访问前进行js处理。解决特殊情况一级给出的链接非二级真实源码而是前端重定向链接的源码
  91. 二级访问前:'log(MY_URL);let jump=request(MY_URL).match(/href="(.*?)"/)[1];log(jump);MY_URL=urljoin2(MY_URL,jump)',
  92. // 二级可以是*,表示规则无二级,直接拿一级的链接进行嗅探
  93. // 二级 title: 片名;类型
  94. // 二级 desc: 主要信息;年代;地区;演员;导演
  95. // 或者 {title:'',img:'',desc:'',content:'',tabs:'',lists:'',tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href'} 同海阔dr二级
  96. 二级:'*',
  97. // 搜索可以是*,集成一级,或者跟一级一样的写法 列表;标题;图片;描述;链接;详情
  98. 搜索:'*',
  99. // 本地代理规则,可用于修改m3u8文件文本去广告后返回代理文件地址,也可以代理加密图片
  100. proxy_rule:`js:
  101. log(input);
  102. input = [200,'text;plain','hello drpy']
  103. `,
  104. //是否启用辅助嗅探: 1,0
  105. sniffer:1,
  106. // 辅助嗅探规则
  107. isVideo:"http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)",
  108. // 辅助嗅探规则js写法
  109. isVideo:`js:
  110. log(input);
  111. if(/m3u8/.test(input)){
  112. input = true
  113. }else{
  114. input = false
  115. }
  116. `,
  117. }
  118. ```
  119. 模板继承写法
  120. ```javascript
  121. var rule = Object.assign(muban.mxpro,{
  122. title:'鸭奈飞',
  123. host:'https://yanetflix.com',
  124. url:'/index.php/vod/show/id/fyclass/page/fypage.html',
  125. class_parse:`.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html`,
  126. });
  127. ```
  128. 模板继承写法(新)
  129. ```javascript
  130. var rule = {
  131. title:'cokemv',
  132. 模板:'mxpro',
  133. host:'https://cokemv.me',
  134. class_parse:`.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html`,
  135. }
  136. ```
  137. 源正则写法说明
  138. ```text
  139. 属性class_parse按;分隔后取[3]为分类的正则字符串。
  140. 这里的正则跟js的/.*/这种写法相比,由于是字符串,需要实现字符串标准。
  141. 比如想实现 /(\d+)/ 那么字符串写法为 (\\d+)
  142. 原理是 new RegExp('(\\d+)') = /(\d+)/
  143. 属性lazy由于是纯js代码实现,不存在正则转义问题。
  144. 每个源的属性对应的值如果是字符串,可以用反引号``包含起来。
  145. 避免内部出现单双引号混用等需\转义问题
  146. ```
  147. js:内置变量
  148. input,html,VODS,VOD,TABS,LISTS,MY_CATE,MY_FL
  149. getProxyUrl(获取壳子本地代理地址返回 /proxy?do=js的完整链接)
  150. 本地代理说明:
  151. proxy_rule参数input赋值格式为三元素列表[status,content-type,data]
  152. 如: [200,'text/plain','hello drpy']
  153. input = [200,'application/vnd.apple.mpegurl',m3u8]
  154. rsa加解密说明:
  155. ```js
  156. log(typeof(rsaX));
  157. if(typeof(rsaX)=='function'){
  158. rsaX(mode, pub, encrypt, input, inBase64, key, outBase64)
  159. }
  160. ```