79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
const got = require('@/utils/got');
|
|
const cheerio = require('cheerio');
|
|
const timezone = require('@/utils/timezone');
|
|
const { parseDate } = require('@/utils/parse-date');
|
|
|
|
const title_map = {
|
|
tzgg: '通知公告',
|
|
zsxx: '硕士招生信息',
|
|
pyxx: '研究生培养信息',
|
|
};
|
|
const description_map = {
|
|
tzgg: '通知公告',
|
|
zsxx: '硕士招生信息',
|
|
pyxx: '研究生培养信息',
|
|
};
|
|
const url_map = {
|
|
tzgg: 'tzgg',
|
|
zsxx: 'zsxx/sszsxx',
|
|
pyxx: 'pyxx/pyxx',
|
|
};
|
|
|
|
module.exports = async (ctx) => {
|
|
const type = ctx.params.type;
|
|
const response = await got(`https://yjsy.ncepu.edu.cn/${url_map[type]}/index.htm`);
|
|
const data = response.data; // 获取页面 html 数据
|
|
|
|
const $ = cheerio.load(data);
|
|
const list = $('.articleList ul li')
|
|
.map((_, item) => {
|
|
item = $(item);
|
|
// 单篇文章块的信息,其中文字部分是标题,属性是文章链接
|
|
const a = item.find('a');
|
|
// 发表日期
|
|
const pubDate = timezone(parseDate(item.find('span').text().replace('[', '').replace(']', '')), +8);
|
|
// 相对地址转化为绝对地址
|
|
const url_head = `https://yjsy.ncepu.edu.cn/${url_map[type]}/`;
|
|
const url_part = a.attr('href');
|
|
const url = url_head + url_part;
|
|
// 返回格式化数据
|
|
return {
|
|
title: a.attr('title'),
|
|
link: url,
|
|
pubDate,
|
|
};
|
|
})
|
|
.get();
|
|
|
|
const items = await Promise.all(
|
|
list.map(async (item) => {
|
|
const itemData = await ctx.cache.tryGet(item.link, async () => (await got(item.link)).data);
|
|
const content = cheerio.load(itemData);
|
|
|
|
const articleAuthor = content('.articleAuthor').html().replace('作者: ', '').replace('来源: ', '');
|
|
const eDescription = content('.article').html();
|
|
let files = content('.Annex').html();
|
|
if (typeof files === 'undefined' || files === null) {
|
|
files = ''; // 无附件时files设置为空字符串
|
|
} else {
|
|
files = content('.Annex').html();
|
|
}
|
|
|
|
const single = {
|
|
title: item.title,
|
|
link: item.link,
|
|
description: articleAuthor + eDescription + files,
|
|
pubDate: item.pubDate,
|
|
};
|
|
return single;
|
|
})
|
|
);
|
|
|
|
ctx.state.data = {
|
|
title: `${title_map[type]}-华北电力大学研究生院`,
|
|
link: `http://yjsy.ncepu.edu.cn/${url_map[type]}`,
|
|
description: `华北电力大学研究生院${description_map[type]}`,
|
|
item: items,
|
|
};
|
|
};
|