rsshub
Version:
Make RSS Great Again!
165 lines (162 loc) • 6.78 kB
JavaScript
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 { t as cache_default } from "./cache-Bo__VnGm.mjs";
import "./helpers-DxBp0Pty.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/cuilingmag/index.ts
init_esm_shims();
const handler = async (ctx) => {
const { category } = ctx.req.param();
const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 12;
const rootUrl = "https://www.cuilingmag.com";
const currentUrl = new URL(category ? `category/${category}` : "", rootUrl).href;
const { data: response } = await got_default(currentUrl);
const $ = load(response);
const language = $("html").prop("lang");
let items = $("div.new-list-div, div.item").slice(0, limit).toArray().map((item) => {
item = $(item);
const title$1 = item.find("h3.new-list-h3, h3.title-font").first().text().trim();
const src = item.find("img").first().prop("src");
const image$1 = src ? new URL(src, rootUrl).href : void 0;
return {
title: title$1,
description: art(path.join(__dirname, "templates/description-16be3a2a.art"), { images: image$1 ? [{
src: image$1,
alt: title$1
}] : void 0 }),
link: new URL(item.find("a").first().prop("href"), rootUrl).href,
author: item.find("a.new-list-p, div.author").text().trim(),
image: image$1,
banner: image$1,
language,
enclosure_url: image$1,
enclosure_type: image$1 ? `image/${image$1.split(/\./).pop()}` : void 0,
enclosure_title: title$1
};
});
items = await Promise.all(items.map((item) => cache_default.tryGet(item.link, async () => {
const { data: detailResponse } = await got_default(item.link);
const $$ = load(detailResponse);
const title$1 = `${$$("p.title-font").text().trim()} ${$$("p.subtitle-font").text().trim()}`;
const src = $$("div.banner img").first().prop("src");
const banner = src ? new URL(src, rootUrl).href : void 0;
const description = item.description + art(path.join(__dirname, "templates/description-16be3a2a.art"), {
images: banner ? [{
src: banner,
alt: title$1
}] : void 0,
description: $$("div.article-content").html()
});
item.title = title$1;
item.description = description;
item.pubDate = parseDate($$("p.time").first().text());
item.category = [...new Set([...$$("p.sort a").toArray().map((c) => $$(c).text().trim()), ...$$("span.type").toArray().map((c) => $$(c).text().trim())])].filter(Boolean);
item.author = $$("p.author a").toArray().map((a) => $$(a).contents().first().text().trim()).join("/");
item.content = {
html: description,
text: $$("div.article-content").text()
};
item.banner = banner;
item.language = language;
item.enclosure_url = banner ?? item.enclosure_url;
item.enclosure_type = banner ? `image/${banner.split(/\./).pop()}` : item.enclosure_type;
item.enclosure_title = title$1;
return item;
})));
const title = $("title").text().trim();
const image = new URL($("div.nav-logo a img").prop("src"), rootUrl).href;
return {
title,
description: $("meta[property=\"og:description\"]").prop("content"),
link: currentUrl,
item: items,
allowEmpty: true,
image,
author: title.split(/-/).pop(),
language
};
};
const route = {
path: "/:category?",
name: "分类",
url: "cuilingmag.com",
categories: ["new-media"],
maintainers: ["nczitzk"],
handler,
example: "/cuilingmag",
parameters: { category: "分类,默认为空,即全部,可在对应分类页 URL 中找到" },
description: `::: tip
若订阅 [#哲学·文明](https://www.cuilingmag.com/category/philosophy_civilization),网址为 \`https://www.cuilingmag.com/category/philosophy_civilization\`。截取 \`https://www.cuilingmag.com/category\` 到末尾的部分 \`philosophy_civilization\` 作为参数填入,此时路由为 [\`/cuilingmag/philosophy_civilization\`](https://rsshub.app/cuilingmag/philosophy_civilization)。
:::
| 分类 | ID |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| [哲学 · 文明](https://www.cuilingmag.com/category/philosophy_civilization) | [philosophy_civilization](https://rsshub.app/cuilingmag/philosophy_civilization) |
| [艺术 · 科技](https://www.cuilingmag.com/category/art_science) | [art_science](https://rsshub.app/cuilingmag/art_science) |
| [未来 · 生命](https://www.cuilingmag.com/category/future_life) | [future_life](https://rsshub.app/cuilingmag/future_life) |
| [行星智慧](https://www.cuilingmag.com/category/planetary_wisdom) | [planetary_wisdom](https://rsshub.app/cuilingmag/planetary_wisdom) |
| [数字治理](https://www.cuilingmag.com/category/digital_governance) | [digital_governance](https://rsshub.app/cuilingmag/digital_governance) |
| [Noema精选](https://www.cuilingmag.com/category/selected_noema) | [selected_noema](https://rsshub.app/cuilingmag/selected_noema) |
`,
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportRadar: true,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [
{
source: ["cuilingmag.com/category/:category"],
target: (params) => {
const category = params.category;
return `/cuilingmag${category ? `/${category}` : ""}`;
}
},
{
title: "全部",
source: ["cuilingmag.com"],
target: "/"
},
{
title: "哲学 · 文明",
source: ["cuilingmag.com/category/philosophy_civilization"],
target: "/philosophy_civilization"
},
{
title: "艺术 · 科技",
source: ["cuilingmag.com/category/art_science"],
target: "/art_science"
},
{
title: "未来 · 生命",
source: ["cuilingmag.com/category/future_life"],
target: "/future_life"
},
{
title: "行星智慧",
source: ["cuilingmag.com/category/planetary_wisdom"],
target: "/planetary_wisdom"
},
{
title: "数字治理",
source: ["cuilingmag.com/category/digital_governance"],
target: "/digital_governance"
},
{
title: "Noema精选",
source: ["cuilingmag.com/category/selected_noema"],
target: "/selected_noema"
}
]
};
//#endregion
export { handler, route };