From 76103963aa302b02dc10fab2bda75903867b044e Mon Sep 17 00:00:00 2001 From: Richard Yu Date: Mon, 31 Dec 2018 01:02:50 +0800 Subject: [PATCH] feat: add linux patchwork comments (#1327) --- docs/README.md | 4 +++ lib/router.js | 3 ++ lib/routes/patchwork.kernel.org/cache.js | 17 +++++++++++ lib/routes/patchwork.kernel.org/comments.js | 32 +++++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 lib/routes/patchwork.kernel.org/cache.js create mode 100644 lib/routes/patchwork.kernel.org/comments.js diff --git a/docs/README.md b/docs/README.md index cb6c8b8d2..986e94ead 100644 --- a/docs/README.md +++ b/docs/README.md @@ -794,6 +794,10 @@ GitHub 官方也提供了一些 RSS: +### Linux Patchwork + + + ## 直播 ### 哔哩哔哩直播 diff --git a/lib/router.js b/lib/router.js index 93241b174..c57a26904 100644 --- a/lib/router.js +++ b/lib/router.js @@ -944,4 +944,7 @@ router.get('/36kr/search/article/:keyword', require('./routes/36kr/search/articl // icourse163 router.get('/icourse163/newest', require('./routes/icourse163/newest')); +// patchwork.kernel.org +router.get('/patchwork.kernel.org/comments/:id', require('./routes/patchwork.kernel.org/comments')); + module.exports = router; diff --git a/lib/routes/patchwork.kernel.org/cache.js b/lib/routes/patchwork.kernel.org/cache.js new file mode 100644 index 000000000..58b4da614 --- /dev/null +++ b/lib/routes/patchwork.kernel.org/cache.js @@ -0,0 +1,17 @@ +const axios = require('../../utils/axios'); + +module.exports = { + getPatchnameFromID: async (ctx, id) => { + const key = 'patchwork-kernel-org-patchname-from-id-' + id; + let name = await ctx.cache.get(key); + if (!name) { + const patchDetail = await axios({ + method: 'get', + url: `https://patchwork.kernel.org/api/patches/${id}/`, + }); + name = patchDetail.data.name; + ctx.cache.set(key, name, 24 * 60 * 60); + } + return name; + }, +}; diff --git a/lib/routes/patchwork.kernel.org/comments.js b/lib/routes/patchwork.kernel.org/comments.js new file mode 100644 index 000000000..b40ec43d9 --- /dev/null +++ b/lib/routes/patchwork.kernel.org/comments.js @@ -0,0 +1,32 @@ +const axios = require('../../utils/axios'); +const cache = require('./cache'); +const he = require('he'); + +module.exports = async (ctx) => { + const id = ctx.params.id; + + const name = await cache.getPatchnameFromID(ctx, id); + + const host = `https://patchwork.kernel.org/patch/${id}/`; + const url = `https://patchwork.kernel.org/api/patches/${id}/comments/`; + + const response = await axios({ + method: 'get', + url, + params: { + order: '-date', + }, + }); + const data = response.data; + + ctx.state.data = { + title: `${name} - Comments`, + link: host, + item: data.map((item) => ({ + title: item.subject, + description: he.escape(he.escape(item.content)).replace(/\n/g, '
'), + pubDate: new Date(item.date).toUTCString(), + link: item.web_url, + })), + }; +};