diff --git a/lib/routes/xjtu/dean.ts b/lib/routes/xjtu/dean.ts index f1bb553b2..3f49e36be 100644 --- a/lib/routes/xjtu/dean.ts +++ b/lib/routes/xjtu/dean.ts @@ -1,6 +1,6 @@ -import { Route } from '@/types'; +import { Route, Data, DataItem } from '@/types'; import cache from '@/utils/cache'; -import got from '@/utils/got'; +import ofetch from '@/utils/ofetch'; import { load } from 'cheerio'; import { parseDate } from '@/utils/parse-date'; import timezone from '@/utils/timezone'; @@ -32,8 +32,10 @@ const parseContent = (htmlString) => { export const route: Route = { path: '/dean/:subpath{.+}', - name: 'Unknown', - maintainers: [], + name: '教务处', + maintainers: ['hoilc'], + example: '/xjtu/dean/jxxx/jxtz2', + description: '打开一个类似 的网址,在 `.cn` 后的内容就是 subpath,此例中是 `jxxx/jxtz2`', handler, }; @@ -43,38 +45,35 @@ async function handler(ctx) { const url = `http://dean.xjtu.edu.cn/${subpath.replaceAll('.htm', '')}.htm`; const base = url.split('/').slice(0, -1).join('/'); - const list_response = await got(url); - const $ = load(list_response.data); + const list_response = await ofetch(url); + const $ = load(list_response); - const subname = $('em.ma-nav a') - .slice(1) - .map(function () { - return $(this).text(); - }) - .get() + const subName = $('#ny-main > div.ny-tit > div > span') + .toArray() + .map((item) => $(item).text()) .join(' - '); - const list = $('.list_main_content > .list-li') + const list = $('#ny-main > div.ny.wp > ul > li') .toArray() - .map((item) => { + .map((item: any) => { item = $(item); - const title = item.find('a').attr('title'); + const title = item.find('a').text(); const link = new URL(item.find('a').attr('href'), base).href; return { title, link, - pubDate: timezone(parseDate(item.find('.list_time').text(), 'YYYY-MM-DD'), +8), + pubDate: timezone(parseDate(item.find('span').text(), 'YYYY-MM-DD'), +8), }; }); const out = await Promise.all( - list.map((item) => - cache.tryGet(item.link, async () => { + list.map((item: DataItem) => + cache.tryGet(item.link!, async () => { try { - const response = await got(item.link); - const result = parseContent(response.data); + const response = await ofetch(item.link!); + const result = parseContent(response); - item.description = result.description; + item.description = result.description ?? undefined; item.author = result.author; } catch { return item; @@ -85,8 +84,8 @@ async function handler(ctx) { ); return { - title: `西安交大教务处 - ${subname}`, + title: `西安交大教务处 - ${subName}`, link: url, item: out.filter((item) => item !== ''), - }; + } as Data; }