mirror of
https://github.com/venera-app/venera-configs.git
synced 2025-09-27 08:27:24 +00:00
refactor(zaimanhua): 使用API接口替代HTML解析获取漫画数据
移除parseCoverComic方法,改为通过API接口获取漫画数据并重构parseJsonComic方法处理返回的JSON数据。同时修改首页加载逻辑,直接调用API接口获取推荐漫画列表,提高数据获取的稳定性和效率。
This commit is contained in:
85
zaimanhua.js
85
zaimanhua.js
@@ -42,41 +42,27 @@ class ZaiManHua extends ComicSource {
|
|||||||
return JSON.parse(res.body).data;
|
return JSON.parse(res.body).data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* parse comic from html element
|
|
||||||
* @param comic {HtmlElement}
|
|
||||||
* @returns {Comic}
|
|
||||||
*/
|
|
||||||
parseCoverComic(comic) {
|
|
||||||
let title = comic.querySelector("p > a").text.trim();
|
|
||||||
let url = comic.querySelector("p > a").attributes["href"];
|
|
||||||
let id = url.split("/").pop().split(".")[0];
|
|
||||||
let cover = comic.querySelector("img").attributes["src"];
|
|
||||||
let subtitle = comic.querySelector(".auth")?.text.trim();
|
|
||||||
if (!subtitle) {
|
|
||||||
subtitle = comic
|
|
||||||
.querySelector(".con_author")
|
|
||||||
?.text.replace("作者:", "")
|
|
||||||
.trim();
|
|
||||||
}
|
|
||||||
let description = comic.querySelector(".tip")?.text.trim();
|
|
||||||
|
|
||||||
return new Comic({ title, id, subtitle, url, cover, description });
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse json content
|
* parse json content
|
||||||
* @param e object
|
* @param e object
|
||||||
* @returns {Comic}
|
* @returns {Comic}
|
||||||
*/
|
*/
|
||||||
parseJsonComic(e) {
|
parseJsonComic(e) {
|
||||||
|
let id = e.comic_py;
|
||||||
|
if (!id) {
|
||||||
|
id = id.comicPy;
|
||||||
|
}
|
||||||
|
let title = e?.name;
|
||||||
|
if (!title) {
|
||||||
|
title = e?.title;
|
||||||
|
}
|
||||||
return new Comic({
|
return new Comic({
|
||||||
id: e.comic_py,
|
id: id.toString(),
|
||||||
title: e.name,
|
title: title.toString(),
|
||||||
subtitle: e.authors,
|
subtitle: e?.authors,
|
||||||
tags: e.types.split("/"),
|
tags: e?.types?.split("/"),
|
||||||
cover: e.cover,
|
cover: e?.cover,
|
||||||
description: e.last_update_chapter_name,
|
description: e?.last_update_chapter_name.toString(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,24 +95,31 @@ class ZaiManHua extends ComicSource {
|
|||||||
*/
|
*/
|
||||||
load: async (page) => {
|
load: async (page) => {
|
||||||
let result = {};
|
let result = {};
|
||||||
let document = await this.fetchHtml(this.domain);
|
// https://manhua.zaimanhua.com/api/v1/comic1/recommend/list?
|
||||||
// 推荐
|
// channel=pc&app_name=zmh&version=1.0.0×tamp=1753547675981&uid=0
|
||||||
let recommend_title = document.querySelector(
|
let api = `${this.baseUrl}/api/v1/comic1/recommend/list`;
|
||||||
".new_recommend_l h2"
|
let params = {
|
||||||
)?.text;
|
channel: "pc",
|
||||||
let recommend_comics = document
|
app_name: "zmh",
|
||||||
.querySelectorAll(".new_recommend_l li")
|
version: "1.0.0",
|
||||||
.map(this.parseCoverComic);
|
timestamp: Date.now(),
|
||||||
result[recommend_title] = recommend_comics;
|
uid: 0,
|
||||||
// 更新
|
};
|
||||||
let update_title = document.querySelector(".new_update_l h2")?.text;
|
let params_str = Object.keys(params)
|
||||||
let update_comics = document
|
.map((key) => `${key}=${params[key]}`)
|
||||||
.querySelectorAll(".new_update_l li")
|
.join("&");
|
||||||
.map(this.parseCoverComic);
|
let url = `${api}?${params_str}`;
|
||||||
result[update_title] = update_comics;
|
const json = await this.fetchJson(url);
|
||||||
// 少男漫画
|
let data = json.list;
|
||||||
// 少女漫画
|
data.shift(); // 去掉第一个
|
||||||
// 冒险,搞笑,奇幻
|
data.pop(); // 去掉最后一个
|
||||||
|
data.map((arr) => {
|
||||||
|
let title = arr.name;
|
||||||
|
let comic_list = arr.list.map((item) => this.parseJsonComic(item));
|
||||||
|
result[title] = comic_list;
|
||||||
|
});
|
||||||
|
|
||||||
|
log("error", "再看漫画", result);
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user