Skip to content

Commit 5882f70

Browse files
author
Taois
committed
feat: 增加完善的接口说明 & 升级新版本
1 parent 51cc2ba commit 5882f70

File tree

13 files changed

+834
-87
lines changed

13 files changed

+834
-87
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# drpyS(drpy-node)
22

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

8+
* [接口文档](docs/apidoc.md) | [小猫影视-待对接T4](https://github.com/waifu-project/movie/pull/135)
89
* [本地配置接口-动态本地](/config?pwd=$pwd)
910
* [本地配置接口-动态外网/局域网](/config/1?pwd=$pwd)
1011
* [其他配置接口-订阅过滤](/docs/sub.md)
@@ -14,7 +15,6 @@ nodejs作为服务端的drpy实现。全面升级异步写法
1415
* [央视点播解析工具](/proxy/央视大全[官]/index.html)
1516
* [cookie管理插件](/apps/cookie-butler/index.html)
1617
* [cron表达式插件](/apps/cron-generator/index.html)
17-
* [一些接口说明](docs/apidoc.md)
1818
* [本站防止爬虫协议](/robots.txt)
1919
* [本项目主页-免翻](https://github.com/hjdhnx/drpy-node)
2020
* [DS源适配猫影视](https://github.com/hjdhnx/CatPawOpen/tree/ds-cat)
@@ -23,6 +23,10 @@ nodejs作为服务端的drpy实现。全面升级异步写法
2323

2424
## 更新记录
2525

26+
### 20250812
27+
28+
更新至V1.2.9
29+
2630
### 20250810
2731

2832
更新至V1.2.8

controllers/api.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import {ENV} from "../utils/env.js";
55
import {validatePwd} from "../utils/api_validate.js";
66
import {startJsonWatcher, getApiEngine} from "../utils/api_helper.js";
77
import * as drpyS from '../libs/drpyS.js';
8-
import * as drpy2 from '../libs/drpy2.js';
9-
import * as hipy from '../libs/hipy.js';
10-
import * as xbpq from '../libs/xbpq.js';
11-
import * as catvod from '../libs/catvod.js';
8+
import drpy2 from '../libs/drpy2.js';
9+
import hipy from '../libs/hipy.js';
10+
import xbpq from '../libs/xbpq.js';
11+
import catvod from '../libs/catvod.js';
1212

1313
const ENGINES = {
1414
drpyS,

controllers/config.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
359359
ruleMeta.title = enableRuleName ? ruleMeta.title || baseName : baseName;
360360

361361
let fileSites = [];
362+
ext = ext || ruleMeta.ext || '';
362363
if (baseName === 'push_agent') {
363364
let key = 'push_agent';
364365
let name = `${ruleMeta.title}(hipy)`;
@@ -396,23 +397,26 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
396397
await batchExecute(py_tasks, listener);
397398

398399
}
399-
400+
const enable_cat = ENV.get('enable_cat', '1');
400401
// 根据用户是否启用cat源去生成对应配置
401-
if (ENV.get('enable_cat', '1') === '1') {
402+
if (enable_cat === '1' || enable_cat === '2') {
402403
const cat_files = readdirSync(catDir);
404+
const api_type = enable_cat === '1' ? 3 : 4;
403405
let cat_valid_files = cat_files.filter((file) => file.endsWith('.js') && !file.startsWith('_')); // 筛选出不是 "_" 开头的 .py 文件
404406
// log(py_valid_files);
405-
log(`开始生成catvod的t3配置,catDir:${catDir},源数量: ${cat_valid_files.length}`);
407+
log(`开始生成catvod的T${api_type}配置,catDir:${catDir},源数量: ${cat_valid_files.length}`);
406408

407409
const cat_tasks = cat_valid_files.map((file) => {
408410
return {
409411
func: async ({file, catDir, requestHost, pwd, SitesMap}) => {
410412
const baseName = path.basename(file, '.js'); // 去掉文件扩展名
411413
const extJson = path.join(catDir, baseName + '.json');
412-
let api = `${requestHost}/cat/${file}`;
414+
let api = enable_cat === '1' ? `${requestHost}/cat/${file}` : `${requestHost}/api/${baseName}?adapt=cat`; // 使用请求的 host 地址,避免硬编码端口
413415
let ext = existsSync(extJson) ? `${requestHost}/cat/${file}` : '';
416+
414417
if (pwd) {
415-
api += `?pwd=${pwd}`;
418+
api += api_type === 3 ? '?' : '&';
419+
api += `pwd=${pwd}`;
416420
if (ext) {
417421
ext += `?pwd=${pwd}`;
418422
}
@@ -445,6 +449,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
445449
ruleMeta.title = enableRuleName ? ruleMeta.title || baseName : baseName;
446450

447451
let fileSites = [];
452+
ext = ext || ruleMeta.ext || '';
448453
if (baseName === 'push_agent') {
449454
let key = 'push_agent';
450455
let name = `${ruleMeta.title}(cat)`;
@@ -466,7 +471,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
466471
const site = {
467472
key: fileSite.key,
468473
name: fileSite.name,
469-
type: 3, // 固定值
474+
type: api_type, // 固定值
470475
api,
471476
...ruleMeta,
472477
ext: fileSite.ext || "", // 固定为空字符串

docs/apidoc.md

Lines changed: 196 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,199 @@
1-
## 显式接口说明
1+
# drpyS接口文档
2+
3+
本文档基于 Fastify 实现整理,适合国内开发人员快速对接。
4+
5+
## 1. 接口概览
6+
7+
| 接口名称 | 请求方式 | 地址示例 |
8+
|------------|------------|--------------------|
9+
| 模块数据接口(T4) | GET / POST | `/api/:module` |
10+
| 模块代理接口 | GET | `/proxy/:module/*` |
11+
| 解析接口 | GET | `/parse/:jx` |
12+
13+
---
14+
15+
## 2. 接口详情
16+
17+
### 2.1 模块数据接口(T4)
18+
19+
- **URL**`/api/:module`
20+
- **请求方式**`GET` / `POST`
21+
- **鉴权**:需要 `validatePwd` 验证(通过请求参数如?pwd=dzyyds)
22+
- **Content-Type**
23+
- `application/json`
24+
- `application/x-www-form-urlencoded`
25+
26+
#### 路径参数
27+
28+
| 参数名 | 类型 | 必填 | 说明 |
29+
|--------|--------|----|-----------------------|
30+
| module | string || 自定义源文件名称,例如 `腾云驾雾[官]` |
31+
32+
#### 请求参数(query 或 body)
33+
34+
以下参数根据业务逻辑不同,**只需传递需要的字段**
35+
36+
| 参数名 | 类型 | 说明 |
37+
|---------|--------|----------------------------------------|
38+
| play | string | 播放链接标识 |
39+
| flag | string | 播放标志(配合 `play` 使用) |
40+
| ac | string | 动作类型,可配合 `t``ids``action` 等字段 |
41+
| t | string | 分类 ID(配合 `ac` 使用) |
42+
| ids | string | 详情 ID(逗号分隔) |
43+
| action | string | 执行动作名称 |
44+
| value | string | 执行动作值 |
45+
| wd | string | 搜索关键字 |
46+
| quick | number | 搜索模式(0 普通,1 快速) |
47+
| refresh | any | 强制刷新初始化 |
48+
| filter | number | 是否开启筛选(默认 1) |
49+
| pg | number | 页码,默认 1 |
50+
| ext | string | Base64 编码的 JSON 筛选参数 |
51+
| extend | string | 扩展参数(直接字符串,根据/config路由对应sites的ext属性传递) |
52+
| adapt | string | 自定义源适配器,默认ds,可不传 |
53+
54+
#### 功能分支
55+
56+
接口会根据传参进入不同逻辑:
57+
58+
1. **播放**`play` 存在 → 调用 `play` 方法
59+
2. **分类**`ac``t` 存在 → 调用 `cate` (ac=list)
60+
3. **详情**`ac``ids` 存在 → 调用 `detail` (ac=detail)
61+
4. **动作**`ac``action` 存在 → 调用 `action` (ac=action)
62+
5. **搜索**`wd` 存在 → 调用 `search`
63+
6. **刷新**`refresh` 存在 → 调用 `init`
64+
7. **默认**:返回 `home` + `homeVod` 数据
65+
66+
#### 返回示例
67+
68+
```json
69+
{
70+
"type": "影视",
71+
"class": [
72+
{
73+
"type_id": "1",
74+
"type_name": "电影"
75+
},
76+
{
77+
"type_id": "2",
78+
"type_name": "电视剧"
79+
}
80+
],
81+
"filters": {},
82+
"list": [
83+
{
84+
"vod_id": "123",
85+
"vod_name": "示例视频",
86+
"vod_pic": "http://example.com/img.jpg",
87+
"vod_remarks": "更新至第1集"
88+
}
89+
]
90+
}
91+
```
92+
93+
[更多T4接口说明参考](./t4api.md)
94+
95+
---
96+
97+
### 2.2 模块代理接口
98+
99+
- **URL**`/proxy/:module/*`
100+
- **请求方式**`GET`
101+
- **功能**:转发/代理模块相关资源(可处理 Range 请求,支持流媒体)
102+
- **路径参数**
103+
| 参数名 | 类型 | 必填 | 说明 |
104+
| ------- | ------ | ---- | ---- |
105+
| module | string || 模块名称 |
106+
| * | string || 代理的目标路径 |
107+
108+
- **查询参数**:与 `/api/:module` 相似,额外支持 `extend`
109+
- **返回值**
110+
- 可能是二进制文件(图片、视频等)
111+
- 可能是 JSON / 文本
112+
- 可能 302 重定向到 `/mediaProxy` 流代理地址
113+
114+
#### 返回示例(JSON)
115+
116+
```json
117+
{
118+
"code": 200,
119+
"msg": "成功",
120+
"data": "内容"
121+
}
122+
```
123+
124+
---
125+
126+
### 2.3 解析接口
127+
128+
- **URL**`/parse/:jx`
129+
- **请求方式**`GET`
130+
- **功能**:调用解析脚本解析传入链接(支持跳转、JSON 输出)
131+
- **路径参数**
132+
| 参数名 | 类型 | 必填 | 说明 |
133+
| ------ | ------ | ---- | ---- |
134+
| jx | string || 解析脚本名称(对应 `.js` 文件) |
135+
136+
- **查询参数**
137+
| 参数名 | 类型 | 必填 | 说明 |
138+
| ------ | ------ | ---- | ---- |
139+
| url | string || 待解析的链接 |
140+
| extend | string || 扩展参数 |
141+
142+
- **返回值**
143+
- `code`:200 成功,404 失败
144+
- `msg`:提示信息
145+
- `url`:解析后的地址
146+
- `cost`:解析耗时(毫秒)
147+
148+
#### 返回示例(成功)
149+
150+
```json
151+
{
152+
"code": 200,
153+
"url": "http://example.com/play.m3u8",
154+
"msg": "jx1解析成功",
155+
"cost": 123
156+
}
157+
```
158+
159+
#### 返回示例(失败)
160+
161+
```json
162+
{
163+
"code": 404,
164+
"url": "http://example.com",
165+
"msg": "jx1解析失败",
166+
"cost": 120
167+
}
168+
```
169+
170+
---
171+
172+
## 3. 错误返回格式
173+
174+
```json
175+
{
176+
"error": "错误描述信息"
177+
}
178+
```
179+
180+
- 常见错误:
181+
- `Module xxx not found`:模块不存在
182+
- `解析 xxx not found`:解析脚本不存在
183+
- `Failed to process module`:模块执行出错
184+
- `Failed to proxy module`:代理执行出错
185+
186+
---
187+
188+
## 4. 开发注意事项
189+
190+
1. 所有模块和解析脚本必须存在于 `jsDir` / `jxDir` 对应目录下。
191+
2. 访问 `/api/:module` 接口时需通过 `validatePwd` 验证。
192+
3. `ext` 参数必须是 **Base64 编码的 JSON 字符串**,否则会报“筛选参数错误”。
193+
4. 流媒体内容可能会通过 `/mediaProxy` 重定向处理。
194+
5. 建议在请求时加上 `pg` 参数避免默认第一页。
195+
196+
## 服务特殊显式接口说明
2197

3198
- 获取定时任务列表 [/tasks](/tasks)
4199
- 立即执行全部任务 [/execute-now/:taskName](/execute-now/)

0 commit comments

Comments
 (0)