UNPKG

rsshub

Version:
75 lines (59 loc) 1.91 kB
import { Route } from '@/types'; import cache from '@/utils/cache'; import got from '@/utils/got'; import { load } from 'cheerio'; import { parseDate } from '@/utils/parse-date'; const decoder = new TextDecoder('gbk'); export const route: Route = { path: '/pe/news', categories: ['finance'], example: '/hexun/pe/news', url: 'pe.hexun.com/news/', name: '创投行业新闻', maintainers: ['p3psi-boo'], handler, }; async function handler() { const baseUrl = 'https://pe.hexun.com/news/'; const response = await got({ method: 'get', url: baseUrl, responseType: 'arrayBuffer', }); const $ = load(decoder.decode(response.data)); const list = $('.listNews li') .toArray() .map((item) => { const element = $(item); const a = element.find('a'); const link = a.attr('href')?.replace('http://', 'https://') || ''; const title = a.text() || ''; const timeSpan = element.find('span'); const dateText = timeSpan.text().slice(1, timeSpan.text().length - 1); const pubDate = parseDate(dateText, 'MM/DD HH:mm'); return { title, link, pubDate, }; }); const items = await Promise.all( list.map((item) => cache.tryGet(item.link, async () => { const response = await got({ method: 'get', url: item.link, responseType: 'arrayBuffer', }); const $ = load(decoder.decode(response.data)); item.description = $('.art_contextBox').html() || ''; return item; }) ) ); return { title: '和讯创投 - 创投行业新闻', link: baseUrl, item: items, }; }