feat(route): add 中国科学技术大学就业信息网 (#7774)

This commit is contained in:
Ethan Shen
2021-06-26 17:24:11 -07:00
committed by GitHub
parent 3e3657cdd0
commit 40985a812f
3 changed files with 204 additions and 0 deletions
+10
View File
@@ -2193,6 +2193,16 @@ type 列表:
</Route>
### 中国科学技术大学就业信息网
<Route author="nczitzk" example="/ustc/job" path="/ustc/job/:category?" :paramsDesc="['分类,见下表,默认为招聘公告']">
| 专场招聘会 | 校园双选会 | 空中宣讲 | 招聘公告 |
| ----------- | ------------ | --------- | -------- |
| RecruitList | Doublechoice | Broadcast | joblist2 |
</Route>
## 中国科学院
### 成果转化
+1
View File
@@ -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'));
+193
View File
@@ -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 =
'<table><thead style="background-color: #f6f6ee"><tr>' +
'<th style="white-space: nowrap;">单位名称</th>' +
'<th style="white-space: nowrap;">展位号</th>' +
'<th>职位信息</th></tr><tr></tr></thead><tbody>';
for (const company of detailResponse.data.CompanyList) {
tbody += `<tr><td style="white-space:nowrap"><a style="color:#004276;font-size:14px;"'+
'href="${rootUrl}/Company.html?cid=${company.CompanyID}" target="_blank">${company.CompanyName}</a></td>'+
'<td style="white-space:nowrap">${item.nPos}</td><td>${item.JobList}</td></tr>`;
}
return `${tbody}</tbody></table>`;
}
case 'joblist2':
return detailResponse.data.PostionDesc;
}
})();
return item;
})
)
);
ctx.state.data = {
title: `${titles[category]} - 中国科学技术大学就业信息网`,
link: currentUrl,
item: items,
};
};