Skip to content

Commit 4c6c688

Browse files
committed
update:支持传参源
1 parent c39a82d commit 4c6c688

File tree

15 files changed

+9476
-33
lines changed

15 files changed

+9476
-33
lines changed

README.md

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

1717
## 更新记录
1818

19-
### 20250101
19+
### 20250102
2020

21-
更新至V1.0.28
21+
更新至V1.0.29
2222

23-
1. basic授权可以不启用
24-
2. 设置中心优化AI的回复
23+
1. 增加 `七猫小说.js`
24+
1. 支持传参源 `我的哔哩.js`
2525

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

config/map.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
我的哔哩[官]@?render=1&type=url&params=../json/哔哩教育.json@哔哩教育[官]
2+
我的哔哩[官]@?render=1&type=url&params=../json/哔哩大全.json@哔哩大全[官]

controllers/api.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ export default (fastify, options, done) => {
2424
const method = request.method.toUpperCase();
2525
// 根据请求方法选择参数来源
2626
const query = method === 'GET' ? request.query : request.body;
27+
const moduleExt = query.extend || '';
2728
const protocol = request.protocol;
2829
const hostname = request.hostname;
2930
// const proxyUrl = `${protocol}://${hostname}${request.url}`.split('?')[0].replace('/api/', '/proxy/') + '/?do=js';
3031
// const proxyUrl = `${protocol}://${hostname}/proxy/${moduleName}/?do=js`;
3132
// console.log('proxyUrl:', proxyUrl);
3233

3334
const publicUrl = `${protocol}://${hostname}/public/`;
35+
const jsonUrl = `${protocol}://${hostname}/json/`;
3436
const httpUrl = `${protocol}://${hostname}/http`;
3537
const mediaProxyUrl = `${protocol}://${hostname}/mediaProxy`;
3638

@@ -41,7 +43,7 @@ export default (fastify, options, done) => {
4143
return proxyUrl
4244
};
4345
return {
44-
proxyUrl, publicUrl, httpUrl, mediaProxyUrl, getProxyUrl
46+
proxyUrl, publicUrl, jsonUrl, httpUrl, mediaProxyUrl, getProxyUrl, ext: moduleExt
4547
}
4648
}
4749

controllers/config.js

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import * as drpy from '../libs/drpyS.js';
44
import {naturalSort, urljoin} from '../utils/utils.js'
55
import {ENV} from "../utils/env.js";
66
import {validatePwd} from "../utils/api_validate.js";
7+
import {getSitesMap} from "../utils/sites-map.js";
78

