rsshub
Version:
Make RSS Great Again!
87 lines (77 loc) • 2.79 kB
text/typescript
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,
};
}