RSSHub/lib/routes/caus/index.ts

74 lines
2.4 KiB
TypeScript

import type { Route } from '@/types';
import ofetch from '@/utils/ofetch';
import { parseDate } from '@/utils/parse-date';
// Reason: preserve original category numbers for backward compatibility.
// WordPress category ids from REST API (GET /wp-json/wp/v2/categories).
// Old categories "商业"(2) and "快讯"(3) no longer exist on the new site,
// mapped to closest equivalents: 2→财富(finance), 3→社会(lifestyle).
const categories = {
0: { title: '全部', slug: '', id: 0 },
1: { title: '要闻', slug: 'news', id: 101 },
2: { title: '商业', slug: 'finance', id: 108 },
3: { title: '快讯', slug: 'lifestyle', id: 106 },
8: { title: '财富', slug: 'finance', id: 108 },
6: { title: '生活', slug: 'lifestyle', id: 106 },
};
export const route: Route = {
path: '/:category?',
categories: ['new-media'],
example: '/caus',
parameters: { category: '分类,见下表,默认为全部' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
name: '分类',
maintainers: ['nczitzk', 'pseudoyu'],
handler,
description: `| 全部 | 要闻 | 商业 | 快讯 | 财富 | 生活 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| 0 | 1 | 2 | 3 | 8 | 6 |`,
};
async function handler(ctx) {
const category = ctx.req.param('category') || '0';
const cat = categories[category] || categories[0];
const rootUrl = 'https://caus.com';
const apiUrl = `${rootUrl}/wp-json/wp/v2/posts`;
const query: Record<string, string | number> = {
per_page: 20,
// Reason: using _embed=1 with many posts produces responses too large for ofetch to parse as JSON
_embed: 'author,wp:term',
};
if (cat.id) {
query.categories = cat.id;
}
const data = await ofetch(apiUrl, { query });
const items = data.map((item) => ({
title: item.title.rendered,
link: item.link,
description: item.content.rendered,
pubDate: parseDate(item.date_gmt),
author: item._embedded?.author?.[0]?.name,
category: item._embedded?.['wp:term']?.[0]?.map((t) => t.name),
}));
const currentUrl = cat.slug ? `${rootUrl}/category/${cat.slug}/` : rootUrl;
return {
title: `${cat.title} - 加美财经`,
link: currentUrl,
item: items,
};
}