Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
更新文件
  • Loading branch information
EylinSir committed Jan 15, 2026
commit dd58dbd14b89e0a333943535c5261a5301ee97fe
4 changes: 0 additions & 4 deletions config/map.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ AppFei@@https://ysa.yy-fun.cc/feiapp@@森林动漫[AF]
AppGet@@{"host":"https://snysw.xyz/mf4kzs327.txt","key":"1234567887654321"}@@魔方[AG¹]
AppGet@@{"host":"https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt","key":"88689667dce61725"}@@茉莉[AG¹]
AppGet@@{"host":"http://ys.qist.top","key":"2SWSPFxugBLPPOKo"}@@旗星[AG¹]
AppGet@@{"host":"https://api1.bffree.cn","key":"2015692015692015"}@@橘子[AG¹]
AppGet@@{"host":"https://dy.58ys.vip","key":"JEWibY1AgWF0V1xx"}@@五八[AG¹]
AppGet@@{"host":"https://mac.555618.xyz","key":"#getapp@TMD@2025"}@@玲珑[AG¹]
AppGet@@{"host":"https://app.omofun1.top","key":"66dc309cbeeca454"}@@OMOfun[AG¹]
Expand All @@ -50,16 +49,13 @@ AppSk@@{"host":"https://sk.xiaoyaoys.top/skkkkkkk.txt","key":"ygcnbcczduwydmrs",
AppV6@@{"api":"http://yjyi.juyongjiu.com/icciu_api.php/v1.vod","datasignkey":"6QQNUsP3PkD2ajJCPCY8","apisignkey":"lvdoutv-1.0.0"}@@剧永久[AV⁶]
AppV6@@http://jxfmax.juxiafan.com/icciu_api.php/v1.vod@@剧下饭[AV⁶]
AppToV5@@http://118.89.203.120:8762@@番喜[ATV⁵]
AppToV5@@http://111.173.114.61:8762@@爱看剧Fax[ATV⁵]
AppToV5@@http://38.55.237.41:8762@@皮皮虾[ATV⁵]
AppV2²@@https://www.heli888.cc@@河狸![AV²]
AppV2²@@http://38.47.213.61:41271@@闪影[AV²]
AppV2²@@http://v.lnhaozhenjin.cn@@好震惊[AV²]
AppV2²@@http://jxfmax.juxiafan.com@@剧下饭[AV²]
AppV1@@http://ziyuncms.feifan12.xyz/api.php@@紫云[AV¹]
getapp3.4.4@@{"host":"https://staraugust123456.oss-cn-hangzhou.aliyuncs.com/2.txt","datakey":"staraugust123456","api":2}@@云云[AG³]
getapp3.4.4@@{"host":"https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json","datakey":"AAdgrdghjfgswerA","api":2}@@鲸鱼影视[AG³]
getapp3.4.4@@{"host":"https://www.guahd.com/1.txt","key":"f2A7D4B9E8C16531"}@@瓜萌[AG³]
getapp3.4.4@@{"host":"https://99.jl8.top/1.txt","key":"xnybssspqtwotuwj"}@@七月[AG³]
getapp3.4.4@@{"host":"http://tvb.yy-fun.cc","key":"jcTz6Jda2aKrH8Tk"}@@掌上追剧[AG³]
AppHs@@{"host":"https://dy.jmzp.net.cn","app_id":"shiguang","deviceid":"","versionCode":"10000","UMENG_CHANNEL":"guan"}@@拾光视频[Hs]
Expand Down
8 changes: 0 additions & 8 deletions json/App模板配置.json
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,6 @@
"iv": "37kj83zs1q16jk6t",
"verify": "true"
},
"橘子": {
"muban": "AppQiji",
"host": "https://juziapp.tpmbt.cn",
"hosturl": "",
"key": "K3h6YvSU8BTUfEcb",
"iv": "K3h6YvSU8BTUfEcb",
"verify": "true"
},
"丫丫动漫": {
"muban": "AppGet",
"host": "http://tv.yy-fun.cc",
Expand Down
4 changes: 3 additions & 1 deletion public/sub/order_common.example.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
设置中心
番茄小说
大象影视
腾云驾雾
央视大全
IPTV
[优]
[盘]
[漫]
[短]
[官]
[听]
[书]
[搜]
DS
cat
DR2
hipy
推送
155 changes: 155 additions & 0 deletions spider/js/去读书[书].js
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
/*
@header({
searchable: 1,
filterable: 0,
quickSearch: 1,
title: '去读书[书]',
author: 'EylinSir',
'类型': '小说',
logo: 'http://www.qudushu.com/favicon.ico',
lang: 'ds'
})
*/

var rule = {
类型: '小说',
author: 'EylinSir',
title: '去读书[书]',
host: 'http://www.qudushu.com',
url: '/book/fyclass/0/fypage.html',
logo: 'http://www.qudushu.com/favicon.ico',
class_name: '玄幻魔法&武侠修真&都市言情&历史军事&穿越架空&游戏竞技',
class_url: 'sort1&sort2&sort3&sort4&sort5&sort6',
searchUrl: '/modules/article/search.php?q=**',
searchable: 1,
quickSearch: 1,
filterable: 0,
timeout: 10000,
play_parse: true,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36'
},
request: async function (url, obj) {
obj = obj || {};
try {
const response = await _fetch(url, {
method: obj.method || 'GET',
headers: obj.headers || this.headers
});
return response.text();
} catch (err) {
return '';
}
},

一级: async function () {
let {input, pdfa, pdfh, pd} = this;
let url = input.startsWith('http') ? input : this.host + '/book/' + input + '/0/1.html';
let html = await this.request(url);
let d = [];
let items = pdfa(html, '.blockcontent .c_row') || pdfa(html, '.c_row') || [];
for (let item of items) {
let title = pdfh(item, '.c_subject a:eq(1)&&Text');
let itemUrl = pd(item, '.c_subject a:eq(1)&&href');
if (!title || !itemUrl) continue;
let remarks = pdfh(item, '.c_tag span:eq(1)&&Text') || '';
let pic = pd(item, 'img&&src') || '';
let content = pdfh(item, '.c_description&&Text') || '';
d.push({
title: title,
url: itemUrl,
desc: remarks,
pic_url: pic,
content: content,
});
}
return setResult(d);
},

二级: async function () {
let {input, pdfa, pdfh, pd} = this;
let html = await this.request(input);
let VOD = {};
VOD.vod_name = pdfh(html, '[property="og:novel:book_name"]&&content') || '';
VOD.type_name = '';
VOD.vod_pic = pd(html, '.divbox.cf img&&src') || '';
VOD.vod_content = pdfh(html, '.tabcontent .tabvalue:eq(0)&&Text') || '';
VOD.vod_remarks = pdfh(html, 'h3 a&&Text') || '';
VOD.vod_year = '';
VOD.vod_area = '';
VOD.vod_actor = pdfh(html, '[property="og:novel:author"]&&content') || '';
VOD.vod_director = VOD.vod_actor;
VOD.vod_play_from = '去读书网';
let toc_url = pd(html, 'a:contains(点击阅读)&&href') || '';
if (toc_url && !toc_url.startsWith('http')) {
toc_url = this.host + toc_url;
}
let toc_html = toc_url ? await this.request(toc_url) : '';
let chapters = [];
let chapterItems = pdfa(toc_html, '.index li') || [];
for (let chapter of chapterItems) {
let title = pdfh(chapter, 'a&&Text');
let chapter_url = pd(chapter, 'a&&href');
if (!title || !chapter_url) continue;
if (!chapter_url.startsWith('http')) {
chapter_url = this.host + chapter_url;
}
chapters.push(title + '$' + chapter_url);
}
VOD.vod_play_url = chapters.join('#');
return VOD;
},

搜索: async function () {
let {KEY, pdfa, pdfh, pd} = this;
let url = this.host + this.searchUrl.replace('**', encodeURIComponent(KEY));
let html = await this.request(url);
if (!html) {
url = this.host + '/modules/article/search.php?q=' + encodeURIComponent(KEY);
html = await this.request(url);
}
let d = [];
let items = pdfa(html, '#jieqi_page_contents .c_row') || [];
for (let item of items) {
let title = pdfh(item, '.c_subject a&&Text');
let itemUrl = pd(item, '.c_subject a&&href');
if (!title || !itemUrl) continue;
itemUrl = itemUrl.startsWith('http') ? itemUrl : this.host + itemUrl;
let pic = pd(item, 'img&&src') || '';
pic = pic.startsWith('http') ? pic : this.host + pic;
d.push({
title: title,
url: itemUrl,
desc: pdfh(item, '.c_tag span:eq(1)&&Text') || '',
pic_url: pic,
content: '',
});
}
return setResult(d);
},

lazy: async function () {
let {input, pdfh} = this;
let html = await this.request(input);
let title = pdfh(html, 'h1&&Text') || '';
let content = pdfh(html, '#acontent&&Html') || '';
if (content) {
content = content.replace(/<script[^>]*?>.*?<\/script>/gs, '')
.replace(/<\/p>/g, '\n\n')
.replace(/<br[^>]*?>/g, '\n')
.replace(/<[^>]*?>/g, '')
.replace(/去读书推荐各位书友阅读:.*|去读书 www\.qudushu\.la|如果您中途有事离开,请按.*以便以后接着观看!/g, '')
.replace(/[()]/g, '')
.replace(/&nbsp;/g, ' ')
.replace(/[ \t]+/g, ' ')
.replace(/\n[ \t]+|[ \t]+\n/g, '\n')
.replace(/\n+/g, '\n\n')
.trim();
}
return {
parse: 0,
url: 'novel://' + JSON.stringify({title, content}),
js: ''
};
}
};
160 changes: 160 additions & 0 deletions spider/js/阅读助手[书].js
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
var rule = {
类型: '小说',
author: 'EylinSir',
title: '阅读助手[书]',
desc: '阅读助手小说源',
host: 'https://api-bc.wtzw.com',
homeUrl: 'https://api-bc.wtzw.com',
url: '/api/v4/category/get-list?gender=fyclass&category_id=fyfilter&need_filters=1&page=fypage&need_category=1',
class_name: '男生&女生&出版',
class_url: '1&2&3',
searchUrl: '/api/v5/search/words?gender=3&imei_ip=2937357107&page=fypage&wd=**',
searchable: 2,
quickSearch: 0,
filterable: 1,
filter: {
"1": [{key: "type", name: "类型", value: [{"n":"玄幻奇幻","v":"202"},{"n":"都市人生","v":"203"},{"n":"武侠仙侠","v":"205"},{"n":"历史军事","v":"56"},{"n":"科幻末世","v":"64"},{"n":"游戏竞技","v":"75"},{"n":"体育赛事","v":"206"},{"n":"奇闻异事","v":"204"}]}],
"2": [{key: "type", name: "类型", value: [{"n":"现代言情","v":"1"},{"n":"古代言情","v":"2"},{"n":"幻想言情","v":"4"},{"n":"宫闱宅斗","v":"209"}]}],
"3": [{key: "type", name: "类型", value: [{"n":"悬疑推理","v":"262"},{"n":"文学艺术","v":"240"},{"n":"历史传记","v":"264"}]}]
},
filter_url: "{{fl.type}}",
filter_def: {},
headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36'},
sign_headers: {
"app-version": "51110", "platform": "android", "reg": "0", "AUTHORIZATION": "",
"application-id": "com.****.reader", "net-env": "1", "channel": "unknown", "qm-params": ""
},
timeout: 10000,
play_parse: true,

request: async function (url, obj) {
obj = obj || {};
const response = await _fetch(url, {
method: obj.method || 'GET',
headers: obj.headers || this.headers
});
return response.text();
},

预处理: async function () {
this.sign_headers.sign = getSignStr(this.sign_headers);
},

一级: async function (tid, pg, filter, extend) {
let d = [];
const cateMap = {'1':'202', '2':'1', '3':'262'};
let gender = tid !== '-1' ? tid : '2';
let category_id = cateMap[gender];
const validSubTypes = ['202','203','205','56','64','75','206','204','1','2','4','209','262','240','264'];
if (extend?.type && validSubTypes.includes(extend.type)) {
category_id = extend.type;
} else if (filter && validSubTypes.includes(filter)) {
category_id = filter;
}
let params = {
gender: gender,
category_id: category_id,
need_filters: '1',
page: pg || '1',
need_category: '1',
imei_ip: '2937357107'
};
params.sign = getSignStr(params);
let html = await this.request(buildUrl(`${this.host}/api/v4/category/get-list`, params), {headers: this.sign_headers});
let json = JSON.parse(html);
if (json?.data?.books) {
d = json.data.books.map(it => ({
title: it.title,
url: `${this.host}/api/v4/book/detail?id=${it.id}`,
desc: it.author,
pic_url: it.image_link,
content: it.intro
}));
}
return setResult(d);
},

二级: async function () {
let VOD = {};
let bookId = this.input.match(/id=(\d+)/)[1];
let detailParams = {id: bookId, imei_ip: '2937357107', teeny_mode: '0'};
detailParams.sign = getSignStr(detailParams);
let detailHtml = await this.request(buildUrl(`${this.host}/api/v4/book/detail`, detailParams), {headers: this.sign_headers});
let detailJson = JSON.parse(detailHtml);
if (detailJson?.data?.book) {
let book = detailJson.data.book;
VOD = {
vod_name: book.title,
type_name: book.book_tag_list?.map(tag => tag.title).join(',') || '',
vod_pic: book.image_link,
vod_content: book.intro,
vod_remarks: book.latest_chapter_title,
vod_year: '', vod_area: '',
vod_actor: book.author, vod_director: book.author,
vod_play_from: '阅读助手'
};
let tocParams = {id: book.id};
tocParams.sign = getSignStr(tocParams);
let tocHtml = await this.request(buildUrl('https://api-ks.wtzw.com/api/v1/chapter/chapter-list', tocParams), {headers: this.sign_headers});
let tocJson = JSON.parse(tocHtml);
if (tocJson?.data?.chapter_lists) {
VOD.vod_play_url = tocJson.data.chapter_lists.map(chapter =>
`${chapter.title}$${book.id}@@${chapter.id}@@${chapter.title}`
).join('#');
}
}
return VOD;
},

搜索: async function () {
let d = [];
let params = {
gender: '3', imei_ip: '2937357107',
page: this.MY_PAGE, wd: this.KEY
};
params.sign = getSignStr(params);
let html = await this.request(buildUrl(`${this.host}/api/v5/search/words`, params), {headers: this.sign_headers});
let json = JSON.parse(html);
if (json?.data?.books) {
d = json.data.books.map(it => ({
title: it.original_title,
desc: it.author,
pic_url: it.image_link,
url: `${this.host}/api/v4/book/detail?id=${it.id}`,
content: it.intro
}));
}
return setResult(d);
},

lazy: async function () {
let [bookId, chapterId, title] = this.input.split('@@');
let content = '内容加载失败';
let params = {id: bookId, chapterId};
params.sign = getSignStr(params);
let html = await this.request(buildUrl('https://api-ks.wtzw.com/api/v1/chapter/content', params), {headers: this.sign_headers});
let json = JSON.parse(html);
if (json?.data?.content) content = decodeContent(json.data.content);
return {
parse: 0,
url: `novel://${JSON.stringify({title, content})}`,
js: ''
};
}
};

function getSignStr(params) {
const sign_key = "d3dGiJc651gSQ8w1";
return md5(Object.keys(params).sort().reduce((pre, n) => pre + n + "=" + params[n], "") + sign_key);
}

function decodeContent(content) {
let key = CryptoJS.enc.Utf8.parse("242ccb8230d709e1");
let ivEncData = CryptoJS.enc.Base64.parse(content);
let iv = CryptoJS.lib.WordArray.create(ivEncData.words.slice(0, 4));
let encrypted = CryptoJS.lib.WordArray.create(ivEncData.words.slice(4));
let decrypted = CryptoJS.AES.decrypt({ciphertext: encrypted}, key, {
iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}