UNPKG

rsshub

Version:
75 lines (69 loc) 2.39 kB
import { Route } from '@/types'; import cache from '@/utils/cache'; import got from '@/utils/got'; import path from 'node:path'; import { art } from '@/utils/render'; import { config } from '@/config'; import InvalidParameterError from '@/errors/types/invalid-parameter'; export const route: Route = { path: '/news/:category?', categories: ['traditional-media'], example: '/i-cable/news', parameters: { category: '分類,默認為新聞資訊' }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['www.i-cable.com'], target: '/news', }, { source: ['www.i-cable.com/category/:category'], target: '/news/:category', }, ], name: '新聞', maintainers: ['quiniapiezoelectricity'], handler, url: 'www.i-cable.com/', description: ` ::: tip 分類只可用分類名稱,如:新聞資訊/港聞 :::`, }; async function handler(ctx) { const category = ctx.req.param('category') ?? '新聞資訊'; const limit = ctx.req.query('limit') ?? 20; const root = 'https://www.i-cable.com/wp-json/wp/v2'; const response = await cache.tryGet(`${root}/categories?slug=${category}`, async () => await got(`${root}/categories?slug=${category}`), config.cache.routeExpire, false); if (response.data.length < 1) { throw new InvalidParameterError(`Invalid Category: ${category}`); } const metadata = response.data[0]; const list = await got(`${root}/posts?_embed=1&categories=${metadata.id}&per_page=${limit}`); const items = list.data.map((item) => { const description = art(path.join(__dirname, 'templates/description.art'), { media: item._embedded['wp:featuredmedia'] ?? [], content: item.content.rendered, }); return { title: item.title.rendered, link: item.link, pubDate: item.date_gmt, description, category: item._embedded['wp:term'][0].map((term) => term.name) ?? [], }; }); return { title: `有線新聞 - ${metadata.name}`, description: metadata.description, link: metadata.link, item: items, }; }