From df4019250a72737bcebbc3898731a0ed02a755d4 Mon Sep 17 00:00:00 2001 From: ViggoC Date: Sun, 25 Aug 2024 20:14:24 +0800 Subject: [PATCH] feat(route): add route for recruit notice of West China Hospital (#16514) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 华西医院招聘公告 * Apply suggestions from code review --- lib/routes/wchscu/namespace.ts | 6 +++ lib/routes/wchscu/recruit.ts | 73 ++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 lib/routes/wchscu/namespace.ts create mode 100644 lib/routes/wchscu/recruit.ts diff --git a/lib/routes/wchscu/namespace.ts b/lib/routes/wchscu/namespace.ts new file mode 100644 index 00000000000000..0cb46f3ad89ec9 --- /dev/null +++ b/lib/routes/wchscu/namespace.ts @@ -0,0 +1,6 @@ +import type { Namespace } from '@/types'; + +export const namespace: Namespace = { + name: '华西医院', + url: 'www.wchscu.cn', +}; diff --git a/lib/routes/wchscu/recruit.ts b/lib/routes/wchscu/recruit.ts new file mode 100644 index 00000000000000..da7dc6b6570a32 --- /dev/null +++ b/lib/routes/wchscu/recruit.ts @@ -0,0 +1,73 @@ +import { Route } from '@/types'; + +import got from '@/utils/got'; +import { load } from 'cheerio'; +import { parseDate } from '@/utils/parse-date'; +import cache from '@/utils/cache'; + +const handler = async () => { + const rootUrl = 'https:///www.wchscu.cn'; + const currentUrl = 'https://www.wchscu.cn/public/notice/recruit'; + const { data: response } = await got(currentUrl); + + const $ = load(response); + const list = $('div#datalist div.list div.item') + .toArray() + .map((item) => { + item = $(item); + return { + title: item.find('span.s1').text(), + pubDate: parseDate(item.find('span.s2').text()), + link: new URL(item.find('a').prop('href'), rootUrl).href, + }; + }); + + const items = await Promise.all( + list.map((item) => + cache.tryGet(item.link, async () => { + const { data: response } = await got(item.link); + const $ = load(response); + const newLocal = $('div.xxy3 .content'); + // 选择类名为“comment-body”的第一个元素 + item.description = newLocal.html(); + + // 上面每个列表项的每个属性都在此重用, + // 并增加了一个新属性“description” + return item; + }) + ) + ); + + return { + title: $('title').text(), + link: currentUrl, + item: items, + allowEmpty: true, + }; +}; + +export const route: Route = { + name: '招聘公告', + path: '/recruit', + example: '/wchscu/recruit', + url: 'www.wchscu.cn', + maintainers: ['ViggoC'], + categories: ['other'], + + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportRadar: true, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + + radar: [ + { + source: ['www.wchscu.cn/public/notice/recruit'], + }, + ], + handler, +};