Skip to content

Commit 39beef6

Browse files
author
Taois
committed
feat: 发布新版本
1 parent c012058 commit 39beef6

File tree

13 files changed

+448
-97
lines changed

13 files changed

+448
-97
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# drpyS(drpy-node)
22

33
nodejs作为服务端的drpy实现。全面升级异步写法
4-
~~积极开发中,每日一更~~,当前进度 `78%`
4+
~~积极开发中,每日一更~~,当前进度 `80%`
55
~~找工作中,随缘更新~~
66
上班当牛马,下班要带娃,阶段性佛系趁娃睡觉熬夜更新
77

@@ -25,6 +25,10 @@ nodejs作为服务端的drpy实现。全面升级异步写法
2525

2626
## 更新记录
2727

28+
### 20250821
29+
30+
更新至V1.2.16
31+
2832
### 20250819
2933

3034
更新至V1.2.15

config/map.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,9 @@
1212
UC分享@?type=url&params=../json/UC分享.json@UC分享[盘]
1313
16wMV[听]@?type=url&params=../json/十六万歌曲.txt
1414
点歌欢唱[B]@?type=url&params=../json/十六万歌曲.txt
15+
Appfox@http://app.hktvyb.cc@TVB云播|APP
16+
Appfox@{"host":"http://45.192.110.211:1513","parse":{"qq|qiyi|mgtv|youku|bilibili":"https://api.qljson.xyz/api/?key=67f6a108dc6d84eaf81ac58417c1f72a&url="}}@魔方影视|APP
17+
Appfox@{"host":"https://cunchu8.obs.cn-north-4.myhuaweicloud.com/config.json","parse":{"JL4K":"http://194.147.100.155:7891/?url="}}@火猫影视|APP
18+
Appfox@{"host":"http://kumiao.yzbao.com.cn","parse":{"qq|qiyi|mgtv|youku|bilibili":"https://api.qljson.xyz/api/?key=67f6a108dc6d84eaf81ac58417c1f72a&url="}}@未来影视|APP
19+
getapp3.4.1@{"host":"https://appcms.xy4k.com","datakey":"7SDWjknU34zqFbVr"}@小羊4k
20+
getapp3.4.1@{"host":"https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json","datakey":"AAdgrdghjfgswerA","api":2}@鲸鱼影视

