Files
RSSHub/lib/v2/sdu/epe.js
Levi Zim 958be6266e feat(route): 山东大学(威海)新闻网 (#9537)
* feat(sduwh): add extractors.

* feat(route): add route for 山东大学(威海)新闻网

* docs: for route sduwh/news

* docs: for route sduwh/news

(cherry picked from commit 831830167a)

* feat(radar): for route 山东大学(威海)新闻网

* refactor: change `got.get` to `got`.

* refactor: prefer `parseDate()` to `new Date()`

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* fix: incomplete URL substring sanitization.

Make CodeQL happy.

* fix(radar): fix target field.

* fix: change route /sduwh to /sdu/wh

* fix: remove superfluous slash character in url.

* feat: look for exact date first.

* feat: extract exact date from news extractor.

* feat: extract exact date from view extractor.

* feat: extractor for www.sdrj.sdu.edu.cn

* refactor: semantic separation of sduwh with sdu

* feat(radar): more accurate name

* docs: update documentation

* refactor: migrate to v2

* refactor: fix deprecated url.resolve

* fix: update docs url

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* fix: sdu not working routes

* fix: accurate `ctx.state.data.url`

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* fix: better error handling for extractors.

* fix: timezone

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* fix: better error handling.

Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2022-04-17 00:01:39 +08:00

56 lines
1.9 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 got = require('@/utils/got');
const cheerio = require('cheerio');
const { parseDate } = require('@/utils/parse-date');
const timezone = require('@/utils/timezone');
const host = 'https://www.epe.sdu.edu.cn/';
const typelist = ['学院动态', '通知公告', '学术论坛'];
const urlList = ['zxzx/xydt.htm', 'zxzx/tzgg.htm', 'zxzx/xslt.htm'];
module.exports = async (ctx) => {
const type = ctx.params.type ? parseInt(ctx.params.type) : 0;
const link = new URL(urlList[type], host).href;
const response = await got(link);
const $ = cheerio.load(response.data);
let item = $('#page_right_main li a')
.map((_, e) => {
e = $(e);
return {
title: e.attr('title'),
link: e.attr('href'),
};
})
.get();
item = await Promise.all(
item
.filter((e) => e.link.startsWith('../info'))
.map((item) => {
item.link = new URL(item.link.slice('3'), host).href;
return ctx.cache.tryGet(item.link, async () => {
const response = await got(item.link);
const $ = cheerio.load(response.data);
const info = $('#show_info').text().split(/\s{4}/);
const date = info[0].split('')[1];
item.title = $('#show_title').text().trim();
item.author = info[1].replace('编辑:', '') || '山东大学能源与动力工程学院';
item.description = $('#show_content').html();
item.pubDate = timezone(parseDate(date), +8);
return item;
});
})
);
ctx.state.data = {
title: `山东大学能源与动力工程学院${typelist[type]}`,
description: $('title').text(),
link,
item,
};
};