Skip to content

Commit 2b9d51b

Browse files
committed
update:发布1.1.5版本
1 parent 14ca69e commit 2b9d51b

21 files changed

+899
-99
lines changed

Diff for: .env.development

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ EPG_URL = https://epg.mxdyeah.top/api/diyp/?ch={name}&date={date}
1515
LOGO_URL = https://live.mxdyeah.top/logo/{name}.png
1616
LIVE_URL = 'https://livetv.wqwqwq.sbs/tv.m3u'
1717
# LIVE_URL = './lives/tv.m3u'
18+
MAX_TASK = 8

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,4 @@ dist
134134
/config/env.json
135135
/js/UC分享.js
136136
/json/UC分享.json
137+
/jx/奇奇.js

Diff for: README.md

+4-5
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@ nodejs作为服务端的drpy实现。全面升级异步写法
1616

1717
## 更新记录
1818

19-
### 20250108
19+
### 20250109
2020

21-
更新至V1.1.4
21+
更新至V1.1.5
2222

23-
1. 更新文档
24-
2. 修复bug
25-
3. 增加 `batchExecute`
23+
1. 兼容低端设备运行本项目,如cm311-1a
24+
2. 解析功能超级增强
2625

2726
[点此查看完整更新记录](docs/updateRecord.md)
2827

Diff for: config/map.txt

+1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
采集之王[合]@?type=url&params=../json/采集静态.json$1@采王道长[合]
55
采集之王[合]@?type=url&params=../json/采集[zy]静态.json$1@采王zy[密]
66
采集之王[合]@?type=url&params=../json/采集[密]静态.json$1$@采王成人[密]
7+
采集之王[合]@?type=url&params=../json/采集2024静态.json$1$@采王2024
78
UC分享@?type=url&params=../json/UC分享.json@UC分享[盘]

Diff for: controllers/api.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,13 @@ export default (fastify, options, done) => {
350350
}
351351
let t2 = (new Date()).getTime();
352352
backResp.cost = t2 - t1;
353-
return reply.code(statusCode).type(`${mediaType}; charset=utf-8`).send(JSON.stringify(backResp));
353+
let backRespSend = JSON.stringify(backResp);
354+
console.log(backRespSend);
355+
return reply.code(statusCode).type(`${mediaType}; charset=utf-8`).send(backRespSend);
354356
} else if (typeof backResp === 'string') {
357+
if (backResp.startsWith('redirect://')) {
358+
return reply.redirect(backResp.split('redirect://')[1]);
359+
}
355360
let statusCode = backResp && backResp !== query.url ? 200 : 404;
356361
let msgState = backResp && backResp !== query.url ? '成功' : '失败';
357362
let t2 = (new Date()).getTime();
@@ -361,7 +366,9 @@ export default (fastify, options, done) => {
361366
msg: `${jxName}解析${msgState}`,
362367
cost: t2 - t1
363368
}
364-
return reply.code(statusCode).type(`${mediaType}; charset=utf-8`).send(JSON.stringify(result));
369+
let backRespSend = JSON.stringify(result);
370+
console.log(backRespSend);
371+
return reply.code(statusCode).type(`${mediaType}; charset=utf-8`).send(backRespSend);
365372
} else {
366373
return reply.status(404).send({error: `${jxName}解析失败`});
367374
}

Diff for: controllers/config.js

+69-38
Original file line numberDiff line numberDiff line change
@@ -133,46 +133,77 @@ async function generateSiteJSON(jsDir, configDir, requestHost, sub, subFilePath,
133133
return {sites};
134134
}
135135

