UNPKG

rsshub

Version:
75 lines (73 loc) 2.54 kB
import "./dist-Bog6z_OM.mjs"; import "./config-MQ-7ebJ_.mjs"; import { t as ViewType } from "./types-gOySfSXJ.mjs"; import "./logger-C4avouvV.mjs"; import { t as ofetch_default } from "./ofetch-DKl_Ma9g.mjs"; import "./parse-date-r5WDWHno.mjs"; import "./is-worker-DESPicPc.mjs"; import "./cache-SV6W5EPy.mjs"; import "./helpers-Bo4JQYdN.mjs"; import "./got-CO-ndVl2.mjs"; import { t as rss_parser_default } from "./rss-parser-Cnh4NKwh.mjs"; import { t as parseArticle } from "./utils-C6vKUFF0.mjs"; import { load } from "cheerio"; import pMap from "p-map"; //#region lib/routes/bloomberg/authors.ts const parseAuthorNewsList = async (slug) => { const baseURL = `https://www.bloomberg.com/authors/${slug}`; const resp = await ofetch_default(`https://www.bloomberg.com/lineup/api/lazy_load_author_stories?slug=${slug}&authorType=default&page=1`); if (!resp.html) return []; const $ = load(resp.html); return $("article.story-list-story").toArray().map((item) => { item = $(item); const headline = item.find("a.story-list-story__info__headline-link"); return { title: headline.text(), pubDate: item.attr("data-updated-at"), guid: `bloomberg:${item.attr("data-id")}`, link: new URL(headline.attr("href"), baseURL).href }; }); }; const route = { path: "/authors/:id/:slug/:source?", categories: ["finance"], view: ViewType.Articles, example: "/bloomberg/authors/ARbTQlRLRjE/matthew-s-levine", parameters: { id: "Author ID, can be found in URL", slug: "Author Slug, can be found in URL", source: "Data source, either `api` or `rss`,`api` by default" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: true, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["www.bloomberg.com/*/authors/:id/:slug", "www.bloomberg.com/authors/:id/:slug"], target: "/authors/:id/:slug" }], name: "Authors", maintainers: ["josh", "pseudoyu"], handler }; async function handler(ctx) { const { id, slug, source } = ctx.req.param(); const link = `https://www.bloomberg.com/authors/${id}/${slug}`; let list = []; if (!source || source === "api") list = await parseAuthorNewsList(`${id}/${slug}`); if (source === "rss" || list.length === 0) list = (await rss_parser_default.parseURL(`${link}.rss`)).items; const item = await pMap(list, (item) => parseArticle(item), { concurrency: 1 }); return { title: `Bloomberg - ${item.find((i) => i.author)?.author ?? slug}`, link, language: "en-us", item }; } //#endregion export { route };