controllers/config.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,16 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
368368
let name = `${ruleMeta.title}(hipy)`;
369369
fileSites.push({key, name, ext});
370370
} else if (SitesMap.hasOwnProperty(baseName) && Array.isArray(SitesMap[baseName])) {
371+
// console.log(SitesMap[baseName]);
371372
SitesMap[baseName].forEach((it) => {
372373
let key = `hipy_py_${it.alias}`;
373374
let name = `${it.alias}(hipy)`;
374-
let _ext = updateQueryString(ext, it.queryStr);
375+
let _ext = it.queryStr;
376+
try {
377+
_ext = JSON.parse(_ext);
378+
} catch (err) {
379+
}
380+
console.log(`[HIPY-${baseName}] alias name: ${name},typeof _ext:${typeof _ext},_ext: ${_ext}`);
375381
fileSites.push({key, name, ext: _ext});
376382
});
377383
} else {
@@ -461,7 +467,13 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
461467
SitesMap[baseName].forEach((it) => {
462468
let key = `catvod_${it.alias}`;
463469
let name = `${it.alias}(cat)`;
464-
let _ext = updateQueryString(ext, it.queryStr);
470+
let _ext = it.queryStr;
471+
472+
try {
473+
_ext = JSON.parse(_ext);
474+
} catch (err) {
475+
}
476+
console.log(`[CAT-${baseName}] alias name: ${name},typeof _ext:${typeof _ext},_ext: ${_ext}`);
465477
fileSites.push({key, name, ext: _ext});
466478
});
467479
} else {

docs/updateRecord.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# drpyS更新记录
22

3+
### 20250821
4+
5+
更新至V1.2.16
6+
7+
1. 增加一堆 `hipy`
8+
2. 增加 `live2cms.json` 增加一条本代线路
9+
3. 猫源解析引擎默认 0 和 1 都视为url模式,以前base64模式有Bug调整 `CAT_DEBUG=2` 开启
10+
4. 完善hipy源和cat源的map传参机制,map里传参分发源,不用手写配置文件的ext
11+
12+
已知bug(待壳子适配):
13+
14+
1. 宝盒不支持ext直接传链接,即使是外网它也会去访问ext然后把源码丢给后续请求导致不正确(drpyHiker和装逼壳子正常)
15+
2. drpyHiker不支持ext传递object类型,json层面没有进行object转json操作,导致后续接口请求用的 [object Object]
16+
317
### 20250819
418

519
更新至V1.2.15

json/live2cms.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@
4040
"img": "",
4141
"headers": {"user-agent":"com.stub.StubApp/1.5.1 (Linux;Android 13) AndroidXMedia3/1.4.1"}
4242
},
43+
{
44+
"name": "河南电视代理",
45+
"url": "../proxy/河南电视代理/?do=cat&sitekey=catvod_河南电视代理&flag=live",
46+
"img": "",
47+
"headers": {"user-agent":"com.stub.StubApp/1.5.1 (Linux;Android 13) AndroidXMedia3/1.4.1"}
48+
},
4349
{
4450
"name": "测试1(随时失效)",
4551
"url": "https://gitee.com/svcd2008/tv/raw/master/430.txt",

libs/catvod.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
1212
const _data_path = path.join(__dirname, '../data');
1313
const _config_path = path.join(__dirname, '../config');
1414
const _lib_path = path.join(__dirname, '../spider/catvod');
15-
const enable_cat_debug = Number(process.env.CAT_DEBUG) || 0;
15+
const enable_cat_debug = Number(process.env.CAT_DEBUG) !== 2;
1616

1717
console.log('enable_cat_debug:', enable_cat_debug);
1818

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "drpy-node",
3-
"version": "1.2.15",
3+
"version": "1.2.16",
44
"main": "index.js",
55
"type": "module",
66
"scripts": {

public/index.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</head>
99
<body>
1010
<h1 id="drpysdrpy-node">drpyS(drpy-node)</h1>
11-
<p>nodejs作为服务端的drpy实现。全面升级异步写法<br><del>积极开发中,每日一更</del>,当前进度 <code>78%</code><br><del>找工作中,随缘更新</del><br>上班当牛马,下班要带娃,阶段性佛系趁娃睡觉熬夜更新</p>
11+
<p>nodejs作为服务端的drpy实现。全面升级异步写法<br><del>积极开发中,每日一更</del>,当前进度 <code>80%</code><br><del>找工作中,随缘更新</del><br>上班当牛马,下班要带娃,阶段性佛系趁娃睡觉熬夜更新</p>
1212
<ul>
1313
<li><a href="docs/apidoc.md">接口文档</a> | <a href="docs/apiList.md">接口列表如定时任务</a> | <a href="https://github.com/waifu-project/movie/pull/135">小猫影视-待对接T4</a></li>
1414
<li><a href="/config?pwd=dzyyds">本地配置接口-动态本地</a></li>
@@ -29,6 +29,8 @@ <h1 id="drpysdrpy-node">drpyS(drpy-node)</h1>
2929
<li><a href="/cat/index.html">在线猫ds源主页</a></li>
3030
</ul>
3131
<h2 id="更新记录">更新记录</h2>
32+
<h3 id="20250821">20250821</h3>
33+
<p>更新至V1.2.16</p>
3234
<h3 id="20250819">20250819</h3>
3335
<p>更新至V1.2.15</p>
3436
<h3 id="20250818">20250818</h3>

spider/drop_code/OmoFun[漫].js

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
/*
2+
@header({
3+
searchable: 2,
4+
filterable: 0,
5+
quickSearch: 0,
6+
title: 'OmoFun',
7+
lang: 'ds'
8+
})
9+
*/
10+
11+
class Rule {
12+
类型 = '影视';
13+
title = 'OmoFun';
14+
desc = 'http://fb.omofun.one';
15+
host = 'https://omofunw.com';
16+
homeUrl = '/';
17+
url = '/index.php/vod/show/id/fyclass/page/fypage.html';
18+
searchUrl = '/index.php/vod/search/page/fypage/wd/**.html';
19+
searchable = 2;
20+
quickSearch = 0;
21+
timeout = 5000;
22+
play_parse = true;
23+
24+
async class_parse() {
25+
let classes = [
26+
{type_id: '22', type_name: '动漫电影'},
27+
{type_id: '23', type_name: '欧美动漫'},
28+
{type_id: '20', type_name: '日本动漫'},
29+
];
30+
return {class: classes,}
31+
}
32+
33+
async 预处理() {
34+
}
35+
36+
async 推荐() {
37+
let {input, pdfa, pdfh, pd} = this;
38+
let html = await request(input);
39+
let d = [];
40+
let data = pdfa(html, '.hl-vod-list li');
41+
data.forEach((it) => {
42+
d.push({
43+
title: pdfh(it, 'a&&title'),
44+
pic_url: pd(it, '.hl-lazy&&data-original'),
45+
desc: pdfh(it, '.public-list-prb&&Text'),
46+
url: pd(it, 'a&&href'),
47+
})
48+
});
49+
return setResult(d)
50+
}
51+
52+
async 一级(tid, pg, filter, extend) {
53+
let {input, pdfa, pdfh, pd} = this;
54+
let html = await request(input);
55+
let d = [];
56+
let data = pdfa(html, '.hl-vod-list li');
57+
data.forEach((it) => {
58+
d.push({
59+
title: pdfh(it, 'a&&title'),
60+
pic_url: pd(it, '.hl-lazy&&data-original'),
61+
desc: pdfh(it, '.public-list-prb&&Text'),
62+
url: pd(it, 'a&&href'),
63+
})
64+
});
65+
return setResult(d)
66+
}
67+
68+
async 搜索(wd, quick, pg) {
69+
let {input, pdfa, pdfh, pd} = this;
70+
let html = await request(input);
71+
let d = [];
72+
let data = pdfa(html, '.hl-one-list.hl-theme-by li');
73+
data.forEach((it) => {
74+
d.push({
75+
title: pdfh(it, 'a&&title'),
76+
pic_url: pd(it, '.hl-lazy&&data-original'),
77+
desc: pdfh(it, '.hl-pic-text&&Text'),
78+
url: pd(it, 'a&&href'),
79+
content: pdfh(it, 'p:eq(0)&&Text'),
80+
})
81+
});
82+
return setResult(d)
83+
}
84+
85+
async 二级(ids) {
86+
let {
87+
input,
88+
pdfa,
89+
pdfh,
90+
pd
91+
} = this;
92+
let html = await request(input);
93+
let VOD = {};
94+
VOD.vod_name = pdfh(html, 'h2&&Text');
95+
VOD.vod_content = pdfh(html, '.hl-col-xs-12.blurb&&Text');
96+
let playlist = pdfa(html, '#hl-plays-list')
97+
let tabs = pdfa(html, '.hl-plays-from.hl-tabs a');
98+
let playmap = {};
99+
tabs.map((item, i) => {
100+
const form = pdfh(item, 'Text')
101+
const list = playlist[i]
102+
const a = pdfa(list, 'body&&a:not(:contains(展开))')
103+
a.map((it) => {
104+
let title = pdfh(it, 'a&&Text')
105+
let urls = pd(it, 'a&&href', input)
106+
if (!playmap.hasOwnProperty(form)) {
107+
playmap[form] = [];
108+
}
109+
playmap[form].push(title + "$" + urls);
110+
});
111+
});
112+
VOD.vod_play_from = Object.keys(playmap).join('$$$');
113+
const urls = Object.values(playmap);
114+
const playUrls = urls.map((urllist) => {
115+
return urllist.join("#")
116+
});
117+
VOD.vod_play_url = playUrls.join('$$$');
118+
return VOD
119+
}
120+
121+
async lazy(flag, id, flags) {
122+
let {input} = this
123+
const html = JSON.parse((await req(input)).content.match(/r player_.*?=(.*?)</)[1]);
124+
let url = html.url;
125+
if (html.encrypt == "1") {
126+
url = unescape(url)
127+
return {parse: 0, url: url}
128+
} else if (html.encrypt == "2") {
129+
url = unescape(base64Decode(url))
130+
return {parse: 0, url: url}
131+
}
132+
if (/m3u8|mp4/.test(url)) {
133+
input = url
134+
return {parse: 0, url: input}
135+
} else {
136+
return {parse: 0, url: input}
137+
}
138+
}
139+
}
140+
141+
rule = new Rule();

0 commit comments

Comments
 (0)