rsshub
Version:
Make RSS Great Again!
145 lines (142 loc) • 3.99 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import { n as parseRelativeDate } from "./parse-date-BrP7mxXf.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import { load } from "cheerio";
//#region lib/routes/hpoi/info.ts
const route = {
path: "/info/:type?/:catType?",
categories: ["anime"],
example: "/hpoi/info/all/hobby|model",
parameters: {
type: {
description: "情报类型",
options: [
{
value: "all",
label: "全部"
},
{
value: "confirm",
label: "制作"
},
{
value: "official_pic",
label: "官图更新"
},
{
value: "preorder",
label: "开订"
},
{
value: "delay",
label: "延期"
},
{
value: "release",
label: "出荷"
},
{
value: "reorder",
label: "再版"
},
{
value: "hobby",
label: "手办(拟废弃, 无效果)"
},
{
value: "model",
label: "动漫模型(拟废弃, 无效果)"
}
],
default: "all"
},
catType: {
description: "手办分类过滤, 使用|分割, 支持的分类见下表",
default: "all"
}
},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
name: "情报",
maintainers: ["sanmmm DIYgod"],
description: `::: tip
情报类型中的*手办*、*模型*只是为了兼容, 实际效果等同于**全部**, 如果只需要**手办**类型的情报, 可以使用参数*catType*, e.g. /hpoi/info/all/hobby
:::
| 手办 | 动漫模型 | 真实模型 | 毛绒布偶 | doll娃娃 | GK/其他 |
| ------ | ------- | ------- | ------- | ------- | ------ |
| hobby | model | real | moppet | doll | gkdiy |`,
handler
};
async function handler(ctx) {
const { type = "all", catType = "all" } = ctx.req.param();
const baseUrl = "https://www.hpoi.net";
const reqUrl = `${baseUrl}/user/home/ajax`;
const classMap = {
all: "全部",
hobby: "手办",
model: "动漫模型",
real: "真实模型",
moppet: "毛绒布偶",
doll: "doll娃娃",
gkdiy: "GK/其他"
};
const filterArr = catType.split("|").toSorted();
const filterSet = new Set(filterArr.map((e) => classMap[e]));
if (catType.includes("all")) filterSet.clear();
let finalType = type;
if (["hobby", "model"].includes(type)) finalType = "all";
const url = `${reqUrl}?page=1&type=info&subType=${finalType}`;
const items = load((await got_default.post(url)).data)(".home-info").toArray().map((ele) => {
const $item = load(ele);
const leftNode = $item(".overlay-container");
const relativeLink = leftNode.find("a").first().attr("href");
const typeName = leftNode.find(".type-name").first().text().trim();
const imgUrl = leftNode.find("img").first().attr("src");
const rightNode = $item(".home-info-content");
const infoType = rightNode.find(".user-name").contents()[0].data.trim();
const infoTitle = rightNode.find(".user-content").text();
return {
title: infoTitle,
pubDate: parseRelativeDate(rightNode.find(".type-time").text()),
link: `${baseUrl}/${relativeLink}`,
category: infoType,
typeName,
description: [
`类型:${typeName}`,
infoTitle,
`更新内容: ${infoType}`,
`<img src="${imgUrl}"/>`
].join("<br/>")
};
});
const items2 = filterSet.size > 0 ? items.filter((e) => filterSet.has(e.typeName)) : items;
const title = `手办维基 - 情报 - ${{
all: "全部",
confirm: "制作",
official_pic: "官图更新",
preorder: "开订",
delay: "延期",
release: "出荷",
reorder: "再版"
}[finalType]}`;
return {
title,
link: `${baseUrl}/user/home?type=info&subType=${type}&catType=${filterSet.size > 0 ? filterArr.join("|") : "all"}`,
description: title,
item: items2,
allowEmpty: true
};
}
//#endregion
export { route };