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,
+ };
+};