89
// 工具函数:生成 JSON 数据
9-
async function generateSiteJSON(jsDir, requestHost, sub, subFilePath, pwd) {
10+
async function generateSiteJSON(jsDir, configDir, requestHost, sub, subFilePath, pwd) {
1011
const files = readdirSync(jsDir);
1112
let valid_files = files.filter((file) => file.endsWith('.js') && !file.startsWith('_')); // 筛选出不是 "_" 开头的 .js 文件
1213
let sort_list = [];
@@ -39,10 +40,10 @@ async function generateSiteJSON(jsDir, requestHost, sub, subFilePath, pwd) {
3940
if (ENV.get('hide_adult') === '1') {
4041
valid_files = valid_files.filter(it => !(new RegExp('\\[[密]\\]|密+')).test(it));
4142
}
43+
let SitesMap = getSitesMap(configDir);
44+
// console.log(SitesMap);
4245
for (const file of valid_files) {
4346
const baseName = path.basename(file, '.js'); // 去掉文件扩展名
44-
let key = `drpyS_${baseName}`;
45-
let name = `${baseName}(DS)`;
4647
let api = `${requestHost}/api/${baseName}`; // 使用请求的 host 地址,避免硬编码端口
4748
if (pwd) {
4849
api += `?pwd=${pwd}`;
@@ -58,22 +59,42 @@ async function generateSiteJSON(jsDir, requestHost, sub, subFilePath, pwd) {
5859
} catch (e) {
5960
console.log(`file:${file} error:${e.message}`);
6061
}
62+
let fileSites = [];
6163
if (baseName === 'push_agent') {
62-
key = 'push_agent';
63-
name = `${ruleObject.title}(DS)`;
64+
let key = 'push_agent';
65+
let name = `${ruleObject.title}(DS)`;
66+
fileSites.push({key, name})
67+
} else if (SitesMap.hasOwnProperty(baseName) && Array.isArray(SitesMap[baseName])) {
68+
SitesMap[baseName].forEach((it) => {
69+
let key = `drpyS_${it.alias}`;
70+
let name = `${it.alias}(DS)`;
71+
let ext = '';
72+
if (it.queryObject.type === 'url') {
73+
ext = it.queryObject.params;
74+
} else {
75+
ext = it.queryStr;
76+
}
77+
fileSites.push({key: key, name: name, ext: ext})
78+
});
79+
} else {
80+
let key = `drpyS_${baseName}`;
81+
let name = `${baseName}(DS)`;
82+
fileSites.push({key, name})
6483
}
65-
const site = {
66-
key,
67-
name,
68-
type: 4, // 固定值
69-
api,
70-
searchable: ruleObject.searchable,
71-
filterable: ruleObject.filterable,
72-
quickSearch: ruleObject.quickSearch,
73-
more: ruleObject.more,
74-
ext: "", // 固定为空字符串
75-
};
76-
sites.push(site);
84+
fileSites.forEach((fileSite) => {
85+
const site = {
86+
key: fileSite.key,
87+
name: fileSite.name,
88+
type: 4, // 固定值
89+
api,
90+
searchable: ruleObject.searchable,
91+
filterable: ruleObject.filterable,
92+
quickSearch: ruleObject.quickSearch,
93+
more: ruleObject.more,
94+
ext: fileSite.ext || "", // 固定为空字符串
95+
};
96+
sites.push(site);
97+
});
7798
}
7899
sites = naturalSort(sites, 'name', sort_list);
79100
return {sites};
@@ -208,7 +229,7 @@ export default (fastify, options, done) => {
208229
}
209230
}
210231

211-
const siteJSON = await generateSiteJSON(options.jsDir, requestHost, sub, options.subFilePath, pwd);
232+
const siteJSON = await generateSiteJSON(options.jsDir, options.configDir, requestHost, sub, options.subFilePath, pwd);
212233
const parseJSON = generateParseJSON(options.jxDir, requestHost);
213234
const livesJSON = generateLivesJSON(requestHost);
214235
const playerJSON = generatePlayerJSON(options.configDir, requestHost);

custom.json

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"sites_count": 40,
2+
"sites_count": 43,
33
"sites": [
44
{
55
"key": "drpyS_设置中心",
@@ -76,6 +76,26 @@
7676
"quickSearch": 0,
7777
"ext": ""
7878
},
79+
{
80+
"key": "drpyS_哔哩大全[官]",
81+
"name": "哔哩大全[官](DS)",
82+
"type": 4,
83+
"api": "http://localhost:5757/api/我的哔哩[官]",
84+
"searchable": 2,
85+
"filterable": 1,
86+
"quickSearch": 0,
87+
"ext": "../json/哔哩大全.json"
88+
},
89+
{
90+
"key": "drpyS_哔哩教育[官]",
91+
"name": "哔哩教育[官](DS)",
92+
"type": 4,
93+
"api": "http://localhost:5757/api/我的哔哩[官]",
94+
"searchable": 2,
95+
"filterable": 1,
96+
"quickSearch": 0,
97+
"ext": "../json/哔哩教育.json"
98+
},
7999
{
80100
"key": "drpyS_哔哩直播[官]",
81101
"name": "哔哩直播[官](DS)",
@@ -216,6 +236,16 @@
216236
"quickSearch": 0,
217237
"ext": ""
218238
},
239+
{
240+
"key": "drpyS_七猫小说[书]",
241+
"name": "七猫小说[书](DS)",
242+
"type": 4,
243+
"api": "http://localhost:5757/api/七猫小说[书]",
244+
"searchable": 2,
245+
"filterable": 1,
246+
"quickSearch": 0,
247+
"ext": ""
248+
},
219249
{
220250
"key": "drpyS_人人视频",
221251
"name": "人人视频(DS)",

docs/updateRecord.md

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

3+
### 20250102
4+
5+
更新至V1.0.29
6+
7+
1. 增加 `七猫小说.js`
8+
2. 新增 `我的哔哩[官].js`,支持传参源,传参字典可自定义,文件在 `config/map.txt`,格式为 `接口名称@参数@别名`
9+
3. 支持ipv6监听服务
10+
311
### 20250101
412

513
更新至V1.0.28

index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ fastify.register(fastifyStatic, {
2424
decorateReply: false, // 禁用 sendFile
2525
});
2626

27+
fastify.register(fastifyStatic, {
28+
root: path.join(__dirname, 'json'),
29+
prefix: '/json/', // 新的访问路径前缀
30+
decorateReply: false, // 禁用 sendFile
31+
});
32+
2733
// 注册插件以支持 application/x-www-form-urlencoded
2834
fastify.register(formBody);
2935

@@ -48,7 +54,8 @@ registerRoutes(fastify, {
4854
const start = async () => {
4955
try {
5056
// 启动 Fastify 服务
51-
await fastify.listen({port: PORT, host: '0.0.0.0'});
57+
// await fastify.listen({port: PORT, host: '0.0.0.0'});
58+
await fastify.listen({port: PORT, host: '::'});
5259

5360
// 获取本地和局域网地址
5461
const localAddress = `http://localhost:${PORT}`;

index.json

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"sites_count": 40,
2+
"sites_count": 43,
33
"sites": [
44
{
55
"key": "drpyS_设置中心",
@@ -76,6 +76,26 @@
7676
"quickSearch": 0,
7777
"ext": ""
7878
},
79+
{
80+
"key": "drpyS_哔哩大全[官]",
81+
"name": "哔哩大全[官](DS)",
82+
"type": 4,
83+
"api": "http://localhost:5757/api/我的哔哩[官]",
84+
"searchable": 2,
85+
"filterable": 1,
86+
"quickSearch": 0,
87+
"ext": "../json/哔哩大全.json"
88+
},
89+
{
90+
"key": "drpyS_哔哩教育[官]",
91+
"name": "哔哩教育[官](DS)",
92+
"type": 4,
93+
"api": "http://localhost:5757/api/我的哔哩[官]",
94+
"searchable": 2,
95+
"filterable": 1,
96+
"quickSearch": 0,
97+
"ext": "../json/哔哩教育.json"
98+
},
7999
{
80100
"key": "drpyS_哔哩直播[官]",
81101
"name": "哔哩直播[官](DS)",
@@ -216,6 +236,16 @@
216236
"quickSearch": 0,
217237
"ext": ""
218238
},
239+
{
240+
"key": "drpyS_七猫小说[书]",
241+
"name": "七猫小说[书](DS)",
242+
"type": 4,
243+
"api": "http://localhost:5757/api/七猫小说[书]",
244+
"searchable": 2,
245+
"filterable": 1,
246+
"quickSearch": 0,
247+
"ext": ""
248+
},
219249
{
220250
"key": "drpyS_人人视频",
221251
"name": "人人视频(DS)",

0 commit comments

Comments
 (0)