ADD: 中山大学 - 数据科学与计算机学院 - 动态 (#1172)

* t-guru: added support for models & categories

* t-guru: fixed title

* added J-Bus support

* ADD: SYSU SDCS
This commit is contained in:
Zhu Chu 2018-11-21 00:54:29 +08:00 committed by DIYgod
parent 01c058e7d3
commit 0aab5a175f
3 changed files with 62 additions and 0 deletions

View File

@ -1560,6 +1560,10 @@ category 列表:
</route>
### 中山大学
<route name="数据科学与计算机学院动态" author="MegrezZhu" example="/sysu/sdcs" path="/sysu/sdcs" />
## 传统媒体
### 央视新闻

View File

@ -853,6 +853,9 @@ router.get('/javbus/western/home', require('./routes/javbus/western/home'));
router.get('/javbus/western/genre/:gid', require('./routes/javbus/western/genre'));
router.get('/javbus/western/star/:sid', require('./routes/javbus/western/star'));
// 中山大学
router.get('/sysu/sdcs', require('./routes/universities/sysu/sdcs'));
// 動畫瘋
router.get('/anigamer/new_anime', require('./routes/anigamer/new_anime'));
router.get('/anigamer/anime/:sn', require('./routes/anigamer/anime'));

View File

@ -0,0 +1,55 @@
const axios = require('../../../utils/axios');
const { load } = require('cheerio');
const { resolve } = require('url');
const base = 'http://sdcs.sysu.edu.cn/';
module.exports = async (ctx) => {
const { data } = await axios.get('http://sdcs.sysu.edu.cn/');
const $ = load(data);
const urls = $('.view-content li > a')
.map((_, ele) => $(ele).attr('href'))
.toArray()
.map((path) => path.match(/\/content\/(\d+)/)[1]) // extract article-id
.sort()
.reverse() // sort by article-id (or to say, date), latest first
.map((aid) => resolve(base, `/content/${aid}`));
ctx.state.data = {
title: '中山大学 - 数据科学与计算机学院',
link: 'http://sdcs.sysu.edu.cn/',
description: '中山大学 - 数据科学与计算机学院',
item: await getDetails(ctx.cache, urls),
};
};
const getDetails = (cache, urls) => Promise.all(urls.map((url) => cache.tryGet(url, () => getDetail(url), 24 * 60 * 60)));
const timezone = 8;
const serverOffset = new Date().getTimezoneOffset() / 60;
const shiftTimezone = (date) => new Date(date.getTime() - 60 * 60 * 1000 * (timezone + serverOffset)).toUTCString();
const getDetail = async (url) => {
const { data } = await axios.get(url);
const $ = load(data);
// transforming images
$('.content img').each((_, ele) => {
$(ele).attr('referrerpolicy', 'no-referrer');
$(ele).attr('src', resolve(base, $(ele).attr('src')));
});
return {
title: $('section > h1').text(),
description: $('.content').html(),
link: url,
pubDate: shiftTimezone(
new Date(
$('.submitted-by')
.text()
.match(/(\d+\/\d+\/\d+)/)[1]
)
),
};
};