Files
RSSHub/lib/routes/universities/bit/jwc/utils.js
sinofp 1242b7bf95 add 北理工 (#1932)
添加北理工教务处和计院的通知。
2019-04-15 10:52:13 +08:00

73 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const axios = require('../../../../utils/axios');
const cheerio = require('cheerio');
const url = require('url');
// 专门定义一个function用于加载文章内容
async function load(link) {
// 异步请求文章
const response = await axios.get(link);
// 加载文章内容
const $ = cheerio.load(response.data);
// 解析日期
const date = new Date(
$('.aca_author span')
.text()
.match(/\d{4}-\d{2}-\d{2}/)
);
const timeZone = 8;
const serverOffset = date.getTimezoneOffset() / 60;
const pubDate = new Date(date.getTime() - 60 * 60 * 1000 * (timeZone + serverOffset)).toUTCString();
// 还原图片地址, 去除图片onClick事件
$('img').each((index, elem) => {
const $elem = $(elem);
const src = $elem.attr('src');
if (src && src !== '') {
$elem.attr('src', `http://jwc.bit.edu.cn/tzgg/${src}`);
}
$elem.removeAttr('onclick');
});
// 提取内容
const description = $('.aca_article_con').html();
// 返回解析的结果
return { description, pubDate };
}
const ProcessFeed = async (list, caches) => {
const host = 'http://jwc.bit.edu.cn/tzgg/';
// 使用 Promise.all() 进行 async 并发
return await Promise.all(
// 遍历每一篇文章
list.map(async (item) => {
const $ = cheerio.load(item);
const $title = $('a');
// 还原相对链接为绝对链接
const itemUrl = url.resolve(host, $title.attr('href'));
// 列表上提取到的信息
const single = {
title: $title.text(),
link: itemUrl,
author: '教务部',
guid: itemUrl,
};
// 使用tryGet方法从缓存获取内容。
// 当缓存中无法获取到链接内容的时候则使用load方法加载文章内容。
const other = await caches.tryGet(itemUrl, async () => await load(itemUrl));
// 合并解析后的结果集作为该篇文章最终的输出结果
return Promise.resolve(Object.assign({}, single, other));
})
);
};
module.exports = {
ProcessFeed,
};