rsshub
Version:
Make RSS Great Again!
96 lines (89 loc) • 3.57 kB
text/typescript
import cache from '@/utils/cache';
import got from '@/utils/got';
import { load } from 'cheerio';
import timezone from '@/utils/timezone';
import { parseDate } from '@/utils/parse-date';
const getAritlces = async (category, url, cache) => {
const { data } = await got(url);
const $ = load(data);
const spiderResult = $('ul.article-list')
.children()
.toArray()
.map((item) => {
item = $(item);
const a = item.find('a');
const link = a.attr('href');
return {
title: a.text(),
link,
pubDate: timezone(parseDate(item.find('span.time').text()), +8),
category,
};
})
.map((item) =>
cache.tryGet(item.link, async () => {
const { data } = await got(item.link);
const $ = load(data);
const aritcleContent = $(data).find('div.detail').html();
item.description = aritcleContent;
return item;
})
);
if (spiderResult.length === 0) {
return [];
}
return Promise.all(spiderResult);
};
const getItemsFromURLs = async (URLs, cache) => {
let items = Object.keys(URLs).map((key) => getAritlces(key, URLs[key], cache));
items = await Promise.all(items);
items = items.flat();
return items;
};
export const announcementsRouter = async () => {
const URLs = {
党政: 'https://physics.scnu.edu.cn/NEWS/Notices/PartyAndGovernment/',
教务: 'https://physics.scnu.edu.cn/NEWS/Notices/Education/',
科研: 'https://physics.scnu.edu.cn/NEWS/Notices/Research/',
人事: 'https://physics.scnu.edu.cn/NEWS/Notices/People/',
综合: 'https://physics.scnu.edu.cn/NEWS/Notices/General/',
学工: 'https://physics.scnu.edu.cn/NEWS/Notices/Students/',
};
const items = await getItemsFromURLs(URLs, cache);
return {
title: '华南师范大学物理与电信工程学院通知',
link: 'https://physics.scnu.edu.cn/NEWS/Notices/',
item: items,
};
};
export const newsRouter = async () => {
const URLs = {
学院新闻: 'https://physics.scnu.edu.cn/NEWS/News/College/',
教务新闻: 'https://physics.scnu.edu.cn/NEWS/News/Education/',
学工新闻: 'https://physics.scnu.edu.cn/NEWS/News/Education/',
科研新闻: 'https://physics.scnu.edu.cn/NEWS/News/Research/',
院友新闻: 'https://physics.scnu.edu.cn/NEWS/News/People/',
};
const items = await getItemsFromURLs(URLs, cache);
return {
title: '华南师范大学物理与电信工程学院新闻动态',
link: 'https://physics.scnu.edu.cn/NEWS/News/',
item: items,
};
};
export const researchNewsRouter = async () => {
const URLs = {
学术报告: 'https://physics.scnu.edu.cn/RESEARCH/EVENTS/Seminars/',
学术会议: 'https://physics.scnu.edu.cn/RESEARCH/EVENTS/Conferences/',
科研平台: 'https://physics.scnu.edu.cn/RESEARCH/Institutes/',
研究方向: 'https://physics.scnu.edu.cn/RESEARCH/ResearchAreas/',
重大项目: 'https://physics.scnu.edu.cn/RESEARCH/Projects/',
科研成果: 'https://physics.scnu.edu.cn/RESEARCH/Achievements/',
};
const items = await getItemsFromURLs(URLs, cache);
return {
title: '华南师范大学物理与电信工程学院科学研究动态',
link: 'https://physics.scnu.edu.cn/RESEARCH/',
item: items,
};
};