136-
function generateParseJSON(jxDir, requestHost) {
136+
async function generateParseJSON(jxDir, requestHost) {
137137
const files = readdirSync(jxDir);
138-
const parses = files
139-
.filter((file) => file.endsWith('.js') && !file.startsWith('_')) // 筛选出不是 "_" 开头的 .js 文件
140-
.map((file) => {
141-
const baseName = path.basename(file, '.js'); // 去掉文件扩展名
142-
const api = `${requestHost}/parse/${baseName}?url=`; // 使用请求的 host 地址,避免硬编码端口
143-
return {
144-
name: baseName,
145-
url: api,
146-
type: 1,
147-
ext: {
148-
flag: [
149-
"qiyi",
150-
"imgo",
151-
"爱奇艺",
152-
"奇艺",
153-
"qq",
154-
"qq 预告及花絮",
155-
"腾讯",
156-
"youku",
157-
"优酷",
158-
"pptv",
159-
"PPTV",
160-
"letv",
161-
"乐视",
162-
"leshi",
163-
"mgtv",
164-
"芒果",
165-
"sohu",
166-
"xigua",
167-
"fun",
168-
"风行"
169-
]
170-
},
171-
header: {
172-
"User-Agent": "Mozilla/5.0"
138+
const jx_files = files.filter((file) => file.endsWith('.js') && !file.startsWith('_')) // 筛选出不是 "_" 开头的 .js 文件
139+
let parses = [];
140+
const tasks = jx_files.map((file) => {
141+
return {
142+
func: async ({file, jxDir, requestHost, drpy}) => {
143+
const baseName = path.basename(file, '.js'); // 去掉文件扩展名
144+
const api = `${requestHost}/parse/${baseName}?url=`; // 使用请求的 host 地址,避免硬编码端口
145+
146+
let jxObject = {
147+
type: 1, // 固定值
148+
ext: {
149+
flag: [
150+
"qiyi",
151+
"imgo",
152+
"爱奇艺",
153+
"奇艺",
154+
"qq",
155+
"qq 预告及花絮",
156+
"腾讯",
157+
"youku",
158+
"优酷",
159+
"pptv",
160+
"PPTV",
161+
"letv",
162+
"乐视",
163+
"leshi",
164+
"mgtv",
165+
"芒果",
166+
"sohu",
167+
"xigua",
168+
"fun",
169+
"风行"
170+
]
171+
},
172+
header: {
173+
"User-Agent": "Mozilla/5.0"
174+
}
175+
};
176+
try {
177+
let _jxObject = await drpy.getJx(path.join(jxDir, file));
178+
jxObject = {...jxObject, ..._jxObject};
179+
} catch (e) {
180+
throw new Error(`Error parsing jx object for file: ${file}, ${e.message}`);
173181
}
182+
183+
parses.push({
184+
name: baseName,
185+
url: jxObject.url || api,
186+
type: jxObject.type,
187+
ext: jxObject.ext,
188+
header: jxObject.header
189+
});
190+
},
191+
param: {file, jxDir, requestHost, drpy},
192+
id: file,
193+
};
194+
});
195+
196+
const listener = {
197+
func: (param, id, error, result) => {
198+
if (error) {
199+
console.error(`Error processing file ${id}:`, error.message);
200+
} else {
201+
// console.log(`Successfully processed file ${id}:`, result);
174202
}
175-
});
203+
},
204+
param: {}, // 外部参数可以在这里传入
205+
};
206+
await batchExecute(tasks, listener);
176207
return {parses};
177208
}
178209

@@ -263,7 +294,7 @@ export default (fastify, options, done) => {
263294
}
264295

265296
const siteJSON = await generateSiteJSON(options.jsDir, options.configDir, requestHost, sub, options.subFilePath, pwd);
266-
const parseJSON = generateParseJSON(options.jxDir, requestHost);
297+
const parseJSON = await generateParseJSON(options.jxDir, requestHost);
267298
const livesJSON = generateLivesJSON(requestHost);
268299
const playerJSON = generatePlayerJSON(options.configDir, requestHost);
269300
const configObj = {sites_count: siteJSON.sites.length, ...siteJSON, ...parseJSON, ...livesJSON, ...playerJSON};

Diff for: custom.json

+100-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"sites_count": 66,
2+
"sites_count": 69,
33
"sites": [
44
{
55
"key": "drpyS_设置中心",
@@ -114,24 +114,24 @@
114114
"ext": ""
115115
},
116116
{
117-
"key": "drpyS_UC分享[盘]",
118-
"name": "UC分享[盘](DS)",
117+
"key": "drpyS_hdmoli[盘]",
118+
"name": "hdmoli[盘](DS)",
119119
"type": 4,
120-
"api": "http://localhost:5757/api/UC分享",
120+
"api": "http://localhost:5757/api/hdmoli[盘]",
121121
"searchable": 2,
122122
"filterable": 0,
123123
"quickSearch": 0,
124-
"ext": "H4sIAAAAAAAAA9PT088qzs/TD3V+2tH2ZNdqPRAPAKubOwMVAAAA"
124+
"ext": ""
125125
},
126126
{
127-
"key": "drpyS_团长资源[盘]",
128-
"name": "团长资源[盘](DS)",
127+
"key": "drpyS_UC分享[盘]",
128+
"name": "UC分享[盘](DS)",
129129
"type": 4,
130-
"api": "http://localhost:5757/api/团长资源[盘]",
131-
"searchable": 1,
130+
"api": "http://localhost:5757/api/UC分享",
131+
"searchable": 2,
132132
"filterable": 0,
133-
"quickSearch": 1,
134-
"ext": ""
133+
"quickSearch": 0,
134+
"ext": "H4sIAAAAAAAAA9PT088qzs/TD3V+2tH2ZNdqPRAPAKubOwMVAAAA"
135135
},
136136
{
137137
"key": "drpyS_多多[盘]",
@@ -143,6 +143,16 @@
143143
"quickSearch": 0,
144144
"ext": ""
145145
},
146+
{
147+
"key": "drpyS_团长资源[盘]",
148+
"name": "团长资源[盘](DS)",
149+
"type": 4,
150+
"api": "http://localhost:5757/api/团长资源[盘]",
151+
"searchable": 1,
152+
"filterable": 0,
153+
"quickSearch": 1,
154+
"ext": ""
155+
},
146156
{
147157
"key": "drpyS_小米[盘]",
148158
"name": "小米[盘](DS)",
@@ -253,6 +263,16 @@
253263
"quickSearch": 0,
254264
"ext": ""
255265
},
266+
{
267+
"key": "drpyS_奇珍异兽[官]",
268+
"name": "奇珍异兽[官](DS)",
269+
"type": 4,
270+
"api": "http://localhost:5757/api/奇珍异兽[官]",
271+
"searchable": 2,
272+
"filterable": 1,
273+
"quickSearch": 0,
274+
"ext": ""
275+
},
256276
{
257277
"key": "drpyS_哔哩教育[官]",
258278
"name": "哔哩教育[官](DS)",
@@ -303,6 +323,16 @@
303323
"quickSearch": 0,
304324
"ext": ""
305325
},
326+
{
327+
"key": "drpyS_采王2024",
328+
"name": "采王2024(DS)",
329+
"type": 4,
330+
"api": "http://localhost:5757/api/采集之王[合]",
331+
"searchable": 1,
332+
"filterable": 1,
333+
"quickSearch": 0,
334+
"ext": "H4sIAAAAAAAAA9PT088qzs/Tf9ne/nJ2m5GBkcnLuTOfNTTqgURVDFUAlKCu7yAAAAA="
335+
},
306336
{
307337
"key": "drpyS_采王成人[密]",
308338
"name": "采王成人[密](DS)",
@@ -695,6 +725,63 @@
695725
}
696726
],
697727
"parses": [
728+
{
729+
"name": "json1",
730+
"url": "http://localhost:5757/parse/json1?url=",
731+
"type": 1,
732+
"ext": {
733+
"flag": [
734+
"qiyi",
735+
"imgo",
736+
"爱奇艺",
737+
"奇艺",
738+
"qq",
739+
"qq 预告及花絮",
740+
"腾讯",
741+
"youku",
742+
"优酷"
743+
]
744+
},
745+
"header": {
746+
"User-Agent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36"
747+
}
748+
},
749+
{
750+
"name": "奇奇",
751+
"url": "http://localhost:5757/parse/奇奇?url=",
752+
"type": 1,
753+
"ext": {
754+
"flag": [
755+
"qiyi",
756+
"爱奇艺",
757+
"奇艺"
758+
]
759+
},
760+
"header": {
761+
"User-Agent": "Mozilla/5.0"
762+
}
763+
},
764+
{
765+
"name": "web1",
766+
"url": "https://bfq.cfwlgzs.cn/player?url=",
767+
"type": 0,
768+
"ext": {
769+
"flag": [
770+
"qiyi",
771+
"imgo",
772+
"爱奇艺",
773+
"奇艺",
774+
"qq",
775+
"qq 预告及花絮",
776+
"腾讯",
777+
"youku",
778+
"优酷"
779+
]
780+
},
781+
"header": {
782+
"User-Agent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36"
783+
}
784+
},
698785
{
699786
"name": "虾米",
700787
"url": "http://localhost:5757/parse/虾米?url=",
@@ -724,7 +811,8 @@
724811
]
725812
},
726813
"header": {
727-
"User-Agent": "Mozilla/5.0"
814+
"User-Agent": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36",
815+
"Referer": "https://jx.xmflv.com/?url="
728816
}
729817
}
730818
],

Diff for: docs/updateRecord.md

+35
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,40 @@
11
# drpyS更新记录
22

3+
### 20250109
4+
5+
更新至V1.1.5
6+
7+
1. `.env` 增加 `MAX_TASK`参数,配置系统多任务数限制,默认不设置则为2,解决低端设备如arm盒子访问配置崩溃问题。高端设备实测发现设置为8比较快
8+
2. 自建解析功能增强,支持自定义其他参数,增加两个示例解析
9+
3. 抓取了一些采集源扩充采王,抓取方式,zy3.7版本运行以下代码
10+
11+
```javascript
12+
var rule = {
13+
推荐: $js.toString(() => {
14+
let url = 'https://blog.ilol.top/p/zqgwes.html';
15+
let html = request(url);
16+
let tlist = pdfa(html, '.post-content&&h2');
17+
log(tlist)
18+
let alist = pdfa(html, '.post-content&&a:gt(0)');
19+
log(alist);
20+
21+
VODS = [];
22+
23+
for (let i in tlist) {
24+
VODS.push({
25+
name: pdfh(tlist[i], 'Text'),
26+
url: pdfh(alist[i], 'a&&href'),
27+
})
28+
}
29+
log(JSON.stringify(VODS))
30+
31+
})
32+
}
33+
```
34+
35+
4. 增加源 `奇珍异兽[官].js`
36+
5. 新增一个源 `hdmoli.js` 用于演示二级同时存在播放列表和网盘分享链接的写法
37+
338
### 20250108
439

540
更新至V1.1.4

0 commit comments

Comments
 (0)