diff --git a/docs/university.md b/docs/university.md index 521336f34b..4128ee8301 100644 --- a/docs/university.md +++ b/docs/university.md @@ -2193,6 +2193,16 @@ type 列表: +### 中国科学技术大学就业信息网 + + + +| 专场招聘会 | 校园双选会 | 空中宣讲 | 招聘公告 | +| ----------- | ------------ | --------- | -------- | +| RecruitList | Doublechoice | Broadcast | joblist2 | + + + ## 中国科学院 ### 成果转化 diff --git a/lib/router.js b/lib/router.js index 4fbf65b22d..8e85538b56 100644 --- a/lib/router.js +++ b/lib/router.js @@ -722,6 +722,7 @@ router.get('/cuc/yz', require('./routes/universities/cuc/yz')); // 中国科学技术大学 router.get('/ustc/news/:type?', require('./routes/universities/ustc/index')); router.get('/ustc/jwc/:type?', require('./routes/universities/ustc/jwc/index')); +router.get('/ustc/job/:category?', require('./routes/universities/ustc/job')); // UTdallas ISSO router.get('/utdallas/isso', require('./routes/universities/utdallas/isso')); diff --git a/lib/routes/universities/ustc/job.js b/lib/routes/universities/ustc/job.js new file mode 100644 index 0000000000..e7cf558b70 --- /dev/null +++ b/lib/routes/universities/ustc/job.js @@ -0,0 +1,193 @@ +const got = require('@/utils/got'); + +const titles = { + RecruitList: '专场招聘会', + Doublechoice: '校园双选会', + Broadcast: '空中宣讲', + joblist2: '招聘公告', +}; + +module.exports = async (ctx) => { + const category = ctx.params.category || 'joblist2'; + + const rand = 0.01234567890123456; + const apiRootUrl = 'http://ustc.ahbys.com'; + const rootUrl = 'http://www.job.ustc.edu.cn'; + + const currentUrl = `${rootUrl}/${category}.html`; + + const response = await got({ + method: (() => { + switch (category) { + case 'RecruitList': + case 'Broadcast': + case 'joblist2': + return 'get'; + case 'Doublechoice': + return 'post'; + } + })(), + + url: (() => { + switch (category) { + case 'RecruitList': + return `${apiRootUrl}/API/Web/index10358.ashx?rd=${rand}&pagesize=20&pageindex=1&action=bookinglist&kind=13`; + case 'Doublechoice': + return `${apiRootUrl}/API/Web/index10358.ashx?rd=${rand}`; + case 'Broadcast': + return `${apiRootUrl}/API/Web/index10358.ashx?rd=${rand}&pagesize=20&pageindex=1&action=bookinglist2&kind=2`; + case 'joblist2': + return `${apiRootUrl}/API/Web/index10358.ashx?action=joblist2&pagesize=50&pageindex=1&rand=${rand}`; + } + })(), + + form: (() => { + switch (category) { + case 'RecruitList': + case 'Broadcast': + case 'joblist2': + return {}; + case 'Doublechoice': + return { + pagesize: 15, + pageindex: 1, + action: 'recruitlist', + rand: rand, + }; + } + })(), + + allowGetBody: true, + }); + + const list = response.data.data.slice(0, 10).map((item) => { + switch (category) { + case 'RecruitList': + return { + title: item.ID, + pubDate: new Date(item.HoldDate), + link: `${rootUrl}/Recruit.html?id=${item.ID}`, + }; + case 'Doublechoice': + return { + ID: item.ID, + title: item.Theme, + pubDate: new Date(item.HoldDate), + link: `${rootUrl}/R2.html?id=${item.ID}`, + }; + case 'Broadcast': + return { + title: item.ID, + pubDate: new Date(item.HoldDate), + link: `${rootUrl}/R2.html?id=${item.ID}`, + }; + case 'joblist2': + return { + title: item.JID, + pubDate: new Date(item.UpdateDate), + link: `${rootUrl}/Job2.html?jid=${item.JID}&cid=${item.CompanyID}`, + }; + default: + return {}; + } + }); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: (() => { + switch (category) { + case 'RecruitList': + case 'Broadcast': + case 'joblist2': + return 'get'; + case 'Doublechoice': + return 'post'; + } + })(), + + url: (() => { + switch (category) { + case 'RecruitList': + return `${apiRootUrl}/API/Web/index10358.ashx?rd=${rand}&action=bookinginfo&rid=${item.title}&rand=${rand}`; + case 'Doublechoice': + return `${apiRootUrl}/API/Web/index10358.ashx`; + case 'Broadcast': + return `${apiRootUrl}/API/Web/index10358.ashx?rd=${rand}&action=binfo&rid=${item.title}&rand=${rand}`; + case 'joblist2': + return `${apiRootUrl}/API/Web/index10358.ashx?rd=${rand}&action=jobinfo2&jid=${item.title}&rand=${rand}`; + } + })(), + + form: (() => { + switch (category) { + case 'RecruitList': + case 'Broadcast': + case 'joblist2': + return {}; + case 'Doublechoice': + return { + pagesize: 100, + pageindex: 1, + action: 'recruitcompany', + rid: item.ID, + rand: rand, + }; + } + })(), + + allowGetBody: true, + }); + + item.title = (() => { + switch (category) { + case 'RecruitList': + case 'Broadcast': + return detailResponse.data.Theme; + case 'Doublechoice': + return item.title; + case 'joblist2': + return detailResponse.data.JobName; + } + })(); + + item.description = (() => { + switch (category) { + case 'RecruitList': + case 'Broadcast': + return detailResponse.data.Description; + + case 'Doublechoice': { + let tbody = + '' + + '' + + '' + + ''; + + for (const company of detailResponse.data.CompanyList) { + tbody += `'+ + '`; + } + + return `${tbody}
单位名称展位号职位信息
${company.CompanyName}${item.nPos}${item.JobList}
`; + } + + case 'joblist2': + return detailResponse.data.PostionDesc; + } + })(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `${titles[category]} - 中国科学技术大学就业信息网`, + link: currentUrl, + item: items, + }; +};