diff --git a/docs/university.md b/docs/university.md
index 2f851d0dc..f1f8afb10 100644
--- a/docs/university.md
+++ b/docs/university.md
@@ -1494,7 +1494,7 @@ type 列表:
### 清华大学招聘信息
-
+
## 山东大学
diff --git a/lib/routes/universities/thu/career.js b/lib/routes/universities/thu/career.js
index 3b3c6d06a..0ed2adf58 100644
--- a/lib/routes/universities/thu/career.js
+++ b/lib/routes/universities/thu/career.js
@@ -1,13 +1,33 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
-const resolve_url = require('url').resolve;
+const { parseDate } = require('@/utils/parse-date');
const base_url = 'https://career.cic.tsinghua.edu.cn/';
+const route = 'xsglxt/f/jyxt/anony/xxfb';
module.exports = async (ctx) => {
- const page = 1;
+ const list = await fetchPage(1);
- const route = 'xsglxt/f/jyxt/anony/xxfb';
+ const title = '招聘信息';
+ ctx.state.data = {
+ title: '清华大学 - ' + title,
+ link: base_url + route,
+ description: '清华大学学生职业发展指导中心 - ' + title,
+ item: await Promise.all(
+ list.map(
+ async (item) =>
+ await ctx.cache.tryGet(item.link, async () => {
+ const res = await got.get(item.link);
+ const content = cheerio.load(res.data);
+ item.description = content("div.sideleft.left, div.content.teacher").html();
+ return item;
+ })
+ )
+ ),
+ };
+};
+
+async function fetchPage(page) {
const response = await got({
method: 'post',
url: base_url + route,
@@ -23,18 +43,16 @@ module.exports = async (ctx) => {
});
const $ = cheerio.load(response.data);
-
- const title = '招聘信息';
- ctx.state.data = {
- title: '清华大学 - ' + title,
- link: base_url,
- description: '清华大学学生职业发展指导中心 - ' + title,
- item: $('#ts_div .list li')
- .map((_, elem) => ({
- link: resolve_url(base_url, $('a', elem).attr('ahref')),
- title: $('a', elem).text(),
- pubDate: new Date($('span', elem).text()).toUTCString(),
- }))
- .get(),
- };
-};
+ return $('#ts_div .list li')
+ .map((_, item) => {
+ item = $(item);
+ const a = item.find('a');
+ const date = parseDate(item.find('span').text());
+ return {
+ title: a.text(),
+ link: new URL(a.attr('ahref'), base_url),
+ pubDate: date,
+ };
+ })
+ .get();
+}