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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @param e object
|
||||
* @returns {Comic}
|
||||
*/
|
||||
parseJsonComic(e) {
|
||||
let id = e.comic_py;
|
||||
if (!id) {
|
||||
id = id.comicPy;
|
||||
}
|
||||
let title = e?.name;
|
||||
if (!title) {
|
||||
title = e?.title;
|
||||
}
|
||||
return new Comic({
|
||||
id: e.comic_py,
|
||||
title: e.name,
|
||||
subtitle: e.authors,
|
||||
tags: e.types.split("/"),
|
||||
cover: e.cover,
|
||||
description: e.last_update_chapter_name,
|
||||
id: id.toString(),
|
||||
title: title.toString(),
|
||||
subtitle: e?.authors,
|
||||
tags: e?.types?.split("/"),
|
||||
cover: e?.cover,
|
||||
description: e?.last_update_chapter_name.toString(),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -109,24 +95,31 @@ class ZaiManHua extends ComicSource {
|
||||
*/
|
||||
load: async (page) => {
|
||||
let result = {};
|
||||
let document = await this.fetchHtml(this.domain);
|
||||
// 推荐
|
||||
let recommend_title = document.querySelector(
|
||||
".new_recommend_l h2"
|
||||
)?.text;
|
||||
let recommend_comics = document
|
||||
.querySelectorAll(".new_recommend_l li")
|
||||
.map(this.parseCoverComic);
|
||||
result[recommend_title] = recommend_comics;
|
||||
// 更新
|
||||
let update_title = document.querySelector(".new_update_l h2")?.text;
|
||||
let update_comics = document
|
||||
.querySelectorAll(".new_update_l li")
|
||||
.map(this.parseCoverComic);
|
||||
result[update_title] = update_comics;
|
||||
// 少男漫画
|
||||
// 少女漫画
|
||||
// 冒险,搞笑,奇幻
|
||||
// https://manhua.zaimanhua.com/api/v1/comic1/recommend/list?
|
||||
// channel=pc&app_name=zmh&version=1.0.0×tamp=1753547675981&uid=0
|
||||
let api = `${this.baseUrl}/api/v1/comic1/recommend/list`;
|
||||
let params = {
|
||||
channel: "pc",
|
||||
app_name: "zmh",
|
||||
version: "1.0.0",
|
||||
timestamp: Date.now(),
|
||||
uid: 0,
|
||||
};
|
||||
let params_str = Object.keys(params)
|
||||
.map((key) => `${key}=${params[key]}`)
|
||||
.join("&");
|
||||
let url = `${api}?${params_str}`;
|
||||
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;
|
||||
},
|
||||
},
|
||||
|
Reference in New Issue
Block a user