From d21b8ecf1c88ca44d76685b0e3a885f271ec2b4d Mon Sep 17 00:00:00 2001 From: Tsung-Han Yu <14802181+johan456789@users.noreply.github.com> Date: Fri, 29 Aug 2025 01:00:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20add=20bnext=20(=E6=95=B8?= =?UTF-8?q?=E4=BD=8D=E6=99=82=E4=BB=A3)=20(#19894)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add bnext route * fix: allow empty to avoid route not found error --- lib/routes/bnext/index.ts | 58 +++++++++++++++++++++++++++++++++++ lib/routes/bnext/namespace.ts | 7 +++++ 2 files changed, 65 insertions(+) create mode 100644 lib/routes/bnext/index.ts create mode 100644 lib/routes/bnext/namespace.ts diff --git a/lib/routes/bnext/index.ts b/lib/routes/bnext/index.ts new file mode 100644 index 000000000..217355ef3 --- /dev/null +++ b/lib/routes/bnext/index.ts @@ -0,0 +1,58 @@ +import { Route } from '@/types'; +import parser from '@/utils/rss-parser'; +import type { Item } from 'rss-parser'; + +const FEED_URL = 'https://rss.bnextmedia.com.tw/feed/bnext'; + +export const route: Route = { + path: '/', + categories: ['traditional-media'], + example: '/bnext', + parameters: {}, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['www.bnext.com.tw'], + target: '/bnext', + }, + ], + name: '最新文章', + maintainers: ['johan456789'], + handler, + url: 'www.bnext.com.tw', +}; + +async function handler() { + const feed = await parser.parseURL(FEED_URL); + const items = (feed.items as Item[]).map((item) => { + const enclosure = item.enclosure; + const enclosure_url = enclosure?.url; + const enclosure_type = enclosure?.type; + const enclosure_length = enclosure?.length ? Number(enclosure.length) : undefined; + + return { + title: item.title ?? item.link ?? 'Untitled', + link: item.link, + description: item.content ?? item.summary ?? item.contentSnippet, + pubDate: item.isoDate ?? item.pubDate, + enclosure_url, + enclosure_type, + enclosure_length, + }; + }); + + return { + title: feed.title ?? '數位時代 BusinessNext', + link: feed.link ?? 'https://www.bnext.com.tw', + description: feed.description ?? '', + item: items, + allowEmpty: true, // the official feed clears all items every day at 00:00 UTC+8 + }; +} diff --git a/lib/routes/bnext/namespace.ts b/lib/routes/bnext/namespace.ts new file mode 100644 index 000000000..01cd5aa04 --- /dev/null +++ b/lib/routes/bnext/namespace.ts @@ -0,0 +1,7 @@ +import type { Namespace } from '@/types'; + +export const namespace: Namespace = { + name: '數位時代 BusinessNext', + url: 'bnext.com.tw', + lang: 'zh-TW', +};