rsshub
Version:
Make RSS Great Again!
84 lines (83 loc) • 3.46 kB
JavaScript
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { a as getRootUrl, i as getApiUrl, n as apiMapCategory, o as processApiItems, r as defaultDomain, s as renderDescription } from "./utils-CJnL25A2.mjs";
//#region lib/routes/18comic/search.ts
const route = {
path: "/search/:option?/:category?/:keyword?/:time?/:order?",
categories: ["anime"],
example: "/18comic/search/photos/all/NTR",
parameters: {
option: "选项,可选 `video` 和 `photos`,默认为 `photos`",
category: "分类,同上表,默认为 `all` 即全部",
keyword: "关键字,同上表,默认为空",
time: "时间范围,同上表,默认为 `a` 即全部",
order: "排列顺序,同上表,默认为 `mr` 即最新"
},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: true,
supportBT: false,
supportPodcast: false,
supportScihub: false,
nsfw: true
},
radar: [{
source: ["jmcomic.group/"],
target: "/:category?/:time?/:order?/:keyword?"
}],
name: "搜索",
maintainers: ["nczitzk", "pseudoyu"],
handler,
url: "jmcomic.group/",
description: `::: tip
关键字必须超过两个字,这是来自网站的限制。
:::`
};
async function handler(ctx) {
const option = ctx.req.param("option") ?? "photos";
const category = ctx.req.param("category") ?? "all";
const keyword = ctx.req.param("keyword") ?? "";
const time = ctx.req.param("time") ?? "a";
const { domain = defaultDomain } = ctx.req.query();
const rootUrl = getRootUrl(domain);
let order = ctx.req.param("order") ?? "mr";
const encodedKeyword = encodeURIComponent(keyword);
const currentUrl = `${rootUrl}/search/${option}${category === "all" ? "" : `/${category}`}${keyword ? `?search_query=${encodedKeyword}` : "?"}${time === "a" ? "" : `&t=${time}`}${order === "mr" ? "" : `&o=${order}`}`;
const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 20;
let apiUrl = getApiUrl();
order = time === "a" ? order : `${order}_${time}`;
apiUrl += `/search?search_query=${encodedKeyword}&o=${order}`;
const apiResult = await processApiItems(apiUrl);
let filteredItemsByCategory = apiResult.content;
if (category !== "all") filteredItemsByCategory = apiResult.content.filter((item) => item.category.title === apiMapCategory(category));
filteredItemsByCategory = filteredItemsByCategory.slice(0, limit);
const results = await Promise.all(filteredItemsByCategory.map((item) => cache_default.tryGet(`18comic:search:${item.id}`, async () => {
const result = {
title: item.name,
link: `${rootUrl}/album/${item.id}`,
guid: `18comic:/album/${item.id}`,
updated: parseDate(item.update_at)
};
const apiResult = await processApiItems(`${getApiUrl()}/album?id=${item.id}`);
result.pubDate = /* @__PURE__ */ new Date(apiResult.addtime * 1e3);
const tags = apiResult.tags.map((tag) => tag);
result.category = tags;
result.author = apiResult.author.map((a) => a).join(", ");
result.description = renderDescription({
introduction: apiResult.description,
images: [`https://cdn-msp3.${domain}/media/albums/${item.id}_3x4.jpg`],
cover: `https://cdn-msp3.${domain}/media/albums/${item.id}_3x4.jpg`,
category: tags
});
return result;
})));
return {
title: `Search Results For '${keyword}' - 禁漫天堂`,
link: currentUrl.replace(/\?$/, ""),
item: results,
allowEmpty: true
};
}
//#endregion
export { route };