UNPKG

rsshub

Version:
99 lines (96 loc) 3.68 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import "./helpers-DxBp0Pty.mjs"; import { r as getSubPath } from "./common-utils-vrWQFAEk.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import path from "node:path"; import { load } from "cheerio"; //#region lib/routes/cbaigui/utils.ts init_esm_shims(); const rootUrl = "https://cbaigui.com"; const apiSlug = "wp-json/wp/v2"; const GetFilterId = async (type, name) => { const filterApiUrl = new URL(`${apiSlug}/${type}?search=${name}`, rootUrl).href; const { data: filterResponse } = await got_default(filterApiUrl); return filterResponse.findLast((f) => f.name === name)?.id ?? void 0; }; //#endregion //#region lib/routes/cbaigui/index.ts const route = { path: "*", name: "Unknown", maintainers: [], handler }; async function handler(ctx) { const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 50; let filterName; const currentUrl = new URL(getSubPath(ctx).replace(/^\/cbaigui/, ""), rootUrl).href; let apiUrl = new URL(`${apiSlug}/posts?_embed=true&per_page=${limit}`, rootUrl).href; const filterMatches = getSubPath(ctx).match(/^\/post-(tag|category)\/(.*)$/); if (filterMatches) { filterName = decodeURI(filterMatches[2].split("/").pop()); const filterType = filterMatches[1] === "tag" ? "tags" : "categories"; const filterId = await GetFilterId(filterType, filterName); if (filterId) apiUrl = new URL(`${apiSlug}/posts?_embed=true&per_page=${limit}&${filterType}=${filterId}`, rootUrl).href; } const { data: response } = await got_default(apiUrl); const items = response.slice(0, limit).map((item) => { const terminologies = item._embedded["wp:term"]; const content = load(item.content?.rendered ?? item.content); content("figure").each(function() { const image = content(this).find("img"); const src = image.prop("data-actualsrc") ?? image.prop("data-original"); const width = image.prop("data-rawwidth"); const height = image.prop("data-rawheight"); content(this).replaceWith(art(path.join(__dirname, "templates/figure-5fc0700a.art"), { src, width, height })); }); content("p img").each(function() { const image = content(this); const src = image.prop("src").split("!")[0]; const width = image.prop("width"); const height = image.prop("height"); content(this).replaceWith(art(path.join(__dirname, "templates/figure-5fc0700a.art"), { src, width, height })); }); return { title: item.title?.rendered ?? item.title, link: item.link, description: content.html(), author: item._embedded.author.map((a) => a.name).join("/"), category: [...terminologies[0], ...terminologies[1]].map((c) => c.name), guid: item.guid?.rendered ?? item.guid, pubDate: parseDate(item.date_gmt), updated: parseDate(item.modified_gmt) }; }); const { data: currentResponse } = await got_default(currentUrl); const $ = load(currentResponse); const icon = $("link[rel=\"apple-touch-icon\"]").first().prop("href"); return { item: items, title: `纪妖${filterName ? ` - ${filterName}` : ""}`, link: currentUrl, description: $("meta[name=\"description\"]").prop("content"), language: "zh-cn", image: $("meta[name=\"msapplication-TileImage\"]").prop("content"), icon, logo: icon, subtitle: $("p.site-description").text(), author: $("p.site-title").text() }; } //#endregion export { route };