diff --git a/docs/university.md b/docs/university.md
index 1aa2fa31b..fe8a68f20 100644
--- a/docs/university.md
+++ b/docs/university.md
@@ -2666,6 +2666,20 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
+## 四川工商学院
+
+### 学院新闻
+
+
+
+### 计算机学院通知公告
+
+
+
+::: warning 注意
+计算机学院通知公告疑似禁止了非大陆IP访问,使用路由需要自行 [部署](https://docs.rsshub.app/install)。
+:::
+
## 四川旅游学院
### 信息与工程学院动态公告列表
diff --git a/lib/v2/stbu/jsjxy.js b/lib/v2/stbu/jsjxy.js
new file mode 100644
index 000000000..42884c705
--- /dev/null
+++ b/lib/v2/stbu/jsjxy.js
@@ -0,0 +1,51 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const iconv = require('iconv-lite');
+const { parseDate } = require('@/utils/parse-date');
+const timezone = require('@/utils/timezone');
+
+const gbk2utf8 = (s) => iconv.decode(s, 'gbk');
+module.exports = async (ctx) => {
+ const baseUrl = 'https://jsjxy.stbu.edu.cn/news/';
+ const { data: response } = await got(baseUrl, {
+ responseType: 'buffer',
+ https: {
+ rejectUnauthorized: false,
+ },
+ });
+ const $ = cheerio.load(gbk2utf8(response));
+ const list = $('.content dl h4')
+ .toArray()
+ .map((item) => {
+ item = $(item);
+ const a = item.find('a').first();
+ return {
+ title: a.text(),
+ link: a.attr('href'),
+ };
+ });
+
+ const items = await Promise.all(
+ list.map((item) =>
+ ctx.cache.tryGet(item.link, async () => {
+ const { data: response } = await got(item.link, {
+ responseType: 'buffer',
+ https: {
+ rejectUnauthorized: false,
+ },
+ });
+ const $ = cheerio.load(gbk2utf8(response));
+ item.description = $('.content14').first().html().trim();
+ item.pubDate = timezone(parseDate($('.article .source').text().split('日期:')[1].replace('\n', '').trim()), +8);
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: '四川工商学院计算机学院 - 新闻动态',
+ link: baseUrl,
+ description: '四川工商学院计算机学院 - 新闻动态',
+ item: items,
+ };
+};
diff --git a/lib/v2/stbu/maintainer.js b/lib/v2/stbu/maintainer.js
new file mode 100644
index 000000000..ba5bc6e70
--- /dev/null
+++ b/lib/v2/stbu/maintainer.js
@@ -0,0 +1,4 @@
+module.exports = {
+ '/jsjxy': ['HyperCherry'],
+ '/xyxw': ['HyperCherry'],
+};
diff --git a/lib/v2/stbu/radar.js b/lib/v2/stbu/radar.js
new file mode 100644
index 000000000..5080d992e
--- /dev/null
+++ b/lib/v2/stbu/radar.js
@@ -0,0 +1,21 @@
+module.exports = {
+ 'stbu.edu.cn': {
+ _name: '四川工商学院',
+ '.': [
+ {
+ title: '学院新闻',
+ docs: 'https://docs.rsshub.app/university.html#si-chuan-gong-shang-xue-yuan',
+ source: ['/html/news/xueyuan', '/'],
+ target: '/stbu/xyxw',
+ },
+ ],
+ jsjxy: [
+ {
+ title: '计算机学院通知公告',
+ docs: 'https://docs.rsshub.app/university.html#si-chuan-gong-shang-xue-yuan',
+ source: ['/news', '/'],
+ target: '/stbu/jsjxy',
+ },
+ ],
+ },
+};
diff --git a/lib/v2/stbu/router.js b/lib/v2/stbu/router.js
new file mode 100644
index 000000000..18d682883
--- /dev/null
+++ b/lib/v2/stbu/router.js
@@ -0,0 +1,4 @@
+module.exports = (router) => {
+ router.get('/jsjxy', require('./jsjxy'));
+ router.get('/xyxw', require('./xyxw'));
+};
diff --git a/lib/v2/stbu/xyxw.js b/lib/v2/stbu/xyxw.js
new file mode 100644
index 000000000..83c13966d
--- /dev/null
+++ b/lib/v2/stbu/xyxw.js
@@ -0,0 +1,52 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const iconv = require('iconv-lite');
+const { parseDate } = require('@/utils/parse-date');
+const timezone = require('@/utils/timezone');
+
+const gbk2utf8 = (s) => iconv.decode(s, 'gbk');
+module.exports = async (ctx) => {
+ const baseUrl = 'https://www.stbu.edu.cn';
+ const requestUrl = `${baseUrl}/html/news/xueyuan/`;
+ const { data: response } = await got(requestUrl, {
+ responseType: 'buffer',
+ https: {
+ rejectUnauthorized: false,
+ },
+ });
+ const $ = cheerio.load(gbk2utf8(response));
+ const list = $('.style_2 .Simple_title')
+ .toArray()
+ .map((item) => {
+ item = $(item);
+ const a = item.find('a').first();
+ return {
+ title: a.text(),
+ link: `${baseUrl}${a.attr('href')}`,
+ };
+ });
+
+ const items = await Promise.all(
+ list.map((item) =>
+ ctx.cache.tryGet(item.link, async () => {
+ const { data: response } = await got(item.link, {
+ responseType: 'buffer',
+ https: {
+ rejectUnauthorized: false,
+ },
+ });
+ const $ = cheerio.load(gbk2utf8(response));
+ item.description = $('.artmainl .articlemain').first().html();
+ item.pubDate = timezone(parseDate($('.artmainl .info').text().split('|')[2].split(':')[1].trim()), +8);
+ return item;
+ })
+ )
+ );
+
+ ctx.state.data = {
+ title: '四川工商学院 - 学院新闻',
+ link: requestUrl,
+ description: '四川工商学院 - 学院新闻',
+ item: items,
+ };
+};