diff --git a/lib/v2/gov/maintainer.js b/lib/v2/gov/maintainer.js index 0463128bde8615..1cba1164c39a11 100644 --- a/lib/v2/gov/maintainer.js +++ b/lib/v2/gov/maintainer.js @@ -87,4 +87,5 @@ module.exports = { '/wuhan/sy/whyw': ['nczitzk'], '/xinyi/:path+': ['ShuiHuo'], '/xuzhou/hrss/:category?': ['nczitzk'], + '/zhejiang/gwy/:category?/:column?': ['nczitzk'], }; diff --git a/lib/v2/gov/radar.js b/lib/v2/gov/radar.js index 6a7d62d0634312..45c5ad95ab1727 100644 --- a/lib/v2/gov/radar.js +++ b/lib/v2/gov/radar.js @@ -1168,4 +1168,15 @@ module.exports = { }, ], }, + 'zjks.gov.cn': { + _name: '浙江省公务员考试录用网', + '.': [ + { + title: '地市专栏', + docs: 'https://docs.rsshub.app/routes/government#zhe-jiang-sheng-gong-wu-yuan-kao-shi-lu-yong-wang', + source: ['/zjgwy/website/init.htm', '/zjgwy/website/queryDetail.htm', '/zjgwy/website/queryMore.htm'], + target: '/gov/zhejiang/gwy', + }, + ], + }, }; diff --git a/lib/v2/gov/router.js b/lib/v2/gov/router.js index 46ceb8588a4afc..744b260e180e76 100644 --- a/lib/v2/gov/router.js +++ b/lib/v2/gov/router.js @@ -78,4 +78,5 @@ module.exports = function (router) { router.get('/wuhan/sy/whyw', require('./wuhan/whyw')); router.get(/xinyi(\/[\w/-]+)?/, require('./xinyi/xinyi')); router.get('/xuzhou/hrss/:category?', require('./xuzhou/hrss')); + router.get('/zhejiang/gwy/:category?/:column?', require('./zhejiang/gwy')); }; diff --git a/lib/v2/gov/zhejiang/gwy.js b/lib/v2/gov/zhejiang/gwy.js new file mode 100644 index 00000000000000..f6fea226d37987 --- /dev/null +++ b/lib/v2/gov/zhejiang/gwy.js @@ -0,0 +1,84 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const { category, column } = ctx.params; + const limit = ctx.query.limit ? parseInt(ctx.query.limit, 10) : 50; + + const rootUrl = 'http://gwy.zjks.gov.cn'; + const currentUrl = new URL(`zjgwy/website/${category ? 'queryMore' : 'init'}.htm`, rootUrl).href; + const detailUrl = new URL('zjgwy/website/queryDetail.htm', rootUrl).href; + + const { data: response } = await got.post(currentUrl, { + form: { + dsdm: column, + mkxh: category, + oldornew: 'new', + }, + }); + + const $ = cheerio.load(response); + + let items = $('a[onclick^="queryDetail"]') + .slice(0, limit) + .toArray() + .map((item) => { + item = $(item); + + const matches = item.prop('onclick').match(/queryDetail\('?(\d+)'?, '?(\d+)'?\);/); + + return { + title: item.text(), + link: detailUrl, + category: matches[1], + guid: `zjks-${matches[1]}-${matches[2]}`, + pubDate: parseDate(item.parent().next().text()), + tzid: matches[2], + }; + }); + + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.guid, async () => { + const { data: detailResponse } = await got.post(detailUrl, { + form: { + mkxh: item.category, + oldornew: 'new', + dsdm: column, + tzid: item.tzid, + }, + }); + + const content = cheerio.load(detailResponse); + + item.description = content('div.ibox-content').last().html(); + item.category = [content('div.ibox-title').last().find('h5').first().text()]; + + const files = content('a.ke-insertfile'); + + if (files.length > 0) { + const file = files.first(); + item.enclosure_url = file.prop('href'); + } + + delete item.tzid; + + return item; + }) + ) + ); + + const columnName = $('button.btn-success').last().text(); + const categoryName = $('table').parent().prev().find('h5').text(); + + ctx.state.data = { + item: items, + title: `${$('title').text()} - ${columnName}${categoryName}`, + link: currentUrl, + description: $('div.title-font2').text(), + subtitle: `${columnName}${categoryName}`, + author: $('div.title-font').text(), + allowEmpty: true, + }; +}; diff --git a/website/docs/routes/government.md b/website/docs/routes/government.md index f740ffc064b777..ccce5daa816391 100644 --- a/website/docs/routes/government.md +++ b/website/docs/routes/government.md @@ -1144,6 +1144,38 @@ Language +## 浙江省公务员考试录用网 {#zhe-jiang-sheng-gong-wu-yuan-kao-shi-lu-yong-wang} + +### 通知 {#zhe-jiang-sheng-gong-wu-yuan-kao-shi-lu-yong-wang-tong-zhi} + + + +| 分类 | id | +| ------------ | --- | +| 重要通知 | 1 | +| 招考公告 | 2 | +| 招考政策 | 3 | +| 面试体检考察 | 4 | +| 录用公示专栏 | 5 | + +| 地市 | id | +| ------------ | ----- | +| 浙江省 | 133 | +| 浙江省杭州市 | 13301 | +| 浙江省宁波市 | 13302 | +| 浙江省温州市 | 13303 | +| 浙江省嘉兴市 | 13304 | +| 浙江省湖州市 | 13305 | +| 浙江省绍兴市 | 13306 | +| 浙江省金华市 | 13307 | +| 浙江省衢州市 | 13308 | +| 浙江省舟山市 | 13309 | +| 浙江省台州市 | 13310 | +| 浙江省丽水市 | 13311 | +| 省级单位 | 13317 | + + + ## 浙江省土地使用权网上交易系统 {#zhe-jiang-sheng-tu-di-shi-yong-quan-wang-shang-jiao-yi-xi-tong} ### 公告信息 {#zhe-jiang-sheng-tu-di-shi-yong-quan-wang-shang-jiao-yi-xi-tong-gong-gao-xin-xi}