From d07d13d41f0641737a738632e7e0d4fa7ee647c8 Mon Sep 17 00:00:00 2001 From: SettingDust Date: Sat, 13 Oct 2018 18:37:14 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A4=A7=E8=BF=9E=E5=A4=A7=E5=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 5 +++ routes/universities/dlu/jiaowu/news.js | 46 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 routes/universities/dlu/jiaowu/news.js diff --git a/docs/README.md b/docs/README.md index 00c4e2ba4..744d10eff 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1255,6 +1255,11 @@ category 列表: +### 大连大学 + + + + ## 传统媒体 ### 央视新闻 diff --git a/routes/universities/dlu/jiaowu/news.js b/routes/universities/dlu/jiaowu/news.js new file mode 100644 index 000000000..046c81d57 --- /dev/null +++ b/routes/universities/dlu/jiaowu/news.js @@ -0,0 +1,46 @@ +const axios = require('../../../../utils/axios'); +const iconv = require('iconv-lite'); +const cheerio = require('cheerio'); +const resolve_url = require('url').resolve; + +const base_url = 'http://jwc1.dlu.edu.cn/'; + +// const map = { +// 2: '/gsgg.htm', +// 3: '/jwtz.htm', +// 4: '/jwwj.htm', +// 5: '/xxwj.htm' +// }; + +module.exports = async (ctx) => { + // const type = ctx.params.type || '2'; + // const link = `${base_url}${map[type]}`; + + const response = await axios({ + method: 'get', + url: base_url, + responseType: 'arraybuffer', + headers: { + Referer: base_url, + }, + }); + + const $ = cheerio.load(iconv.decode(response.data, 'utf-8')); + + ctx.state.data = { + link: base_url, + title: '大连大学教务处', + item: $('td[valign="top"]>table[cellspacing="3"][width="100%"] tr') + .map((_, elem) => ({ + link: resolve_url(base_url, $('a', elem).attr('href')), + title: $('a', elem).attr('title'), + pubDate: new Date( + new Date().getFullYear() + '-' + + $('[class*="timestyle"]', elem) + .text() + .replace('/', '-') + ).toUTCString(), + })) + .get(), + }; +}; From 59f4d83a9384e95a283cec441b657d6b4a45d2f1 Mon Sep 17 00:00:00 2001 From: SettingDust Date: Sat, 13 Oct 2018 19:01:56 +0800 Subject: [PATCH 2/6] Format code --- routes/universities/dlu/jiaowu/news.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/universities/dlu/jiaowu/news.js b/routes/universities/dlu/jiaowu/news.js index 046c81d57..8aba3a3ed 100644 --- a/routes/universities/dlu/jiaowu/news.js +++ b/routes/universities/dlu/jiaowu/news.js @@ -11,7 +11,6 @@ const base_url = 'http://jwc1.dlu.edu.cn/'; // 4: '/jwwj.htm', // 5: '/xxwj.htm' // }; - module.exports = async (ctx) => { // const type = ctx.params.type || '2'; // const link = `${base_url}${map[type]}`; @@ -19,6 +18,7 @@ module.exports = async (ctx) => { const response = await axios({ method: 'get', url: base_url, + // url:link, responseType: 'arraybuffer', headers: { Referer: base_url, From 119188b62427f94023124dec939e15c4477e7f64 Mon Sep 17 00:00:00 2001 From: SettingDust Date: Sat, 13 Oct 2018 19:05:06 +0800 Subject: [PATCH 3/6] Format code --- routes/universities/dlu/jiaowu/news.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/routes/universities/dlu/jiaowu/news.js b/routes/universities/dlu/jiaowu/news.js index 8aba3a3ed..69b21957d 100644 --- a/routes/universities/dlu/jiaowu/news.js +++ b/routes/universities/dlu/jiaowu/news.js @@ -35,10 +35,11 @@ module.exports = async (ctx) => { link: resolve_url(base_url, $('a', elem).attr('href')), title: $('a', elem).attr('title'), pubDate: new Date( - new Date().getFullYear() + '-' + - $('[class*="timestyle"]', elem) - .text() - .replace('/', '-') + new Date().getFullYear() + + '-' + + $('[class*="timestyle"]', elem) + .text() + .replace('/', '-') ).toUTCString(), })) .get(), From 8411b9889b77989fb4f8b86fd718282f67ae6566 Mon Sep 17 00:00:00 2001 From: SettingDust Date: Sun, 14 Oct 2018 18:03:24 +0800 Subject: [PATCH 4/6] Add DLU router --- router.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/router.js b/router.js index c88aadbdb..270546ef6 100644 --- a/router.js +++ b/router.js @@ -563,6 +563,9 @@ router.get('/sdu/cmse/:type?', require('./routes/universities/sdu/cmse')); router.get('/sdu/mech/:type?', require('./routes/universities/sdu/mech')); router.get('/sdu/epe/:type?', require('./routes/universities/sdu/epe')); +// 大连大学 +router.get('/dlu/jiaowu/news', require('./routes/universities/dlu/jiaowu/news')); + // ifanr router.get('/ifanr/:channel?', require('./routes/ifanr/index')); From 0bc9e0a62804b04f3d84ccc5452db5bf0ae0929c Mon Sep 17 00:00:00 2001 From: SettingDust Date: Sun, 14 Oct 2018 18:53:50 +0800 Subject: [PATCH 5/6] Bangumi topic --- docs/README.md | 2 ++ router.js | 1 + routes/bangumi/group/topic.js | 27 +++++++++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 routes/bangumi/group/topic.js diff --git a/docs/README.md b/docs/README.md index 676f66998..c672fa037 100644 --- a/docs/README.md +++ b/docs/README.md @@ -840,6 +840,8 @@ GitHub 官方也提供了一些 RSS: + + ### 米哈游 diff --git a/router.js b/router.js index caf3d9753..b07a345dc 100644 --- a/router.js +++ b/router.js @@ -118,6 +118,7 @@ router.get('/bangumi/calendar/today', require('./routes/bangumi/calendar/today') router.get('/bangumi/subject/:id/:type', require('./routes/bangumi/subject')); router.get('/bangumi/person/:id', require('./routes/bangumi/person')); router.get('/bangumi/topic/:id', require('./routes/bangumi/group/reply.js')); +router.get('/bangumi/group/:id', require('./routes/bangumi/group/topic.js')); // 微博 router.get('/weibo/user/:uid', require('./routes/weibo/user')); diff --git a/routes/bangumi/group/topic.js b/routes/bangumi/group/topic.js new file mode 100644 index 000000000..717f2a26d --- /dev/null +++ b/routes/bangumi/group/topic.js @@ -0,0 +1,27 @@ +const axios = require('../../../utils/axios'); +const cheerio = require('cheerio'); +const DateTime = require('luxon').DateTime; +const resolve_url = require('url').resolve; + +const base_url = 'https://bgm.tv/'; + +module.exports = async (ctx) => { + const groupID = ctx.params.id; + const link = 'https://bgm.tv/group/' + groupID + '/forum'; + const html = (await axios.get(link)).data; + const $ = cheerio.load(html); + const title = 'Bangumi - ' + $('.SecondaryNavTitle').text(); + + ctx.state.data = { + title: `${title}`, + link: link, + item: $('.topic_list .topic') + .map((_, elem) => ({ + link: resolve_url(base_url, $('.subject a', elem).attr('href')), + title: $('.subject a', elem).attr('title'), + pubDate: DateTime.fromFormat($('.time', elem).text(), 'yyyy-L-dd'), + description: 'Author: ' + $('.author a', elem).text() + '
' + 'Replay: ' + $('.posts', elem).text(), + })) + .get(), + }; +}; From 8b4a8609f29441f1f3c914ad27c8e8334d3ca7eb Mon Sep 17 00:00:00 2001 From: SettingDust Date: Mon, 15 Oct 2018 13:40:47 +0800 Subject: [PATCH 6/6] Bangumi Eps --- docs/README.md | 2 ++ router.js | 1 + routes/bangumi/subject/ep.js | 26 ++++++++++++++++++++++++++ routes/bangumi/subject/index.js | 31 ++++++++++++++++++------------- 4 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 routes/bangumi/subject/ep.js diff --git a/docs/README.md b/docs/README.md index c672fa037..d2b19a23e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -830,6 +830,8 @@ GitHub 官方也提供了一些 RSS: + + diff --git a/router.js b/router.js index b07a345dc..e46c05875 100644 --- a/router.js +++ b/router.js @@ -119,6 +119,7 @@ router.get('/bangumi/subject/:id/:type', require('./routes/bangumi/subject')); router.get('/bangumi/person/:id', require('./routes/bangumi/person')); router.get('/bangumi/topic/:id', require('./routes/bangumi/group/reply.js')); router.get('/bangumi/group/:id', require('./routes/bangumi/group/topic.js')); +router.get('/bangumi/subject/:id', require('./routes/bangumi/subject')); // 微博 router.get('/weibo/user/:uid', require('./routes/weibo/user')); diff --git a/routes/bangumi/subject/ep.js b/routes/bangumi/subject/ep.js new file mode 100644 index 000000000..3b6d16ffa --- /dev/null +++ b/routes/bangumi/subject/ep.js @@ -0,0 +1,26 @@ +const axios = require('../../../utils/axios'); +const DateTime = require('luxon').DateTime; + +module.exports = async (subjectID) => { + const url = `https://api.bgm.tv/subject/${subjectID}/ep`; + const epsInfo = (await axios.get(url)).data; + const activeEps = []; + + epsInfo.eps.map((e) => { + if (e.status !== 'NA') { + activeEps.push(e); + } + }); + + return { + title: `${epsInfo.name_cn}的Bangumi章节`, + link: `https://bgm.tv/subject/${subjectID}`, + item: activeEps.map((e) => ({ + title: e.name_cn, + description: e.desc, + pubDate: DateTime.fromFormat(e.airdate, 'yyyy-L-dd'), + guid: e.id, + link: e.url, + })), + }; +}; diff --git a/routes/bangumi/subject/index.js b/routes/bangumi/subject/index.js index 3b111e8d1..8eb61a088 100644 --- a/routes/bangumi/subject/index.js +++ b/routes/bangumi/subject/index.js @@ -1,22 +1,27 @@ const getComments = require('./comments.js'); const getFromAPI = require('./offcial-subject-api.js'); +const getEps = require('./ep.js'); + module.exports = async (ctx) => { const id = ctx.params.id; let response; - switch (ctx.params.type) { - case 'comments': - response = await getComments(id, Number(ctx.request.query.minLength) || 0); - break; - case 'blogs': - response = await getFromAPI('blog')(id); - break; - case 'topics': - response = await getFromAPI('topic')(id); - break; - default: - throw Error(`暂不支持对${ctx.params.type}的订阅`); + if (ctx.params.type) { + switch (ctx.params.type) { + case 'comments': + response = await getComments(id, Number(ctx.request.query.minLength) || 0); + break; + case 'blogs': + response = await getFromAPI('blog')(id); + break; + case 'topics': + response = await getFromAPI('topic')(id); + break; + default: + throw Error(`暂不支持对${ctx.params.type}的订阅`); + } + } else { + response = await getEps(id); } - ctx.state.data = response; };