RSSHub/lib/v2/ncepu/master/masterinfo.js

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,
};
};