UNPKG

rsshub

Version:
86 lines (74 loc) 2.84 kB
import { Data, DataItem, Route } from '@/types'; import cache from '@/utils/cache'; import got from '@/utils/got'; import { parseDate } from '@/utils/parse-date'; import { Context } from 'hono'; export const route: Route = { path: '/:category?/:order?', categories: ['game'], example: '/gamer520/switchyouxi', parameters: { category: '分类,见下表', order: '排序,发布日期: date; 修改日期: modified', }, features: { antiCrawler: true, }, name: '文章', maintainers: ['xzzpig'], handler, url: 'www.gamer520.com/', description: `分类 | 所有 | Switch 游戏下载 | 金手指 | 3A 巨作 | switch 主题 | PC 游戏 | | ---- | --------------- | ---------- | ------- | ----------- | ------- | | all | switchyouxi | jinshouzhi | 3ajuzuo | zhuti | pcgame |`, }; interface Post { id: number; guid: { rendered: string }; title: { rendered: string }; date_gmt: string; modified_gmt: string; categories?: number[]; content: { rendered: string }; } interface Category { id: number; name: string; link: string; slug: string; } async function getCategories(baseUrl: string): Promise<Category[]> { return (await cache.tryGet('gamer520:categories', async () => { const { data } = await got(`${baseUrl}/wp-json/wp/v2/categories`); return data.map((category) => ({ slug: category.slug, id: category.id, name: category.name, link: category.link })); })) as Category[]; } async function handler(ctx: Context): Promise<Data> { const baseUrl = 'https://www.gamer520.com'; const categories = await getCategories(baseUrl); const category = ctx.req.param('category') ?? 'all'; const order = ctx.req.param('order'); const categoryId = categories.find((c) => c.slug === category)?.id; const { data } = (await got(`${baseUrl}/wp-json/wp/v2/posts`, { searchParams: { categories: categoryId, orderby: order, per_page: ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit') as string) : undefined, }, })) as unknown as { data: Post[] }; const items: DataItem[] = data.map((item) => ({ guid: `gamer520:${item.id}`, title: item.title.rendered, link: item.guid.rendered, pubDate: parseDate(item.date_gmt), updated: parseDate(item.modified_gmt), category: item.categories?.map((c) => categories.find((ca) => ca.id === c)?.name ?? '').filter((c) => c !== '') ?? [], description: item.content.rendered, })); return { title: '全球游戏交流中心-' + (categories.find((c) => c.slug === category)?.name ?? '所有'), link: categories.find((c) => c.slug === category)?.link ?? baseUrl, item: items, }; }