diff --git a/docs/government.md b/docs/government.md
index bb2b65b099..34a95d572d 100644
--- a/docs/government.md
+++ b/docs/government.md
@@ -69,6 +69,18 @@ pageClass: routes
+### 山西省人民政府
+
+#### 山西省人社厅
+
+
+
+| 通知公告 | 公务员考试 | 事业单位考试 | 专业技术人员资格考试 | 其他考试 |
+| :-------: | :--------: | :----------: | :------------------: | :-------: |
+| rsks-tzgg | rsks-gwyks | rsks-sydwks | rsks-zyjsryzgks | rsks-qtks |
+
+
+
### 南京市人民政府
diff --git a/lib/router.js b/lib/router.js
index 7842f9719b..064c3762bd 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -1033,6 +1033,7 @@ router.get('/gov/statecouncil/briefing', require('./routes/gov/statecouncil/brie
router.get('/gov/news/:uid', require('./routes/gov/news'));
router.get('/gov/suzhou/news/:uid', require('./routes/gov/suzhou/news'));
router.get('/gov/suzhou/doc', require('./routes/gov/suzhou/doc'));
+router.get('/gov/shanxi/rst/:category', require('./routes/gov/shanxi/rst'));
// 中华人民共和国生态环境部
router.get('/gov/mee/gs', require('./routes/gov/mee/gs'));
diff --git a/lib/routes/gov/shanxi/rst.js b/lib/routes/gov/shanxi/rst.js
new file mode 100644
index 0000000000..32e6e02a58
--- /dev/null
+++ b/lib/routes/gov/shanxi/rst.js
@@ -0,0 +1,74 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const resolve_url = require('url').resolve;
+
+module.exports = async (ctx) => {
+ const category = ctx.params.category;
+ let url = '';
+ let title = '';
+ switch (category) {
+ case 'rsks-tzgg':
+ url = `http://rst.shanxi.gov.cn/rsks/tzgg/`;
+ title = '山西人事考试专栏 - 通知公告';
+ break;
+ case 'rsks-gwyks':
+ url = 'http://rst.shanxi.gov.cn/rsks/gwyks/';
+ title = '山西人事考试专栏 - 公务员考试';
+ break;
+ case 'rsks-sydwks':
+ url = `http://rst.shanxi.gov.cn/rsks/sydwks/`;
+ title = '山西人事考试专栏 - 事业单位考试';
+ break;
+ case 'rsks-zyjsryzgks':
+ url = `http://rst.shanxi.gov.cn/rsks/zyjsryzgks/`;
+ title = '山西人事考试专栏 - 专业技术人员资格考试';
+ break;
+ case 'rsks-qtks':
+ url = `http://rst.shanxi.gov.cn/rsks/qtks/`;
+ title = '山西人事考试专栏 - 其他考试';
+ break;
+ default:
+ console.log('pattern not matched');
+ }
+ const response = await got({
+ method: 'get',
+ url: url,
+ Host: 'rst.shanxi.gov.cn',
+ responseType: 'buffer',
+ });
+
+ const $ = cheerio.load(response.data);
+ const list = $('.exam-main ul.list-items-box-inner li');
+
+ ctx.state.data = {
+ title: title,
+ link: url,
+ item: await Promise.all(
+ list &&
+ list
+ .map(async (index, item) => {
+ item = $(item);
+
+ // // 获取全文
+ const contenlUrl = item.find('a').attr('href');
+ const link = resolve_url(url, contenlUrl);
+ const description = await ctx.cache.tryGet(link, async () => {
+ const fullText = await got({
+ method: 'get',
+ url: link,
+ Host: 'rst.shanxi.gov.cn',
+ responseType: 'buffer',
+ });
+ const fullTextData = cheerio.load(fullText.data);
+ return fullTextData('.common-detail-inner').html();
+ });
+ return {
+ title: item.find('a').text(),
+ description: description,
+ link: link,
+ };
+ })
+ .get()
+ ),
+ };
+};