diff --git a/docs/finance.md b/docs/finance.md index fe7a50a74..db3469ef2 100644 --- a/docs/finance.md +++ b/docs/finance.md @@ -38,6 +38,34 @@ pageClass: routes | -------- | -------- | -------- | -------- | -------- | -------- | -------- | ---------- | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +## 北京证券交易所 + +### 栏目 + + + +| 本所要闻 | 人才招聘 | 采购信息 | 业务通知 | +| -------------- | -------- | -------- | --------- | +| important_news | recruit | purchase | news_list | + +| 法律法规 | 公开征求意见 | 部门规章 | 发行融资 | +| -------- | -------------- | --------------- | --------- | +| law_list | public_opinion | regulation_list | fxrz_list | + +| 持续监管 | 交易管理 | 市场管理 | 上市委会议公告 | +| --------- | --------- | --------- | -------------- | +| cxjg_list | jygl_list | scgl_list | meeting_notice | + +| 上市委会议结果公告 | 上市委会议变更公告 | 并购重组委会议公告 | +| ------------------ | ------------------ | ------------------ | +| meeting_result | meeting_change | bgcz_notice | + +| 并购重组委会议结果公告 | 并购重组委会议变更公告 | 终止审核 | 注册结果 | +| ---------------------- | ---------------------- | ----------------- | ------------ | +| bgcz_result | bgcz_change | termination_audit | audit_result | + + + ## 财联社 ### 电报 diff --git a/lib/v2/bse/index.js b/lib/v2/bse/index.js new file mode 100644 index 000000000..5871d908d --- /dev/null +++ b/lib/v2/bse/index.js @@ -0,0 +1,173 @@ +const got = require('@/utils/got'); +const timezone = require('@/utils/timezone'); +const { parseDate } = require('@/utils/parse-date'); + +const nodes = { + important_news: { + id: 1289, + title: '本所要闻', + url: '/news/important_news.html', + type: '/info/listse', + }, + recruit: { + id: 1380, + title: '人才招聘', + url: '/company/recruit.html', + type: '/info/listse', + }, + purchase: { + id: 1381, + title: '采购信息', + url: '/purchase/list.html', + type: '/info/listse', + }, + news_list: { + id: 2676, + title: '业务通知', + url: '/news/news_list.html', + type: '/info/listse', + }, + law_list: { + id: 1322, + title: '法律法规', + url: '/rule/law_list.html', + type: '/info/listse', + }, + public_opinion: { + id: 1307, + title: '公开征求意见', + url: '/rule/public_opinion.html', + type: '/info/listse', + }, + regulation_list: { + id: 1300, + title: '部门规章', + url: '/rule/regulation_list.html', + type: '/info/listse', + }, + fxrz_list: { + id: 1302, + title: '发行融资', + url: '/business/fxrz_list.html', + type: '/info/listse', + }, + cxjg_list: { + id: 1303, + title: '持续监管', + url: '/business/cxjg_list.html', + type: '/info/listse', + }, + jygl_list: { + id: 1304, + title: '交易管理', + url: '/business/jygl_list.html', + type: '/info/listse', + }, + scgl_list: { + id: 1306, + title: '市场管理', + url: '/business/scgl_list.html', + type: '/info/listse', + }, + meeting_notice: { + id: '9531-1001', + title: '上市委会议公告', + url: '/notice/meeting_notice.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + meeting_result: { + id: '9531-1002', + title: '上市委会议结果公告', + url: '/notice/meeting_result.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + meeting_change: { + id: '9531-1003', + title: '上市委会议变更公告', + url: '/notice/meeting_notice.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + bgcz_notice: { + id: '9536-1001', + title: '并购重组委会议公告', + url: '/notice/bgcz_notice.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + bgcz_result: { + id: '9536-1002', + title: '并购重组委会议结果公告', + url: '/notice/bgcz_result.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + bgcz_change: { + id: '9536-1003', + title: '并购重组委会议变更公告', + url: '/notice/bgcz_notice.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + termination_audit: { + id: '9530-3001', + title: '终止审核', + url: '/notice/termination_audit.html', + type: '/disclosureInfoController/zoneInfoResult', + }, + audit_result: { + id: '9532-1001', + title: '注册结果', + url: '/notice/audit_result.html', + type: '/disclosureInfoController/zoneInfoResult', + }, +}; + +module.exports = async (ctx) => { + const category = ctx.params.category ?? 'important_news'; + const keyword = ctx.params.keyword ?? ''; + + const type = nodes[category].type; + const rootUrl = 'http://www.bse.cn'; + const currentUrl = `${rootUrl}${type}.do`; + + const response = await got({ + method: 'post', + url: currentUrl, + form: { + page: 0, + pageSize: ctx.query.limit ? parseInt(ctx.query.limit) : 50, + keywords: keyword, + 'nodeIds[]': type === '/info/listse' ? nodes[category].id : undefined, + disclosureSubtype: type === '/info/listse' ? undefined : nodes[category].id, + }, + }); + + const data = JSON.parse(response.data.match(/null\(\[({.*})\]\)/)[1]); + + let items = []; + + switch (nodes[category].type) { + case '/info/listse': { + items = data.data.content.map((item) => ({ + title: item.title, + category: item.tags, + description: item.text, + link: `${rootUrl}${item.htmlUrl}`, + pubDate: timezone(parseDate(item.publishDate), +8), + })); + break; + } + case '/disclosureInfoController/zoneInfoResult': { + items = data.listInfo.content.map((item) => ({ + title: item.disclosureTitle, + link: `${rootUrl}${item.destFilePath}`, + pubDate: parseDate(item.pubDate.time), + })); + break; + } + } + + ctx.state.data = { + title: `${nodes[category].title} - 北京证券交易所`, + link: `${rootUrl}${nodes[category].url}`, + item: items, + allowEmpty: true, + }; +}; diff --git a/lib/v2/bse/maintainer.js b/lib/v2/bse/maintainer.js new file mode 100644 index 000000000..e963143dd --- /dev/null +++ b/lib/v2/bse/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/:category?/:keyword?': ['nczitzk'], +}; diff --git a/lib/v2/bse/radar.js b/lib/v2/bse/radar.js new file mode 100644 index 000000000..081d00d11 --- /dev/null +++ b/lib/v2/bse/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'bse.cn': { + _name: '北京证券交易所', + '.': [ + { + title: '栏目', + docs: 'https://docs.rsshub.app/finance.html#bei-jing-zheng-quan-jiao-yi-suo-lan-mu', + source: ['/'], + target: '/bse/:category?/:keyword?', + }, + ], + }, +}; diff --git a/lib/v2/bse/router.js b/lib/v2/bse/router.js new file mode 100644 index 000000000..924391164 --- /dev/null +++ b/lib/v2/bse/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/:category?/:keyword?', require('./index')); +};