UNPKG

rsshub

Version:
87 lines (77 loc) 2.79 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 rootUrl = 'https://www.miit.gov.cn'; export const route: Route = { path: '/miit/wjfb/:ministry', categories: ['government'], example: '/gov/miit/wjfb/ghs', parameters: { ministry: '部门缩写,可以在对应 URL 中获取' }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['miit.gov.cn/jgsj/:ministry/wjfb/index.html'], }, ], name: '文件发布', maintainers: ['Fatpandac'], handler, }; async function handler(ctx) { const ministry = ctx.req.param('ministry'); const url = `${rootUrl}/jgsj/${ministry}/wjfb/index.html`; const cookieResponse = await got(url); const cookie = cookieResponse.headers['set-cookie'][0].split(';')[0]; const indexContent = load(cookieResponse.data); const title = indexContent('div.dqwz > a:nth-child(4)').text(); const dataRequestUrl = indexContent('div.lmy_main_rb > script:nth-child(2)') .toArray() .map((item) => ({ url: `${rootUrl}${indexContent(item).attr('url')}`, queryData: JSON.parse(indexContent(item).attr('querydata').replaceAll('"', '|').replaceAll("'", '"').replaceAll('|', '"')), }))[0]; const dataUrl = `${dataRequestUrl.url}?${Object.keys(dataRequestUrl.queryData) .map((key) => `${key}=${dataRequestUrl.queryData[key]}`) .join('&')}`; const response = await got({ method: 'get', url: dataUrl, headers: { Cookie: cookie, }, }); const $ = load(response.data.data.html); const list = $('ul > li') .toArray() .map((item) => ({ title: $(item).find('a').text(), link: new URL($(item).find('a').attr('href'), rootUrl).href, pubDate: parseDate($(item).find('span').text(), 'YYYY-MM-DD'), })); const items = await Promise.all( list.map((item) => cache.tryGet(item.link, async () => { const detailResponse = await got(item.link); const content = load(detailResponse.data); item.description = content('#con_con') .html() .replaceAll(/(<iframe.*?src=")(.*?)(".*?>)/g, '$1' + rootUrl + '$2' + '$3'); return item; }) ) ); return { title: `工业和信息化部 - ${title} 文件发布`, link: url, item: items, }; }