diff --git a/docs/README.md b/docs/README.md index c86331977..42cf28421 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1139,6 +1139,26 @@ category 列表: +### 昆明理工大学 + + + +| 教务通知 | 教务新闻 | +| -------- | -------- | +| notify | news | + + + + + +| 校内宣讲会 | 校外宣讲会 | +| ---------- | ---------- | +| inner | outer | + + + + + ## 传统媒体 ### 央视新闻 diff --git a/router.js b/router.js index ad042675b..b330ae660 100644 --- a/router.js +++ b/router.js @@ -539,6 +539,11 @@ router.get('/sctu/jwc/:type?', require('./routes/universities/sctu/jwc')); router.get('/uestc/jwc/:type?', require('./routes/universities/uestc/jwc')); router.get('/uestc/news/:type?', require('./routes/universities/uestc/news')); +// 昆明理工大学 +router.get('/kmust/jwc/:type?', require('./routes/universities/kmust/jwc')); +router.get('/kmust/job/careers/:type?', require('./routes/universities/kmust/job/careers')); +router.get('/kmust/job/jobfairs', require('./routes/universities/kmust/job/jobfairs')); + // ifanr router.get('/ifanr/appso', require('./routes/ifanr/appso')); diff --git a/routes/universities/kmust/job/careers.js b/routes/universities/kmust/job/careers.js new file mode 100644 index 000000000..5a7779b34 --- /dev/null +++ b/routes/universities/kmust/job/careers.js @@ -0,0 +1,34 @@ +const axios = require('../../../../utils/axios'); +const url = require('url'); + +const baseUrl = 'http://job.kmust.edu.cn'; + +module.exports = async (ctx) => { + const type = ctx.params.type || 'inner'; + const title = `${type === 'inner' ? '校内宣讲会' : '校外宣讲会'}-昆明理工大学就业网`; + const pageUrl = url.resolve(baseUrl, `/module/getcareers?start_page=1&keyword=&type=${type}&day=&count=20&start=1&_=${+new Date()}`); + const response = await axios({ + method: 'get', + url: pageUrl, + headers: { + Referer: baseUrl, + }, + }); + const data = response.data || {}; + + ctx.state.data = { + title, + link: url.resolve(baseUrl, `/module/careers${type === 'outer' && '?type=outer'}`), + item: + data.data && + data.data.map((item) => { + const { meet_day = '', meet_time = '', company_name = '', school_name = '', address = '', company_property = '', industry_category = '', recommend_time = '', career_talk_id = '' } = item; + return { + title: `【${meet_day} ${meet_time}】${company_name}`, + description: `时间:${meet_day} ${meet_time}
地点:${school_name ? `${school_name}-${address}` : address}
类别:${company_property}
行业类别:${industry_category}`, + pubDate: new Date(recommend_time).toUTCString(), + link: url.resolve(baseUrl, `/detail/career?id=${career_talk_id}`), + }; + }), + }; +}; diff --git a/routes/universities/kmust/job/jobfairs.js b/routes/universities/kmust/job/jobfairs.js new file mode 100644 index 000000000..5b9c66d1b --- /dev/null +++ b/routes/universities/kmust/job/jobfairs.js @@ -0,0 +1,33 @@ +const axios = require('../../../../utils/axios'); +const url = require('url'); + +const baseUrl = 'http://job.kmust.edu.cn'; + +module.exports = async (ctx) => { + const title = '双选会-昆明理工大学就业网'; + const pageUrl = url.resolve(baseUrl, `/module/getjobfairs?start_page=1&keyword=&count=20&start=1&_=${+new Date()}`); + const response = await axios({ + method: 'get', + url: pageUrl, + headers: { + Referer: baseUrl, + }, + }); + const data = response.data || {}; + + ctx.state.data = { + title, + link: url.resolve(baseUrl, '/module/jobfairs'), + item: + data.data && + data.data.map((item) => { + const { meet_day = '', meet_time = '', title = '', school_name = '', address = '', recommend_time = '', fair_id = '' } = item; + return { + title: `【${meet_day} ${meet_time}】${title}`, + description: `时间:${meet_day} ${meet_time}
地点:${school_name ? `${school_name}-${address}` : address}`, + pubDate: new Date(recommend_time).toUTCString(), + link: url.resolve(baseUrl, `/detail/jobfair?id=${fair_id}`), + }; + }), + }; +}; diff --git a/routes/universities/kmust/jwc.js b/routes/universities/kmust/jwc.js new file mode 100644 index 000000000..bc4261326 --- /dev/null +++ b/routes/universities/kmust/jwc.js @@ -0,0 +1,48 @@ +const axios = require('../../../utils/axios'); +const cheerio = require('cheerio'); +const url = require('url'); + +const baseUrl = 'http://jwc.kmust.edu.cn'; +const dataRegex = /(?:20\d{2})\/(?:\d{2})\/(?:\d{2})/; +const typeProps = { + notify: { + url: '/html/jwtz/1.html', + title: '教务通知', + }, + news: { + url: '/html/jwxw/1.html', + title: '教务新闻', + }, +}; + +module.exports = async (ctx) => { + const type = ctx.params.type || 'notify'; + const pageUrl = url.resolve(baseUrl, typeProps[type].url); + const title = `${typeProps[type].title}-昆明理工大学`; + const response = await axios({ + method: 'get', + url: pageUrl, + headers: { + Referer: baseUrl, + }, + }); + + const $ = cheerio.load(response.data); + + ctx.state.data = { + link: pageUrl, + title, + item: $('table[width="92%"] a[target="_blank"]') + .map((_, elem) => ({ + link: url.resolve(baseUrl, elem.attribs.href), + title: elem.children[0].data, + pubDate: new Date( + elem.attribs.href + .match(dataRegex)[0] + .split('/') + .join('-') + ), + })) + .get(), + }; +};