diff --git a/docs/en/journal.md b/docs/en/journal.md index ffdf589d9..05f727b4f 100644 --- a/docs/en/journal.md +++ b/docs/en/journal.md @@ -90,6 +90,10 @@ The parameter id in the route is the id in the URL of the user ’s Google Schol ## MIT Technology Review + + +### Topics + diff --git a/lib/router.js b/lib/router.js index e039456b2..108384375 100644 --- a/lib/router.js +++ b/lib/router.js @@ -497,8 +497,10 @@ router.get('/oschina/user/:id', require('./routes/oschina/user')); router.get('/oschina/u/:id', require('./routes/oschina/u')); router.get('/oschina/topic/:topic', require('./routes/oschina/topic')); -// MIT technology review +// MIT Technology Review +router.get('/technologyreview', require('./routes/technologyreview/index')); router.get('/technologyreview/:category_name', require('./routes/technologyreview/topic')); + // 安全客 router.get('/aqk/vul', require('./routes/aqk/vul')); router.get('/aqk/:category', require('./routes/aqk/category')); diff --git a/lib/routes/technologyreview/index.js b/lib/routes/technologyreview/index.js new file mode 100644 index 000000000..a44bdd11e --- /dev/null +++ b/lib/routes/technologyreview/index.js @@ -0,0 +1,43 @@ +const cheerio = require('cheerio'); +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const response = await got.get('https://wp.technologyreview.com/wp-json/irving/v1/data/the_feed?page=1'); + + const result = await Promise.all( + response.data + .filter((item) => item.config.permalink) + .map( + async (item) => + await ctx.cache.tryGet(item.config.permalink, async () => { + const article = await got.get(item.config.permalink); + const $ = cheerio.load(article.data); + + // remove annoyances + $('.sliderAd__wrapper--1vLJw').remove(); + $('.newsletter__wrap').remove(); + $('.related__wrap').remove(); + $('aside').remove(); + $('svg.monogramTLogo').remove(); + $('.image__placeholder--1CF-F').remove(); + + const description = ($('.contentHeader__image--1pFzw').html() || $('.contentHeader--fullBleed__image--2jdH0').html() || '') + ($('.contentHeader__deck--3A9FE').html() || '') + $('#content--body').html(); + const author = $('.byline__name--2MpUW').clone().children().remove().end().text(); + + return { + title: item.config.title || item.config.name || '', + author, + description, + link: item.config.permalink, + pubDate: new Date($('.contentHeader__publishDate--37zcW').text()).toISOString(), + }; + }) + ) + ); + + ctx.state.data = { + title: 'MIT Technology Review', + link: 'https://www.technologyreview.com/', + item: result, + }; +};