From c854ce36b1537a0f40022f21e077a17612d07a5b Mon Sep 17 00:00:00 2001 From: Chenyang Shi Date: Wed, 13 Feb 2019 12:00:54 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E8=B1=86=E7=93=A3=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E9=A1=B5=E4=B8=8D=E5=90=8C=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=88=86=E7=B1=BB=20(#1524)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 ++ lib/router.js | 1 + lib/routes/douban/explore_column.js | 56 +++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 lib/routes/douban/explore_column.js diff --git a/docs/README.md b/docs/README.md index c2e775c881..d16f0afded 100644 --- a/docs/README.md +++ b/docs/README.md @@ -475,6 +475,8 @@ RSSHub 提供下列 API 接口: + + diff --git a/lib/router.js b/lib/router.js index 7fcf56e03d..6747bf121e 100644 --- a/lib/router.js +++ b/lib/router.js @@ -210,6 +210,7 @@ router.get('/douban/commercialpress/latest', require('./routes/douban/commercial router.get('/douban/bookstore', require('./routes/douban/bookstore')); router.get('/douban/book/rank/:type', require('./routes/douban/book/rank')); router.get('/douban/doulist/:id', require('./routes/douban/doulist')); +router.get('/douban/explore/column/:id', require('./routes/douban/explore_column')); // 煎蛋 router.get('/jandan/:sub_model', require('./routes/jandan/pic')); diff --git a/lib/routes/douban/explore_column.js b/lib/routes/douban/explore_column.js new file mode 100644 index 0000000000..eaf2a9362b --- /dev/null +++ b/lib/routes/douban/explore_column.js @@ -0,0 +1,56 @@ +const axios = require('../../utils/axios'); +const cheerio = require('cheerio'); +const url = require('url'); + +const host = 'https://www.douban.com/explore/column/'; +module.exports = async (ctx) => { + const id = ctx.params.id; + const link = url.resolve(host, id); + const response = await axios.get(link); + const $ = cheerio.load(response.data); + const title = $('div.h1').text(); + + const list = $('div.item') + .slice(0, 10) + .map(function() { + const info = { + title: $(this) + .find('div.title a') + .text(), + link: $(this) + .find('div.title a') + .attr('href'), + author: $(this) + .find('div.usr-pic a') + .text(), + }; + return info; + }) + .get(); + + const out = await Promise.all( + list.map(async (info) => { + const title = info.title; + const author = info.author; + const itemUrl = info.link; + + const response = await axios.get(itemUrl); + const $ = cheerio.load(response.data); + const description = $('#link-report').html(); + + const single = { + title: title, + link: itemUrl, + description: description, + author: author, + }; + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: `${title}-豆瓣发现`, + link: link, + item: out, + }; +};