feat: Caixin latest (#6539)

This commit is contained in:
Toby Tso 2020-12-29 01:00:42 +08:00 committed by GitHub
parent 4113b68929
commit c10b43bf78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 82 additions and 0 deletions

View File

@ -311,6 +311,14 @@ Category 列表:
<Route author="EsuRt" example="/caixin/article" path="/caixin/article"/>
### 最新文章
<Route author="tpnonthealps" example="/caixin/latest" path="/caixin/latest">
说明:此 RSS feed 会自动抓取财新网的最新文章,但不包含 FM 及视频内容。
</Route>
## 第一财经
### 直播区

View File

@ -3766,4 +3766,7 @@ router.get('/sciencenet/blog/:type?/:time?/:sort?', require('./routes/sciencenet
// DailyArt
router.get('/dailyart/:language?', require('./routes/dailyart/index'));
// Caixin Latest
router.get('/caixin/latest', require('./routes/caixin/latest'));
module.exports = router;

View File

@ -0,0 +1,71 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const li_r = await got({
method: 'get',
url: 'http://finance.caixin.com/2020-11-03/101622309.html',
});
const $ = cheerio.load(li_r.data);
const list = $('div.columnBox a[name="new_artical"]~ul.list li');
const tasks = [];
list.map((_index, li) => $(li).find('a').first().attr('href'))
.filter((_index, link) => link.indexOf('fm.caixin.com') === -1 && link.indexOf('video.caixin.com') === -1) // content filter
.each((_index, link) => {
const entry = ctx.cache.tryGet(link, async () => {
const entry_r = await got.get(link);
const $ = cheerio.load(entry_r.data);
// title
const h1 = $('div#conTit h1').text();
// desc items
const subhead = $('div#subhead.subhead').text();
let pic_url = $('img.cx-img-loader').attr('src');
if (pic_url === undefined) {
pic_url = $('img.cx-img-loader').attr('data-src');
}
const pic_alt = $('dl.media_pic dd').text();
const content = $('div#Main_Content_Val.text').html();
/*
const [, count] =
$('a.box_titlecontent.cost-uibtn')
.text()
.match(/本文共计(\d+)字/) || [];
if (count !== 0 && count !== undefined) {
content = `${content}<blockquote><p>此乃财新通收费文章,全文共计${count}字。</p></blockquote>`;
}
*/
// desc
let desc;
if (pic_url === undefined) {
desc = `<blockquote><p>${subhead}</p></blockquote>${content}`;
} else {
desc = `<blockquote><p>${subhead}</p></blockquote><img src="${pic_url}" alt="${pic_alt}">${content}`;
}
// time
const [, year, month, day, hour, minute] = $('div#artInfo.artInfo')
.text()
.match(/(\d+)年(\d+)月(\d+)日 *(\d+):(\d+)/);
const time = new Date(`${year}-${month}-${day}T${hour}:${minute}:00+0800`).toUTCString();
return {
title: h1,
description: desc,
pubDate: time,
link: link,
};
});
tasks.push(entry);
});
const rss = await Promise.all(tasks);
ctx.state.data = {
title: '财新网 - 最新文章',
link: 'http://www.caixin.com/',
item: rss,
};
};