diff --git a/docs/other.md b/docs/other.md index a003c84b63..27567f2fb6 100644 --- a/docs/other.md +++ b/docs/other.md @@ -62,6 +62,12 @@ pageClass: routes +## cfan + +### 新闻 + + + ## checkee.info ### 美国签证 check 动态 diff --git a/lib/router.js b/lib/router.js index 927f37c9c0..19a0b96ceb 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1653,4 +1653,7 @@ router.get('/cneb/guoneinews', require('./routes/cneb/guoneinews')); // 邮箱 router.get('/mail/imap/:email', require('./routes/mail/imap')); +// cfan +router.get('/cfan/news', require('./routes/cfan/news')); + module.exports = router; diff --git a/lib/routes/cfan/news.js b/lib/routes/cfan/news.js new file mode 100644 index 0000000000..ffc532c2ef --- /dev/null +++ b/lib/routes/cfan/news.js @@ -0,0 +1,52 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { addNoReferrer } = require('@/utils/common-utils'); + +module.exports = async (ctx) => { + const pageUrl = 'http://www.cfan.com.cn/news/'; + const response = await got.get(pageUrl); + const $ = cheerio.load(response.data); + const list = $('.ui-video-list').get(); + + const ProcessFeed = async (link) => { + const response = await got({ + method: 'get', + url: link, + }); + const $ = cheerio.load(response.data); + + addNoReferrer($, '.maincontent'); + + return $('.maincontent').html() || '文章已被删除'; + }; + + const items = await Promise.all( + list.map(async (item) => { + const $ = cheerio.load(item); + const link = $('.left-post a').attr('href'); + + const cache = await ctx.cache.get(link); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const description = await ProcessFeed(link); + + const single = { + title: $('.left-post-title').text(), + description, + link: link, + pubDate: new Date($('.left-post-date').text()).toUTCString(), + }; + + ctx.cache.set(link, JSON.stringify(single)); + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: $('title').text(), + link: pageUrl, + item: items, + }; +};