UNPKG

rsshub

Version:
211 lines (191 loc) 9.79 kB
import { DataItem, Route } from '@/types'; import ofetch from '@/utils/ofetch'; import cache from '@/utils/cache'; import { parseDate } from '@/utils/parse-date'; import timezone from '@/utils/timezone'; export const route: Route = { path: '/jk/:gid/:typeId/:sortType/:token', categories: ['university'], example: '/sicau/jk/0/0/2/8d95466cf63e537292b303cb92b5958c', parameters: { gid: '活动所属组织ID,见下表', typeId: '活动类别ID,见下表', sortType: '排序方式,见下表', token: '访问令牌,可通过示例中的令牌直接访问(会过期)', }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: true, supportBT: false, supportPodcast: false, supportScihub: false, }, name: '二课活动', maintainers: ['hualiong'], url: 'jk.sicau.edu.cn', description: ` ::: tip **本校学生**可以直接 POST \`https://jk.sicau.edu.cn/user/login/v1.0.0/snoLogin\` 从返回结果中的 \`token\` 字段拿到个人令牌,记得在url后添加以下**查询参数**: - sid: \`f1c97a0e81c24e98adb1ebdadca0699b\` - loginName: \`你的学号\` - password: \`你的i川农密码\` ::: ::: warning 由于i川农后台有请求限制,为避免一次性大量请求而被限流,每次只请求结果的第一页数据,即前20条 ::: **活动所属组织ID:** | ID | 组织 | ID | 组织 | ID | 组织 | ID | 组织 | | ---- | -------------------- | ---- | ------------------ | ---- | ---------------------- | ---- | ---------------------- | | 0 | 全部组织 | 14 | 校纪委 | 28 | 食品学院 | 42 | 经济学院 | | 1 | 管理学院 | 15 | 生命科学学院 | 29 | 环境学院 | 43 | 机电学院 | | 2 | 学生心理健康服务中心 | 16 | 水利水电学院 | 30 | 国家重点实验室 | 44 | 都江堰校区综合办后管科 | | 3 | 档案馆 | 17 | 国合处 | 31 | 党委统战部 | 45 | 园艺学院 | | 4 | 马克思主义学院 | 18 | 商旅学院 | 32 | 草业科技学院 | 46 | 资源学院 | | 5 | 都江堰校区党政办 | 19 | 风景园林学院 | 33 | 商学院 | 47 | 学生处 | | 6 | 土木工程学院 | 20 | 建筑与城乡规划学院 | 34 | 党委组织部 | 48 | 农学院 | | 7 | 林学院 | 21 | 体育学院 | 35 | 校团委 | 49 | 公共管理学院 | | 8 | 动物医学院 | 22 | 校体委 | 36 | 法学院 | 50 | 图书馆 | | 9 | 保卫处 | 23 | 校区团委 | 37 | 水稻研究所 | 51 | 校学生会 | | 10 | 理学院 | 24 | 后勤管理处 | 38 | 研究生院 | 52 | 动物科技学院 | | 11 | 艺术与传媒学院 | 25 | 教务处 | 39 | 后勤服务总公司 | 53 | 信息工程学院 | | 12 | 大学生艺术团 | 26 | 人文学院 | 40 | 招生就业处 | | | | 13 | 都江堰校区基础教学部 | 27 | 党委宣传部 | 41 | 学生社团管理与服务中心 | | | **活动类别ID:** | ID | 组织 | ID | 组织 | ID | 组织 | | ---- | ---------------- | ---- | -------------------- | ---- | -------------- | | 0 | 所有类别 | 5 | 校本文化(校规校纪) | 10 | 体质测试 | | 1 | 党团学习 | 6 | 德育—社会实践 | 11 | 文化艺术活动 | | 2 | 学生干部社会工作 | 7 | 创新创业类 | 12 | 文艺演出或讲座 | | 3 | 校院班任务 | 8 | 科技学术讲座 | 13 | 劳动教育 | | 4 | 德育(志愿公益) | 9 | 体育活动(新) | | | **排序方式:** | 即将开始 | 最新活动 | 可参与 | | ------- | -------- | -------- | | 1 | 2 | 4 | `, handler: async (ctx) => { const { gid, typeId, sortType, token } = ctx.req.param(); const $post = ofetch.create({ baseURL: 'https://jk.sicau.edu.cn/act/actInfo/v1.0.0', headers: { 'x-access-token': token }, method: 'post', }); const query = async (page: number) => await $post(`/getUserSchoolActList`, { query: { gid: gidDict[gid], typeId: typeDict[typeId], sortType, page, }, }); const res = await Promise.all([query(1), query(2)]); for (const each of res) { if (each.code !== '0') { throw new Error(each.message); } } const list: DataItem[] = [...res[0].content, ...res[1].content] .filter((e) => e.statusName !== '待发学时') .map((each) => ({ id: each.id, guid: each.id, title: each.title, image: each.logo, })); const items = await Promise.all( list.map((item) => cache.tryGet(String(item.id), async () => { const { code, message, content } = await $post(`/getActDetail?actId=${item.id}`); if (code === '0') { item.author = content.groupName; item.pubDate = timezone(parseDate(content.startDate, 'YYYY-MM-DD HH:mm:ss'), +8); item.category = [content.typeName, content.levelName]; item.description = `<img src="${item.image}" alt="${item.title}" /><p style='white-space: pre-wrap'>${content.description}</p>`; return item; } throw new Error(message); }) ) ); return { title: '二课活动 - 四川农业大学', link: 'https://jk.sicau.edu.cn/act/actInfo/v1.0.0/getUserSchoolActList', language: 'zh-cn', item: items as DataItem[], }; }, }; const typeDict = { '0': '', '1': '17a3b11f2d254518b13406ccd18a85b5', '2': '000392a845ff47d09978c6ddd6dda2d4', '3': '9ead58d01d3d424ea70b194910893660', '4': 'e233038099914313950ad9058e4c7176', '5': 'ccdec1bf8a32497998a4d2b3285e8fa0', '6': '1db34972f7b247a6a60aac15285870d5', '7': '3a230729aac44b3aa0127c8cdcf15555', '8': '0157365febe548ee86848dd58c7b8b4b', '9': 'fe94059a28e5440fb1097679b4744981', '10': '5b91902f42854301ae60d30018f8786c', '11': '1cee1aea9994489286fe2a7d42b6e21e', '12': '4f7a37aa8ca2452dbf5f44fc7cfa2679', '13': '7969c78baee34a6f90e029d95db18592', }; const gidDict = { '0': '', '1': '075c882582bf4392b5f858e18169c6fa', '2': '0b6869479c1d4e69b01afa73534ddf7e', '3': '0b9b91adfcc2494190a06b6ceb33136c', '4': '0d0ad5dca6f24f3290c5dc62c9e534bf', '5': '0e0d4803c89a419fa2c87ea415cf0efc', '6': '11944f4920c645e3936a429f4da48165', '7': '13968d883e2146febd41fea97b8e935c', '8': '16e9229a200e4644ac9d283f44dfbd8c', '9': '1838c6d0dd394ffebe5305a8efaabd24', '10': '1bb0a81892a74ca792dbf726521284bc', '11': '1cad939489de4868bcbba1366dc454e8', '12': '22ddaea411e44df68bdb614d2e97cea1', '13': '23fd994f03ca4174b364b371a67dcacd', '14': '2a1fb8567c0e4c1b93d82259b8f784f6', '15': '2a5f3f75505140cc897c2187b3dcf91a', '16': '5016d53f98164d9c81484acbbc6b761d', '17': '56e1f5bea3ab4921b2e3bb37bfbdf629', '18': '597d5baff6ab469992d4ecb54f7b4c38', '19': '607a4eefcbd549018c2e253c60b227de', '20': '61e0696b35da46a69cbd57e2a415e919', '21': '67c4d8cdaf04456eae344f01e67e0ca0', '22': '70f29b197d8945be8c6f9714a1923057', '23': '78d0b179286845e9b589cb27c5b2b3b4', '24': '7cf23874959a4827b8c15c9f7b99eb64', '25': '82d71d8ada514858ab30e5f58e64706e', '26': '89c9be371ab8498499f0b3aff520f4c4', '27': '8b459d361d4b493b918656710104a4a7', '28': '8cd045b1390146fd8d5ad155db8b59e1', '29': '8f231145f3664726beb551378e1f5d99', '30': '97062a27a31e40a7a5be49475e3df099', '31': 'ae9e85188f084cb3be8a0fa3ebf6c7b5', '32': 'b88245cc3c9c47f8ab121ad5c2fa3282', '33': 'ba368a3503274da781c1960ba084793f', '34': 'be4149fac2394326b19270e3b70fd704', '35': 'be68e601768b4e57830bbceb829a2942', '36': 'c514507d08d3415e965abf84d9dfd31b', '37': 'c7d5a7b282854f14aafb22ed69abef7a', '38': 'ca1423660dd940439af1921a5c48e521', '39': 'd09f1391b0de4667aaf8ed6313582667', '40': 'd393b583269e420f93cf7cf07ef7b694', '41': 'd79d6ef35687400da1c3106080ad294a', '42': 'd850db1a4811420f934ef7c783ba72b1', '43': 'd8f1ecac920346b79650fbd2783c9a86', '44': 'dba67112679e4df2892a8896ac2cb898', '45': 'dd7345a743c6464fafdded750c08a4d8', '46': 'dfa126fc8e494259bf3d88d61afca53e', '47': 'e1f80975b5e940f3a3e416ac45e79ce8', '48': 'ea117c42071a40b5b08423b392bc5722', '49': 'f4017020fe9a456599754c88c1d9a341', '50': 'f548b78687094c428085dfb0b064ed32', '51': 'fa5098c59a9c4db6b287744049053762', '52': 'fccf2f15e15a479ba9b5564efee436c7', '53': 'fcf30bbdd8004026ae9b447f2722aecf', };