UNPKG

rsshub

Version:
481 lines (470 loc) 16.7 kB
import { Route } from '@/types'; import got from '@/utils/got'; import { load } from 'cheerio'; import iconv from 'iconv-lite'; import { parseDate } from '@/utils/parse-date'; // import logger from '@/utils/logger'; export const route: Route = { path: '/yjsy/news/:type', categories: ['university'], example: '/ustb/yjsy/news/all', parameters: { type: '文章类别' }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['gs.ustb.edu.cn/:type'], }, ], name: '研究生院', maintainers: ['DA1Y1'], handler, description: `| 北京科技大学研究生院 | 土木与资源工程学院 | 能源与环境工程学院 | 冶金与生态工程学院 | 材料科学与工程学院 | 机械工程学院 | 自动化学院 | 计算机与通信工程学院 | 数理学院 | 化学与生物工程学院 | 经济管理学院 | 文法学院 | 马克思主义学院 | 外国语学院 | 国家材料服役安全科学中心 | 新金属材料国家重点实验室 | 工程技术研究院 | 钢铁共性技术协同创新中心 | 钢铁冶金新技术国家重点实验室 | 新材料技术研究院 | 科技史与文化遗产研究院 | 顺德研究生院 | | -------------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------ | ---------- | -------------------- | -------- | ------------------ | ------------ | -------- | -------------- | ---------- | ------------------------ | ------------------------ | -------------- | ------------------------ | ---------------------------- | ---------------- | ---------------------- | ------------ | | all | cres | seee | metall | mse | me | saee | scce | shuli | huasheng | sem | wenfa | marx | sfs | ncms | skl | iet | cicst | slam | adma | ihmm | sd |`, }; async function handler(ctx) { const type = ctx.req.param('type'); const struct = { all: { selector: { list: '.plist li', }, timeSelector: { list: '.datatime', }, titleSelector: { list: '.adaptitle', }, linkSelector: { list: 'li a', }, url: 'http://gs.ustb.edu.cn/index.php/cms/item-list-category-1049?role=3', link: 'http://gs.ustb.edu.cn/index.php/cms/item-list-category-1049?role=3', name: '最新通知 - 北京科技大学研究生院', }, cres: { selector: { list: '.centerright_center li', }, timeSelector: { list: '.fright', }, titleSelector: { list: '.fleft', }, linkSelector: { list: 'li a', }, url: 'http://cres.ustb.edu.cn/n44/n47/', link: 'http://cres.ustb.edu.cn/n44/n47/', name: '通知公告 - 土木与资源工程学院 - 北京科技大学研究生院', }, seee: { selector: { list: '.list_left2 li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'http://seee.ustb.edu.cn/xinwengonggao/tongzhigonggao/', link: 'http://seee.ustb.edu.cn/xinwengonggao/tongzhigonggao/', name: '通知公告 - 能源与环境工程学院 - 北京科技大学研究生院', }, metall: { selector: { list: '#news-list-title li', }, timeSelector: { list: '.date-size', }, titleSelector: { list: '.info-size', }, linkSelector: { list: 'li a', }, url: 'https://metall.ustb.edu.cn/gg/index.htm', link: 'https://metall.ustb.edu.cn/gg/index.htm', name: '通知公告 - 冶金与生态工程学院 - 北京科技大学研究生院', }, mse: { selector: { list: '.ky li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'http://mse.ustb.edu.cn/xueyuangonggao/', link: 'http://mse.ustb.edu.cn/xueyuangonggao/', name: '学院公告 - 材料科学与工程学院 - 北京科技大学研究生院', }, me: { selector: { list: '.list li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'http://me.ustb.edu.cn/xinwengonggao/tongzhigonggao/', link: 'http://me.ustb.edu.cn/xinwengonggao/tongzhigonggao/', name: '通知公告 - 机械工程学院 -北京科技大学研究生院', }, saee: { selector: { list: '.sidebar_b a:gt(1):lt(15)', }, timeSelector: { list: '.list_time', }, titleSelector: { list: '.list_timu', }, linkSelector: { list: 'a', }, url: 'http://saee.ustb.edu.cn/gonggaogongshi/', link: 'http://saee.ustb.edu.cn/gonggaogongshi/', name: '通知公告 - 自动化学院 - 北京科技大学研究生院', }, scce: { selector: { list: '.lead li', }, timeSelector: { list: '.practice_list_right', }, titleSelector: { list: '.practice_list_left', }, linkSelector: { list: 'li a', }, url: 'http://scce.ustb.edu.cn/xinwentongzhi/tongzhigonggao/', link: 'http://scce.ustb.edu.cn/xinwentongzhi/tongzhigonggao/', name: '通知公告 - 计算机与通信工程学院 - 北京科技大学研究生院', }, shuli: { selector: { list: '.jy-lb li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li p', }, linkSelector: { list: 'li a', }, url: 'http://shuli.ustb.edu.cn/tongzhigonggao/', link: 'http://shuli.ustb.edu.cn/tongzhigonggao/', name: '通知公告 - 数理学院 - 北京科技大学研究生院', }, huasheng: { selector: { list: '.main_r li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li p', }, linkSelector: { list: 'li a', }, url: 'http://huasheng.ustb.edu.cn/tongzhigonggao/', link: 'http://huasheng.ustb.edu.cn/tongzhigonggao/', name: '通知公告 - 化学与生物工程学院 - 北京科技大学研究生院', }, sem: { selector: { list: '.sub_002 li', }, timeSelector: { list: '.time', }, titleSelector: { list: '.title', }, linkSelector: { list: 'li a', }, url: 'https://sem.ustb.edu.cn/xwzx/tzgg/index.htm', link: 'https://sem.ustb.edu.cn/xwzx/tzgg/index.htm', name: '通知公告 - 经济管理学院 - 北京科技大学研究生院', }, wenfa: { selector: { list: '.list-content-box .specialDate_fontBox', }, timeSelector: { list: '.specialTime', }, titleSelector: { list: '.specialTime_a', }, linkSelector: { list: 'div a', }, url: 'https://wenfa.ustb.edu.cn/tzgg2/tzgg/index.htm', link: 'https://wenfa.ustb.edu.cn/tzgg2/tzgg/index.htm', name: '通知公告 - 文法学院 - 北京科技大学研究生院', }, marx: { selector: { list: '.list_l li', }, timeSelector: { list: '.time2', }, titleSelector: { list: '.list_title', }, linkSelector: { list: 'li a', }, url: 'http://marx.ustb.edu.cn/tongzhigonggao/', link: 'http://marx.ustb.edu.cn/tongzhigonggao/', name: '通知公告 - 马克思主义学院 - 北京科技大学研究生院', }, sfs: { selector: { list: '.list-unstyled li', }, timeSelector: { list: '', }, titleSelector: { list: '.text-overflow', }, linkSelector: { list: 'li a', }, url: 'http://sfs.ustb.edu.cn/cn/xinwenzhongxin/tongzhigonggao1/', link: 'http://sfs.ustb.edu.cn/cn/xinwenzhongxin/tongzhigonggao1/', name: '通知公告 - 外国语学院 - 北京科技大学研究生院', }, ncms: { selector: { list: '.list_l li', }, timeSelector: { list: '.right', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'http://ncms.ustb.edu.cn/tongzhigonggao/', link: 'http://ncms.ustb.edu.cn/tongzhigonggao/', name: '通知公告 - 国家材料服役安全科学中心 - 北京科技大学研究生院', }, skl: { selector: { list: '.cultureStudent_top li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li p', }, linkSelector: { list: 'li a', }, url: 'https://skl.ustb.edu.cn/xwzx/tzgg/index.htm', link: 'https://skl.ustb.edu.cn/xwzx/tzgg/index.htm', name: '通知公告 - 新金属材料国家重点实验室 - 北京科技大学研究生院', }, iet: { selector: { list: 'table tr td table tr td .liststyle:lt(20)', }, timeSelector: { list: '.notestyle', }, titleSelector: { list: 'td a', }, linkSelector: { list: 'td a', }, url: 'http://iet.ustb.edu.cn/articlelist.asp?cateID=1', link: 'http://iet.ustb.edu.cn/articlelist.asp?cateID=1', name: '通知公告 - 工程技术研究院 - 北京科技大学研究生院', }, cicst: { selector: { list: '.h_newsbox li', }, timeSelector: { list: '.time', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'http://cicst.ustb.edu.cn/tongzhigonggao/', link: 'http://cicst.ustb.edu.cn/tongzhigonggao/', name: '通知公告 - 钢铁共性技术协同创新中心 - 北京科技大学研究生院', }, slam: { selector: { list: '.list li', }, timeSelector: { list: 'li p', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'http://slam.ustb.edu.cn/slam//smvc/ListBs-articleList/SNM2015072600000000000011', link: 'http://slam.ustb.edu.cn/slam//', name: '通知公告 - 钢铁冶金新技术国家重点实验室 - 北京科技大学研究生院', }, adma: { selector: { list: '.articleList li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'https://adma.ustb.edu.cn/tzgg/index.htm', link: 'https://adma.ustb.edu.cn/tzgg/index.htm', name: '通知公告 - 新材料技术研究院 - 北京科技大学研究生院', }, ihmm: { selector: { list: '.listbox li', }, timeSelector: { list: '', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'https://ihmm.ustb.edu.cn/gg/index.htm', link: 'https://ihmm.ustb.edu.cn/gg/index.htm', name: '公告 - 科技史与文化遗产研究院 - 北京科技大学研究生院', }, sd: { selector: { list: '.news_list li', }, timeSelector: { list: 'li span', }, titleSelector: { list: 'li a', }, linkSelector: { list: 'li a', }, url: 'https://sd.ustb.edu.cn/tzgg/index.htm', link: 'https://sd.ustb.edu.cn/tzgg/index.htm', name: '通知公告 - 顺德研究生院 - 北京科技大学研究生院', }, }; // 请求 const url = struct[type].url; const response = await got({ method: 'get', responseType: 'buffer', // 转码 url, }); // 获取response const data = type === 'iet' ? iconv.decode(response.data, 'gb2312') : response.data; const $ = load(data); // logger.info("data:" + data); // 获取响应中有用的部分 const list = $(struct[type].selector.list); // logger.info("list:" + list); // 处理返回 return { title: struct[type].name, link: struct[type].link, description: '北京科技大学研究生院', item: list.toArray().map((item) => { item = $(item); // logger.info("item:" + item); // time let time = item.find($(struct[type].timeSelector.list)).text(); let date; if (time !== '') { if (time.includes('[')) { time = time.slice(1, 11); } date = parseDate(time); } // logger.info("date:" + date); // link let link = item.find($(struct[type].linkSelector.list)).attr('href'); if (link === undefined) { link = item.attr('href'); } // logger.info("link:" + link); // title let title = item.find($(struct[type].titleSelector.list)).clone().children().remove().end().text(); if (title === '') { title = item.find($(struct[type].titleSelector.list)).text(); } // logger.info("title:" + title); // logger.info("====="); // return return date === undefined ? { title, description: title, link, } : { title, description: title, link, pubDate: date, }; }), }; }