rsshub
Version:
Make RSS Great Again!
83 lines (81 loc) • 2.5 kB
JavaScript
import { t as rofetch } from "./ofetch-C3ts-Hud.mjs";
import "./types-DNj6Etbg.mjs";
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as parser } from "./rss-parser-CmTb9lkc.mjs";
import { n as rootUrl, t as parseArticle } from "./utils-DUVgrHXS.mjs";
import pMap from "p-map";
//#region lib/routes/bloomberg/index.ts
const siteTitleMapping = {
"/": "News",
politics: "Politics",
business: "Business",
markets: "Markets",
technology: "Technology",
wealth: "Wealth",
bview: "Opinion",
businessweek: "Businessweek",
economics: "Economics",
industries: "Industries",
crypto: "Crypto"
};
const legacySiteMapping = {
bpol: "politics",
bbiz: "business"
};
const route = {
path: "/:site?",
categories: ["finance"],
view: 0,
example: "/bloomberg/business",
parameters: { site: {
description: "Site ID, can be found below",
options: Object.entries(siteTitleMapping).map(([key, value]) => ({
value: key,
label: value
}))
} },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: true,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
name: "Bloomberg Site",
maintainers: ["bigfei"],
description: `| Site ID | Title |
| ------------ | ------------ |
| / | News |
| politics | Politics |
| business | Business |
| markets | Markets |
| technology | Technology |
| wealth | Wealth |
| bview | Opinion |
| businessweek | Businessweek |
| economics | Economics |
| industries | Industries |
| crypto | Crypto |
Legacy site IDs \`bpol\` and \`bbiz\` still work as aliases of \`politics\` and \`business\`.`,
handler
};
async function handler(ctx) {
const site = ctx.req.param("site");
const mappedSite = site ? legacySiteMapping[site] ?? site : void 0;
const currentUrl = mappedSite ? `${rootUrl}/${mappedSite}/news.rss` : `${rootUrl}/news.rss`;
const feed = await parser.parseString(await rofetch(currentUrl));
const items = await pMap(feed.items.slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 50).map((item) => ({
title: item.title,
link: item.link,
pubDate: item.pubDate ? parseDate(item.pubDate) : void 0,
description: item.content
})), (item) => parseArticle(item), { concurrency: 1 });
return {
title: `Bloomberg - ${siteTitleMapping[mappedSite ?? "/"] ?? feed.title}`,
link: feed.link ?? currentUrl,
item: items
};
}
//#endregion
export { route };