diff --git a/docs/en/new-media.md b/docs/en/new-media.md index 62f442bb76..e02cbe422f 100644 --- a/docs/en/new-media.md +++ b/docs/en/new-media.md @@ -414,6 +414,12 @@ Compared to the official one, this feed: +## Sky Sports + +### News + +\ + ## The Brain ### Blog diff --git a/docs/new-media.md b/docs/new-media.md index 517266e360..6516587cff 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -639,6 +639,12 @@ IPFS 网关有可能失效,那时候换成其他网关。 +## Sky Sports + +### News + + + ## TANC 艺术新闻 ### 分类 diff --git a/lib/router.js b/lib/router.js index bd53b22bae..e11605a144 100644 --- a/lib/router.js +++ b/lib/router.js @@ -4169,13 +4169,19 @@ router.get('/tanchinese/:category?', require('./routes/tanchinese')); // Harvard router.get('/harvard/health/blog', require('./routes/universities/harvard/health/blog')); +// Sky Sports +router.get('/skysports/news/:team', require('./routes/skysports/news')); + // Europa Press router.get('/europapress/:category?', require('./routes/europapress')); + // World Happiness Report router.get('/worldhappiness/blog', require('./routes/worldhappiness/blog')); router.get('/worldhappiness/archive', require('./routes/worldhappiness/archive')); + // 中国纺织经济信息网 router.get('/ctei/news/:id?', require('./routes/ctei/news')); + // 时事一点通 router.get('/ssydt/article/:id?', require('./routes/ssydt/article')); diff --git a/lib/routes/skysports/news.js b/lib/routes/skysports/news.js new file mode 100644 index 0000000000..7a0d79e7b9 --- /dev/null +++ b/lib/routes/skysports/news.js @@ -0,0 +1,53 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const team = ctx.params.team; + + const rootUrl = 'https://www.skysports.com'; + const currentUrl = `${rootUrl}/${team}-news`; + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $('.news-list__headline-link') + .map((_, item) => { + item = $(item); + + return { + title: item.text(), + link: item.attr('href'), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + (item) => ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + content('.sdc-article-widget, .sdc-site-layout-sticky-region').remove(); + + item.description = content('.sdc-article-body').html(); + item.pubDate = parseDate(detailResponse.data.match(/"datePublished": "(.*)","dateModified"/)[1]); + + return item; + }) + ) + ); + + ctx.state.data = { + title: $('title').text(), + link: currentUrl, + item: items, + }; +};