diff --git a/docs/traditional-media.md b/docs/traditional-media.md index fecd02b81f..3314ebb0aa 100644 --- a/docs/traditional-media.md +++ b/docs/traditional-media.md @@ -241,6 +241,11 @@ category 对应的关键词有 ### 观点 + +### 环保频道 + + + ### 习近平系列重要讲话 diff --git a/lib/router.js b/lib/router.js index dde8c97881..c034e78ce7 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1167,6 +1167,7 @@ router.get('/banyuetan/:name', require('./routes/banyuetan')); // 人民日报 router.get('/people/opinion/:id', require('./routes/people/opinion')); +router.get('/people/env/:id', require('./routes/people/env')); router.get('/people/xjpjh/:keyword?/:year?', require('./routes/people/xjpjh')); // gamersky diff --git a/lib/routes/people/env.js b/lib/routes/people/env.js new file mode 100644 index 0000000000..1ae4ee97ba --- /dev/null +++ b/lib/routes/people/env.js @@ -0,0 +1,82 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const url = require('url'); +const iconv = require('iconv-lite'); + +const host = 'http://env.people.com.cn'; + +module.exports = async (ctx) => { + const id = ctx.params.id; + + const link = `http://env.people.com.cn/GB/${id}/index.html`; + const response = await got.get(link, { + responseType: 'buffer', + }); + response.data = iconv.decode(response.data, 'gbk'); + + const $ = cheerio.load(response.data); + + let title = $('div.clearfix.w1000_320.d2nav').text(); + title = title.replace(/ >> /g, '—'); + + const list = $('div.headingNews div.hdNews.clearfix') + .slice(0, 10) + .map(function() { + const info = { + title: $(this) + .find('strong > a') + .text(), + link: $(this) + .find('strong > a') + .attr('href'), + }; + return info; + }) + .get(); + + const out = await Promise.all( + list.map(async (info) => { + const title = info.title; + const itemUrl = url.resolve(host, info.link); + + const cache = await ctx.cache.get(itemUrl); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const response = await got.get(itemUrl, { + responseType: 'buffer', + }); + response.data = iconv.decode(response.data, 'gbk'); + + const $ = cheerio.load(response.data); + let date = $('.clearfix.w1000_320.text_title .box01 .fl') + .text() + .split(/\s+/); + if (date.length > 0) { + date = date[0].replace(/(年|月)/g, '/').replace('日', ' ') + ':00'; + console.log(date); + } else { + date = new Date(); + } + const description = $('div#rwb_zw') + .html() + .trim(); + + const single = { + title: title, + link: itemUrl, + description: description, + pubDate: new Date(date).toUTCString(), + }; + ctx.cache.set(itemUrl, JSON.stringify(single)); + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: title, + link: link, + item: out, + }; +};