UNPKG

rsshub

Version:
172 lines (170 loc) 5.72 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; //#region lib/routes/ustc/job.ts const titles = { RecruitList: "专场招聘会", Doublechoice: "校园双选会", Broadcast: "空中宣讲", joblist2: "招聘公告" }; const route = { path: "/job/:category?", categories: ["university"], example: "/ustc/job", parameters: { category: "分类,见下表,默认为招聘公告" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["job.ustc.edu.cn/"], target: "/job" }], name: "就业信息网", maintainers: ["nczitzk"], handler, url: "job.ustc.edu.cn/", description: `| 专场招聘会 | 校园双选会 | 空中宣讲 | 招聘公告 | | ----------- | ------------ | --------- | -------- | | RecruitList | Doublechoice | Broadcast | joblist2 |` }; async function handler(ctx) { const category = ctx.req.param("category") ?? "joblist2"; const rand = .01234567890123456; const apiRootUrl = "http://ustc.ahbys.com"; const rootUrl = "http://www.job.ustc.edu.cn"; const currentUrl = `${rootUrl}/${category}.html`; const list = (await got_default({ 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&keyword=`; 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}&keyword=`; } })(), form: (() => { switch (category) { case "RecruitList": case "Broadcast": case "joblist2": return {}; case "Doublechoice": return { pagesize: 15, pageindex: 1, action: "recruitlist", rand }; } })(), allowGetBody: true })).data.data.slice(0, 10).map((item) => { switch (category) { case "RecruitList": return { title: item.ID, pubDate: parseDate(item.HoldDate), link: `${rootUrl}/Recruit.html?id=${item.ID}` }; case "Doublechoice": return { ID: item.ID, title: item.Theme, pubDate: parseDate(item.HoldDate), link: `${rootUrl}/R2.html?id=${item.ID}` }; case "Broadcast": return { title: item.ID, pubDate: parseDate(item.HoldDate), link: `${rootUrl}/R2.html?id=${item.ID}` }; case "joblist2": return { title: item.JID, pubDate: parseDate(item.UpdateDate), link: `${rootUrl}/Job2.html?jid=${item.JID}&cid=${item.CompanyID}` }; default: return {}; } }); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { const detailResponse = await got_default({ 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 }; } })(), 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; }))); return { title: `${titles[category]} - 中国科学技术大学就业信息网`, link: currentUrl, item: items }; } //#endregion export { route };