From a452a3d52f55b2c4cfe5a69807de690a0bcbb9a8 Mon Sep 17 00:00:00 2001
From: GideonSenku <39037656+GideonSenku@users.noreply.github.com>
Date: Sun, 23 Jul 2023 22:54:22 +0800
Subject: [PATCH] =?UTF-8?q?feat(route):=20=E6=94=AF=E6=8C=81=E4=B8=8A?=
=?UTF-8?q?=E6=B5=B7=E5=B8=82=E6=96=87=E6=97=85=E5=B1=80=E5=AE=A1=E6=89=B9?=
=?UTF-8?q?=E5=85=AC=E5=91=8A=20(#12862)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat(route): 支持上海市文旅局审批公告
* fix(route): wgj
* fix(route): currentUrl
* fix(route): search params
---
docs/government.md | 5 ++
lib/v2/gov/maintainer.js | 1 +
lib/v2/gov/radar.js | 8 +++
lib/v2/gov/router.js | 1 +
lib/v2/gov/shanghai/wgj/templates/wgj.art | 15 +++++
lib/v2/gov/shanghai/wgj/wgj.js | 72 +++++++++++++++++++++++
6 files changed, 102 insertions(+)
create mode 100644 lib/v2/gov/shanghai/wgj/templates/wgj.art
create mode 100644 lib/v2/gov/shanghai/wgj/wgj.js
diff --git a/docs/government.md b/docs/government.md
index 44b19698e..51866d8b5 100644
--- a/docs/government.md
+++ b/docs/government.md
@@ -846,6 +846,11 @@ pageClass: routes
+### 上海市文旅局审批公告
+
+
+
+
## 世界贸易组织
### 争端解决新闻
diff --git a/lib/v2/gov/maintainer.js b/lib/v2/gov/maintainer.js
index 7a77226ab..b80356ec4 100644
--- a/lib/v2/gov/maintainer.js
+++ b/lib/v2/gov/maintainer.js
@@ -73,6 +73,7 @@ module.exports = {
'/shanghai/rsj/ksxm': ['Fatpandac'],
'/shanghai/wsjkw/yqtb': ['zcf0508'],
'/shanghai/yjj/:path+': ['nczitzk'],
+ '/shanghai/wgj/:page?': ['gideonsenku'],
'/shenzhen/hrss/szksy/:caty/:page?': ['zlasd'],
'/shenzhen/xxgk/zfxxgj/:caty': ['laoxua'],
'/shenzhen/zzb/:caty/:page?': ['zlasd'],
diff --git a/lib/v2/gov/radar.js b/lib/v2/gov/radar.js
index a332eb628..5d1cc018f 100644
--- a/lib/v2/gov/radar.js
+++ b/lib/v2/gov/radar.js
@@ -948,6 +948,14 @@ module.exports = {
target: (params, url) => `/gov/shanghai/yjj/${new URL(url).match(/yjj\.sh\.gov\.cn\/(.*)\/index.html/)[1]}`,
},
],
+ 'wsbs.wgj': [
+ {
+ title: '上海市文旅局审批公告',
+ docs: 'https://docs.rsshub.app/government.html#shang-hai-shi-ren-min-zheng-fu-shang-hai-shi-wen-lv-ju-shen-pi-gong-gao',
+ source: ['/'],
+ target: '/gov/shanghai/wgj',
+ },
+ ],
},
'shaanxi.gov.cn': {
_name: '陕西省人民政府',
diff --git a/lib/v2/gov/router.js b/lib/v2/gov/router.js
index 51b1da7a5..91728c40e 100644
--- a/lib/v2/gov/router.js
+++ b/lib/v2/gov/router.js
@@ -63,6 +63,7 @@ module.exports = function (router) {
router.get('/shaanxi/kjt/:id?', require('./shaanxi/kjt'));
router.get('/shanghai/rsj/ksxm', require('./shanghai/rsj/ksxm'));
router.get('/shanghai/wsjkw/yqtb', require('./shanghai/wsjkw/yqtb'));
+ router.get('/shanghai/wgj/:page?', require('./shanghai/wgj/wgj'));
router.get(/shanghai\/yjj\/([\w/-]+)?/, require('./shanghai/yjj'));
router.get('/shenzhen/hrss/szksy/:caty/:page?', require('./shenzhen/hrss/szksy/index'));
router.get('/shenzhen/xxgk/zfxxgj/:caty', require('./shenzhen/xxgk/zfxxgj'));
diff --git a/lib/v2/gov/shanghai/wgj/templates/wgj.art b/lib/v2/gov/shanghai/wgj/templates/wgj.art
new file mode 100644
index 000000000..6ce7b6063
--- /dev/null
+++ b/lib/v2/gov/shanghai/wgj/templates/wgj.art
@@ -0,0 +1,15 @@
+举办单位:{{ hostingUnit }}
+
+许可证号:{{ licenseNumber }}
+
+演出名称:{{ performanceName }}
+
+演出日期:{{ performanceDate }}
+
+演出场所:{{ performanceVenue }}
+
+主要演员:{{ mainActors }}
+
+演员人数:{{ actorCount }}
+
+场次:{{ showCount }}
diff --git a/lib/v2/gov/shanghai/wgj/wgj.js b/lib/v2/gov/shanghai/wgj/wgj.js
new file mode 100644
index 000000000..dc89c67dc
--- /dev/null
+++ b/lib/v2/gov/shanghai/wgj/wgj.js
@@ -0,0 +1,72 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const { parseDate } = require('@/utils/parse-date');
+const { art } = require('@/utils/render');
+const path = require('path');
+
+module.exports = async (ctx) => {
+ const baseUrl = 'http://wsbs.wgj.sh.gov.cn';
+ const currentUrl = `${baseUrl}/shwgj_ywtb/core/web/welcome/index!toResultNotice.action`;
+ const page = ctx.params.page ?? 1;
+ const searchParams = {
+ flag: 1,
+ 'pageDoc.pageNo': page,
+ };
+ const response = await got({
+ method: 'post',
+ url: currentUrl,
+ searchParams,
+ });
+
+ const $ = cheerio.load(response.data);
+ const list = $('#div_md > table > tbody > tr > td:nth-child(1) > a')
+ .map((_, item) => {
+ item = $(item);
+ return {
+ title: item.prop('innerText').replace(/\s/g, ''),
+ link: item.attr('href'),
+ };
+ })
+ .get();
+ const items = await Promise.all(
+ list.map((item) =>
+ ctx.cache.tryGet(item.link, async () => {
+ const detailResponse = await got({
+ method: 'get',
+ url: baseUrl + item.link,
+ });
+ const $ = cheerio.load(detailResponse.data);
+ const dateElement = $('div[align="right"][style*="padding: 10px"]').last();
+ const dateText = dateElement.text().trim();
+ const hostingUnit = $('td:contains("举办单位:")').next().text().trim();
+ const licenseNumber = $('td:contains("许可证号:")').next().text().trim();
+ const performanceName = $('td:contains("演出名称:")').next().text().trim();
+ const performanceDate = $('td:contains("演出日期:")').next().text().trim();
+ const performanceVenue = $('td:contains("演出场所:")').next().text().trim();
+ const mainActors = $('td:contains("主要演员:")').next().text().trim();
+ const actorCount = $('td:contains("演员人数:")').next().text().trim();
+ const showCount = $('td:contains("场次:")').next().text().trim();
+
+ item.description = art(path.join(__dirname, './templates/wgj.art'), {
+ hostingUnit,
+ licenseNumber,
+ performanceName,
+ performanceDate,
+ performanceVenue,
+ mainActors,
+ actorCount,
+ showCount,
+ });
+ item.pubDate = parseDate(dateText);
+
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: $('title').text(),
+ link: currentUrl,
+ item: items,
+ };
+};