From 58f8fde0cdee5d29994b89c112e7631b671bdb54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E7=BB=99=E5=8A=9B=E7=9A=84=E9=9D=A2=E6=9D=A1?= Date: Tue, 8 Oct 2019 18:36:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=9F=A5=E4=B9=8E?= =?UTF-8?q?=E6=97=A5=E6=8A=A5=E5=90=88=E9=9B=86=20RSS=20(#3212)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/social-media.md | 4 +++ lib/router.js | 1 + lib/routes/zhihu/daily_section.js | 54 +++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 lib/routes/zhihu/daily_section.js diff --git a/docs/social-media.md b/docs/social-media.md index a9b2e85fb..914cf8e39 100644 --- a/docs/social-media.md +++ b/docs/social-media.md @@ -642,6 +642,10 @@ pageClass: routes +### 知乎日报 - 合集 + + + ### 知乎热榜 diff --git a/lib/router.js b/lib/router.js index 00bcc4315..3c55a7bf8 100644 --- a/lib/router.js +++ b/lib/router.js @@ -96,6 +96,7 @@ router.get('/zhihu/people/answers/:id', require('./routes/zhihu/answers')); router.get('/zhihu/people/posts/:id', require('./routes/zhihu/posts')); router.get('/zhihu/zhuanlan/:id', require('./routes/zhihu/zhuanlan')); router.get('/zhihu/daily', require('./routes/zhihu/daily')); +router.get('/zhihu/daily/section/:sectionId', require('./routes/zhihu/daily_section')); router.get('/zhihu/hotlist', require('./routes/zhihu/hotlist')); router.get('/zhihu/pin/hotlist', require('./routes/zhihu/pin/hotlist')); router.get('/zhihu/question/:questionId', require('./routes/zhihu/question')); diff --git a/lib/routes/zhihu/daily_section.js b/lib/routes/zhihu/daily_section.js new file mode 100644 index 000000000..b4dff44ad --- /dev/null +++ b/lib/routes/zhihu/daily_section.js @@ -0,0 +1,54 @@ +const got = require('@/utils/got'); +const utils = require('./utils'); + +// 参考:https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90 +// 文章给出了v7版 api的信息,包含全文api + +module.exports = async (ctx) => { + const { sectionId } = ctx.params; + const listRes = await got({ + method: 'get', + url: `https://news-at.zhihu.com/api/7/section/${sectionId}`, + headers: { + ...utils.header, + Referer: `https://news-at.zhihu.com/api/7/section/${sectionId}`, + }, + }); + // 根据api的说明,过滤掉极个别站外链接 + const storyList = listRes.data.stories.filter((el) => el.url.includes('daily.zhihu.com')); + const resultItem = await Promise.all( + storyList.map(async (story) => { + const url = 'https://news-at.zhihu.com/api/7/news/' + story.id; + const item = { + title: story.title, + description: '', + link: 'https://news-at.zhihu.com/story/' + story.id, + }; + const key = 'daily' + story.id; + const value = await ctx.cache.get(key); + + if (value) { + item.description = value; + } else { + const storyDetail = await got({ + method: 'get', + url: url, + headers: { + Referer: url, + }, + }); + item.description = utils.ProcessImage(storyDetail.data.body.replace(/
([\s\S]*?)<\/div>/g, '$1').replace(/<\/?h2.*?>/g, '')); + ctx.cache.set(key, item.description); + } + + return Promise.resolve(item); + }) + ); + + ctx.state.data = { + title: `${listRes.data.name} - 知乎日报`, + link: 'https://daily.zhihu.com', + description: '每天3次,每次7分钟', + item: resultItem, + }; +};