rsshub
Version:
Make RSS Great Again!
79 lines (75 loc) • 2.69 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 { 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 got_default } from "./got-KxxWdaxq.mjs";
import { t as timezone } from "./timezone-D8cuwzTY.mjs";
import { load } from "cheerio";
//#region lib/routes/china/finance/finance.ts
const CATEGORY_MAP = {
tuijian: "tuijian",
TMT: "TMT",
jinrong: "jinrong",
dichan: "dichan",
xiaofei: "xiaofei",
yiyao: "yiyao",
wine: "wine",
IPO: "IPO"
};
const route = {
path: "/finance/:category?",
categories: ["new-media"],
example: "/china/finance",
parameters: { category: "Category of news. See the form below for details, default is suggest news." },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{ source: ["finance.china.com/:category"] }],
name: "Finance News 财经 - 财经新闻",
maintainers: ["KingJem"],
handler,
description: `| 推荐 | TMT | 金融 | 地产 | 消费 | 医药 | 酒业 | IPO 观察 |
| ------- | --- | ------- | ------ | ------- | ----- | ---- | -------- |
| tuijian | TMT | jinrong | dichan | xiaofei | yiyao | wine | IPO |
> Note: The default news num is \`30\`.
> 注意:默认新闻条数是 \`30\`。`
};
async function handler(ctx) {
const websiteUrl = `https://finance.china.com/${CATEGORY_MAP[ctx.req.param("category")] ?? CATEGORY_MAP.tuijian}`;
const data = (await got_default(websiteUrl)).data;
const $ = load(data);
const listCategory = `中华网-财经-${$(".list-hd strong").text()}新闻`;
const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 30;
const detailsUrls = $(".item-con-inner").toArray().map((item) => {
item = $(item);
return { link: item.find(".tit>a").attr("href") };
}).filter((item) => item.link !== void 0).slice(0, limit);
const items = await Promise.all(detailsUrls.map((item) => cache_default.tryGet(item.link, async () => {
const $d = load((await got_default(item.link)).data);
return {
title: $d(".article_title").text(),
link: item.link,
description: $d("#js_article_content").html(),
pubDate: timezone(parseDate($d(".article_info>span.time").text()), 8),
author: $d(" div.article_info > span.source").text(),
category: listCategory
};
})));
return {
title: $("head title").text(),
link: websiteUrl,
category: listCategory,
item: items
};
}
//#endregion
export { route };