From 917b2dbc5c4f0e9b49061a403bb261adf5b6b285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E4=BF=8A=E4=BD=99?= Date: Fri, 22 May 2020 16:21:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20add=20=E9=87=8D=E5=BA=86=E5=A4=A7?= =?UTF-8?q?=E5=AD=A6=E6=95=B0=E5=AD=A6=E4=B8=8E=E7=BB=9F=E8=AE=A1=E5=AD=A6?= =?UTF-8?q?=E9=99=A2=20(#4840)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/university.md | 10 +++++ lib/router.js | 1 + lib/routes/universities/cqu/sci/info.js | 59 +++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 lib/routes/universities/cqu/sci/info.js diff --git a/docs/university.md b/docs/university.md index 3415a5665..999cbb270 100644 --- a/docs/university.md +++ b/docs/university.md @@ -1783,6 +1783,16 @@ type 列表: +### 数学与统计学院 + + + +| 学院新闻 | 学院公告 | 学院活动 | 学术活动 | +| -------- | -------- | -------- | -------- | +| 1053 | 1054 | 1055 | 1056 | + + + ## 重庆科技学院 ### 教务处公告 diff --git a/lib/router.js b/lib/router.js index 97d664646..57ebe5107 100644 --- a/lib/router.js +++ b/lib/router.js @@ -662,6 +662,7 @@ router.get('/heu/job/:type?', require('./routes/universities/heu/job')); router.get('/cqu/jwc/announcement', require('./routes/universities/cqu/jwc/announcement')); router.get('/cqu/news/jzyg', require('./routes/universities/cqu/news/jzyg')); router.get('/cqu/youth/:category', require('./routes/universities/cqu/youth/info')); +router.get('/cqu/sci/:category', require('./routes/universities/cqu/sci/info')); // 南京信息工程大学 router.get('/nuist/bulletin/:category?', require('./routes/universities/nuist/bulletin')); diff --git a/lib/routes/universities/cqu/sci/info.js b/lib/routes/universities/cqu/sci/info.js new file mode 100644 index 000000000..42b54b693 --- /dev/null +++ b/lib/routes/universities/cqu/sci/info.js @@ -0,0 +1,59 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const category = ctx.params.category; + + const baseUrl = 'http://sci.cqu.edu.cn/'; + const url = `http://sci.cqu.edu.cn/list.jsp?urltype=tree.TreeTempUrl&wbtreeid=${category}`; + const response = await got({ + method: 'get', + url: url, + }); + + const data = response.data; + const $ = cheerio.load(data); + + const links = $('div[class=subcontent]') + .find('a[target=_blank]', 'ul[class=subNewsList]') + .map((index, item) => ({ + title: item.attribs.title, + link: baseUrl + item.attribs.href, + })) + .get(); + + const items = await Promise.all( + [...links].map(async ({ title, link }) => { + const item = { + title: title, + link: link, + }; + const cache = await ctx.cache.get(link); + if (cache) { + return JSON.parse(cache); + } + const response = await got({ + method: 'get', + url: link, + }); + const newsContent = cheerio.load(response.data)('form[name=_newscontent_fromname]'); + + const [dateText] = newsContent.find('div[align=center]').text().split(/\xA0+/, 1); // \xA0+:   + + item.pubDate = dateText.replace(/ /, 'T') + '+08:00'; + const newsText = newsContent.find('div[class=v_news_content]'); + const attedText = newsText.parent().nextAll().filter('ul[style="list-style-type:none;"]'); + item.description = newsText.html() + (newsContent.html(attedText).html() || ''); + + ctx.cache.set(item.link, JSON.stringify(item)); + return Promise.resolve(item); + }) + ); + + ctx.state.data = { + title: $('title').text(), + link: url, + description: $.title, + item: items.filter((x) => x), + }; +};