UNPKG

rsshub

Version:
75 lines (67 loc) 2.83 kB
import { Route } from '@/types'; import ofetch from '@/utils/ofetch'; import { load } from 'cheerio'; import { parseDate } from '@/utils/parse-date'; import timezone from '@/utils/timezone'; export const route: Route = { path: '/report/list/:report?', categories: ['finance'], example: '/cih-index/report/list/p1-oaddtime-ddesc', parameters: { report: '报告 id,可在 URL 中找到,留空为 `p1-oaddtime-ddesc`' }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, name: '报告', maintainers: ['TonyRL'], handler, url: 'www.cih-index.com/report/list/p1-oaddtime-ddesc', radar: [ { source: ['www.cih-index.com/report/list/:report'], }, ], }; async function handler(ctx) { const { report = 'p1-oaddtime-ddesc' } = ctx.req.param(); const baseUrl = 'https://www.cih-index.com'; const currentUrl = `${baseUrl}/report/list/${report}`; const response = await ofetch(currentUrl); const $ = load(response); const initialState = JSON.parse( $('script:contains("window.__INITIAL_STATE__")') .text() .match(/window\.__INITIAL_STATE__\s*=\s*({.*?});/)?.[1] || '{}' ); const { dataResult, indNavLists, secondNameFilter, tagList, param } = initialState.data; const items = dataResult.reportInfoDtoList.map((info) => { const pageCount = info.isCharging === 1 ? 3 : info.pageCount; let images = ''; for (let i = 1; i <= pageCount; i++) { images += `<img src="${baseUrl}/report/bp-creis-report-detail/getImg?id=${info.reportId}&pageNum=${i}"><br>`; } return { title: info.reportTitle, link: `${baseUrl}/report/detail/${info.reportId}.html`, pubDate: timezone(parseDate(info.addTime), +8), category: [...new Set([...info.reportClassTagDtoList.map((t) => t.tag), ...(info.keywordList || [])])], description: `${info.context}<br>${images}`, image: `${info.coverFigureUrl}/200`, }; }); const category = param.firstId ? indNavLists.find((item) => item.classId === param.firstId)?.className + ' - ' : ''; const subCategory = param.secondId ? secondNameFilter.find((item) => item.classId === param.secondId)?.className + ' - ' : ''; const tag = param.tagId ? tagList.find((item) => item.tagId === Number.parseInt(param.tagId))?.tag + ' - ' : ''; return { title: `${category}${subCategory}${tag}中指报告`, description: $('meta[name="description"]').attr('content'), image: `${baseUrl}/favicon.ico`, lang: 'zh-CN', link: currentUrl, item: items, }; }