From 92d2bd6a78cd6d91f39e9f208998795fa5142465 Mon Sep 17 00:00:00 2001 From: shiluanzzz <45506006+shiluanzzz@users.noreply.github.com> Date: Wed, 17 Aug 2022 20:39:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20segmentfault=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E4=BA=86=E6=AF=8F=E4=B8=AA=E6=A0=87=E7=AD=BE=E4=B8=8B?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E6=96=87=E7=AB=A0=20(#10476)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * new segmentfault blogs * fix radar.js route * fix * docs: linebreak * style: lint --- docs/programming.md | 8 +++++-- lib/v2/segmentfault/blogs.js | 38 +++++++++++++++++++++++++++++++ lib/v2/segmentfault/maintainer.js | 3 ++- lib/v2/segmentfault/radar.js | 10 ++++++-- lib/v2/segmentfault/router.js | 1 + 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 lib/v2/segmentfault/blogs.js diff --git a/docs/programming.md b/docs/programming.md index 5807575d96..85f034103b 100644 --- a/docs/programming.md +++ b/docs/programming.md @@ -638,11 +638,15 @@ GitHub 官方也提供了一些 RSS: ### 频道 - + ### 用户 - + + +### 博客 + + ## TesterHome diff --git a/lib/v2/segmentfault/blogs.js b/lib/v2/segmentfault/blogs.js new file mode 100644 index 0000000000..436d040c57 --- /dev/null +++ b/lib/v2/segmentfault/blogs.js @@ -0,0 +1,38 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +const host = 'https://segmentfault.com'; + +module.exports = async (ctx) => { + const tag = ctx.params.tag; + const apiURL = `https://segmentfault.com/gateway/tag/${tag}/articles?loadMoreType=pagination&initData=true&page=1&sort=newest&pageSize=30`; + const response = await got(apiURL); + const data = response.data.rows; + + const list = data.map((item) => ({ + title: item.title, + link: new URL(item.url, host).href, + author: item.user.name, + })); + + const items = await Promise.all( + list.map((item) => + ctx.cache.tryGet(item.link, async () => { + const response = await got(item.link); + const content = cheerio.load(response.data); + + item.description = content('article').html(); + item.pubDate = parseDate(content('time').attr('datetime')); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `segmentfault-Blogs-${tag}`, + link: `${host}/t/${tag}/blogs`, + item: items, + }; +}; diff --git a/lib/v2/segmentfault/maintainer.js b/lib/v2/segmentfault/maintainer.js index 264c59f75f..d8dfd4ec09 100644 --- a/lib/v2/segmentfault/maintainer.js +++ b/lib/v2/segmentfault/maintainer.js @@ -1,4 +1,5 @@ module.exports = { + '/blogs/:tag': ['shiluanzzz'], '/channel/:name': ['LogicJake', 'Fatpandac'], - '/user/:name': ['leyuuu', 'Fatpandac'], + '/user/:name': ['leyuuu', 'Fatpandac'] }; diff --git a/lib/v2/segmentfault/radar.js b/lib/v2/segmentfault/radar.js index 5c95675b45..d73bc834ac 100644 --- a/lib/v2/segmentfault/radar.js +++ b/lib/v2/segmentfault/radar.js @@ -6,14 +6,20 @@ module.exports = { title: '频道', docs: 'https://docs.rsshub.app/programming.html#segmentfault', source: ['/channel/:name'], - target: '/channel/:name', + target: '/segmentfault/channel/:name', }, { title: '用户', docs: 'https://docs.rsshub.app/programming.html#segmentfault', source: ['/u/:name'], - target: '/user/:name', + target: '/segmentfault/user/:name', }, + { + title: "博客", + docs: "https://docs.rsshub.app/programming.html#segmentfault", + source: ["/t/:tag/blogs"], + target: "/segmentfault/blogs/:tag", + } ], }, }; diff --git a/lib/v2/segmentfault/router.js b/lib/v2/segmentfault/router.js index 3990afd991..7a701a952e 100644 --- a/lib/v2/segmentfault/router.js +++ b/lib/v2/segmentfault/router.js @@ -1,4 +1,5 @@ module.exports = function (router) { + router.get("/blogs/:tag", require("./blogs")); router.get('/channel/:name', require('./channel')); router.get('/user/:name', require('./user')); };