From 387c23852d8e8f39b22bfd4df891a8c6393dd773 Mon Sep 17 00:00:00 2001 From: Ethan Shen Date: Sat, 19 Dec 2020 00:55:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20add=20=E6=9C=89=E8=B6=A3=E5=A4=A9?= =?UTF-8?q?=E6=96=87=E5=A5=87=E8=A7=82=E5=B9=B4=E5=BA=A6=E5=A4=A9=E8=B1=A1?= =?UTF-8?q?=20&=20=E8=BF=91=E6=9C=9F=E4=BA=8B=E4=BB=B6=E4=B8=93=E9=A2=98?= =?UTF-8?q?=20(#6463)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/new-media.md | 8 ++++ lib/router.js | 2 + .../interesting-sky/astronomical_events.js | 38 +++++++++++++++ .../interesting-sky/recent-interesting.js | 47 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 lib/routes/interesting-sky/astronomical_events.js create mode 100644 lib/routes/interesting-sky/recent-interesting.js diff --git a/docs/new-media.md b/docs/new-media.md index c55808bfe9..6425576b3e 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -1924,6 +1924,14 @@ column 为 third 时可选的 category: +### 年度天象(天文年历) + + + +### 近期事件专题 + + + ## 遠見 diff --git a/lib/router.js b/lib/router.js index 2bfbf3d108..e937252454 100644 --- a/lib/router.js +++ b/lib/router.js @@ -3714,6 +3714,8 @@ router.get('/cmes/news/:category?', require('./routes/cmes/news')); router.get('/craigslist/:location/:type', require('./routes/craigslist/search')); // 有趣天文奇观 +router.get('/interesting-sky/astronomical_events/:year?', require('./routes/interesting-sky/astronomical_events')); +router.get('/interesting-sky/recent-interesting', require('./routes/interesting-sky/recent-interesting')); router.get('/interesting-sky', require('./routes/interesting-sky/index')); // ACM diff --git a/lib/routes/interesting-sky/astronomical_events.js b/lib/routes/interesting-sky/astronomical_events.js new file mode 100644 index 0000000000..2f1990817c --- /dev/null +++ b/lib/routes/interesting-sky/astronomical_events.js @@ -0,0 +1,38 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const year = ctx.params.year || new Date().getFullYear().toString(); + + const rootUrl = 'https://interesting-sky.china-vo.org'; + const currentUrl = `${rootUrl}/category/year/${year}astronomical_events/`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const items = $('article') + .map((_, item) => { + item = $(item); + + const title = item.find('.entry-title a'); + + return { + title: title.text(), + link: title.attr('href'), + author: item.find('.author').text(), + description: item.find('.article_content').html(), + pubDate: new Date(item.find('time.entry-date').attr('datetime')).toUTCString(), + }; + }) + .get(); + + ctx.state.data = { + title: $('title').text(), + link: currentUrl, + item: items, + }; +}; diff --git a/lib/routes/interesting-sky/recent-interesting.js b/lib/routes/interesting-sky/recent-interesting.js new file mode 100644 index 0000000000..866bedaf86 --- /dev/null +++ b/lib/routes/interesting-sky/recent-interesting.js @@ -0,0 +1,47 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const rootUrl = 'https://interesting-sky.china-vo.org'; + const currentUrl = `${rootUrl}/recent-interesting`; + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $('.sub-menu li p a') + .slice(0, 10) + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: `${rootUrl}${item.attr('href')}`, + }; + }) + .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); + + item.description = content('.entry-content').html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: $('title').text(), + link: currentUrl, + item: items, + }; +};