diff --git a/docs/social-media.md b/docs/social-media.md index b85d6ca95..a7c911ac6 100644 --- a/docs/social-media.md +++ b/docs/social-media.md @@ -770,7 +770,7 @@ YouTube 官方亦有提供频道 RSS,形如 + ### 浏览发现 diff --git a/lib/router.js b/lib/router.js index a76841cf2..1ff7ce53c 100644 --- a/lib/router.js +++ b/lib/router.js @@ -186,7 +186,7 @@ router.get('/douban/movie/later', require('./routes/douban/later')); router.get('/douban/movie/ustop', require('./routes/douban/ustop')); router.get('/douban/movie/weekly/:type?', require('./routes/douban/weekly_best')); router.get('/douban/movie/classification/:sort?/:score?/:tags?', require('./routes/douban/classification.js')); -router.get('/douban/group/:groupid', require('./routes/douban/group')); +router.get('/douban/group/:groupid/:type?', require('./routes/douban/group')); router.get('/douban/explore', require('./routes/douban/explore')); router.get('/douban/music/latest/:area?', require('./routes/douban/latest_music')); router.get('/douban/book/latest', require('./routes/douban/latest_book')); diff --git a/lib/routes/douban/group.js b/lib/routes/douban/group.js index 7fbfd7f6e..326ab7fa1 100644 --- a/lib/routes/douban/group.js +++ b/lib/routes/douban/group.js @@ -1,47 +1,48 @@ const got = require('../../utils/got'); +const cheerio = require('cheerio'); module.exports = async (ctx) => { const groupid = ctx.params.groupid; + const type = ctx.params.type; + const url = `https://www.douban.com/group/${groupid}/${type ? `?type=${type}` : ''}`; const response = await got({ method: 'get', - url: `https://api.douban.com/v2/group/${groupid}/topics?start=0&count=50`, + url, }); - const topics = response.data.topics; + const $ = cheerio.load(response.data); + const list = $('.olt tr:not(.th)').slice(0, 30).get(); - // 替换图片到内容中 - topics.map((topic) => { - const { photos = [] } = topic; - let { content } = topic; + const items = await Promise.all( + list.map(async (item) => { + const $1 = $(item); + const result = { + title: $1.find('.title a').attr('title'), + author: $1.find('a').eq(1).text(), + link: $1.find('.title a').attr('href'), + }; + return await ctx.cache.tryGet(result.link, async () => { + try { + const detailResponse = await got({ + method: 'get', + url: result.link, + }); + const $ = cheerio.load(detailResponse.data); - content = content.replace(/ /g, '
'); - topic.content = content.replace(/<图片(\d*)>/g, function () { - try { - const photo = photos.filter((p) => p.seq_id === arguments[1]); - - if (photo.length > 0) { - const src = photo[0].alt; - return `
`; - } else { - return ''; + result.pubDate = $('.create-time').text(); + result.description = $('.rich-content').html(); + return result; + } catch (error) { + return result; } - } catch (ex) { - return ''; - } - }); - return topic; - }); + }); + }) + ); ctx.state.data = { - title: `豆瓣小组-${groupid}`, - link: `https://www.douban.com/group/${groupid}/`, - item: topics.map((topic) => ({ - title: `${topic.title} [来自: ${topic.author.name}]`, - author: topic.author.name, - pubDate: new Date(topic.updated).toUTCString(), - description: topic.content, - link: topic.share_url, - })), + title: `豆瓣小组-${$('h1').text().trim()}`, + link: url, + item: items, }; };