From 0481bff2846867d0c7f2fee8f6adff34753e2850 Mon Sep 17 00:00:00 2001 From: Ethan Shen Date: Fri, 25 Sep 2020 18:46:41 +0800 Subject: [PATCH] feat: add World Economic Forum reports (#5717) Co-authored-by: Henry Wang --- docs/en/finance.md | 16 +++++++++++ docs/finance.md | 16 +++++++++++ lib/router.js | 3 ++ lib/routes/weforum/report.js | 53 ++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 lib/routes/weforum/report.js diff --git a/docs/en/finance.md b/docs/en/finance.md index c8e7a8938..935b14710 100644 --- a/docs/en/finance.md +++ b/docs/en/finance.md @@ -15,3 +15,19 @@ pageClass: routes ### US Stock News + +## World Economic Forum + +### Report + + + +Languages + +| English | Español | Français | 中文 | 日本語 | +| ------- | ------- | -------- | ---- | ------ | +| en | es | fr | cn | jp | + +See filters in [Report](https://www.weforum.org/reports) for Year and Platform these two parameters. + + diff --git a/docs/finance.md b/docs/finance.md index c6b8cebb3..49653029e 100644 --- a/docs/finance.md +++ b/docs/finance.md @@ -62,6 +62,22 @@ pageClass: routes <Route author="nczitzk" example="/gelonghui/keyword/ 早报" path="/gelonghui/keyword/:keyword" :paramsDesc="[' 搜索关键字']/> +## 世界经济论坛 + +### 报告 + + + +语言 + +| English | Español | Français | 中文 | 日本語 | +| ------- | ------- | -------- | ---- | ------ | +| en | es | fr | cn | jp | + +年份 和 平台 这两个参数请参见 [报告页](https://www.weforum.org/reports) 过滤条件处。 + + + ## 淘股吧股票论坛 ### 论坛总版 diff --git a/lib/router.js b/lib/router.js index 3a5250e9f..8f0ec72ab 100644 --- a/lib/router.js +++ b/lib/router.js @@ -3241,6 +3241,9 @@ router.get('/appsales/:caty?/:time?', require('./routes/appsales/index')); // CGTN router.get('/cgtn/top', require('./routes/cgtn/top')); +// World Economic Forum +router.get('/weforum/report/:lang?/:year?/:platform?', require('./routes/weforum/report')); + // Nobel Prize router.get('/nobelprize/:caty?', require('./routes/nobelprize/index')); diff --git a/lib/routes/weforum/report.js b/lib/routes/weforum/report.js new file mode 100644 index 000000000..69e46f690 --- /dev/null +++ b/lib/routes/weforum/report.js @@ -0,0 +1,53 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + ctx.params.lang = ctx.params.lang || 'www'; + ctx.params.platform = ctx.params.platform || ''; + ctx.params.year = ctx.params.year || ''; + + const rootUrl = `https://${ctx.params.lang === 'en' ? 'www' : ctx.params.lang}.weforum.org`; + const currentUrl = `${rootUrl}/reports?platform=${ctx.params.platform}&year=${ctx.params.year}`; + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $('.report-listing-tout__content') + .map((_, item) => { + item = $(item); + return { + title: item.find('.report-listing-tout__title').text(), + link: `${rootUrl}${item.find('.report-listing-tout__cta').attr('href')}`, + description: `Download PDF`, + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + const content = cheerio.load(detailResponse.data); + + content('.report__meta').remove(); + + item.description += content('.report__display-info').html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: $('title').text(), + link: currentUrl, + item: items, + }; +};