From 7d2bd7ced149a8f8cf6a146325c8498de8a3e97d Mon Sep 17 00:00:00 2001 From: occam-7 Date: Wed, 25 Feb 2026 16:07:01 +0800 Subject: [PATCH] feat(route/bestblogs): Add route for weekly selection (#21226) * feat(route/bestblogs): Add route for weekly selection * fix(route/thepaper): Linebreak style --- lib/routes/bestblogs/newsletter.ts | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/routes/bestblogs/newsletter.ts diff --git a/lib/routes/bestblogs/newsletter.ts b/lib/routes/bestblogs/newsletter.ts new file mode 100644 index 000000000..6ed9e2d7f --- /dev/null +++ b/lib/routes/bestblogs/newsletter.ts @@ -0,0 +1,49 @@ +import type { Route } from '@/types'; +import ofetch from '@/utils/ofetch'; +import { parseDate } from '@/utils/parse-date'; + +export const route: Route = { + path: '/newsletter', + categories: ['programming'], + example: '/bestblogs/newsletter', + parameters: {}, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + name: '精选推送', + maintainers: ['occam-7'], + handler, +}; + +async function handler(ctx) { + const pageSize = Number.parseInt(ctx.req.query('limit') ?? '10', 10); + + const response = await ofetch('https://api.bestblogs.dev/api/newsletter/list', { + method: 'POST', + body: { + currentPage: 1, + pageSize, + userLanguage: 'zh', + }, + }); + + const list = response.data?.dataList ?? []; + + const items = list.map((item) => ({ + title: item.title, + link: `https://www.bestblogs.dev/newsletter/${item.id}`, + description: item.summary, + pubDate: parseDate(item.createdTimestamp), + })); + + return { + title: 'Bestblogs.dev - 精选推送', + link: 'https://www.bestblogs.dev/newsletter', + item: items, + }; +}