From 51f9a2aad26426fcbacc718f0e56054bfe978704 Mon Sep 17 00:00:00 2001 From: Jianing Wang Date: Wed, 10 Oct 2018 15:08:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B1=B1=E4=B8=9C=E5=A4=A7?= =?UTF-8?q?=E5=AD=A6=E7=A0=94=E7=A9=B6=E7=94=9F=E9=99=A2=E5=AD=A6=E6=9C=AF?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E9=80=9A=E7=9F=A5=20(#850)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++ router.js | 3 ++ routes/universities/sdu/grad/academic.js | 49 ++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 routes/universities/sdu/grad/academic.js diff --git a/docs/README.md b/docs/README.md index 5847456d4..465e6df19 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1194,6 +1194,10 @@ category 列表: +### 山东大学 + + + ## 传统媒体 ### 央视新闻 diff --git a/router.js b/router.js index cc84ae779..89d2df199 100644 --- a/router.js +++ b/router.js @@ -555,6 +555,9 @@ router.get('/kmust/job/jobfairs', require('./routes/universities/kmust/job/jobfa router.get('/hust/auto/notice/:type?', require('./routes/universities/hust/auto/notice')); router.get('/hust/auto/news/', require('./routes/universities/hust/auto/news')); +// 山东大学 +router.get('/sdu/grad/academic', require('./routes/universities/sdu/grad/academic')); + // ifanr router.get('/ifanr/appso', require('./routes/ifanr/appso')); diff --git a/routes/universities/sdu/grad/academic.js b/routes/universities/sdu/grad/academic.js new file mode 100644 index 000000000..aed4fcb89 --- /dev/null +++ b/routes/universities/sdu/grad/academic.js @@ -0,0 +1,49 @@ +const axios = require('../../../../utils/axios'); +const cheerio = require('cheerio'); +const url = require('url'); + +const host = 'http://www.grad.sdu.edu.cn/'; + +module.exports = async (ctx) => { + const link = url.resolve(host, 'default_xshd_news.site?isDto=&beanName=xshd_newsPageBean&typeCode=0108&pageSize=20&pageIndex=1'); + const response = await axios.get(link); + + const $ = cheerio.load(response.data); + + const list = $('#div_more_news a') + .map((i, e) => $(e).attr('href')) + .get(); + + const out = await Promise.all( + list.filter((itemUrl) => itemUrl.startsWith('http')).map(async (itemUrl) => { + const cache = await ctx.cache.get(itemUrl); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const response = await axios.get(itemUrl); + const $ = cheerio.load(response.data); + + const titleGroup = $('#newsTitle') + .children() + .text() + .split('\n'); + + const single = { + title: titleGroup[0], + link: itemUrl, + author: '山东大学研究生院', + description: $('.newscontent_1').html(), + pubDate: new Date(titleGroup[2].slice(8)), + }; + ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60); + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: '山东大学研究生院学术活动', + link, + item: out, + }; +};