feat(route): add 信息学院路由 (#7777)
* feat:add 信息学院路由 * refactor: migrate to v2 Co-authored-by: TonyRL <TonyRL@users.noreply.github.com>
This commit is contained in:
parent
f6fd024df9
commit
7dd591ca82
|
|
@ -258,6 +258,16 @@ pageClass: routes
|
|||
|
||||
</Route>
|
||||
|
||||
### 信息学院通知
|
||||
|
||||
<Route author="wzc-blog" example="/bjfu/it/xyxw" path="/bjfu/it/:type" :paramsDesc="['通知类别']">
|
||||
|
||||
| 学院新闻 | 科研动态 | 本科生培养 | 研究生培养 |
|
||||
| ---- | ---- | ----- | ----- |
|
||||
| xyxw | kydt | pydt | pydt2 |
|
||||
|
||||
</Route>
|
||||
|
||||
## 北京物资学院
|
||||
|
||||
### 通知公告
|
||||
|
|
|
|||
|
|
@ -536,11 +536,12 @@ router.get('/sayhuahuo', lazyloadRouteHandler('./routes/galgame/sayhuahuo'));
|
|||
// 终点分享
|
||||
router.get('/zdfx', lazyloadRouteHandler('./routes/galgame/zdfx'));
|
||||
|
||||
// 北京林业大学
|
||||
router.get('/bjfu/grs', lazyloadRouteHandler('./routes/universities/bjfu/grs'));
|
||||
router.get('/bjfu/kjc', lazyloadRouteHandler('./routes/universities/bjfu/kjc'));
|
||||
router.get('/bjfu/jwc/:type', lazyloadRouteHandler('./routes/universities/bjfu/jwc/index'));
|
||||
router.get('/bjfu/news/:type', lazyloadRouteHandler('./routes/universities/bjfu/news/index'));
|
||||
// 北京林业大学 migrated to v2
|
||||
// router.get('/bjfu/grs', lazyloadRouteHandler('./routes/universities/bjfu/grs'));
|
||||
// router.get('/bjfu/kjc', lazyloadRouteHandler('./routes/universities/bjfu/kjc'));
|
||||
// router.get('/bjfu/jwc/:type', lazyloadRouteHandler('./routes/universities/bjfu/jwc/index'));
|
||||
// router.get('/bjfu/news/:type', lazyloadRouteHandler('./routes/universities/bjfu/news/index'));
|
||||
// router.get('/bjfu/it/:type', lazyloadRouteHandler('./routes/universities/bjfu/it/index'));
|
||||
|
||||
// 北京理工大学
|
||||
router.get('/bit/jwc', lazyloadRouteHandler('./routes/universities/bit/jwc/jwc'));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
const util = require('./utils');
|
||||
const iconv = require('iconv-lite'); // 转码
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const type = ctx.params.type;
|
||||
let title, path;
|
||||
switch (type) {
|
||||
case 'kydt':
|
||||
title = '科研动态';
|
||||
path = 'kyxz/kydt/';
|
||||
break;
|
||||
case 'pydt':
|
||||
title = '本科生培养';
|
||||
path = 'bkspy/pydt/';
|
||||
break;
|
||||
case 'pydt2':
|
||||
title = '研究生培养';
|
||||
path = 'yjspy/pydt2/';
|
||||
break;
|
||||
default:
|
||||
title = '学院新闻';
|
||||
path = 'xyxw/';
|
||||
}
|
||||
const base = 'http://it.bjfu.edu.cn/' + path;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
responseType: 'buffer', // 转码
|
||||
url: base,
|
||||
});
|
||||
|
||||
const data = iconv.decode(response.data, 'gb2312'); // 转码
|
||||
const $ = cheerio.load(data);
|
||||
|
||||
// const list = $('div[item-content]').slice(0, 10).get();
|
||||
|
||||
const list = $('.item-content').get();
|
||||
|
||||
const result = await util.ProcessFeed(base, list, ctx.cache); // 感谢@hoilc指导
|
||||
|
||||
ctx.state.data = {
|
||||
title: '北林信息 - ' + title,
|
||||
link: 'http://it.bjfu.edu.cn/' + path,
|
||||
description: '北京林业大学信息学院 - ' + title,
|
||||
item: result,
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
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');
|
||||
|
||||
// 完整文章页
|
||||
async function load(link) {
|
||||
const response = await got.get(link, {
|
||||
responseType: 'buffer',
|
||||
});
|
||||
|
||||
const data = iconv.decode(response.data, 'gb2312'); // 转码
|
||||
|
||||
// 加载文章内容
|
||||
const $ = cheerio.load(data);
|
||||
|
||||
// 解析日期
|
||||
const pubDate = timezone(
|
||||
parseDate(
|
||||
$('.template-head-info')
|
||||
.text()
|
||||
.match(/\d{4}-\d{2}-\d{2}/)
|
||||
),
|
||||
+8
|
||||
);
|
||||
|
||||
// 提取内容
|
||||
const description = $('.template-body').html();
|
||||
|
||||
// 返回解析的结果
|
||||
return { description, pubDate };
|
||||
}
|
||||
|
||||
const ProcessFeed = async (base, list, caches) =>
|
||||
// 使用 Promise.all() 进行 async 并发
|
||||
await Promise.all(
|
||||
// 遍历每一篇文章
|
||||
list.map(async (item) => {
|
||||
const $ = cheerio.load(item);
|
||||
|
||||
const $title = $('a');
|
||||
// 还原相对链接为绝对链接
|
||||
const itemUrl = new URL($title.attr('href'), base).href; // 感谢@hoilc指导
|
||||
|
||||
// 列表上提取到的信息
|
||||
const single = {
|
||||
title: $title.text(),
|
||||
link: itemUrl,
|
||||
author: '北林信息',
|
||||
guid: itemUrl,
|
||||
};
|
||||
|
||||
// 使用tryGet方法从缓存获取内容。
|
||||
// 当缓存中无法获取到链接内容的时候,则使用load方法加载文章内容。
|
||||
const other = await caches.tryGet(itemUrl, async () => await load(itemUrl));
|
||||
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return { ...single, ...other };
|
||||
})
|
||||
);
|
||||
module.exports = {
|
||||
ProcessFeed,
|
||||
};
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
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');
|
||||
|
||||
// 完整文章页
|
||||
async function load(link) {
|
||||
|
|
@ -14,16 +16,15 @@ async function load(link) {
|
|||
const $ = cheerio.load(data);
|
||||
|
||||
// 解析日期
|
||||
const date = new Date(
|
||||
$('div #con_djl')
|
||||
.text()
|
||||
.match(/\d{4}-\d{2}-\d{2}/)
|
||||
const pubDate = timezone(
|
||||
parseDate(
|
||||
$('div #con_djl')
|
||||
.text()
|
||||
.match(/\d{4}-\d{2}-\d{2}/)
|
||||
),
|
||||
+8
|
||||
);
|
||||
|
||||
const timeZone = 8;
|
||||
const serverOffset = date.getTimezoneOffset() / 60;
|
||||
const pubDate = new Date(date.getTime() - 60 * 60 * 1000 * (timeZone + serverOffset)).toUTCString();
|
||||
|
||||
// 提取内容
|
||||
const description = $('#con_c').html();
|
||||
|
||||
|
|
@ -54,7 +55,7 @@ const ProcessFeed = (base, list, caches) =>
|
|||
const other = await caches.tryGet(itemUrl, () => load(itemUrl));
|
||||
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return Promise.resolve(Object.assign({}, single, other));
|
||||
return { ...single, ...other };
|
||||
})
|
||||
);
|
||||
module.exports = {
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
'/grs': ['markmingjie'],
|
||||
'/it/:type': ['wzc-blog'],
|
||||
'/jwc/:type': ['markmingjie'],
|
||||
'/kjc': ['markmingjie'],
|
||||
'/news/:type': ['markmingjie'],
|
||||
};
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
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');
|
||||
|
||||
// 完整文章页
|
||||
async function load(link) {
|
||||
|
|
@ -14,16 +16,15 @@ async function load(link) {
|
|||
const $ = cheerio.load(data);
|
||||
|
||||
// 解析日期
|
||||
const date = new Date(
|
||||
$('.article')
|
||||
.text()
|
||||
.match(/\d{4}-\d{2}-\d{2}/)
|
||||
const pubDate = timezone(
|
||||
parseDate(
|
||||
$('.article')
|
||||
.text()
|
||||
.match(/\d{4}\/\d{2}\/\d{2}/)
|
||||
),
|
||||
+8
|
||||
);
|
||||
|
||||
const timeZone = 8;
|
||||
const serverOffset = date.getTimezoneOffset() / 60;
|
||||
const pubDate = new Date(date.getTime() - 60 * 60 * 1000 * (timeZone + serverOffset)).toUTCString();
|
||||
|
||||
// 提取内容
|
||||
const description = $('.article_con').html();
|
||||
|
||||
|
|
@ -54,7 +55,7 @@ const ProcessFeed = (base, list, caches) =>
|
|||
const other = await caches.tryGet(itemUrl, () => load(itemUrl));
|
||||
|
||||
// 合并解析后的结果集作为该篇文章最终的输出结果
|
||||
return Promise.resolve(Object.assign({}, single, other));
|
||||
return { ...single, ...other };
|
||||
})
|
||||
);
|
||||
module.exports = {
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
module.exports = {
|
||||
'bjfu.edu.cn': {
|
||||
_name: '北京林业大学',
|
||||
graduate: [
|
||||
{
|
||||
title: '研究生院培养动态',
|
||||
docs: 'https://docs.rsshub.app/university.html#bei-jing-lin-ye-da-xue',
|
||||
source: '/',
|
||||
target: '/bjfu/grs',
|
||||
},
|
||||
],
|
||||
it: [
|
||||
{
|
||||
title: '信息学院通知',
|
||||
docs: 'https://docs.rsshub.app/university.html#bei-jing-lin-ye-da-xue',
|
||||
source: '/:type/index.html',
|
||||
target: '/bjfu/it/:type',
|
||||
},
|
||||
],
|
||||
jwc: [
|
||||
{
|
||||
title: '教务处通知公告',
|
||||
docs: 'https://docs.rsshub.app/university.html#bei-jing-lin-ye-da-xue',
|
||||
source: '/:type/index.html',
|
||||
target: '/bjfu/jwc/:type',
|
||||
},
|
||||
],
|
||||
kyc: [
|
||||
{
|
||||
title: '科技处通知公告',
|
||||
docs: 'https://docs.rsshub.app/university.html#bei-jing-lin-ye-da-xue',
|
||||
source: '/',
|
||||
target: '/bjfu/kjc',
|
||||
},
|
||||
],
|
||||
news: [
|
||||
{
|
||||
title: '绿色新闻网',
|
||||
docs: 'https://docs.rsshub.app/university.html#bei-jing-lin-ye-da-xue',
|
||||
source: '/:type/index.html',
|
||||
target: '/bjfu/news/:type',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
module.exports = (router) => {
|
||||
router.get('/grs', require('./grs'));
|
||||
router.get('/it/:type', require('./it/index'));
|
||||
router.get('/jwc/:type', require('./jwc/index'));
|
||||
router.get('/kjc', require('./kjc'));
|
||||
router.get('/news/:type', require('./news/index'));
|
||||
};
|
||||
Loading…
Reference in New Issue