From dfd8d7f14aca0576c7690dc22ff6b0773f28d389 Mon Sep 17 00:00:00 2001 From: Ethan Shen Date: Sat, 22 Jan 2022 22:37:13 +0800 Subject: [PATCH] feat(route): add Node.js News (#8902) --- docs/en/programming.md | 25 +++++++++++++++- docs/programming.md | 24 +++++++++++++++ lib/v2/nodejs/blog.js | 60 +++++++++++++++++++++++++++++++++++++ lib/v2/nodejs/maintainer.js | 3 ++ lib/v2/nodejs/radar.js | 13 ++++++++ lib/v2/nodejs/router.js | 3 ++ 6 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 lib/v2/nodejs/blog.js create mode 100644 lib/v2/nodejs/maintainer.js create mode 100644 lib/v2/nodejs/radar.js create mode 100644 lib/v2/nodejs/router.js diff --git a/docs/en/programming.md b/docs/en/programming.md index 71ea49f124..4e673aabd5 100644 --- a/docs/en/programming.md +++ b/docs/en/programming.md @@ -133,7 +133,6 @@ For instance, the `/github/topics/framework/l=php&o=desc&s=stars` route will gen - ## Hacker News ### Section @@ -230,6 +229,30 @@ Website: https://news.ycombinator.com/ +## Node.js + +### News + + + +| العربية | Catalan | Deutsch | Español | زبان فارسی | +| ------- | ------- | ------- | ------- | ---------- | +| ar | ca | de | es | fa | + +| Français | Galego | Italiano | 日本語 | 한국어 | +| -------- | ------ | -------- | ------ | ------ | +| fr | gl | it | ja | ko | + +| Português do Brasil | limba română | Русский | Türkçe | Українська | +| ------------------- | ------------ | ------- | ------ | ---------- | +| pt-br | ro | ru | tr | uk | + +| 简体中文 | 繁體中文 | +| -------- | -------- | +| zh-cn | zh-tw | + + + ## project-zero issues ### issues diff --git a/docs/programming.md b/docs/programming.md index 6d151db2c0..50f85a24cf 100644 --- a/docs/programming.md +++ b/docs/programming.md @@ -334,6 +334,30 @@ GitHub 官方也提供了一些 RSS: +## Node.js + +### News + + + +| العربية | Catalan | Deutsch | Español | زبان فارسی | +| ------- | ------- | ------- | ------- | ---------- | +| ar | ca | de | es | fa | + +| Français | Galego | Italiano | 日本語 | 한국어 | +| -------- | ------ | -------- | ------ | ------ | +| fr | gl | it | ja | ko | + +| Português do Brasil | limba română | Русский | Türkçe | Українська | +| ------------------- | ------------ | ------- | ------ | ---------- | +| pt-br | ro | ru | tr | uk | + +| 简体中文 | 繁體中文 | +| -------- | -------- | +| zh-cn | zh-tw | + + + ## NOSEC.org ### Posts diff --git a/lib/v2/nodejs/blog.js b/lib/v2/nodejs/blog.js new file mode 100644 index 0000000000..ba5cc4f0f1 --- /dev/null +++ b/lib/v2/nodejs/blog.js @@ -0,0 +1,60 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const language = ctx.params.language ?? 'en'; + + const rootUrl = 'https://nodejs.org'; + const currentUrl = `${rootUrl}/${language}/blog`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + $('.summary').remove(); + + let items = $('ul.blog-index li a') + .toArray() + .map((item) => { + item = $(item); + + return { + title: item.text(), + link: `${rootUrl}${item.attr('href')}`, + }; + }); + + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + item.pubDate = parseDate(content('time').attr('datetime')); + item.author = content('.blogpost-meta') + .text() + .match(/by (.*), /)[1]; + + content('.blogpost-header').remove(); + + item.description = content('article').html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: 'News - Node.js', + link: currentUrl, + item: items, + }; +}; diff --git a/lib/v2/nodejs/maintainer.js b/lib/v2/nodejs/maintainer.js new file mode 100644 index 0000000000..8135e010a5 --- /dev/null +++ b/lib/v2/nodejs/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/blog/:language?': ['nczitzk'], +}; diff --git a/lib/v2/nodejs/radar.js b/lib/v2/nodejs/radar.js new file mode 100644 index 0000000000..bf45638afe --- /dev/null +++ b/lib/v2/nodejs/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'nodejs.org': { + _name: 'Node.js', + '.': [ + { + title: 'News', + docs: 'https://docs.rsshub.app/programming.html#nodejs-news', + source: ['/:language/blog', '/'], + target: '/nodejs/blog/:language?', + }, + ], + }, +}; diff --git a/lib/v2/nodejs/router.js b/lib/v2/nodejs/router.js new file mode 100644 index 0000000000..fadb0f6b37 --- /dev/null +++ b/lib/v2/nodejs/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/blog/:language?', require('./blog')); +};