diff --git a/docs/programming.md b/docs/programming.md index 4f799a505..eb2d978cd 100644 --- a/docs/programming.md +++ b/docs/programming.md @@ -224,6 +224,12 @@ GitHub 官方也提供了一些 RSS: +## 阿里云 + +### 数据库内核月报 + + + ## 安全客 ::: tip 提示 diff --git a/lib/router.js b/lib/router.js index 5630a096c..ecf71c30e 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1582,4 +1582,7 @@ router.get('/yidoutang/case/:type', require('./routes/yidoutang/case.js')); // 开眼 router.get('/kaiyan/index', require('./routes/kaiyan/index')); +// 阿里云 +router.get('/aliyun/database_month', require('./routes/aliyun/database_month')); + module.exports = router; diff --git a/lib/routes/aliyun/database_month.js b/lib/routes/aliyun/database_month.js new file mode 100644 index 000000000..d203fc461 --- /dev/null +++ b/lib/routes/aliyun/database_month.js @@ -0,0 +1,53 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const url = 'http://mysql.taobao.org/monthly/'; + const response = await got({ method: 'get', url }); + const $ = cheerio.load(response.data); + + const list = $("ul[class='posts'] > li") + .map((i, e) => { + const element = $(e); + const title = element + .find('a') + .text() + .trim(); + const link = + 'http://mysql.taobao.org' + + element + .find('a') + .attr('href') + .trim(); + return { + title: title, + description: '', + link: link, + }; + }) + .get(); + + const result = await Promise.all( + list.map(async (item) => { + const link = item.link; + + const cache = await ctx.cache.get(link); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const itemReponse = await got.get(link); + const itemElement = cheerio.load(itemReponse.data); + item.description = itemElement('.content').html(); + + ctx.cache.set(link, JSON.stringify(item)); + return Promise.resolve(item); + }) + ); + + ctx.state.data = { + title: $('title').text(), + link: url, + item: result.reverse(), + }; +};