From 8436afb3a3502c1b83ae3069735b8592dedcdd50 Mon Sep 17 00:00:00 2001 From: Henry Wang Date: Wed, 5 Sep 2018 09:32:43 +0100 Subject: [PATCH] Add sspai/series (#645) Close #570 --- docs/README.md | 8 ++++++++ router.js | 3 +++ routes/sspai/series.js | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 routes/sspai/series.js diff --git a/docs/README.md b/docs/README.md index a20ed8f08..2f6dee0ae 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2708,3 +2708,11 @@ ISO 3166-1 国家代码列表请参见 [维基百科 ISO_3166-1](https://zh.wiki #### App Store/Mac App Store 见 [#app-store-mac-app-store](#app-store-mac-app-store) + +### 少数派 sspai + +#### 最新上架付费专栏 + +举例: + +路由: `/sspai/series` diff --git a/router.js b/router.js index 24d10b860..d085ca1b4 100644 --- a/router.js +++ b/router.js @@ -527,4 +527,7 @@ router.get('/curseforge/files/:project', require('./routes/curseforge/files')); // 抖音 router.get('/douyin/user/:id', require('./routes/douyin/user')); +// 少数派 sspai +router.get('/sspai/series', require('./routes/sspai/series')); + module.exports = router; diff --git a/routes/sspai/series.js b/routes/sspai/series.js new file mode 100644 index 000000000..c9bb80e22 --- /dev/null +++ b/routes/sspai/series.js @@ -0,0 +1,41 @@ +const cheerio = require('cheerio'); +const url = require('url'); + +module.exports = async (ctx) => { + const getPage = await require('../../utils/puppeteer'); + const page = await getPage(); + + const link = 'https://sspai.com/series'; + + await page.goto(link); + + // eslint-disable-next-line no-undef + const html = await page.evaluate(() => document.querySelector('div.new-series-wrapper').innerHTML); + + const $ = cheerio.load(html); + const list = $('div.item'); + + ctx.state.data = { + title: '少数派 -- 最新上架付费专栏', + link, + description: '少数派 -- 最新上架付费专栏', + item: list + .map((i, item) => ({ + title: $(item) + .find('.item-title a') + .text() + .trim(), + link: url.resolve( + link, + $(item) + .find('.item-title a') + .attr('href') + ), + author: $(item) + .find('.item-author') + .text() + .trim(), + })) + .get(), + }; +};