diff --git a/docs/finance.md b/docs/finance.md
index 050c13a64..ac108dbf5 100644
--- a/docs/finance.md
+++ b/docs/finance.md
@@ -105,3 +105,15 @@ pageClass: routes
### 货币政策司公开市场交易公告
+
+## 中证网
+
+### 资讯
+
+
+
+| 中证快讯 | 行业资讯 |
+| -------- | -------- |
+| zzkx | hyzx |
+
+
diff --git a/lib/router.js b/lib/router.js
index fc0a165ca..ea95498c9 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -2814,6 +2814,9 @@ router.get('/gov/caict/bps', require('./routes/gov/caict/bps'));
router.get('/gov/caict/qwsj', require('./routes/gov/caict/qwsj'));
router.get('/gov/caict/caictgd', require('./routes/gov/caict/caictgd'));
+// 中证网
+router.get('/cs/news/:caty', require('./routes/cs/news'));
+
// 财联社
router.get('/cls/telegraph', require('./routes/cls/telegraph'));
router.get('/cls/depth', require('./routes/cls/depth'));
diff --git a/lib/routes/cs/news.js b/lib/routes/cs/news.js
new file mode 100644
index 000000000..8ab6cd2ff
--- /dev/null
+++ b/lib/routes/cs/news.js
@@ -0,0 +1,63 @@
+const url = require('url');
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const iconv = require('iconv-lite');
+
+const rootUrl = 'http://www.cs.com.cn/';
+
+const config = {
+ zzkx: {
+ link: '/sylm/jsbd/',
+ title: '中证快讯',
+ },
+ hyzx: {
+ link: '/cj/hyzx/',
+ title: '行业资讯',
+ },
+};
+
+module.exports = async (ctx) => {
+ const cfg = config[ctx.params.caty];
+ if (!cfg) {
+ throw Error('Bad category. See docs');
+ }
+
+ const currentUrl = url.resolve(rootUrl, cfg.link);
+ const response = await got({
+ method: 'get',
+ url: currentUrl,
+ responseType: 'buffer',
+ });
+ const $ = cheerio.load(iconv.decode(response.data, 'gbk'));
+ const list = $('ul.list-lm li')
+ .slice(0, 20)
+ .map((_, item) => {
+ item = $(item);
+ const a = item.find('a');
+ return {
+ title: a.text(),
+ link: url.resolve(currentUrl, a.attr('href')),
+ pubDate: new Date(item.find('span').text()).toUTCString(),
+ };
+ })
+ .get();
+
+ const items = await Promise.all(
+ list.map(
+ async (item) =>
+ await ctx.cache.tryGet(item.link, async () => {
+ const res = await got({ method: 'get', url: item.link, responseType: 'buffer' });
+ const content = cheerio.load(iconv.decode(res.data, 'gbk'));
+
+ item.description = content('div.article-t').html();
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: '中证网 - ' + cfg.title,
+ link: rootUrl,
+ item: items,
+ };
+};