新增:蓝桥云课课程更新/技术问答/作者发布课程 (#8639)
This commit is contained in:
parent
fcee9cd197
commit
109eed5555
|
|
@ -653,6 +653,20 @@ GitHub 官方也提供了一些 RSS:
|
|||
|
||||
<Route author="hoilc" example="/lagou/jobs/JavaScript/上海" path="/lagou/jobs/:position/:city" :paramsDesc="['职位名,可以参考[拉勾网首页](https://www.lagou.com)的职位列表', '城市名,请参考[拉勾网支持的全部城市](https://www.lagou.com/jobs/allCity.html)']" anticrawler="1"/>
|
||||
|
||||
## 蓝桥云课
|
||||
|
||||
### 最新发布的课程
|
||||
|
||||
<Route author="huhuhang" example="/lanqiao/courses/全部" path="/lanqiao/courses/:tag" :paramsDesc="['课程标签 tag 可在该页面找到:https://www.lanqiao.cn/courses/']" radar="1" rssbud="1"/>
|
||||
|
||||
### 作者发布的课程
|
||||
|
||||
<Route author="huhuhang" example="/lanqiao/author/1701267" path="/lanqiao/author/:uid" :paramsDesc="['作者 uid 可在作者主页 URL 中找到']" radar="1" rssbud="1"/>
|
||||
|
||||
### 社区最新技术问答
|
||||
|
||||
<Route author="huhuhang" example="/questions/2" path="/lanqiao/questions/:id" :paramsDesc="['topic_id 主题 id 可在社区板块 URL 中找到']" radar="1" rssbud="1"/>
|
||||
|
||||
## 洛谷
|
||||
|
||||
### 日报
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
const got = require('@/utils/got');
|
||||
const utils = require('./utils');
|
||||
const dateParser = require('@/utils/dateParser');
|
||||
const MarkdownIt = require('markdown-it');
|
||||
|
||||
async function getUserName(uid) {
|
||||
// 获取用户信息
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/users/${uid}/`,
|
||||
headers: {
|
||||
Referer: `https://www.lanqiao.cn/users/${uid}/`,
|
||||
},
|
||||
});
|
||||
|
||||
return response.data.name;
|
||||
}
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const uid = ctx.params.uid;
|
||||
const userName = await getUserName(uid);
|
||||
// 发起 HTTP GET 请求
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/users/${uid}/courses/?type=published`,
|
||||
headers: {
|
||||
Referer: `https://www.lanqiao.cn/users/${uid}/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data.results; // response.data 为 HTTP GET 请求返回的数据对象
|
||||
|
||||
const md = new MarkdownIt();
|
||||
const items = await Promise.all(
|
||||
data.map((item) =>
|
||||
ctx.cache.tryGet(`https://www.lanqiao.cn/api/v2/courses/${item.id}/`, async () => {
|
||||
const courseResponse = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/courses/${item.id}/`,
|
||||
});
|
||||
const course = courseResponse.data;
|
||||
|
||||
item.title = course.name;
|
||||
item.description = utils.courseDesc(course.picture_url, md.render(course.long_description));
|
||||
item.author = course.teacher.name;
|
||||
item.pubDate = dateParser(course.end_time);
|
||||
item.link = `https://www.lanqiao.cn/courses/${course.id}/`;
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${userName} 发布的课程`,
|
||||
// 源链接
|
||||
link: `https://www.lanqiao.cn/users/${uid}`,
|
||||
// 源说明
|
||||
description: `${userName} 发布的课程`,
|
||||
// 遍历此前获取的数据
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
const got = require('@/utils/got');
|
||||
const utils = require('./utils');
|
||||
const dateParser = require('@/utils/dateParser');
|
||||
const MarkdownIt = require('markdown-it');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const tag = ctx.params.tag;
|
||||
// 发起 HTTP GET 请求
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/courses/?sort=latest&tag=${tag}&include=name,description,picture_url,id`,
|
||||
});
|
||||
|
||||
const data = response.data.results; // response.data 为 HTTP GET 请求返回的数据对象
|
||||
const md = new MarkdownIt();
|
||||
const items = await Promise.all(
|
||||
data.map((item) =>
|
||||
ctx.cache.tryGet(`https://www.lanqiao.cn/api/v2/courses/${item.id}/`, async () => {
|
||||
const courseResponse = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/courses/${item.id}/`,
|
||||
});
|
||||
const course = courseResponse.data;
|
||||
|
||||
item.title = course.name;
|
||||
item.description = utils.courseDesc(course.picture_url, md.render(course.long_description));
|
||||
item.author = course.teacher.name;
|
||||
item.pubDate = dateParser(course.end_time);
|
||||
item.link = `https://www.lanqiao.cn/courses/${course.id}/`;
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `蓝桥云课最新发布的课程(${tag})`,
|
||||
// 源链接
|
||||
link: `https://www.lanqiao.cn/courses/?tag=${tag}`,
|
||||
// 源说明
|
||||
description: `蓝桥云课 ${tag} 标签下最新发布的课程`,
|
||||
// 遍历此前获取的数据
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
'/author/:uid': ['huhuhang'],
|
||||
'/courses/:tag': ['huhuhang'],
|
||||
'/questions/:id': ['huhuhang'],
|
||||
};
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
const got = require('@/utils/got');
|
||||
const dateParser = require('@/utils/dateParser');
|
||||
const MarkdownIt = require('markdown-it');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const id = ctx.params.id;
|
||||
// 发起 HTTP GET 请求
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/questions/?sort=created_time&topic_id=${id}`,
|
||||
headers: {
|
||||
Referer: `https://www.lanqiao.cn/questions/topic_id=${id}`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data.results; // response.data 为 HTTP GET 请求返回的数据对象
|
||||
|
||||
function filterToped(arr) {
|
||||
// 过滤置顶的帖子
|
||||
return arr.is_toped === false;
|
||||
}
|
||||
// 将 markdown 转换为 HTML
|
||||
const md = new MarkdownIt();
|
||||
const items = await Promise.all(
|
||||
data.filter(filterToped).map((item) =>
|
||||
ctx.cache.tryGet(`https://www.lanqiao.cn/api/v2/questions/${item.id}/`, async () => {
|
||||
const questionResponse = await got({
|
||||
method: 'get',
|
||||
url: `https://www.lanqiao.cn/api/v2/questions/${item.id}/`,
|
||||
});
|
||||
const question = questionResponse.data;
|
||||
|
||||
item.title = question.title;
|
||||
item.description = md.render(question.content);
|
||||
item.author = question.author.name;
|
||||
item.pubDate = dateParser(question.created_at);
|
||||
item.link = `https://www.lanqiao.cn/questions/${question.id}/`;
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: '蓝桥云课社区技术',
|
||||
// 源链接
|
||||
link: `https://www.lanqiao.cn/questions/topics/${id}/`,
|
||||
// 源说明
|
||||
description: '蓝桥云课技术社区主题帖',
|
||||
// 遍历此前获取的数据
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
module.exports = {
|
||||
'lanqiao.cn': {
|
||||
_name: '蓝桥云课',
|
||||
'.': [
|
||||
{
|
||||
title: '作者发布的课程',
|
||||
docs: 'https://docs.rsshub.app/programming.html#lan-qiao-yun-ke-zuo-zhe-fa-bu-de-ke-cheng',
|
||||
source: ['/users/:uid'],
|
||||
target: '/lanqiao/author/:uid',
|
||||
},
|
||||
{
|
||||
title: '最新发布的课程',
|
||||
docs: 'https://docs.rsshub.app/programming.html#lan-qiao-yun-ke-zuo-zhe-fa-bu-de-ke-cheng',
|
||||
source: ['/courses/'],
|
||||
target: '/lanqiao/courses/all',
|
||||
},
|
||||
{
|
||||
title: '最新发布的课程',
|
||||
docs: 'https://docs.rsshub.app/programming.html#lan-qiao-yun-ke-she-qu-zui-xin-ji-shu-wen-da',
|
||||
source: ['/questions/', '/questions/topics/:id'],
|
||||
target: '/lanqiao/questions/:id',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/author/:uid', require('./author'));
|
||||
router.get('/courses/:tag', require('./courses'));
|
||||
router.get('/questions/:id', require('./questions'));
|
||||
};
|
||||
|
|
@ -0,0 +1 @@
|
|||
<img src="{{ picurl }}"><br>{{ desc }}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
const { art } = require('@/utils/render');
|
||||
const path = require('path');
|
||||
|
||||
const courseDesc = (picurl, desc) =>
|
||||
art(path.join(__dirname, 'templates/courseDesc.art'), {
|
||||
picurl,
|
||||
desc,
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
courseDesc,
|
||||
};
|
||||
Loading…
Reference in New Issue