fix: url does not exist in 清华大学 & feet: add 洛谷近期比赛 & fix: 洛谷日报 (#4063)

This commit is contained in:
prnake 2020-02-25 00:13:25 +08:00 committed by GitHub
parent 5429e46157
commit 14e2c3dbe6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 76 additions and 14 deletions

View File

@ -593,12 +593,6 @@ Supported sub-sites
<Route author="xyqfer" example="/laosiji/hotshow/128" path="/laosiji/hotshow/:id" :paramsDesc="['节目 id']"/>
## 洛谷
### 日报
<Route author="LogicJake" example="/luogu/daily" path="/luogu/daily/:id?" :paramsDesc="['年度日报所在帖子id可在 URL 中找到不填默认为2019年日报']"/>
## 镁客网 im2maker
### 镁客网频道

View File

@ -502,6 +502,18 @@ GitHub 官方也提供了一些 RSS:
<Route author="loveely7" example="/oschina/topic/weekly-news" path="/oschina/topic/:topic" :paramsDesc="['主题名, 可从[全部主题](https://www.oschina.net/question/topics)进入主题页, 在 URL 中找到']"/>
## 洛谷
### 日报
<Route author="LogicJake prnake" example="/luogu/daily" path="/luogu/daily/:id?" :paramsDesc="['年度日报所在帖子id可在 URL 中找到不填默认为2020年日报']">
</Route>
### 近期比赛
<Route author="prnake" example="/luogu/contest" path="/luogu/contest">
</Route>
## 码农俱乐部
### 话题

View File

@ -1262,8 +1262,9 @@ router.get('/12306/zxdt/:id?', require('./routes/12306/zxdt'));
// 北京天文馆每日一图
router.get('/bjp/apod', require('./routes/bjp/apod'));
// 洛谷日报
// 洛谷
router.get('/luogu/daily/:id?', require('./routes/luogu/daily'));
router.get('/luogu/contest', require('./routes/luogu/contest'));
// 决胜网
router.get('/juesheng', require('./routes/juesheng'));

View File

@ -0,0 +1,41 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const resolve_url = require('url').resolve;
module.exports = async (ctx) => {
const link = 'https://www.luogu.com.cn/';
const response = await got.get(link);
const $ = cheerio.load(response.data);
const title = '洛谷近期比赛';
const out = $('.am-panel-hd ')
.slice(0, 10)
.map(function() {
const info = {
title:
$(this)
.find('a')
.text() || $(this).text(),
description:
$(this).html() +
$(this)
.parent()
.find('.am-panel-bd')
.html(),
link: resolve_url(
'https://www.luogu.com.cn',
$(this)
.find('a')
.attr('href')
),
};
return info;
})
.get();
ctx.state.data = {
title: title,
link: link,
item: out,
};
};

View File

@ -2,12 +2,11 @@ const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const id = ctx.params.id || 92685;
const id = ctx.params.id || 179788;
const link = `https://www.luogu.org/discuss/show/${id}`;
const response = await got.get(link);
const $ = cheerio.load(response.data);
const title = $('#app-body-new div h1').text();
const title = $('title').text();
const out = $('div.am-comment-main > div > p')
.slice(0, 10)

View File

@ -60,8 +60,8 @@ module.exports = async (ctx) => {
item: $('table>tbody>tr')
.slice(0, 10)
.map((_, elem) => ({
link: resolve_url(base_url, $('td>a', elem).attr('href')),
title: $('td>a', elem).text(),
link: get_link($('td>a', elem).attr('href'), news_url + path),
title: get_title($('td>a', elem).text(), $('td', elem).text()),
pubDate: new Date(
$('td>font>span', elem)
.text()
@ -78,8 +78,8 @@ module.exports = async (ctx) => {
item: $('.cont_list>li')
.slice(0, 10)
.map((_, elem) => ({
link: resolve_url(base_url, $('a', elem).attr('href')),
title: $('a', elem).text(),
link: get_link($('a', elem).attr('href'), news_url + path),
title: get_title($('a', elem).text(), $.text()),
pubDate: new Date(
$('time', elem)
.text()
@ -90,3 +90,18 @@ module.exports = async (ctx) => {
};
}
};
function get_link(url, alter_url) {
if (url !== undefined) {
return resolve_url(base_url, url);
} else {
return alter_url;
}
}
function get_title(title, data) {
if (title) {
return title;
}
return data;
}